[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 <matthew@wil.cx> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
7d620a4e53
commit
938e2ac0b7
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user