[SCSI] scsi: move target_destroy call
authorMike Anderson <andmike@us.ibm.com>
Tue, 14 Mar 2006 19:18:46 +0000 (11:18 -0800)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Tue, 14 Mar 2006 20:36:00 +0000 (14:36 -0600)
This patch moves the calling of target_destroy next to the list_del. This
closed a race being seen while doing a device add on the aic7xxx.

Signed-off-by: Mike Anderson <andmike@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/scsi_scan.c

index 9cd4404..f149459 100644 (file)
@@ -288,10 +288,7 @@ static void scsi_target_dev_release(struct device *dev)
 {
        struct device *parent = dev->parent;
        struct scsi_target *starget = to_scsi_target(dev);
-       struct Scsi_Host *shost = dev_to_shost(parent);
 
-       if (shost->hostt->target_destroy)
-               shost->hostt->target_destroy(starget);
        kfree(starget);
        put_device(parent);
 }
@@ -416,6 +413,8 @@ static void scsi_target_reap_usercontext(void *data)
        device_del(&starget->dev);
        transport_destroy_device(&starget->dev);
        spin_lock_irqsave(shost->host_lock, flags);
+       if (shost->hostt->target_destroy)
+               shost->hostt->target_destroy(starget);
        list_del_init(&starget->siblings);
        spin_unlock_irqrestore(shost->host_lock, flags);
        put_device(&starget->dev);