summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuniyuki Iwashima <kuniyu@google.com>2026-06-02 19:03:43 +0000
committerJakub Kicinski <kuba@kernel.org>2026-06-03 18:07:41 -0700
commit0429413cc7811ae29ff07e4173544c5112d2ac81 (patch)
tree152c117259099531cd29aed616a637feb7f316ae
parentc7f83b9de269f38d439fca14e1d049831ab89c01 (diff)
downloadlinux-0429413cc7811ae29ff07e4173544c5112d2ac81.tar.gz
linux-0429413cc7811ae29ff07e4173544c5112d2ac81.zip
geneve: Pass struct geneve_dev to geneve_find_sock().
This is a prep patch to make a subsequent patch clean. We will need to access geneve_dev->cfg.info.key.u.{ipv4,ipv6}.src in geneve_find_sock() later and extend conditions there. Let's pass down struct geneve from geneve_sock_add() to geneve_find_sock() and flatten the conditional logic. Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260602190436.139591-4-kuniyu@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--drivers/net/geneve.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 7e8c3023842e..4f841eced028 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1040,35 +1040,41 @@ static void geneve_sock_release(struct geneve_dev *geneve)
#endif
}
-static struct geneve_sock *geneve_find_sock(struct geneve_net *gn,
- sa_family_t family,
- __be16 dst_port,
- bool gro_hint)
+static struct geneve_sock *geneve_find_sock(struct net *net,
+ struct geneve_dev *geneve, bool ipv6)
{
+ struct geneve_net *gn = net_generic(net, geneve_net_id);
+ struct ip_tunnel_info *info = &geneve->cfg.info;
+ sa_family_t family = ipv6 ? AF_INET6 : AF_INET;
+ bool gro_hint = geneve->cfg.gro_hint;
+ __be16 dst_port = info->key.tp_dst;
struct geneve_sock *gs;
list_for_each_entry(gs, &gn->sock_list, list) {
- if (inet_sk(gs->sk)->inet_sport == dst_port &&
- geneve_get_sk_family(gs) == family &&
- gs->gro_hint == gro_hint) {
- return gs;
- }
+ if (inet_sk(gs->sk)->inet_sport != dst_port)
+ continue;
+
+ if (geneve_get_sk_family(gs) != family)
+ continue;
+
+ if (gs->gro_hint != gro_hint)
+ continue;
+
+ return gs;
}
+
return NULL;
}
static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
{
struct net *net = geneve->net;
- struct geneve_net *gn = net_generic(net, geneve_net_id);
- bool gro_hint = geneve->cfg.gro_hint;
struct geneve_dev_node *node;
struct geneve_sock *gs;
__u8 vni[3];
__u32 hash;
- gs = geneve_find_sock(gn, ipv6 ? AF_INET6 : AF_INET,
- geneve->cfg.info.key.tp_dst, gro_hint);
+ gs = geneve_find_sock(net, geneve, ipv6);
if (gs) {
gs->refcnt++;
goto out;
@@ -1080,7 +1086,7 @@ static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6)
out:
gs->collect_md = geneve->cfg.collect_md;
- gs->gro_hint = gro_hint;
+ gs->gro_hint = geneve->cfg.gro_hint;
#if IS_ENABLED(CONFIG_IPV6)
if (ipv6) {
rcu_assign_pointer(geneve->sock6, gs);