Message ID | 20220207171756.1304544-7-eric.dumazet@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: speedup netns dismantles | expand |
On 2/7/22 9:17 AM, Eric Dumazet wrote: > From: Eric Dumazet <edumazet@google.com> > > cleanup_net() is competing with other rtnl users. > > fib6_rules_net_exit() seems a good candidate for exit_batch(), > as this gives chance for cleanup_net() to progress much faster, > holding rtnl a bit longer. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > Cc: David Ahern <dsahern@kernel.org> > --- > net/ipv6/fib6_rules.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > Reviewed-by: David Ahern <dsahern@kernel.org>
diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c index ec029c86ae06828c1cfe886ad0f401318b114310..8ad4f49cbe0bb1a31645bbdd4735c69b9b52d8bb 100644 --- a/net/ipv6/fib6_rules.c +++ b/net/ipv6/fib6_rules.c @@ -486,16 +486,21 @@ static int __net_init fib6_rules_net_init(struct net *net) goto out; } -static void __net_exit fib6_rules_net_exit(struct net *net) +static void __net_exit fib6_rules_net_exit_batch(struct list_head *net_list) { + struct net *net; + rtnl_lock(); - fib_rules_unregister(net->ipv6.fib6_rules_ops); + list_for_each_entry(net, net_list, exit_list) { + fib_rules_unregister(net->ipv6.fib6_rules_ops); + cond_resched(); + } rtnl_unlock(); } static struct pernet_operations fib6_rules_net_ops = { .init = fib6_rules_net_init, - .exit = fib6_rules_net_exit, + .exit_batch = fib6_rules_net_exit_batch, }; int __init fib6_rules_init(void)