From: Eric Dumazet Date: Fri, 22 May 2026 11:03:56 +0000 (+0000) Subject: net/sched: sch_ets: make cl->quantum lockless X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0f700d144b5a35fdf3e67439327f92c9ca7f8e34;p=thirdparty%2Flinux.git net/sched: sch_ets: make cl->quantum lockless cl->quantum does not need to be protected by RTNL or qdisc spinlock. Signed-off-by: Eric Dumazet Reviewed-by: Victor Nogueira Link: https://patch.msgid.link/20260522110356.1403343-1-edumazet@google.com Signed-off-by: Jakub Kicinski --- diff --git a/net/sched/sch_ets.c b/net/sched/sch_ets.c index 1cc559634ed2..cb8cf437ce87 100644 --- a/net/sched/sch_ets.c +++ b/net/sched/sch_ets.c @@ -247,9 +247,7 @@ static int ets_class_change(struct Qdisc *sch, u32 classid, u32 parentid, if (err) return err; - sch_tree_lock(sch); - cl->quantum = quantum; - sch_tree_unlock(sch); + WRITE_ONCE(cl->quantum, quantum); ets_offload_change(sch); return 0; @@ -320,7 +318,7 @@ static int ets_class_dump(struct Qdisc *sch, unsigned long arg, if (!nest) goto nla_put_failure; if (!ets_class_is_strict(q, cl)) { - if (nla_put_u32(skb, TCA_ETS_QUANTA_BAND, cl->quantum)) + if (nla_put_u32(skb, TCA_ETS_QUANTA_BAND, READ_ONCE(cl->quantum))) goto nla_put_failure; } return nla_nest_end(skb, nest); @@ -445,7 +443,7 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch, if (!cl_is_active(cl) && !ets_class_is_strict(q, cl)) { list_add_tail(&cl->alist, &q->active); - cl->deficit = cl->quantum; + cl->deficit = READ_ONCE(cl->quantum); } qstats_backlog_add(sch, len); @@ -499,7 +497,7 @@ static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch) return ets_qdisc_dequeue_skb(sch, skb); } - cl->deficit += cl->quantum; + cl->deficit += READ_ONCE(cl->quantum); list_move_tail(&cl->alist, &q->active); } out: