Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net_sched: initialize qdisc_skb_cb(skb)->pkt_segs in qdisc_pkt_len_init()

qdisc_pkt_len_init() is currently initalizing qdisc_skb_cb(skb)->pkt_len.

Add qdisc_skb_cb(skb)->pkt_segs initialization and rename this function
to qdisc_pkt_len_segs_init().

Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20251121083256.674562-4-edumazet@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Eric Dumazet and committed by
Paolo Abeni
874c1928 be1b70ab

+12 -5
+11 -4
net/core/dev.c
··· 4069 4069 } 4070 4070 EXPORT_SYMBOL_GPL(validate_xmit_skb_list); 4071 4071 4072 - static void qdisc_pkt_len_init(struct sk_buff *skb) 4072 + static void qdisc_pkt_len_segs_init(struct sk_buff *skb) 4073 4073 { 4074 4074 struct skb_shared_info *shinfo = skb_shinfo(skb); 4075 + u16 gso_segs; 4075 4076 4076 4077 qdisc_skb_cb(skb)->pkt_len = skb->len; 4078 + if (!shinfo->gso_size) { 4079 + qdisc_skb_cb(skb)->pkt_segs = 1; 4080 + return; 4081 + } 4082 + 4083 + qdisc_skb_cb(skb)->pkt_segs = gso_segs = shinfo->gso_segs; 4077 4084 4078 4085 /* To get more precise estimation of bytes sent on wire, 4079 4086 * we add to pkt_len the headers size of all segments 4080 4087 */ 4081 - if (shinfo->gso_size && skb_transport_header_was_set(skb)) { 4082 - u16 gso_segs = shinfo->gso_segs; 4088 + if (skb_transport_header_was_set(skb)) { 4083 4089 unsigned int hdr_len; 4084 4090 4085 4091 /* mac layer + network layer */ ··· 4119 4113 return; 4120 4114 gso_segs = DIV_ROUND_UP(payload, shinfo->gso_size); 4121 4115 shinfo->gso_segs = gso_segs; 4116 + qdisc_skb_cb(skb)->pkt_segs = gso_segs; 4122 4117 } 4123 4118 qdisc_skb_cb(skb)->pkt_len += (gso_segs - 1) * hdr_len; 4124 4119 } ··· 4745 4738 4746 4739 skb_update_prio(skb); 4747 4740 4748 - qdisc_pkt_len_init(skb); 4741 + qdisc_pkt_len_segs_init(skb); 4749 4742 tcx_set_ingress(skb, false); 4750 4743 #ifdef CONFIG_NET_EGRESS 4751 4744 if (static_branch_unlikely(&egress_needed_key)) {
+1 -1
net/sched/sch_cake.c
··· 1406 1406 if (!shinfo->gso_size) 1407 1407 return cake_calc_overhead(q, len, off); 1408 1408 1409 - /* borrowed from qdisc_pkt_len_init() */ 1409 + /* borrowed from qdisc_pkt_len_segs_init() */ 1410 1410 if (!skb->encapsulation) 1411 1411 hdr_len = skb_transport_offset(skb); 1412 1412 else