]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: account for encap headers in qdisc pkt len
authorFengyuan Gong <gfengyuan@google.com>
Wed, 2 Jul 2025 16:07:41 +0000 (16:07 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 8 Jul 2025 15:55:33 +0000 (08:55 -0700)
Refine qdisc_pkt_len_init to include headers up through
the inner transport header when computing header size
for encapsulations. Also refine net/sched/sch_cake.c
borrowed from qdisc_pkt_len_init().

Signed-off-by: Fengyuan Gong <gfengyuan@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://patch.msgid.link/20250702160741.1204919-1-gfengyuan@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/dev.c
net/sched/sch_cake.c

index 96d33dead604f4e4bbbfb27096c94a641c81f604..ea129aa083179b6853e99c3750ee5a1c2f135de2 100644 (file)
@@ -4026,7 +4026,10 @@ static void qdisc_pkt_len_init(struct sk_buff *skb)
                unsigned int hdr_len;
 
                /* mac layer + network layer */
-               hdr_len = skb_transport_offset(skb);
+               if (!skb->encapsulation)
+                       hdr_len = skb_transport_offset(skb);
+               else
+                       hdr_len = skb_inner_transport_offset(skb);
 
                /* + transport layer */
                if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) {
index 48dd8c88903feba5194f419ac33fb4544c1264a8..dbcfb948c86707a4e29d3445524e1fda4f8fd617 100644 (file)
@@ -1407,7 +1407,10 @@ static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb)
                return cake_calc_overhead(q, len, off);
 
        /* borrowed from qdisc_pkt_len_init() */
-       hdr_len = skb_transport_offset(skb);
+       if (!skb->encapsulation)
+               hdr_len = skb_transport_offset(skb);
+       else
+               hdr_len = skb_inner_transport_offset(skb);
 
        /* + transport layer */
        if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 |