mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
net/sched: qdisc_qstats_qlen_backlog() runs locklessly
qdisc_qstats_qlen_backlog() can be called without qdisc spinlock being held.
Use qdisc_qlen_lockless() instead of qdisc_qlen().
Add a const qualifier to its first parameter (struct Qdisc *sch).
Fixes: edb09eb17e ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Toke Høiland-Jørgensen <toke@toke.dk>
Link: https://patch.msgid.link/20260513080853.1383975-2-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f65d40643e
commit
72a1795999
|
|
@ -1070,13 +1070,13 @@ static inline int qdisc_qstats_copy(struct gnet_dump *d, const struct Qdisc *sch
|
|||
return gnet_stats_copy_queue(d, sch->cpu_qstats, &sch->qstats, qlen);
|
||||
}
|
||||
|
||||
static inline void qdisc_qstats_qlen_backlog(struct Qdisc *sch, __u32 *qlen,
|
||||
__u32 *backlog)
|
||||
static inline void qdisc_qstats_qlen_backlog(const struct Qdisc *sch,
|
||||
u32 *qlen, u32 *backlog)
|
||||
{
|
||||
struct gnet_stats_queue qstats = { 0 };
|
||||
|
||||
gnet_stats_add_queue(&qstats, sch->cpu_qstats, &sch->qstats);
|
||||
*qlen = qstats.qlen + qdisc_qlen(sch);
|
||||
*qlen = qstats.qlen + qdisc_qlen_lockless(sch);
|
||||
*backlog = qstats.backlog;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user