From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mail.toke.dk; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=A9ZT6qw0; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=gmail.com policy.dmarc=quarantine Received: from mail-pj2-x10.google.com (mail-pj2-x10.google.com [IPv6:2607:f8b0:4864:39::10]) by mail.toke.dk (Postfix) with ESMTPS id F2019170A39F for ; Sun, 27 Sep 2026 15:10:38 +0200 (CEST) Received: by mail-pj2-x10.google.com with SMTP id 98e67ed59e1d1-398b3b189e0so1174301a91.2 for ; Sun, 27 Sep 2026 06:10:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790514637; x=1791119437; darn=lists.bufferbloat.net; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SkbFBTkqFbcQemO3yfmHiiKUHaQQdpKBirEnurxA9EY=; b=A9ZT6qw09HNDWG0bm6RFzPj8xNAjL7SakMGw0cpJz1g3MzdfWtfCcDRaiMgKJfAW5Q BPDAX+ywKBV1Fun8OXez/MWaOl7WnK64lssoJtgl4fRfURqCGEULO2qHEyIQbt1F3u74 9ODOXOV8OqxGnsjfSZaKheZhezXEl51CMjtlQ47S6x24Wu9FSWoCQd8v7o5UvVJdeUzl y2UYbkRVM5PpDFHvI8H2/AesTaJMSGQTmVLPOH7Xl7e3mLLtfN6HFMPooVxnsJb1dwjx yIgqmISNI3UHWt9CB0TbpjuX99mGM6kgUTpzC6Z++KFEKYKgM1d3m4T/GYY0Szbd6gHc ZG+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790514637; x=1791119437; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=SkbFBTkqFbcQemO3yfmHiiKUHaQQdpKBirEnurxA9EY=; b=widQlgpR8i3ElSMvsvF9N3F9np09Xjid45EP93U16KpD4H7OkenKmDuqfwizw/rqTU MKm0bhE4qjmXLj3ZfRAgBBcrJ7RTPVG7jerK7ENYWqbreqWR6A6MEw4FC+Z3e2xFL6R8 HaEv40ea0PU9SJcIdnEwQ9xdPY8nUb2yQ4Js/8abrnqVADgcS7om5ITexJigwlGjSPd3 EWuPCMJkr/czm/oE7p+eOp7XbA6fRKIqr6E6/2s/jxSAYDnBaJfN+naQSrYsqsFYv/V0 62JuGArzP9Ec+J/SqVcfaWyG8W8brVXiqR5A6pK5WL5MsJD85+QhMyZVjJI2VMBIQWKE 7nYg== X-Forwarded-Encrypted: i=1; AKwUvBx/1q81h3Y1wiaja+2SlxVO2o7NAFPOfLwyPE5j7q5zZZ8PYGKzqmtw6ap68nmDMHOBpdk8@lists.bufferbloat.net X-Gm-Message-State: AFq9FYK49GnlddeDIosG1RbAvoQ5ywhu27gO+IVpep+Numd/A/T+pthS VYU4SViFGe9Ww4tPPwW9Cg+uP8HY0ww6mxk/U/o+8riLk0MKRd+MU4qO X-Gm-Gg: AYBFou32CAwKSlgSqBOkCEEp2VNpm/w4m+SSJ5Qh8zttBk3moi2IfmNa8CDCafWskOm DDfRbjAE6saU0meQbMyVkaagtCfzhyjMfyxY3eU+QnjP6jOehGV0jDcHoI+fUJT/HaDfIsTWTje kBd27d9lx0JFPnFJtVMAXmHdcOuzbBwGd2Wgr5uF6P4mTpgmDIY1vwWe1ABBLeb+xlkjVNNJzDH y3Tk1lcjlCN29P+r4SdY2/nz9pyQm2e9G3mj6nilbrbahye9O2uG+/KhaCWRADlHE33IbqI7e99 xcakNEhaneGrFVSSY5l7pix6d6hHHdciWwUiENE/K9Rc+uLyetL/Ho+KE83jENq/fC4VMNSIzxK ifjR/JNYm5ZSupuhadJT8/V/gryPNTvEEHxOgpnmCPaLeHfCR3R5OV6Hqf6Lkd1OSB7kF60eayO KF/39iXGRGh/Yk4CKws5Wyoou9N+RdoisxNXuOd4wT2RWrotEYG97/EnG20cDrzeeHZ2C2Pktx2 91z/W1vM6Qpxil8mA89rwCx7ZbvM2APIg== X-Received: by 2002:a17:90b:5107:b0:3a0:d823:c750 with SMTP id 98e67ed59e1d1-3a0d823cb37mr3627184a91.49.1790514637256; Sun, 27 Sep 2026 06:10:37 -0700 (PDT) Received: from localhost.localdomain ([2409:8a1e:2e81:7320:84a7:e3d7:8c7e:980a]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3a0b9589f7esm14890506a91.10.2026.09.27.06.10.29 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 27 Sep 2026 06:10:36 -0700 (PDT) From: Yuchao Zhang To: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Simon Horman , Jamal Hadi Salim , Jiri Pirko , cake@lists.bufferbloat.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Yuchao Zhang Date: Sun, 27 Sep 2026 21:10:08 +0800 Message-ID: <20260927131009.24250-2-ndaugoing@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260927131009.24250-1-ndaugoing@gmail.com> References: <20260927131009.24250-1-ndaugoing@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-MailFrom: ndaugoing@gmail.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation Message-ID-Hash: JNGV5DSNQWIEYKOTOKFAS6PDBQ5LWJXC X-Message-ID-Hash: JNGV5DSNQWIEYKOTOKFAS6PDBQ5LWJXC X-Mailman-Approved-At: Mon, 28 Sep 2026 13:06:44 +0200 X-Mailman-Version: 3.3.10 Precedence: list Subject: [Cake] [PATCH net v3 1/2] net/sched: sch_cake: fix shaper stall on segs == 0 in cake_overhead() List-Id: Cake - FQ_codel the next generation Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: In cake_overhead(), packets with a single segment bypass multi-segment overhead calculations: if (segs == 1) return cake_calc_overhead(q, len, off); Commit c5d34f4583ea ("net_sched: cake: use qdisc_pkt_segs()") switched cake to retrieve the cached segmentation count via qdisc_pkt_segs(skb) instead of calculating it locally for dodgy GSO packets. If an skb with segs == 0 reaches cake_overhead(), it skips the segs == 1 early return and enters the multi-segment arithmetic: len = shinfo->gso_size + hdr_len; last_len = skb->len - shinfo->gso_size * (segs - 1); return (cake_calc_overhead(q, len, off) * (segs - 1) + cake_calc_overhead(q, last_len, off)); Because segs is an unsigned 16-bit integer, (segs - 1) underflows to 65535 (and is promoted to 4294967295 in the 32-bit unsigned arithmetic above). This multiplies the per-segment overhead by UINT32_MAX, so cake_overhead() returns a length close to 4.29 GB. cake_advance_shaper() then charges that length to the shaper, stalling the CAKE dequeue path for tens of seconds at 1 Gbit/s, and for minutes to hours at lower rates. Fix this by returning early with cake_calc_overhead(q, len, off) whenever segs <= 1. Fixes: c5d34f4583ea ("net_sched: cake: use qdisc_pkt_segs()") Cc: stable@vger.kernel.org Signed-off-by: Yuchao Zhang --- v3: - Split from v2 into a standalone patch with its own Fixes: tag (c5d34f4583ea) per Simon Horman and Sashiko review. - Link to v2: https://lore.kernel.org/netdev/20260922084124.36858-1-ndaugoing@gmail.com/ - Link to v1: https://lore.kernel.org/netdev/20260917122153.62722-1-ndaugoing@gmail.com/ net/sched/sch_cake.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c index dc93267029e7..b0d604a7052a 100644 --- a/net/sched/sch_cake.c +++ b/net/sched/sch_cake.c @@ -1420,7 +1420,7 @@ static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb) WRITE_ONCE(q->avg_netoff, cake_ewma(q->avg_netoff, off << 16, 8)); - if (segs == 1) + if (segs <= 1) return cake_calc_overhead(q, len, off); /* borrowed from qdisc_pkt_len_segs_init() */ -- 2.53.0