]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ipv4: use dst4_mtu() instead of dst_mtu()
authorEric Dumazet <edumazet@google.com>
Fri, 30 Jan 2026 21:03:02 +0000 (21:03 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 3 Feb 2026 01:49:29 +0000 (17:49 -0800)
When we expect an IPv4 dst, use dst4_mtu() instead of dst_mtu()
to save some code space.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260130210303.3888261-8-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/icmp.c
net/ipv4/ip_output.c
net/ipv4/ip_sockglue.c
net/ipv4/ipmr.c
net/ipv4/netfilter/nf_reject_ipv4.c
net/ipv4/tcp_ipv4.c
net/ipv6/sit.c

index 19c9c838967f761a8b3a1b07cea5c5ec932bf12d..1d362a17a1c446e8d988162b164c5096a7f5d9dc 100644 (file)
@@ -945,7 +945,7 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info,
 
        /* RFC says return as much as we can without exceeding 576 bytes. */
 
-       room = dst_mtu(&rt->dst);
+       room = dst4_mtu(&rt->dst);
        if (room > 576)
                room = 576;
        room -= sizeof(struct iphdr) + icmp_param->replyopts.opt.optlen;
index 75fcb58795bbbd97d9544c05b245675ad1d1383a..e4790cc7b5c2ec7d6893d4141ca250ec05a4a2f5 100644 (file)
@@ -1300,7 +1300,7 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
                return -EFAULT;
 
        cork->fragsize = ip_sk_use_pmtu(sk) ?
-                        dst_mtu(&rt->dst) : READ_ONCE(rt->dst.dev->mtu);
+                        dst4_mtu(&rt->dst) : READ_ONCE(rt->dst.dev->mtu);
 
        if (!inetdev_valid_mtu(cork->fragsize))
                return -ENETUNREACH;
@@ -1439,7 +1439,7 @@ struct sk_buff *__ip_make_skb(struct sock *sk,
        pmtudisc = READ_ONCE(inet->pmtudisc);
        if (pmtudisc == IP_PMTUDISC_DO ||
            pmtudisc == IP_PMTUDISC_PROBE ||
-           (skb->len <= dst_mtu(&rt->dst) &&
+           (skb->len <= dst4_mtu(&rt->dst) &&
             ip_dont_fragment(sk, &rt->dst)))
                df = htons(IP_DF);
 
index 6d9c5c20b1c4f93bd54283b5aadbb9bc61c24685..c062d9519818024e01746eec20eb3c036226f77e 100644 (file)
@@ -1634,7 +1634,7 @@ int do_ip_getsockopt(struct sock *sk, int level, int optname,
                val = 0;
                dst = sk_dst_get(sk);
                if (dst) {
-                       val = dst_mtu(dst);
+                       val = dst4_mtu(dst);
                        dst_release(dst);
                }
                if (!val)
index ca9eaee4c2ef5f5cdc03608291ad1a0dc187d657..131382c388e95707f27dd7d43be9b9ee2f62c85d 100644 (file)
@@ -1895,7 +1895,7 @@ static int ipmr_prepare_xmit(struct net *net, struct mr_table *mrt,
                        return -1;
        }
 
-       if (skb->len+encap > dst_mtu(&rt->dst) && (ntohs(iph->frag_off) & IP_DF)) {
+       if (skb->len+encap > dst4_mtu(&rt->dst) && (ntohs(iph->frag_off) & IP_DF)) {
                /* Do not fragment multicasts. Alas, IPv4 does not
                 * allow to send ICMP, so that packets will disappear
                 * to blackhole.
index fae4aa4a5f0955849c6a4ba85bc925c33cd9e102..fecf6621f679f9d435803a7bd522b38bf3de7ef4 100644 (file)
@@ -303,7 +303,7 @@ void nf_send_reset(struct net *net, struct sock *sk, struct sk_buff *oldskb,
                goto free_nskb;
 
        /* "Never happens" */
-       if (nskb->len > dst_mtu(skb_dst(nskb)))
+       if (nskb->len > dst4_mtu(skb_dst(nskb)))
                goto free_nskb;
 
        nf_ct_attach(nskb, oldskb);
index 0fc8a42921aabac27dcb7c6a9db811498edbb31c..01fd563472608cc10744d3a5d4fb998b83c4be97 100644 (file)
@@ -374,7 +374,7 @@ void tcp_v4_mtu_reduced(struct sock *sk)
 {
        struct inet_sock *inet = inet_sk(sk);
        struct dst_entry *dst;
-       u32 mtu;
+       u32 mtu, dmtu;
 
        if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))
                return;
@@ -386,15 +386,14 @@ void tcp_v4_mtu_reduced(struct sock *sk)
        /* Something is about to be wrong... Remember soft error
         * for the case, if this connection will not able to recover.
         */
-       if (mtu < dst_mtu(dst) && ip_dont_fragment(sk, dst))
+       dmtu = dst4_mtu(dst);
+       if (mtu < dmtu && ip_dont_fragment(sk, dst))
                WRITE_ONCE(sk->sk_err_soft, EMSGSIZE);
 
-       mtu = dst_mtu(dst);
-
        if (inet->pmtudisc != IP_PMTUDISC_DONT &&
            ip_sk_accept_pmtu(sk) &&
-           inet_csk(sk)->icsk_pmtu_cookie > mtu) {
-               tcp_sync_mss(sk, mtu);
+           inet_csk(sk)->icsk_pmtu_cookie > dmtu) {
+               tcp_sync_mss(sk, dmtu);
 
                /* Resend the TCP packet because it's
                 * clear that the old packet has been
@@ -1760,7 +1759,7 @@ struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
 
        tcp_ca_openreq_child(newsk, dst);
 
-       tcp_sync_mss(newsk, dst_mtu(dst));
+       tcp_sync_mss(newsk, dst4_mtu(dst));
        newtp->advmss = tcp_mss_clamp(tcp_sk(sk), dst_metric_advmss(dst));
 
        tcp_initialize_rcv_mss(newsk);
index cf37ad9686e698bf781df84f348d89ea7160ec63..439c8a1c662520d1769c0a60a5e9ae2cc0196d15 100644 (file)
@@ -962,7 +962,7 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb,
        }
 
        if (df) {
-               mtu = dst_mtu(&rt->dst) - t_hlen;
+               mtu = dst4_mtu(&rt->dst) - t_hlen;
 
                if (mtu < IPV4_MIN_MTU) {
                        DEV_STATS_INC(dev, collisions);