summaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorStefan Weinhuber <wein@de.ibm.com>2013-02-04 13:10:35 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-02-14 15:55:17 +0100
commitbe4904e5039a769f84f933bacce85c5e8ddd90a7 (patch)
tree794991a4c64ebac62a7d27552894e317fec97e0f /drivers/s390
parent53923354d69e4748506bfee932b7c6b309a15c21 (diff)
downloadlinux-be4904e5039a769f84f933bacce85c5e8ddd90a7.tar.gz
linux-be4904e5039a769f84f933bacce85c5e8ddd90a7.tar.bz2
linux-be4904e5039a769f84f933bacce85c5e8ddd90a7.zip
dasd: fix sysfs cleanup in dasd_generic_remove
When the DASD devices are detached from the driver, then the dasd_generic_remove function is called. One of the things this function should do is to remove the DASD specific sysfs attributes, but this is not done in all cases. This is likely to cause an oops when at a later point sysfs stumbles over the stale pointers. In particular this happens when when the modules are unloaded and loaded again. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/block/dasd.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index e1d96344d733..f1b7fdc58a5f 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -3042,12 +3042,15 @@ void dasd_generic_remove(struct ccw_device *cdev)
cdev->handler = NULL;
device = dasd_device_from_cdev(cdev);
- if (IS_ERR(device))
+ if (IS_ERR(device)) {
+ dasd_remove_sysfs_files(cdev);
return;
+ }
if (test_and_set_bit(DASD_FLAG_OFFLINE, &device->flags) &&
!test_bit(DASD_FLAG_SAFE_OFFLINE_RUNNING, &device->flags)) {
/* Already doing offline processing */
dasd_put_device(device);
+ dasd_remove_sysfs_files(cdev);
return;
}
/*