diff options
-rw-r--r-- | drivers/s390/block/dasd.c | 28 |
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 | ||