Commit 2c17124bf33f0d9450375610ff79ad83531b5bfe
Committed by
Martin Schwidefsky
1 parent
590aeeddc6
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
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>
Showing 1 changed file with 14 additions and 0 deletions Side-by-side Diff
drivers/s390/block/dasd.c
... | ... | @@ -1377,6 +1377,20 @@ |
1377 | 1377 | "I/O error, retry"); |
1378 | 1378 | break; |
1379 | 1379 | case -EINVAL: |
1380 | + /* | |
1381 | + * device not valid so no I/O could be running | |
1382 | + * handle CQR as termination successful | |
1383 | + */ | |
1384 | + cqr->status = DASD_CQR_CLEARED; | |
1385 | + cqr->stopclk = get_tod_clock(); | |
1386 | + cqr->starttime = 0; | |
1387 | + /* no retries for invalid devices */ | |
1388 | + cqr->retries = -1; | |
1389 | + DBF_DEV_EVENT(DBF_ERR, device, "%s", | |
1390 | + "EINVAL, handle as terminated"); | |
1391 | + /* fake rc to success */ | |
1392 | + rc = 0; | |
1393 | + break; | |
1380 | 1394 | case -EBUSY: |
1381 | 1395 | DBF_DEV_EVENT(DBF_ERR, device, "%s", |
1382 | 1396 | "device busy, retry later"); |