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>
This commit is contained in:
Stefan Haberland 2015-04-02 13:18:39 +02:00 committed by Martin Schwidefsky
parent a3147a7bc2
commit df3044f1ef

View File

@ -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;