From: Eric Dumazet Date: Tue, 8 Feb 2022 04:50:33 +0000 (-0800) Subject: ipv6: change fib6_rules_net_exit() to batch mode X-Git-Tag: v6.6.17~7931^2~415^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ea3e91666ddd9f141632157ee601325d1d207061;p=platform%2Fkernel%2Flinux-rpi.git ipv6: change fib6_rules_net_exit() to batch mode 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 Reviewed-by: David Ahern Signed-off-by: Jakub Kicinski --- diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c index e2a7b00..7c20038 100644 --- a/net/ipv6/fib6_rules.c +++ b/net/ipv6/fib6_rules.c @@ -493,16 +493,21 @@ out_fib6_rules_ops: 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)