Eric Dumazet ef885afbf8 net: use rcu_barrier() in rollback_registered_many
netdev_wait_allrefs() waits that all references to a device vanishes.

It currently uses a _very_ pessimistic 250 ms delay between each probe.
Some users reported that no more than 4 devices can be dismantled per
second, this is a pretty serious problem for some setups.

Most of the time, a refcount is about to be released by an RCU callback,
that is still in flight because rollback_registered_many() uses a
synchronize_rcu() call instead of rcu_barrier(). Problem is visible if
number of online cpus is one, because synchronize_rcu() is then a no op.

time to remove 50 ipip tunnels on a UP machine :

before patch : real 11.910s
after patch : real 1.250s

Reported-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Reported-by: Octavian Purdila <opurdila@ixiacom.com>
Reported-by: Benjamin LaHaise <bcrl@kvack.org>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-09-14 14:27:29 -07:00
..
2010-08-02 14:28:36 -05:00
2010-08-04 21:53:17 -07:00
2010-08-26 15:18:27 -07:00
2010-07-18 15:07:14 -07:00
2010-06-11 18:37:08 -07:00
2010-09-08 21:45:01 -07:00
2010-09-07 13:57:22 -07:00
2010-06-03 03:21:52 -07:00
2010-05-17 23:23:13 -07:00
2010-09-08 10:39:57 -07:00
2010-04-20 16:37:13 -07:00
2010-08-18 23:40:03 -07:00
2010-08-01 00:32:12 -07:00
2010-09-12 11:56:44 -07:00
2010-09-09 15:00:29 -07:00
2010-05-17 17:39:28 -07:00