From: Matthew Wilcox Date: Tue, 16 Jan 2007 01:07:09 +0000 (-0700) Subject: [SCSI] Fix scsi_add_device() for async scanning X-Git-Tag: v2.6.20~3^2~3 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=938e2ac0b7ac72d264783b0b548eb6078c295294;p=~shefty%2Frdma-dev.git [SCSI] Fix scsi_add_device() for async scanning I had thought that all drivers which didn't call scsi_scan_host() called scsi_scan_target(). Some, such as sbp2, mptsas and libata-scsi, call scsi_add_device() or __scsi_add_device(). We just need to wait for the currently executing async scans to complete first. This is the same code that's in scsi_scan_target(), except that we have to return an error instead of void when we're declining to scan at all. Signed-off-by: Matthew Wilcox Signed-off-by: James Bottomley --- diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index b83d03c4dee..96b7cbd746a 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c @@ -1453,6 +1453,12 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel, struct device *parent = &shost->shost_gendev; struct scsi_target *starget; + if (strncmp(scsi_scan_type, "none", 4) == 0) + return ERR_PTR(-ENODEV); + + if (!shost->async_scan) + scsi_complete_async_scans(); + starget = scsi_alloc_target(parent, channel, id); if (!starget) return ERR_PTR(-ENOMEM);