提交 df3044f1 编写于 作者: S Stefan Haberland 提交者: Martin Schwidefsky

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: NStefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 a3147a7b
...@@ -2166,18 +2166,22 @@ static int _dasd_sleep_on(struct dasd_ccw_req *maincqr, int interruptible) ...@@ -2166,18 +2166,22 @@ static int _dasd_sleep_on(struct dasd_ccw_req *maincqr, int interruptible)
cqr->intrc = -ENOLINK; cqr->intrc = -ENOLINK;
continue; continue;
} }
/* Don't try to start requests if device is stopped */ /*
if (interruptible) { * Don't try to start requests if device is stopped
rc = wait_event_interruptible( * except path verification requests
generic_waitq, !(device->stopped)); */
if (rc == -ERESTARTSYS) { if (!test_bit(DASD_CQR_VERIFY_PATH, &cqr->flags)) {
cqr->status = DASD_CQR_FAILED; if (interruptible) {
maincqr->intrc = rc; rc = wait_event_interruptible(
continue; generic_waitq, !(device->stopped));
} if (rc == -ERESTARTSYS) {
} else cqr->status = DASD_CQR_FAILED;
wait_event(generic_waitq, !(device->stopped)); maincqr->intrc = rc;
continue;
}
} else
wait_event(generic_waitq, !(device->stopped));
}
if (!cqr->callback) if (!cqr->callback)
cqr->callback = dasd_wakeup_cb; cqr->callback = dasd_wakeup_cb;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册