]> err.no Git - linux-2.6/commitdiff
[SCSI] Fix scsi_add_device() for async scanning
authorMatthew Wilcox <matthew@wil.cx>
Tue, 16 Jan 2007 01:07:09 +0000 (18:07 -0700)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Sat, 27 Jan 2007 15:02:36 +0000 (09:02 -0600)
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 <matthew@wil.cx>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/scsi_scan.c

index b83d03c4deef1934e051358082805b93627aa4e0..96b7cbd746a84ac323d92bf6c72d0333515b3fd3 100644 (file)
@@ -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);