]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
geneve: Pass struct geneve_dev to geneve_find_sock().
authorKuniyuki Iwashima <kuniyu@google.com>
Tue, 2 Jun 2026 19:03:43 +0000 (19:03 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 4 Jun 2026 01:07:41 +0000 (18:07 -0700)
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>
drivers/net/geneve.c

index 7e8c3023842ef2bc373a89bb3215aabc2764d0df..4f841eced028d7f0a4393cf83add6dca07c75c59 100644 (file)
@@ -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);