Commit bc97f4bb authored by Rob Evers's avatar Rob Evers Committed by James Bottomley

[SCSI] scsi_dh_alua: backoff alua rtpg retry linearly vs. geometrically

Currently the backoff algorithm for when to retry alua rtpg
requests progresses geometrically as so:

2, 4, 8, 16, 32, 64... seconds.

This progression can lead to un-needed delay in retrying
alua rtpg requests when the rtpgs are delayed.  A less
aggressive backoff algorithm that is additive would not
lead to such large jumps when delays start getting long, but
would backoff linearly:

2, 4, 6, 8, 10... seconds.
Signed-off-by: default avatarMartin George <marting@netapp.com>
Signed-off-by: default avatarRob Evers <revers@redhat.com>
Reviewed-by: default avatarBabu Moger <babu.moger@netapp.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 8e67ce60
...@@ -527,7 +527,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h) ...@@ -527,7 +527,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
unsigned char *ucp; unsigned char *ucp;
unsigned err; unsigned err;
bool rtpg_ext_hdr_req = 1; bool rtpg_ext_hdr_req = 1;
unsigned long expiry, interval = 1000; unsigned long expiry, interval = 0;
unsigned int tpg_desc_tbl_off; unsigned int tpg_desc_tbl_off;
unsigned char orig_transition_tmo; unsigned char orig_transition_tmo;
...@@ -632,7 +632,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h) ...@@ -632,7 +632,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
case TPGS_STATE_TRANSITIONING: case TPGS_STATE_TRANSITIONING:
if (time_before(jiffies, expiry)) { if (time_before(jiffies, expiry)) {
/* State transition, retry */ /* State transition, retry */
interval *= 2; interval += 2000;
msleep(interval); msleep(interval);
goto retry; goto retry;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment