Skip to contentSkip to conversation

Fix scsi_add_device() for async scanning

PATCH New Matthew Wilcox 1 participant 1 message Jan 16, 2007 SCSI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

drivers/scsi/scsi_scan.c +6 -0
index 14e635a..1ad06e2 100644
@@ -1436,6 +1436,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);