summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulian Anastasov2015-07-23 09:39:35 +0200
committerDavid S. Miller2015-07-27 05:56:27 +0200
commit88f643203668b95b884b60b45ff182289153843c (patch)
tree7c07eec1dcbf5d2b09d53bf1b267edef40b2a9cb
parentipv6: fix crash over flow-based vxlan device (diff)
downloadkernel-qcow2-linux-88f643203668b95b884b60b45ff182289153843c.tar.gz
kernel-qcow2-linux-88f643203668b95b884b60b45ff182289153843c.tar.xz
kernel-qcow2-linux-88f643203668b95b884b60b45ff182289153843c.zip
ipv4: be more aggressive when probing alternative gateways
Currently, we do not notice if new alternative gateways are added. We can do it by checking for present neigh entry. Also, gateways that are currently probed (NUD_INCOMPLETE) can be skipped from round-robin probing. Suggested-by: Florian Westphal <fw@strlen.de> Signed-off-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/fib_semantics.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index 6754c64b2fe0..d4c6732cfbfa 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -438,13 +438,15 @@ static int fib_detect_death(struct fib_info *fi, int order,
if (n) {
state = n->nud_state;
neigh_release(n);
+ } else {
+ return 0;
}
if (state == NUD_REACHABLE)
return 0;
if ((state & NUD_VALID) && order != dflt)
return 0;
if ((state & NUD_VALID) ||
- (*last_idx < 0 && order > dflt)) {
+ (*last_idx < 0 && order > dflt && state != NUD_INCOMPLETE)) {
*last_resort = fi;
*last_idx = order;
}