Added changes suggested by Julian Anastasov in version 2. fib_flush walks the whole fib in a net_namespace and is called for each net_device being closed or unregistered. This can be very expensive when dealing with 100k or more routes in the fib and removal of a lot of interfaces. These four patches deal with this issue by calling fib_flush just once for each net namespace and introduce a new function arp_ifdown_all that does a similar optimization for the neighbour table.
The benchmark tests were run on linux-3.18. Salam Noureddine (4): net: add event_list to struct net and provide utility functions net: dev: add batching to net_device notifiers net: core: introduce neigh_ifdown_all for all down interfaces net: fib: avoid calling fib_flush for each device when doing batch close and unregister include/linux/netdevice.h | 2 ++ include/net/arp.h | 1 + include/net/neighbour.h | 1 + include/net/net_namespace.h | 22 +++++++++++++++++++++ include/net/netns/ipv4.h | 1 + net/core/dev.c | 48 ++++++++++++++++++++++++++++++++++++++++----- net/core/neighbour.c | 38 ++++++++++++++++++++++++++++------- net/core/net_namespace.c | 1 + net/ipv4/arp.c | 4 ++++ net/ipv4/fib_frontend.c | 16 +++++++++++++-- 10 files changed, 120 insertions(+), 14 deletions(-) -- 1.8.1.4