]> www.infradead.org Git - users/hch/misc.git/commitdiff
ipv6: make ipv6_pinfo.daddr_cache a boolean
authorEric Dumazet <edumazet@google.com>
Tue, 16 Sep 2025 16:09:43 +0000 (16:09 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 18 Sep 2025 08:17:09 +0000 (10:17 +0200)
ipv6_pinfo.daddr_cache is either NULL or &sk->sk_v6_daddr

We do not need 8 bytes, a boolean is enough.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20250916160951.541279-3-edumazet@google.com
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
include/linux/ipv6.h
include/net/ip6_route.h
net/ipv6/af_inet6.c
net/ipv6/inet6_connection_sock.c
net/ipv6/ip6_output.c
net/ipv6/route.c
net/ipv6/tcp_ipv6.c

index 55c4d1e4dd7df803440e3a3cf18245a495ad949b..8e6d9f8b3dc80c3904ff13e1d218b9527a554e35 100644 (file)
@@ -219,7 +219,7 @@ struct ipv6_pinfo {
 #ifdef CONFIG_IPV6_SUBTREES
        bool                    saddr_cache;
 #endif
-       const struct in6_addr           *daddr_cache;
+       bool                    daddr_cache;
 
        __be32                  flow_label;
        __u32                   frag_size;
index 223c02d4268858cd3f1c83f949877dabc17efbc8..7c5512baa4b2b7503494b1ae02756df29ef93666 100644 (file)
@@ -229,14 +229,14 @@ static inline const struct rt6_info *skb_rt6_info(const struct sk_buff *skb)
  *     Store a destination cache entry in a socket
  */
 static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst,
-                                const struct in6_addr *daddr,
+                                bool daddr_set,
                                 bool saddr_set)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
 
        np->dst_cookie = rt6_get_cookie(dst_rt6_info(dst));
        sk_setup_caps(sk, dst);
-       np->daddr_cache = daddr;
+       np->daddr_cache = daddr_set;
 #ifdef CONFIG_IPV6_SUBTREES
        np->saddr_cache = saddr_set;
 #endif
index c342f8daea7fa9469fa7f3a2d1f0a78572b9ae9a..1b0314644e0ccce137158160945b11511588c1df 100644 (file)
@@ -857,7 +857,7 @@ int inet6_sk_rebuild_header(struct sock *sk)
                        return PTR_ERR(dst);
                }
 
-               ip6_dst_store(sk, dst, NULL, false);
+               ip6_dst_store(sk, dst, false, false);
        }
 
        return 0;
index 1947ccdb00df2301be1a8ce651d635dafd08c3b4..ea5cf3fdfdd648e43f4c53611f61509ce06d4cf8 100644 (file)
@@ -91,7 +91,7 @@ static struct dst_entry *inet6_csk_route_socket(struct sock *sk,
                dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_p);
 
                if (!IS_ERR(dst))
-                       ip6_dst_store(sk, dst, NULL, false);
+                       ip6_dst_store(sk, dst, false, false);
        }
        return dst;
 }
index 82ff6e1293d04dc9d69a661080cd0ae965cf766c..f904739e99b907a5704c32452ff585479e369727 100644 (file)
@@ -1100,7 +1100,8 @@ static struct dst_entry *ip6_sk_dst_check(struct sock *sk,
         *    sockets.
         * 2. oif also should be the same.
         */
-       if (ip6_rt_check(&rt->rt6i_dst, &fl6->daddr, np->daddr_cache) ||
+       if (ip6_rt_check(&rt->rt6i_dst, &fl6->daddr,
+                        np->daddr_cache ? &sk->sk_v6_daddr : NULL) ||
 #ifdef CONFIG_IPV6_SUBTREES
            ip6_rt_check(&rt->rt6i_src, &fl6->saddr,
                         np->saddr_cache ? &np->saddr : NULL) ||
index e1b0aebf8bf92b711581ddb5cde8d9a840e33036..aee6a10b112aac6b17a2ca241b7ecc42ab883a2f 100644 (file)
@@ -3032,8 +3032,7 @@ void ip6_sk_dst_store_flow(struct sock *sk, struct dst_entry *dst,
 #endif
 
        ip6_dst_store(sk, dst,
-                     ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ?
-                     &sk->sk_v6_daddr : NULL,
+                     ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr),
 #ifdef CONFIG_IPV6_SUBTREES
                      ipv6_addr_equal(&fl6->saddr, &np->saddr) ?
                      true :
index ecc3a87cd8c4bcc8cd9da79f602479ccdf697d61..c7271f6359db5bd473d46b39ac2d924e8a0c7577 100644 (file)
@@ -299,7 +299,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
        inet->inet_rcv_saddr = LOOPBACK4_IPV6;
 
        sk->sk_gso_type = SKB_GSO_TCPV6;
-       ip6_dst_store(sk, dst, NULL, false);
+       ip6_dst_store(sk, dst, false, false);
 
        icsk->icsk_ext_hdr_len = 0;
        if (opt)
@@ -1459,7 +1459,7 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff *
 
        memcpy(newnp, np, sizeof(struct ipv6_pinfo));
 
-       ip6_dst_store(newsk, dst, NULL, false);
+       ip6_dst_store(newsk, dst, false, false);
 
        newnp->saddr = ireq->ir_v6_loc_addr;