aoe: improve retransmission heuristics
Add a dynamic minimum timer for better retransmission behavior. Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> Acked-by: Alan Cox <alan@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
ddec63e867
commit
dced3a053d
@ -125,8 +125,10 @@ struct aoedev {
|
||||
ulong sysminor;
|
||||
ulong aoemajor;
|
||||
ulong aoeminor;
|
||||
ulong nopen; /* (bd_openers isn't available without sleeping) */
|
||||
ulong rttavg; /* round trip average of requests/responses */
|
||||
u16 nopen; /* (bd_openers isn't available without sleeping) */
|
||||
u16 lasttag; /* last tag sent */
|
||||
u16 rttavg; /* round trip average of requests/responses */
|
||||
u16 mintimer;
|
||||
u16 fw_ver; /* version of blade's firmware */
|
||||
u16 maxbcnt;
|
||||
struct work_struct work;/* disk create work struct */
|
||||
@ -142,7 +144,6 @@ struct aoedev {
|
||||
mempool_t *bufpool; /* for deadlock-free Buf allocation */
|
||||
struct list_head bufq; /* queue of bios to work on */
|
||||
struct buf *inprocess; /* the one we're currently working on */
|
||||
ulong lasttag; /* last tag sent */
|
||||
ushort lostjumbo;
|
||||
ushort nframes; /* number of frames below */
|
||||
struct frame *frames;
|
||||
|
@ -461,8 +461,15 @@ calc_rttavg(struct aoedev *d, int rtt)
|
||||
register long n;
|
||||
|
||||
n = rtt;
|
||||
if (n < MINTIMER)
|
||||
n = MINTIMER;
|
||||
if (n < 0) {
|
||||
n = -rtt;
|
||||
if (n < MINTIMER)
|
||||
n = MINTIMER;
|
||||
else if (n > MAXTIMER)
|
||||
n = MAXTIMER;
|
||||
d->mintimer += (n - d->mintimer) >> 1;
|
||||
} else if (n < d->mintimer)
|
||||
n = d->mintimer;
|
||||
else if (n > MAXTIMER)
|
||||
n = MAXTIMER;
|
||||
|
||||
@ -498,8 +505,10 @@ aoecmd_ata_rsp(struct sk_buff *skb)
|
||||
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
|
||||
f = getframe(d, be32_to_cpu(hin->tag));
|
||||
n = be32_to_cpu(hin->tag);
|
||||
f = getframe(d, n);
|
||||
if (f == NULL) {
|
||||
calc_rttavg(d, -tsince(n));
|
||||
spin_unlock_irqrestore(&d->lock, flags);
|
||||
snprintf(ebuf, sizeof ebuf,
|
||||
"%15s e%d.%d tag=%08x@%08lx\n",
|
||||
@ -724,6 +733,7 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
|
||||
return;
|
||||
}
|
||||
d->flags |= DEVFL_PAUSE; /* force pause */
|
||||
d->mintimer = MINTIMER;
|
||||
d->fw_ver = be16_to_cpu(ch->fwver);
|
||||
|
||||
/* check for already outstanding ataid */
|
||||
|
Loading…
Reference in New Issue
Block a user