mirror of
https://github.com/torvalds/linux.git
synced 2024-11-08 21:21:47 +00:00
s390/dasd: fix infinite term I/O loop
During device activation all paths could be lost and since the device is not active it has no indication of this fact - hence the CQR will time-out. The following cancelation might fail with -EINVAL because CIO took over control and started path verification. In this case mark the CQR as being CLEARED since it could not be running any more. Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
590aeeddc6
commit
2c17124bf3
@ -1377,6 +1377,20 @@ int dasd_term_IO(struct dasd_ccw_req *cqr)
|
|||||||
"I/O error, retry");
|
"I/O error, retry");
|
||||||
break;
|
break;
|
||||||
case -EINVAL:
|
case -EINVAL:
|
||||||
|
/*
|
||||||
|
* device not valid so no I/O could be running
|
||||||
|
* handle CQR as termination successful
|
||||||
|
*/
|
||||||
|
cqr->status = DASD_CQR_CLEARED;
|
||||||
|
cqr->stopclk = get_tod_clock();
|
||||||
|
cqr->starttime = 0;
|
||||||
|
/* no retries for invalid devices */
|
||||||
|
cqr->retries = -1;
|
||||||
|
DBF_DEV_EVENT(DBF_ERR, device, "%s",
|
||||||
|
"EINVAL, handle as terminated");
|
||||||
|
/* fake rc to success */
|
||||||
|
rc = 0;
|
||||||
|
break;
|
||||||
case -EBUSY:
|
case -EBUSY:
|
||||||
DBF_DEV_EVENT(DBF_ERR, device, "%s",
|
DBF_DEV_EVENT(DBF_ERR, device, "%s",
|
||||||
"device busy, retry later");
|
"device busy, retry later");
|
||||||
|
Loading…
Reference in New Issue
Block a user