diff options
author | James Chapman <jchapman@katalix.com> | 2024-07-29 16:38:14 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2024-07-31 09:25:14 +0100 |
commit | 5dfa598b249c5bd8fa620843cf9ece1ad16929d9 (patch) | |
tree | 4b6808fe72a0685580f8e7b0e12d050b3d8a991c /net/l2tp | |
parent | d93b8a63f011f252dcfb101d5b90367bd8f42db3 (diff) | |
download | linux-5dfa598b249c5bd8fa620843cf9ece1ad16929d9.tar.gz linux-5dfa598b249c5bd8fa620843cf9ece1ad16929d9.tar.bz2 linux-5dfa598b249c5bd8fa620843cf9ece1ad16929d9.zip |
l2tp: use pre_exit pernet hook to avoid rcu_barrier
Move the work of closing all tunnels from the pernet exit hook to
pre_exit since the core does rcu synchronisation between these steps
and we can therefore remove rcu_barrier from l2tp code.
Signed-off-by: James Chapman <jchapman@katalix.com>
Signed-off-by: Tom Parkin <tparkin@katalix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/l2tp')
-rw-r--r-- | net/l2tp/l2tp_core.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index fd03c17dd20c..5d2068b6c778 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c @@ -1756,7 +1756,7 @@ static __net_init int l2tp_init_net(struct net *net) return 0; } -static __net_exit void l2tp_exit_net(struct net *net) +static __net_exit void l2tp_pre_exit_net(struct net *net) { struct l2tp_net *pn = l2tp_pernet(net); struct l2tp_tunnel *tunnel = NULL; @@ -1771,7 +1771,11 @@ static __net_exit void l2tp_exit_net(struct net *net) if (l2tp_wq) drain_workqueue(l2tp_wq); - rcu_barrier(); +} + +static __net_exit void l2tp_exit_net(struct net *net) +{ + struct l2tp_net *pn = l2tp_pernet(net); idr_destroy(&pn->l2tp_v2_session_idr); idr_destroy(&pn->l2tp_v3_session_idr); @@ -1781,6 +1785,7 @@ static __net_exit void l2tp_exit_net(struct net *net) static struct pernet_operations l2tp_net_ops = { .init = l2tp_init_net, .exit = l2tp_exit_net, + .pre_exit = l2tp_pre_exit_net, .id = &l2tp_net_id, .size = sizeof(struct l2tp_net), }; |