Commit 2c17124bf33f0d9450375610ff79ad83531b5bfe

Authored by Stefan Haberland
Committed by Martin Schwidefsky
1 parent 590aeeddc6

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");