mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
sch_hfsc: make hfsc_qlen_notify() idempotent
hfsc_qlen_notify() is not idempotent either and not friendly to its callers, like fq_codel_dequeue(). Let's make it idempotent to ease qdisc_tree_reduce_backlog() callers' life: 1. update_vf() decreases cl->cl_nactive, so we can check whether it is non-zero before calling it. 2. eltree_remove() always removes RB node cl->el_node, but we can use RB_EMPTY_NODE() + RB_CLEAR_NODE() to make it safe. Reported-by: Gerrard Tai <gerrard.tai@starlabs.sg> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20250403211033.166059-4-xiyou.wangcong@gmail.com Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
df008598b3
commit
51eb3b6554
|
|
@ -203,7 +203,10 @@ eltree_insert(struct hfsc_class *cl)
|
||||||
static inline void
|
static inline void
|
||||||
eltree_remove(struct hfsc_class *cl)
|
eltree_remove(struct hfsc_class *cl)
|
||||||
{
|
{
|
||||||
rb_erase(&cl->el_node, &cl->sched->eligible);
|
if (!RB_EMPTY_NODE(&cl->el_node)) {
|
||||||
|
rb_erase(&cl->el_node, &cl->sched->eligible);
|
||||||
|
RB_CLEAR_NODE(&cl->el_node);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|
@ -1220,7 +1223,8 @@ hfsc_qlen_notify(struct Qdisc *sch, unsigned long arg)
|
||||||
/* vttree is now handled in update_vf() so that update_vf(cl, 0, 0)
|
/* vttree is now handled in update_vf() so that update_vf(cl, 0, 0)
|
||||||
* needs to be called explicitly to remove a class from vttree.
|
* needs to be called explicitly to remove a class from vttree.
|
||||||
*/
|
*/
|
||||||
update_vf(cl, 0, 0);
|
if (cl->cl_nactive)
|
||||||
|
update_vf(cl, 0, 0);
|
||||||
if (cl->cl_flags & HFSC_RSC)
|
if (cl->cl_flags & HFSC_RSC)
|
||||||
eltree_remove(cl);
|
eltree_remove(cl);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user