Allow driver who calls __scsi_add_device directly to create the scsi
device on any parent, not just scsi_host directly.
This is alreay done for transport with their own class [SAS, iSCSI, FC, ...]

Signed-off-by: Gwendal Grignou <gwen...@google.com>
---
 drivers/ata/libata-scsi.c      |    4 ++--
 drivers/firewire/sbp2.c        |    3 ++-
 drivers/message/i2o/i2o_scsi.c |    4 ++--
 drivers/scsi/scsi_scan.c       |    9 +++++----
 include/scsi/scsi_device.h     |    2 +-
 5 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index be38930..bfda61f 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -3649,8 +3649,8 @@ void ata_scsi_scan_host(struct ata_port *ap, int sync)
                        else
                                channel = link->pmp;
 
-                       sdev = __scsi_add_device(ap->scsi_host, channel, id, 0,
-                                                NULL);
+                       sdev = __scsi_add_device(&ap->scsi_host->shost_gendev,
+                                                channel, id, 0, NULL);
                        if (!IS_ERR(sdev)) {
                                dev->sdev = sdev;
                                scsi_device_put(sdev);
diff --git a/drivers/firewire/sbp2.c b/drivers/firewire/sbp2.c
index 1162d6b..839afa5 100644
--- a/drivers/firewire/sbp2.c
+++ b/drivers/firewire/sbp2.c
@@ -879,7 +879,8 @@ static void sbp2_login(struct work_struct *work)
                ssleep(SBP2_INQUIRY_DELAY);
 
        shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
-       sdev = __scsi_add_device(shost, 0, 0, sbp2_lun2int(lu->lun), lu);
+       sdev = __scsi_add_device(&shost->shost_gendev, 0, 0,
+                                sbp2_lun2int(lu->lun), lu);
        /*
         * FIXME:  We are unable to perform reconnects while in sbp2_login().
         * Therefore __scsi_add_device() will get into trouble if a bus reset
diff --git a/drivers/message/i2o/i2o_scsi.c b/drivers/message/i2o/i2o_scsi.c
index 1d31d72..ee1353c 100644
--- a/drivers/message/i2o/i2o_scsi.c
+++ b/drivers/message/i2o/i2o_scsi.c
@@ -294,8 +294,8 @@ static int i2o_scsi_probe(struct device *dev)
        }
 
        scsi_dev =
-           __scsi_add_device(i2o_shost->scsi_host, channel, le32_to_cpu(id),
-                             le64_to_cpu(lun), i2o_dev);
+           __scsi_add_device(&i2o_shost->scsi_host->shost_gendev, channel,
+                             le32_to_cpu(id), le64_to_cpu(lun), i2o_dev);
 
        if (IS_ERR(scsi_dev)) {
                osm_warn("can not add SCSI device %03x\n",
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 56a9379..105123c 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -1489,11 +1489,11 @@ static int scsi_report_lun_scan(struct scsi_target 
*starget, int bflags,
        return ret;
 }
 
-struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel,
+struct scsi_device *__scsi_add_device(struct device *parent, uint channel,
                                      uint id, uint lun, void *hostdata)
 {
+       struct Scsi_Host *shost = dev_to_shost(parent);
        struct scsi_device *sdev = ERR_PTR(-ENODEV);
-       struct device *parent = &shost->shost_gendev;
        struct scsi_target *starget;
 
        if (strncmp(scsi_scan_type, "none", 4) == 0)
@@ -1524,8 +1524,9 @@ EXPORT_SYMBOL(__scsi_add_device);
 int scsi_add_device(struct Scsi_Host *host, uint channel,
                    uint target, uint lun)
 {
-       struct scsi_device *sdev = 
-               __scsi_add_device(host, channel, target, lun, NULL);
+       struct scsi_device *sdev =
+               __scsi_add_device(&host->shost_gendev, channel, target,
+                                 lun, NULL);
        if (IS_ERR(sdev))
                return PTR_ERR(sdev);
 
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 9895f69..9646a1d 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -285,7 +285,7 @@ static inline struct scsi_target *scsi_target(struct 
scsi_device *sdev)
 #define starget_printk(prefix, starget, fmt, a...)     \
        dev_printk(prefix, &(starget)->dev, fmt, ##a)
 
-extern struct scsi_device *__scsi_add_device(struct Scsi_Host *,
+extern struct scsi_device *__scsi_add_device(struct device *,
                uint, uint, uint, void *hostdata);
 extern int scsi_add_device(struct Scsi_Host *host, uint channel,
                           uint target, uint lun);
-- 
1.7.7.3

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to