summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_dh.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2015-08-27 14:17:01 +0200
committerJames Bottomley <JBottomley@Odin.com>2015-08-28 22:14:58 +0200
commitd44227749500d8b88a1c079bc04f69187eaf8747 (patch)
tree464385f87b69a5536904db5d096362d0d30e5aca /drivers/scsi/scsi_dh.c
parentscsi_dh: add a common helper to get a scsi_device from a request_queue (diff)
downloadlinux-d44227749500d8b88a1c079bc04f69187eaf8747.tar.xz
linux-d44227749500d8b88a1c079bc04f69187eaf8747.zip
scsi_dh: don't allow to detach device handlers at runtime
The I/O submission and completion paths call into the device handler without any synchronization agains detachment. So disallow detaching device handlers at runtime. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: James Bottomley <JBottomley@Odin.com>
Diffstat (limited to 'drivers/scsi/scsi_dh.c')
-rw-r--r--drivers/scsi/scsi_dh.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c
index 2e1db5738ae1..9f6511da5023 100644
--- a/drivers/scsi/scsi_dh.c
+++ b/drivers/scsi/scsi_dh.c
@@ -181,8 +181,10 @@ store_dh_state(struct device *dev, struct device_attribute *attr,
/*
* Detach from a device handler
*/
- scsi_dh_handler_detach(sdev);
- err = 0;
+ sdev_printk(KERN_WARNING, sdev,
+ "can't detach handler %s.\n",
+ sdev->handler->name);
+ err = -EINVAL;
} else if (!strncmp(buf, "activate", 8)) {
/*
* Activate a device handler