Commit 28072ad5 authored by Mike Christie's avatar Mike Christie Committed by Christoph Hellwig

scsi: fix device handler detach oops

This fixes a regression caused by commit 1d5203 ("scsi: handle more device
handler setup/teardown in common code").

The bug is that the alua detach() callout will try to access the
sddev->scsi_dh_data, but we have already set it to NULL. This patch
moves the clearing of that field to after detach() is called.
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent bcbde52b
...@@ -136,11 +136,12 @@ static void __detach_handler (struct kref *kref) ...@@ -136,11 +136,12 @@ static void __detach_handler (struct kref *kref)
struct scsi_device_handler *scsi_dh = scsi_dh_data->scsi_dh; struct scsi_device_handler *scsi_dh = scsi_dh_data->scsi_dh;
struct scsi_device *sdev = scsi_dh_data->sdev; struct scsi_device *sdev = scsi_dh_data->sdev;
scsi_dh->detach(sdev);
spin_lock_irq(sdev->request_queue->queue_lock); spin_lock_irq(sdev->request_queue->queue_lock);
sdev->scsi_dh_data = NULL; sdev->scsi_dh_data = NULL;
spin_unlock_irq(sdev->request_queue->queue_lock); spin_unlock_irq(sdev->request_queue->queue_lock);
scsi_dh->detach(sdev);
sdev_printk(KERN_NOTICE, sdev, "%s: Detached\n", scsi_dh->name); sdev_printk(KERN_NOTICE, sdev, "%s: Detached\n", scsi_dh->name);
module_put(scsi_dh->module); module_put(scsi_dh->module);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment