[S390] dasd: fix loop in request expiration handling
authorStefan Haberland <stefan.haberland@de.ibm.com>
Sat, 26 Jan 2008 13:11:26 +0000 (14:11 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Sat, 26 Jan 2008 13:11:30 +0000 (14:11 +0100)
Add time to the 'expires' value to avoid a loop caused by the cqr
termination function

Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/block/dasd.c

index db9193d389868732af63a64be54b9c6d90f81777..99268b964f679331636968c7e177a4dba8eff2cd 100644 (file)
@@ -1197,12 +1197,13 @@ static void __dasd_device_check_expire(struct dasd_device *device)
            (time_after_eq(jiffies, cqr->expires + cqr->starttime))) {
                if (device->discipline->term_IO(cqr) != 0) {
                        /* Hmpf, try again in 5 sec */
-                       dasd_device_set_timer(device, 5*HZ);
                        DEV_MESSAGE(KERN_ERR, device,
                                    "internal error - timeout (%is) expired "
                                    "for cqr %p, termination failed, "
                                    "retrying in 5s",
                                    (cqr->expires/HZ), cqr);
+                       cqr->expires += 5*HZ;
+                       dasd_device_set_timer(device, 5*HZ);
                } else {
                        DEV_MESSAGE(KERN_ERR, device,
                                    "internal error - timeout (%is) expired "