summary refs log tree commit diff
path: root/drivers/s390
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2013-07-30 10:49:43 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-07-30 16:17:25 +0200
commit0e003b709ef9f4c43f6338834526c3556ea71b19 (patch)
tree0cbbf9074ebc812dbcab30c3133153657e9fd3aa /drivers/s390
parent198b1bf8c3a06de42a88ad7f9d664f18d740a418 (diff)
downloadlinux-0e003b709ef9f4c43f6338834526c3556ea71b19.tar.gz
s390/dasd: fix hanging devices after path events
The processing of the dasd_block tasklet may have been interrupted
by a path event.
Restart the dasd tasklets in sleep_on_immediately function.

Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/block/dasd.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 17150a778984..451bf99582ff 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -2392,6 +2392,12 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr)
 		rc = cqr->intrc;
 	else
 		rc = -EIO;
+
+	/* kick tasklets */
+	dasd_schedule_device_bh(device);
+	if (device->block)
+		dasd_schedule_block_bh(device->block);
+
 	return rc;
 }