aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/cciss.c
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2009-02-23 02:53:35 -0500
committerJens Axboe <jens.axboe@oracle.com>2009-02-26 04:45:48 -0500
commit5e4c91c84b194b26cf592779e451f4b5be777cba (patch)
tree334b9e2725eba9aebc18fefe7c52eb1523569245 /drivers/block/cciss.c
parent9e8c0bccdc944bd09361672d47660810c027bcaa (diff)
cciss: shorten 30s timeout on controller reset
If reset_devices is set for kexec, then cciss will delay 30 seconds since the old 5i controller _may_ need that long to recover. Replace the long sleep with incremental sleep and tests to reduce the 30 seconds to worst case for 5i, so that other controllers will proceed quickly. Reviewed-by: Mike Miller <mike.miller@hp.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'drivers/block/cciss.c')
-rw-r--r--drivers/block/cciss.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index d2cb67b61176..b5a061114630 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -3611,11 +3611,15 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
3611 schedule_timeout_uninterruptible(30*HZ); 3611 schedule_timeout_uninterruptible(30*HZ);
3612 3612
3613 /* Now try to get the controller to respond to a no-op */ 3613 /* Now try to get the controller to respond to a no-op */
3614 for (i=0; i<12; i++) { 3614 for (i=0; i<30; i++) {
3615 if (cciss_noop(pdev) == 0) 3615 if (cciss_noop(pdev) == 0)
3616 break; 3616 break;
3617 else 3617
3618 printk("cciss: no-op failed%s\n", (i < 11 ? "; re-trying" : "")); 3618 schedule_timeout_uninterruptible(HZ);
3619 }
3620 if (i == 30) {
3621 printk(KERN_ERR "cciss: controller seems dead\n");
3622 return -EBUSY;
3619 } 3623 }
3620 } 3624 }
3621 3625