提交 1afcfd59 编写于 作者: S Stefan Weinhuber 提交者: Martin Schwidefsky

[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: NStefan Weinhuber <wein@de.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 85ac7ca5
...@@ -1718,7 +1718,7 @@ dasd_3990_erp_action_1B_32(struct dasd_ccw_req * default_erp, char *sense) ...@@ -1718,7 +1718,7 @@ dasd_3990_erp_action_1B_32(struct dasd_ccw_req * default_erp, char *sense)
erp->startdev = device; erp->startdev = device;
erp->memdev = device; erp->memdev = device;
erp->magic = default_erp->magic; erp->magic = default_erp->magic;
erp->expires = 0; erp->expires = default_erp->expires;
erp->retries = 256; erp->retries = 256;
erp->buildclk = get_clock(); erp->buildclk = get_clock();
erp->status = DASD_CQR_FILLED; 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,7 +2363,7 @@ static struct dasd_ccw_req *dasd_3990_erp_add_erp(struct dasd_ccw_req *cqr)
erp->memdev = device; erp->memdev = device;
erp->block = cqr->block; erp->block = cqr->block;
erp->magic = cqr->magic; erp->magic = cqr->magic;
erp->expires = 0; erp->expires = cqr->expires;
erp->retries = 256; erp->retries = 256;
erp->buildclk = get_clock(); erp->buildclk = get_clock();
erp->status = DASD_CQR_FILLED; erp->status = DASD_CQR_FILLED;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册