[PATCH] enclosure: Fix stale device oops with hot replug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Doing an add/remove/add on a SCSI device in an enclosure leads to an
oops caused by poisoned values in the enclosure device list pointers.
The reason is because we are keeping the enclosure device across the
enclosed device add/remove/add but the current code is doing a
device_add/device_del/device_add on it.  This is the wrong thing to do
in sysfs, so fix it by not doing a device_del on the enclosure device
simply because of a hot remove of the drive in the slot.

Fixes: 43d8eb9cfd0a ("[SCSI] ses: add support for enclosure component hot removal")
Reported-by: Luo Jiaxing 
Tested-by: John Garry 
Signed-off-by: James Bottomley 
---
 drivers/misc/enclosure.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
index 6d27ccfe0680..3c2d405bc79b 100644
--- a/drivers/misc/enclosure.c
+++ b/drivers/misc/enclosure.c
@@ -406,10 +406,9 @@ int enclosure_remove_device(struct enclosure_device *edev, struct device *dev)
 		cdev = &edev->component[i];
 		if (cdev->dev == dev) {
 			enclosure_remove_links(cdev);
-			device_del(&cdev->cdev);
 			put_device(dev);
 			cdev->dev = NULL;
-			return device_add(&cdev->cdev);
+			return 0;
 		}
 	}
 	return -ENODEV;
-- 
2.16.4




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux