Hi, Martin KaFai Lau wrote: > The patch checks neigh->nud_state before acquiring the writer lock. > Note that rt6_probe() is only used in CONFIG_IPV6_ROUTER_PREF. > > 40 udpflood processes and a /64 gateway route are used. > The gateway has NUD_PERMANENT. Each of them is run for 30s. > At the end, the total number of finished sendto(): > > Before: 55M > After: 95M
I think it is better to describe why it is okay without any locks. --yoshfuji > > Signed-off-by: Martin KaFai Lau <[email protected]> > Cc: Hannes Frederic Sowa <[email protected]> > CC: Julian Anastasov <[email protected]> > CC: YOSHIFUJI Hideaki <[email protected]> > --- > net/ipv6/route.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/net/ipv6/route.c b/net/ipv6/route.c > index 6d503db..76dcff8 100644 > --- a/net/ipv6/route.c > +++ b/net/ipv6/route.c > @@ -560,6 +560,9 @@ static void rt6_probe(struct rt6_info *rt) > rcu_read_lock_bh(); > neigh = __ipv6_neigh_lookup_noref(rt->dst.dev, &rt->rt6i_gateway); > if (neigh) { > + if (neigh->nud_state & NUD_VALID) > + goto out; > + > work = NULL; > write_lock(&neigh->lock); > if (!(neigh->nud_state & NUD_VALID) && > @@ -583,6 +586,7 @@ static void rt6_probe(struct rt6_info *rt) > schedule_work(&work->work); > } > > +out: > rcu_read_unlock_bh(); > } > #else > -- Hideaki Yoshifuji <[email protected]> Technical Division, MIRACLE LINUX CORPORATION -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
