Skip to content

Commit 6683306

Browse files
committed
sch_ets: make est_qlen_notify() idempotent
jira LE-4018 Rebuild_History Non-Buildable kernel-5.14.0-570.37.1.el9_6 commit-author Cong Wang <xiyou.wangcong@gmail.com> commit a7a15f3 est_qlen_notify() deletes its class from its active list with list_del() when qlen is 0, therefore, it is not idempotent and not friendly to its callers, like fq_codel_dequeue(). Let's make it idempotent to ease qdisc_tree_reduce_backlog() callers' life. Also change other list_del()'s to list_del_init() just to be extra safe. Reported-by: Gerrard Tai <gerrard.tai@starlabs.sg> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Link: https://patch.msgid.link/20250403211033.166059-6-xiyou.wangcong@gmail.com Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> (cherry picked from commit a7a15f3) Signed-off-by: Jonathan Maple <jmaple@ciq.com>
1 parent 6d2f7c0 commit 6683306

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

net/sched/sch_ets.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ static void ets_class_qlen_notify(struct Qdisc *sch, unsigned long arg)
291291
* to remove them.
292292
*/
293293
if (!ets_class_is_strict(q, cl) && sch->q.qlen)
294-
list_del(&cl->alist);
294+
list_del_init(&cl->alist);
295295
}
296296

297297
static int ets_class_dump(struct Qdisc *sch, unsigned long arg,
@@ -486,7 +486,7 @@ static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch)
486486
if (unlikely(!skb))
487487
goto out;
488488
if (cl->qdisc->q.qlen == 0)
489-
list_del(&cl->alist);
489+
list_del_init(&cl->alist);
490490
return ets_qdisc_dequeue_skb(sch, skb);
491491
}
492492

@@ -655,7 +655,7 @@ static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt,
655655
}
656656
for (i = q->nbands; i < oldbands; i++) {
657657
if (i >= q->nstrict && q->classes[i].qdisc->q.qlen)
658-
list_del(&q->classes[i].alist);
658+
list_del_init(&q->classes[i].alist);
659659
qdisc_tree_flush_backlog(q->classes[i].qdisc);
660660
}
661661
WRITE_ONCE(q->nstrict, nstrict);
@@ -711,7 +711,7 @@ static void ets_qdisc_reset(struct Qdisc *sch)
711711

712712
for (band = q->nstrict; band < q->nbands; band++) {
713713
if (q->classes[band].qdisc->q.qlen)
714-
list_del(&q->classes[band].alist);
714+
list_del_init(&q->classes[band].alist);
715715
}
716716
for (band = 0; band < q->nbands; band++)
717717
qdisc_reset(q->classes[band].qdisc);

0 commit comments

Comments
 (0)