aoe: failover remote interface based on aoe_deadsecs parameter
authorEd Cashin <ecashin@coraid.com>
Fri, 5 Oct 2012 00:16:29 +0000 (17:16 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 5 Oct 2012 18:05:26 +0000 (03:05 +0900)
The aoe_deadsecs module parameter allows the user to specify a hard limit
on the number of seconds an AoE command can be retransmitted before the
AoE block device is considered to have failed.

Using aoe_deadsecs to determine the time we try using a different remote
interface helps to ensure that the hard limit is not reached before we've
tried to recover by sending to a different remote port.

As a data storage target, the AoE target is unambiguously identified by
its {major, minor} AoE address tuple, and an AoE target can have multiple
MAC addresses.  However, note that "target" in the driver code and
comments means a {major, minor, MAC address} tuple, as in "somewhere to
send packets".

Signed-off-by: Ed Cashin <ecashin@coraid.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/block/aoe/aoe.h
drivers/block/aoe/aoecmd.c

index ffded64..d17b727 100644 (file)
@@ -96,7 +96,6 @@ enum {
        TIMERTICK = HZ / 10,
        MINTIMER = HZ >> 2,
        MAXTIMER = HZ << 1,
-       HELPWAIT = 20,
 };
 
 struct buf {
index bbab40c..e3291df 100644 (file)
@@ -633,11 +633,9 @@ rexmit_timer(ulong vp)
                list_del(pos);
 
                t = f->t;
-               if (n > HELPWAIT) {
-                       /* see if another target can help */
-                       if (d->ntargets > 1)
-                               d->htgt = t;
-               }
+               if (n > aoe_deadsecs/2)
+                       d->htgt = t; /* see if another target can help */
+
                if (t->nout == t->maxout) {
                        if (t->maxout > 1)
                                t->maxout--;