]> git.hungrycats.org Git - linux/commitdiff
[PATCH] s390: dasd driver changes
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 6 Jul 2004 16:17:42 +0000 (09:17 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 6 Jul 2004 16:17:42 +0000 (09:17 -0700)
From: Horst Hummel <horst.hummel@de.ibm.com>

dasd device driver changes:
 - Set and check the retry counter in start_IO for all requests.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/s390/block/dasd.c

index 0eb2d3331900e6d0c4c2474f73649b1a462b15c6..2249b78487bd188859b68ff2e4d95395ec58a7bf 100644 (file)
@@ -7,7 +7,7 @@
  * Bugreports.to..: <Linux390@de.ibm.com>
  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001
  *
- * $Revision: 1.146 $
+ * $Revision: 1.147 $
  */
 
 #include <linux/config.h>
@@ -739,8 +739,16 @@ dasd_start_IO(struct dasd_ccw_req * cqr)
        if (rc)
                return rc;
        device = (struct dasd_device *) cqr->device;
+       if (cqr->retries < 0) {
+               DEV_MESSAGE(KERN_DEBUG, device,
+                           "start_IO: request %p (%02x/%i) - no retry left.",
+                           cqr, cqr->status, cqr->retries);
+               cqr->status = DASD_CQR_FAILED;
+               return -EIO;
+       }
        cqr->startclk = get_clock();
        cqr->starttime = jiffies;
+       cqr->retries--;
        rc = ccw_device_start(device->cdev, cqr->cpaddr, (long) cqr,
                              cqr->lpm, 0);
        switch (rc) {
@@ -1067,7 +1075,6 @@ restart:
                        break;
                /*  Process requests with DASD_CQR_ERROR */
                if (cqr->status == DASD_CQR_ERROR) {
-                       cqr->retries--;
                        if (cqr->irb.scsw.fctl & SCSW_FCTL_HALT_FUNC) {
                                cqr->status = DASD_CQR_FAILED;
                                cqr->stopclk = get_clock();