Revert "put stricter guards on queue dead checks"
authorSteve Conklin <sconklin@canonical.com>
Tue, 28 Jun 2011 13:28:42 +0000 (14:28 +0100)
committerSteve Conklin <sconklin@canonical.com>
Tue, 28 Jun 2011 13:28:42 +0000 (14:28 +0100)
This reverts commit 39a0cfed63b656486fb2feee063aa033816a90e0.

This revert is being tracked in bug 802986

drivers/scsi/scsi_sysfs.c

index 360b7cb..490ce21 100644 (file)
@@ -322,8 +322,14 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
                kfree(evt);
        }
 
-       /* NULL queue means the device can't be used */
-       sdev->request_queue = NULL;
+       if (sdev->request_queue) {
+               sdev->request_queue->queuedata = NULL;
+               /* user context needed to free queue */
+               scsi_free_queue(sdev->request_queue);
+               /* temporary expedient, try to catch use of queue lock
+                * after free of sdev */
+               sdev->request_queue = NULL;
+       }
 
        scsi_target_reap(scsi_target(sdev));
 
@@ -931,12 +937,6 @@ void __scsi_remove_device(struct scsi_device *sdev)
        if (sdev->host->hostt->slave_destroy)
                sdev->host->hostt->slave_destroy(sdev);
        transport_destroy_device(dev);
-
-       /* cause the request function to reject all I/O requests */
-       sdev->request_queue->queuedata = NULL;
-
-       /* Freeing the queue signals to block that we're done */
-       scsi_free_queue(sdev->request_queue);
        put_device(dev);
 }