Eric Dumazet 404e0a8b6a net: ipv4: fix RCU races on dst refcounts
commit c6cffba4ffa2 (ipv4: Fix input route performance regression.)
added various fatal races with dst refcounts.

crashes happen on tcp workloads if routes are added/deleted at the same
time.

The dst_free() calls from free_fib_info_rcu() are clearly racy.

We need instead regular dst refcounting (dst_release()) and make
sure dst_release() is aware of RCU grace periods :

Add DST_RCU_FREE flag so that dst_release() respects an RCU grace period
before dst destruction for cached dst

Introduce a new inet_sk_rx_dst_set() helper, using atomic_inc_not_zero()
to make sure we dont increase a zero refcount (On a dst currently
waiting an rcu grace period before destruction)

rt_cache_route() must take a reference on the new cached route, and
release it if was not able to install it.

With this patch, my machines survive various benchmarks.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-07-30 14:53:22 -07:00
..
2012-07-29 23:18:30 -07:00
2012-04-15 12:37:19 -04:00
2012-07-16 22:31:34 -07:00
2012-04-15 12:37:19 -04:00
2011-10-19 03:10:46 -04:00
2012-07-30 14:53:21 -07:00
2012-07-22 17:04:15 -07:00
2012-07-20 13:38:34 -07:00
2012-07-19 10:55:36 -07:00
2012-07-19 10:55:36 -07:00
2012-07-19 10:55:36 -07:00
2012-01-20 14:17:26 -05:00
2012-07-20 10:59:41 -07:00
2012-01-20 14:17:26 -05:00
2012-07-19 10:55:36 -07:00
2012-05-17 14:59:59 -04:00
2012-03-11 23:42:51 -07:00
2012-07-16 22:31:34 -07:00
2012-04-15 12:37:19 -04:00