diff options
author | Stefan Haberland <stefan.haberland@de.ibm.com> | 2014-11-24 10:53:19 +0100 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-11-28 09:47:29 +0100 |
commit | 2c17124bf33f0d9450375610ff79ad83531b5bfe (patch) | |
tree | 5810104fc4c8b96a7d28b2541984e2c585358751 | |
parent | s390/dasd: remove unused code (diff) | |
download | linux-2c17124bf33f0d9450375610ff79ad83531b5bfe.tar.xz linux-2c17124bf33f0d9450375610ff79ad83531b5bfe.zip |
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>
-rw-r--r-- | drivers/s390/block/dasd.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 3679aeca1c1a..8cb120e9c868 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -1377,6 +1377,20 @@ int dasd_term_IO(struct dasd_ccw_req *cqr) "I/O error, retry"); break; 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: DBF_DEV_EVENT(DBF_ERR, device, "%s", "device busy, retry later"); |