On Thu, 2016-03-24 at 08:25 -0700, David Ahern wrote: > Multipath route lookups should consider knowledge about next hops and not > select a hop that is known to be failed.
Does not look a net candidate to me. > Signed-off-by: David Ahern <d...@cumulusnetworks.com> > --- > net/ipv4/fib_semantics.c | 34 ++++++++++++++++++++++++++++++++-- > 1 file changed, 32 insertions(+), 2 deletions(-) > > diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c > index d97268e8ff10..28fc6700c2b1 100644 > --- a/net/ipv4/fib_semantics.c > +++ b/net/ipv4/fib_semantics.c > @@ -1563,13 +1563,43 @@ int fib_sync_up(struct net_device *dev, unsigned int > nh_flags) > void fib_select_multipath(struct fib_result *res, int hash) > { > struct fib_info *fi = res->fi; > + struct neighbour *n; > + int state; > > for_nexthops(fi) { > if (hash > atomic_read(&nh->nh_upper_bound)) > continue; > > - res->nh_sel = nhsel; > - return; > + state = NUD_NONE; > + n = neigh_lookup(&arp_tbl, &nh->nh_gw, fi->fib_dev); > + if (n) { > + state = n->nud_state; > + neigh_release(n); > + } This looks like something that could use RCU to avoid expensive refcounting ?