diff options
| author | Paolo Abeni <pabeni@redhat.com> | 2025-05-28 10:03:53 +0200 |
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2025-05-28 10:11:15 +0200 |
| commit | f6bd8faeb113c8ab783466bc5bc1a5442ae85176 (patch) | |
| tree | 21a67177c1e5f4877523e40428c1ce2a35aa1cc5 /net/sched | |
| parent | acea6b132d813a12ac414f6b1efb05921623afc0 (diff) | |
| parent | 57a92d14659df3e7e7e0052358c8cc68bbbc3b5e (diff) | |
| download | linux-f6bd8faeb113c8ab783466bc5bc1a5442ae85176.tar.gz linux-f6bd8faeb113c8ab783466bc5bc1a5442ae85176.tar.bz2 linux-f6bd8faeb113c8ab783466bc5bc1a5442ae85176.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge in late fixes to prepare for the 6.16 net-next PR.
No conflicts nor adjacent changes.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'net/sched')
| -rw-r--r-- | net/sched/sch_hfsc.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index 7986145a527c..5a7745170e84 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c @@ -175,6 +175,11 @@ struct hfsc_sched { #define HT_INFINITY 0xffffffffffffffffULL /* infinite time value */ +static bool cl_in_el_or_vttree(struct hfsc_class *cl) +{ + return ((cl->cl_flags & HFSC_FSC) && cl->cl_nactive) || + ((cl->cl_flags & HFSC_RSC) && !RB_EMPTY_NODE(&cl->el_node)); +} /* * eligible tree holds backlogged classes being sorted by their eligible times. @@ -1040,6 +1045,8 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, if (cl == NULL) return -ENOBUFS; + RB_CLEAR_NODE(&cl->el_node); + err = tcf_block_get(&cl->block, &cl->filter_list, sch, extack); if (err) { kfree(cl); @@ -1572,7 +1579,7 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free) sch->qstats.backlog += len; sch->q.qlen++; - if (first && !cl->cl_nactive) { + if (first && !cl_in_el_or_vttree(cl)) { if (cl->cl_flags & HFSC_RSC) init_ed(cl, len); if (cl->cl_flags & HFSC_FSC) |
