aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/block
diff options
context:
space:
mode:
authorStefan Weinhuber <wein@de.ibm.com>2011-12-27 05:27:23 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2011-12-27 05:27:13 -0500
commit1afcfd5948ff27cdbc6d91e9f3cdbdd7f3b1e566 (patch)
treebef462a868ceca3a1af8509da68c981e17be2ced /drivers/s390/block
parent85ac7ca5972d63d23aa5ea75c3834a33b951f89d (diff)
[S390] dasd: fix expiration handling for recovery requests
The 'expires' value of a ccw requests defines how long the device driver should wait for a response from the evice after the request has been submitted to the channel subsystem. After the expiration time (e.g. 30 seconds) the waiting request will be cancelled and started again. This protects the DASD devices from beeing blocked by errors that cause the answering I/O interrupt to be lost. In case of error recovery requests, this 'expires' value used to be set to 0, so in case of a lost interrupt, such a recovery request would never expire and block the device. To prevent this kind of problem, all recovery requests need to have an expires value > 0 as well. If not specified otherwise, this should be the same expires value as for the original request. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/block')
-rw-r--r--drivers/s390/block/dasd_3990_erp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c
index 87a0cf160fe..0326571e7ff 100644
--- a/drivers/s390/block/dasd_3990_erp.c
+++ b/drivers/s390/block/dasd_3990_erp.c
@@ -1718,7 +1718,7 @@ dasd_3990_erp_action_1B_32(struct dasd_ccw_req * default_erp, char *sense)
1718 erp->startdev = device; 1718 erp->startdev = device;
1719 erp->memdev = device; 1719 erp->memdev = device;
1720 erp->magic = default_erp->magic; 1720 erp->magic = default_erp->magic;
1721 erp->expires = 0; 1721 erp->expires = default_erp->expires;
1722 erp->retries = 256; 1722 erp->retries = 256;
1723 erp->buildclk = get_clock(); 1723 erp->buildclk = get_clock();
1724 erp->status = DASD_CQR_FILLED; 1724 erp->status = DASD_CQR_FILLED;
@@ -2363,7 +2363,7 @@ static struct dasd_ccw_req *dasd_3990_erp_add_erp(struct dasd_ccw_req *cqr)
2363 erp->memdev = device; 2363 erp->memdev = device;
2364 erp->block = cqr->block; 2364 erp->block = cqr->block;
2365 erp->magic = cqr->magic; 2365 erp->magic = cqr->magic;
2366 erp->expires = 0; 2366 erp->expires = cqr->expires;
2367 erp->retries = 256; 2367 erp->retries = 256;
2368 erp->buildclk = get_clock(); 2368 erp->buildclk = get_clock();
2369 erp->status = DASD_CQR_FILLED; 2369 erp->status = DASD_CQR_FILLED;