Commit fc3dc33f authored by Kuniyuki Iwashima's avatar Kuniyuki Iwashima Committed by Jakub Kicinski
Browse files

bareudp: Convert bareudp_exit_batch_rtnl() to ->exit_rtnl().



bareudp_exit_batch_rtnl() iterates the dying netns list and performs the
same operation for each.

Let's use ->exit_rtnl().

While at it, we replace unregister_netdevice_queue() with
bareudp_dellink() for better cleanup.  It unlinks the device
from net_generic(net, bareudp_net_id)->bareudp_list, but there
is no real issue as both the dev and the list are freed later.

Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: default avatarSabrina Dubroca <sd@queasysnail.net>
Link: https://patch.msgid.link/20250411205258.63164-13-kuniyu@amazon.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent bc7eaf7a
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -777,27 +777,19 @@ static __net_init int bareudp_init_net(struct net *net)
	return 0;
}

static void bareudp_destroy_tunnels(struct net *net, struct list_head *head)
static void __net_exit bareudp_exit_rtnl_net(struct net *net,
					     struct list_head *dev_kill_list)
{
	struct bareudp_net *bn = net_generic(net, bareudp_net_id);
	struct bareudp_dev *bareudp, *next;

	list_for_each_entry_safe(bareudp, next, &bn->bareudp_list, next)
		unregister_netdevice_queue(bareudp->dev, head);
}

static void __net_exit bareudp_exit_batch_rtnl(struct list_head *net_list,
					       struct list_head *dev_kill_list)
{
	struct net *net;

	list_for_each_entry(net, net_list, exit_list)
		bareudp_destroy_tunnels(net, dev_kill_list);
		bareudp_dellink(bareudp->dev, dev_kill_list);
}

static struct pernet_operations bareudp_net_ops = {
	.init = bareudp_init_net,
	.exit_batch_rtnl = bareudp_exit_batch_rtnl,
	.exit_rtnl = bareudp_exit_rtnl_net,
	.id   = &bareudp_net_id,
	.size = sizeof(struct bareudp_net),
};