Message ID | 20220208045038.2635826-10-eric.dumazet@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | ef0de6696c38cbefba64fc1e29c18882bac1f747 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: speedup netns dismantles | expand |
On 07.02.2022 20:50:36, Eric Dumazet wrote: > From: Eric Dumazet <edumazet@google.com> > > cleanup_net() is competing with other rtnl users. > > Avoiding to acquire rtnl for each netns before calling > cgw_remove_all_jobs() gives chance for cleanup_net() > to progress much faster, holding rtnl a bit longer. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > Acked-by: Oliver Hartkopp <socketcan@hartkopp.net> > Cc: Marc Kleine-Budde <mkl@pengutronix.de> Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> regards, Marc
diff --git a/net/can/gw.c b/net/can/gw.c index d8861e862f157aec36c417b71eb7e8f59bd064b9..24221352e059be9fb9aca3819be6a7ac4cdef144 100644 --- a/net/can/gw.c +++ b/net/can/gw.c @@ -1239,16 +1239,19 @@ static int __net_init cangw_pernet_init(struct net *net) return 0; } -static void __net_exit cangw_pernet_exit(struct net *net) +static void __net_exit cangw_pernet_exit_batch(struct list_head *net_list) { + struct net *net; + rtnl_lock(); - cgw_remove_all_jobs(net); + list_for_each_entry(net, net_list, exit_list) + cgw_remove_all_jobs(net); rtnl_unlock(); } static struct pernet_operations cangw_pernet_ops = { .init = cangw_pernet_init, - .exit = cangw_pernet_exit, + .exit_batch = cangw_pernet_exit_batch, }; static __init int cgw_module_init(void)