diff options
| -rw-r--r-- | drivers/scsi/scsi_sysfs.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index e44ff64233fd..e63912510fb9 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c | |||
| @@ -322,14 +322,8 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work) | |||
| 322 | kfree(evt); | 322 | kfree(evt); |
| 323 | } | 323 | } |
| 324 | 324 | ||
| 325 | if (sdev->request_queue) { | 325 | /* NULL queue means the device can't be used */ |
| 326 | sdev->request_queue->queuedata = NULL; | 326 | sdev->request_queue = NULL; |
| 327 | /* user context needed to free queue */ | ||
| 328 | scsi_free_queue(sdev->request_queue); | ||
| 329 | /* temporary expedient, try to catch use of queue lock | ||
| 330 | * after free of sdev */ | ||
| 331 | sdev->request_queue = NULL; | ||
| 332 | } | ||
| 333 | 327 | ||
| 334 | scsi_target_reap(scsi_target(sdev)); | 328 | scsi_target_reap(scsi_target(sdev)); |
| 335 | 329 | ||
| @@ -937,6 +931,12 @@ void __scsi_remove_device(struct scsi_device *sdev) | |||
| 937 | if (sdev->host->hostt->slave_destroy) | 931 | if (sdev->host->hostt->slave_destroy) |
| 938 | sdev->host->hostt->slave_destroy(sdev); | 932 | sdev->host->hostt->slave_destroy(sdev); |
| 939 | transport_destroy_device(dev); | 933 | transport_destroy_device(dev); |
| 934 | |||
| 935 | /* cause the request function to reject all I/O requests */ | ||
| 936 | sdev->request_queue->queuedata = NULL; | ||
| 937 | |||
| 938 | /* Freeing the queue signals to block that we're done */ | ||
| 939 | scsi_free_queue(sdev->request_queue); | ||
| 940 | put_device(dev); | 940 | put_device(dev); |
| 941 | } | 941 | } |
| 942 | 942 | ||
