From 4c715204158cc44020057eea22bea7fc55a5dec1 Mon Sep 17 00:00:00 2001 From: Chandra Seetharaman Date: Wed, 5 Nov 2008 20:06:37 -0800 Subject: [PATCH] --- yaml --- r: 124607 b: refs/heads/master c: c85f8cb9254e60cd25a094329c9dc9185c2140e7 h: refs/heads/master i: 124605: 5c98abc62475eb8a56854100c94e0e049bcecfaa 124603: fd3d15f8aeb3fdddbc47960d39ebca0dfe74fa72 124599: 7f2465967518d2e10c5ccdb11f99de54e6268982 124591: b3a1e0e61fdeb337e994f0e95c63a45b91dee6e1 124575: 39f749b5ab9460edcfa9299df784ba4d2bf26877 124543: 8c744bca15f747fb6bea2962e123aabe847c780a v: v3 --- [refs] | 2 +- trunk/drivers/scsi/device_handler/scsi_dh_rdac.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 534438923d92..5f3c4ca59453 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9eece961fc646e2652086dae42650d002e2d27e2 +refs/heads/master: c85f8cb9254e60cd25a094329c9dc9185c2140e7 diff --git a/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c b/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c index ff07559c5fcd..3e16a33927cf 100644 --- a/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c +++ b/trunk/drivers/scsi/device_handler/scsi_dh_rdac.c @@ -24,6 +24,7 @@ #include #define RDAC_NAME "rdac" +#define RDAC_RETRY_COUNT 5 /* * LSI mode page stuff @@ -478,21 +479,27 @@ static int send_mode_select(struct scsi_device *sdev, struct rdac_dh_data *h) { struct request *rq; struct request_queue *q = sdev->request_queue; - int err = SCSI_DH_RES_TEMP_UNAVAIL; + int err, retry_cnt = RDAC_RETRY_COUNT; +retry: + err = SCSI_DH_RES_TEMP_UNAVAIL; rq = rdac_failover_get(sdev, h); if (!rq) goto done; - sdev_printk(KERN_INFO, sdev, "queueing MODE_SELECT command.\n"); + sdev_printk(KERN_INFO, sdev, "%s MODE_SELECT command.\n", + (retry_cnt == RDAC_RETRY_COUNT) ? "queueing" : "retrying"); err = blk_execute_rq(q, NULL, rq, 1); - if (err != SCSI_DH_OK) + blk_put_request(rq); + if (err != SCSI_DH_OK) { err = mode_select_handle_sense(sdev, h->sense); + if (err == SCSI_DH_RETRY && retry_cnt--) + goto retry; + } if (err == SCSI_DH_OK) h->state = RDAC_STATE_ACTIVE; - blk_put_request(rq); done: return err; }