diff options
author | Eric Dumazet <edumazet@google.com> | 2024-02-06 15:43:00 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2024-02-08 03:55:11 +0100 |
commit | 422b5ae9c5e507f913118d086431c46022aa50c2 (patch) | |
tree | b7cf22601a2aa8fb93fa2e31c51a45622d21d9d0 /drivers/net/bareudp.c | |
parent | nexthop: convert nexthop_net_exit_batch to exit_batch_rtnl method (diff) | |
download | linux-422b5ae9c5e507f913118d086431c46022aa50c2.tar.xz linux-422b5ae9c5e507f913118d086431c46022aa50c2.zip |
bareudp: use exit_batch_rtnl() method
exit_batch_rtnl() is called while RTNL is held,
and devices to be unregistered can be queued in the dev_kill_list.
This saves one rtnl_lock()/rtnl_unlock() pair,
and one unregister_netdevice_many() call.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Antoine Tenart <atenart@kernel.org>
Link: https://lore.kernel.org/r/20240206144313.2050392-5-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/net/bareudp.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/net/bareudp.c b/drivers/net/bareudp.c index 31377bb1cc97..4db6122c9b43 100644 --- a/drivers/net/bareudp.c +++ b/drivers/net/bareudp.c @@ -760,23 +760,18 @@ static void bareudp_destroy_tunnels(struct net *net, struct list_head *head) unregister_netdevice_queue(bareudp->dev, head); } -static void __net_exit bareudp_exit_batch_net(struct list_head *net_list) +static void __net_exit bareudp_exit_batch_rtnl(struct list_head *net_list, + struct list_head *dev_kill_list) { struct net *net; - LIST_HEAD(list); - rtnl_lock(); list_for_each_entry(net, net_list, exit_list) - bareudp_destroy_tunnels(net, &list); - - /* unregister the devices gathered above */ - unregister_netdevice_many(&list); - rtnl_unlock(); + bareudp_destroy_tunnels(net, dev_kill_list); } static struct pernet_operations bareudp_net_ops = { .init = bareudp_init_net, - .exit_batch = bareudp_exit_batch_net, + .exit_batch_rtnl = bareudp_exit_batch_rtnl, .id = &bareudp_net_id, .size = sizeof(struct bareudp_net), }; |