s390/dasd: fix hanging offline processing
Internal I/O is processed by the _sleep_on_function which might wait for a device to get operational. During offline processing this will never happen and therefore the refcount of the device will not drop to zero and the offline processing blocks as well. Fix by letting requests fail in the _sleep_on function during offline processing. No further handling of the requests is necessary since this is internal I/O and the device is thrown away afterwards. Reviewed-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
13954fd691
commit
a9f6273ff9
|
@ -2277,6 +2277,15 @@ 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 in
|
||||||
|
* offline processing, it might wait forever
|
||||||
|
*/
|
||||||
|
if (test_bit(DASD_FLAG_OFFLINE, &device->flags)) {
|
||||||
|
cqr->status = DASD_CQR_FAILED;
|
||||||
|
cqr->intrc = -ENODEV;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Don't try to start requests if device is stopped
|
* Don't try to start requests if device is stopped
|
||||||
* except path verification requests
|
* except path verification requests
|
||||||
|
|
Loading…
Reference in New Issue