ipv6: Avoid rt6_probe() taking writer lock in the fast path
authorMartin KaFai Lau <kafai@fb.com>
Fri, 24 Jul 2015 16:57:43 +0000 (09:57 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jul 2015 08:08:25 +0000 (01:08 -0700)
commit8d6c31bf574177c8de48dd1387d96e1ec3a8b8bc
treef1ff57e6fb696f41ab3e48c4b07fbcc539d52a33
parent990edb428c2c85c22ca770330437db7183cbe8b5
ipv6: Avoid rt6_probe() taking writer lock in the fast path

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

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
CC: Julian Anastasov <ja@ssi.bg>
CC: YOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/route.c