Re: [PATCH 6/6] scsi: libsas: factor out sas_ex_add_dev()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2022/12/5 17:31, John Garry wrote:
On 04/12/2022 08:16, Jason Yan wrote:
Factor out sas_ex_add_dev() to be consistent with sas_ata_add_dev() and
unify the error handling.

Cc: John Garry <john.g.garry@xxxxxxxxxx>
Signed-off-by: Jason Yan <yanaijie@xxxxxxxxxx>
---
  drivers/scsi/libsas/sas_expander.c | 68 +++++++++++++++++-------------
  1 file changed, 39 insertions(+), 29 deletions(-)

diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
index 747f4fc795f4..3c72b167d43a 100644
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -751,13 +751,46 @@ static void sas_ex_get_linkrate(struct domain_device *parent,
      child->pathways = min(child->pathways, parent->pathways);
  }
+static int sas_ex_add_dev(struct domain_device *parent, struct ex_phy *phy,
+              struct domain_device *child, int phy_id)
+{
+    struct sas_rphy *rphy;
+    int res;
+
+    child->dev_type = SAS_END_DEVICE;
+    rphy = sas_end_device_alloc(phy->port);
+    if (unlikely(!rphy))

nit: this is not fastpath so unlikely can be avoided


ok. It is only a hint for the compiler so not a big deal. I can delete it.

+        return -ENOMEM;
+
+    child->tproto = phy->attached_tproto;
+    sas_init_dev(child);
+
+    child->rphy = rphy;
+    get_device(&rphy->dev);
+    rphy->identify.phy_identifier = phy_id;
+    sas_fill_in_rphy(child, rphy);
+
+    list_add_tail(&child->disco_list_node, &parent->port->disco_list);
+
+    res = sas_notify_lldd_dev_found(child);
+    if (res) {
+        pr_notice("notify lldd for device %016llx at %016llx:%02d returned 0x%x\n",
+                SAS_ADDR(child->sas_addr),
+                SAS_ADDR(parent->sas_addr), phy_id, res);

nit: these lines could be aligned with (, as it was before

Nice catch. Will fix.


+        sas_rphy_free(child->rphy);
+        list_del(&child->disco_list_node);
+        return res;
+    }
+
+    return 0;
+}
+
  static struct domain_device *sas_ex_discover_end_dev(
      struct domain_device *parent, int phy_id)
  {
      struct expander_device *parent_ex = &parent->ex_dev;
      struct ex_phy *phy = &parent_ex->ex_phy[phy_id];
      struct domain_device *child = NULL;
-    struct sas_rphy *rphy;
      int res;
      if (phy->attached_sata_host || phy->attached_sata_ps)
@@ -787,44 +820,21 @@ static struct domain_device *sas_ex_discover_end_dev(       if ((phy->attached_tproto & SAS_PROTOCOL_STP) || phy->attached_sata_dev) {
          res = sas_ata_add_dev(parent, phy, child, phy_id);
-        if (res)
-            goto out_free;
      } else if (phy->attached_tproto & SAS_PROTOCOL_SSP) {
-        child->dev_type = SAS_END_DEVICE;
-        rphy = sas_end_device_alloc(phy->port);
-        /* FIXME: error handling */

so has the error handling been fixed now?

IIUC, the error handling is ok so this comment can be deleted.

Thanks,
Jason



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux