| From a1470c7bf3a4676e62e4c0fb204e339399eb5c59 Mon Sep 17 00:00:00 2001 |
| From: James Bottomley <JBottomley@Parallels.com> |
| Date: Fri, 15 Nov 2013 14:58:00 -0800 |
| Subject: SCSI: enclosure: fix WARN_ON in dual path device removing |
| |
| From: James Bottomley <JBottomley@Parallels.com> |
| |
| commit a1470c7bf3a4676e62e4c0fb204e339399eb5c59 upstream. |
| |
| Bug report from: wenxiong@linux.vnet.ibm.com |
| |
| The issue is happened in dual controller configuration. We got the |
| sysfs warnings when rmmod the ipr module. |
| |
| enclosure_unregister() in drivers/msic/enclosure.c, call device_unregister() |
| for each componment deivce, device_unregister() ->device_del()->kobject_del() |
| ->sysfs_remove_dir(). In sysfs_remove_dir(), set kobj->sd = NULL. |
| |
| For each componment device, |
| enclosure_component_release()->enclosure_remove_links()->sysfs_remove_link() |
| in which checking kobj->sd again, it has been set as NULL when doing |
| device_unregister. So we saw all these sysfs WARNING. |
| |
| Tested-by: wenxiong@linux.vnet.ibm.com |
| Signed-off-by: James Bottomley <JBottomley@Parallels.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/misc/enclosure.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/drivers/misc/enclosure.c |
| +++ b/drivers/misc/enclosure.c |
| @@ -198,6 +198,13 @@ static void enclosure_remove_links(struc |
| { |
| char name[ENCLOSURE_NAME_SIZE]; |
| |
| + /* |
| + * In odd circumstances, like multipath devices, something else may |
| + * already have removed the links, so check for this condition first. |
| + */ |
| + if (!cdev->dev->kobj.sd) |
| + return; |
| + |
| enclosure_link_name(cdev, name); |
| sysfs_remove_link(&cdev->dev->kobj, name); |
| sysfs_remove_link(&cdev->cdev.kobj, "device"); |