Message ID | 1578532892.3852.10.camel@HansenPartnership.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 529244bd1afc102ab164429d338d310d5d65e60d |
Headers | show |
Series | enclosure: Fix stale device oops with hot replug | expand |
James, > 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. Applied to 5.5/scsi-fixes... > Fixes: 43d8eb9cfd0a ("[SCSI] ses: add support for enclosure component hot removal") > Reported-by: Luo Jiaxing > Tested-by: John Garry > Signed-off-by: James Bottomley ...and filled out the blanks.
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;