Drop the 211.7.x security-ahead patches superseded by the RHEL 211.8.1..211.16.1 backports (1100-1104), add those backports (1106-1161) from centos-stream-10 and upstream linux-6.12.y. Keep the smb cifs.spnego ahead-fix (1105). Bump to 211.16.1.
90 lines
2.8 KiB
Diff
90 lines
2.8 KiB
Diff
From ff57186b2cc39766672c4c0332323933e5faaa88 Mon Sep 17 00:00:00 2001
|
|
From: William Liu <will@willsroot.io>
|
|
Date: Tue, 19 Aug 2025 03:36:28 +0000
|
|
Subject: [PATCH] net/sched: Make cake_enqueue return NET_XMIT_CN when past
|
|
buffer_limit
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
[ Upstream commit 15de71d06a400f7fdc15bf377a2552b0ec437cf5 ]
|
|
|
|
The following setup can trigger a WARNING in htb_activate due to
|
|
the condition: !cl->leaf.q->q.qlen
|
|
|
|
tc qdisc del dev lo root
|
|
tc qdisc add dev lo root handle 1: htb default 1
|
|
tc class add dev lo parent 1: classid 1:1 \
|
|
htb rate 64bit
|
|
tc qdisc add dev lo parent 1:1 handle f: \
|
|
cake memlimit 1b
|
|
ping -I lo -f -c1 -s64 -W0.001 127.0.0.1
|
|
|
|
This is because the low memlimit leads to a low buffer_limit, which
|
|
causes packet dropping. However, cake_enqueue still returns
|
|
NET_XMIT_SUCCESS, causing htb_enqueue to call htb_activate with an
|
|
empty child qdisc. We should return NET_XMIT_CN when packets are
|
|
dropped from the same tin and flow.
|
|
|
|
I do not believe return value of NET_XMIT_CN is necessary for packet
|
|
drops in the case of ack filtering, as that is meant to optimize
|
|
performance, not to signal congestion.
|
|
|
|
Fixes: 046f6fd5daef ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
|
|
Signed-off-by: William Liu <will@willsroot.io>
|
|
Reviewed-by: Savino Dicanosa <savy@syst3mfailure.io>
|
|
Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
|
|
Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com>
|
|
Link: https://patch.msgid.link/20250819033601.579821-1-will@willsroot.io
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
|
|
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
|
|
index 2c2e2a67f3b2..6cbe8a7a0e5c 100644
|
|
--- a/net/sched/sch_cake.c
|
|
+++ b/net/sched/sch_cake.c
|
|
@@ -1745,7 +1745,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|
ktime_t now = ktime_get();
|
|
struct cake_tin_data *b;
|
|
struct cake_flow *flow;
|
|
- u32 idx;
|
|
+ u32 idx, tin;
|
|
|
|
/* choose flow to insert into */
|
|
idx = cake_classify(sch, &b, skb, q->flow_mode, &ret);
|
|
@@ -1755,6 +1755,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|
__qdisc_drop(skb, to_free);
|
|
return ret;
|
|
}
|
|
+ tin = (u32)(b - q->tins);
|
|
idx--;
|
|
flow = &b->flows[idx];
|
|
|
|
@@ -1922,13 +1923,22 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|
q->buffer_max_used = q->buffer_used;
|
|
|
|
if (q->buffer_used > q->buffer_limit) {
|
|
+ bool same_flow = false;
|
|
u32 dropped = 0;
|
|
+ u32 drop_id;
|
|
|
|
while (q->buffer_used > q->buffer_limit) {
|
|
dropped++;
|
|
- cake_drop(sch, to_free);
|
|
+ drop_id = cake_drop(sch, to_free);
|
|
+
|
|
+ if ((drop_id >> 16) == tin &&
|
|
+ (drop_id & 0xFFFF) == idx)
|
|
+ same_flow = true;
|
|
}
|
|
b->drop_overlimit += dropped;
|
|
+
|
|
+ if (same_flow)
|
|
+ return NET_XMIT_CN;
|
|
}
|
|
return NET_XMIT_SUCCESS;
|
|
}
|
|
--
|
|
2.50.1 (Apple Git-155)
|
|
|