summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2026-05-21 05:12:31 +0300
committerJakub Kicinski <kuba@kernel.org>2026-05-21 05:12:31 +0300
commit830d8771ae3c7bc90a62dde76a6556e612529fbc (patch)
treed5238796a6963835b5ebd66b14263a1bd47928a8
parent25ae123db10ba9ab890b56bcdb0a4363aee8529a (diff)
parente6409584dec6d67f5aa9e2e0f55e2c5f0f55d63f (diff)
downloadlinux-830d8771ae3c7bc90a62dde76a6556e612529fbc.tar.xz
Merge branch 'udp_tunnel-speed-up-udp-tunnel-device-destruction-part-ii'
Kuniyuki Iwashima says: ==================== udp_tunnel: Speed up UDP tunnel device destruction (Part II) Most of the UDP tunnel devices called synchronize_rcu() twice during destruction, for example, vxlan had 1) synchronize_rcu() in udp_tunnel_sock_release() 2) synchronize_net() in vxlan_sock_release() The former was already removed by: https://lore.kernel.org/netdev/20260502031401.3557229-1-kuniyu@google.com/ This series removes the latter. Patch 1 & 2 & 4 remove synchronize_net() placed before udp_tunnel_sock_release(). Patch 3 removes yet another unnecessary synchronize_net() in geneve_unquiesce(). Patch 5 is a follow-up patch for a sparse report by kernel test robot. ==================== Link: https://patch.msgid.link/20260518050726.318824-1-kuniyu@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/bareudp.c3
-rw-r--r--drivers/net/geneve.c2
-rw-r--r--drivers/net/vxlan/vxlan_core.c1
3 files changed, 1 insertions, 5 deletions
diff --git a/drivers/net/bareudp.c b/drivers/net/bareudp.c
index 890a0650d9cf..5ef841c85526 100644
--- a/drivers/net/bareudp.c
+++ b/drivers/net/bareudp.c
@@ -285,9 +285,8 @@ static void bareudp_sock_release(struct bareudp_dev *bareudp)
{
struct sock *sk;
- sk = bareudp->sk;
+ sk = rtnl_dereference(bareudp->sk);
rcu_assign_pointer(bareudp->sk, NULL);
- synchronize_net();
udp_tunnel_sock_release(sk);
}
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index b36fad833724..e8ff03ed87dc 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1032,7 +1032,6 @@ static void geneve_sock_release(struct geneve_dev *geneve)
#endif
rcu_assign_pointer(geneve->sock4, NULL);
- synchronize_net();
__geneve_sock_release(gs4);
#if IS_ENABLED(CONFIG_IPV6)
@@ -2207,7 +2206,6 @@ static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4,
if (gs6)
rcu_assign_sk_user_data(gs6->sk, gs6);
#endif
- synchronize_net();
}
static int geneve_changelink(struct net_device *dev, struct nlattr *tb[],
diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c
index 00facbfabced..8c3885665b58 100644
--- a/drivers/net/vxlan/vxlan_core.c
+++ b/drivers/net/vxlan/vxlan_core.c
@@ -1515,7 +1515,6 @@ static void vxlan_sock_release(struct vxlan_dev *vxlan)
#endif
RCU_INIT_POINTER(vxlan->vn4_sock, NULL);
- synchronize_net();
if (vxlan->cfg.flags & VXLAN_F_VNIFILTER)
vxlan_vs_del_vnigrp(vxlan);