summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Weinhuber <wein@de.ibm.com>2013-08-27 11:52:17 (GMT)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-08-28 07:19:34 (GMT)
commitfbd70035fb2b03deb346052084794bc1d0e25aa2 (patch)
treee6c5c8f0cebfd1737b5ae2f0203827975c1cf0e0
parent0628a5fbe1b5af35ef5346443ff1056e257a7350 (diff)
downloadlinux-fbd70035fb2b03deb346052084794bc1d0e25aa2.tar.xz
s390/dasd: fix statistics for recovered requests
When a recovery cqr is cleaned up, copy the start time, stop time, and start device to the original cqr. These times are needed later when the original request is finalized and counted in the DASD statistics. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--drivers/s390/block/dasd_erp.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd_erp.c b/drivers/s390/block/dasd_erp.c
index ba99b64..e1e8848 100644
--- a/drivers/s390/block/dasd_erp.c
+++ b/drivers/s390/block/dasd_erp.c
@@ -124,10 +124,15 @@ dasd_default_erp_action(struct dasd_ccw_req *cqr)
struct dasd_ccw_req *dasd_default_erp_postaction(struct dasd_ccw_req *cqr)
{
int success;
+ unsigned long long startclk, stopclk;
+ struct dasd_device *startdev;
BUG_ON(cqr->refers == NULL || cqr->function == NULL);
success = cqr->status == DASD_CQR_DONE;
+ startclk = cqr->startclk;
+ stopclk = cqr->stopclk;
+ startdev = cqr->startdev;
/* free all ERPs - but NOT the original cqr */
while (cqr->refers != NULL) {
@@ -142,6 +147,9 @@ struct dasd_ccw_req *dasd_default_erp_postaction(struct dasd_ccw_req *cqr)
}
/* set corresponding status to original cqr */
+ cqr->startclk = startclk;
+ cqr->stopclk = stopclk;
+ cqr->startdev = startdev;
if (success)
cqr->status = DASD_CQR_DONE;
else {