[SCSI] Fix module removal/device add race
authorAlan Stern <stern@rowland.harvard.edu>
Tue, 26 Jul 2005 14:30:40 +0000 (10:30 -0400)
committerJames Bottomley <jejb@mulgrave.(none)>
Sat, 10 Sep 2005 16:21:02 +0000 (11:21 -0500)
This patch (as546) fixes an oops-causing failure to check the return code
from scsi_device_get.  The call can return an error if the LLD is being
unloaded from memory.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/scsi_scan.c

index 76577fa..a0975c7 100644 (file)
@@ -870,8 +870,12 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
  out_free_sdev:
        if (res == SCSI_SCAN_LUN_PRESENT) {
                if (sdevp) {
-                       scsi_device_get(sdev);
-                       *sdevp = sdev;
+                       if (scsi_device_get(sdev) == 0) {
+                               *sdevp = sdev;
+                       } else {
+                               __scsi_remove_device(sdev);
+                               res = SCSI_SCAN_NO_RESPONSE;
+                       }
                }
        } else {
                if (sdev->host->hostt->slave_destroy)