aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2015-04-02 07:18:39 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2015-04-15 06:23:51 -0400
commitdf3044f1ef002c2269b11cb76a1b2bec629732b4 (patch)
tree3356cb0811b7a128a837992f5d62522291643dc5 /drivers/s390
parenta3147a7bc266df39b4f471ee7c4c9adcb56d29a6 (diff)
s390/dasd: Fix unresumed device after suspend/resume having no paths
The DASD device driver prevents I/O from being started on stopped devices. This also prevented channel paths to be verified and so the device was unable to be resumed. Fix by allowing path verification requests on stopped devices. 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.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index a5ed35d0cbf3..57fd66357b95 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -2166,18 +2166,22 @@ static int _dasd_sleep_on(struct dasd_ccw_req *maincqr, int interruptible)
2166 cqr->intrc = -ENOLINK; 2166 cqr->intrc = -ENOLINK;
2167 continue; 2167 continue;
2168 } 2168 }
2169 /* Don't try to start requests if device is stopped */ 2169 /*
2170 if (interruptible) { 2170 * Don't try to start requests if device is stopped
2171 rc = wait_event_interruptible( 2171 * except path verification requests
2172 generic_waitq, !(device->stopped)); 2172 */
2173 if (rc == -ERESTARTSYS) { 2173 if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
2174 cqr->status = DASD_CQR_FAILED; 2174 if (interruptible) {
2175 maincqr->intrc = rc; 2175 rc = wait_event_interruptible(
2176 continue; 2176 generic_waitq, !(device->stopped));
2177 } 2177 if (rc == -ERESTARTSYS) {
2178 } else 2178 cqr->status = DASD_CQR_FAILED;
2179 wait_event(generic_waitq, !(device->stopped)); 2179 maincqr->intrc = rc;
2180 2180 continue;
2181 }
2182 } else
2183 wait_event(generic_waitq, !(device->stopped));
2184 }
2181 if (!cqr->callback) 2185 if (!cqr->callback)
2182 cqr->callback = dasd_wakeup_cb; 2186 cqr->callback = dasd_wakeup_cb;
2183 2187