return q->q.qlen;
}
+static inline int qdisc_qlen_lockless(const struct Qdisc *q)
+{
+ return READ_ONCE(q->q.qlen);
+}
+
static inline void qdisc_qlen_inc(struct Qdisc *q)
{
WRITE_ONCE(q->q.qlen, q->q.qlen + 1);
for_each_possible_cpu(i)
qlen += READ_ONCE(per_cpu_ptr(q->cpu_qstats, i)->qlen);
} else {
- qlen += READ_ONCE(q->q.qlen);
+ qlen += qdisc_qlen_lockless(q);
}
return qlen;
&qdisc->bstats, false);
gnet_stats_add_queue(&sch->qstats, qdisc->cpu_qstats,
&qdisc->qstats);
- qlen += qdisc_qlen(qdisc);
+ qlen += qdisc_qlen_lockless(qdisc);
spin_unlock_bh(qdisc_lock(qdisc));
}
&qdisc->bstats, false);
gnet_stats_add_queue(&sch->qstats, qdisc->cpu_qstats,
&qdisc->qstats);
- qlen += qdisc_qlen(qdisc);
+ qlen += qdisc_qlen_lockless(qdisc);
spin_unlock_bh(qdisc_lock(qdisc));
}
&qdisc->bstats, false);
gnet_stats_add_queue(&qstats, qdisc->cpu_qstats,
&qdisc->qstats);
- qlen += qdisc_qlen(qdisc);
+ qlen += qdisc_qlen_lockless(qdisc);
spin_unlock_bh(qdisc_lock(qdisc));
}