diff options
author | Paolo Abeni <pabeni@redhat.com> | 2019-04-10 08:32:41 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-10 15:20:46 -0400 |
commit | 73eb628ddfd3884d1e58a8022de2e78de7807fc6 (patch) | |
tree | f9963afb03df6761396729cfad94621e7d3d5ab0 /net/sched/sch_generic.c | |
parent | 8a53e616de294873fec1a75ddb77ecb3d225cee0 (diff) |
Revert: "net: sched: put back q.qlen into a single location"
This revert commit 46b1c18f9deb ("net: sched: put back q.qlen into
a single location").
After the previous patch, when a NOLOCK qdisc is enslaved to a
locking qdisc it switches to global stats accounting. As a consequence,
when a classful qdisc accesses directly a child qdisc's qlen, such
qdisc is not doing per CPU accounting and qlen value is consistent.
In the control path nobody uses directly qlen since commit
e5f0e8f8e45 ("net: sched: introduce and use qdisc tree flush/purge
helpers"), so we can remove the contented atomic ops from the
datapath.
v1 -> v2:
- complete the qdisc_qstats_atomic_qlen_dec() ->
qdisc_qstats_cpu_qlen_dec() replacement, fix build issue
- more descriptive commit message
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_generic.c')
-rw-r--r-- | net/sched/sch_generic.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 12a6e1a39fa0..848aab3693bd 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -68,7 +68,7 @@ static inline struct sk_buff *__skb_dequeue_bad_txq(struct Qdisc *q) | |||
68 | skb = __skb_dequeue(&q->skb_bad_txq); | 68 | skb = __skb_dequeue(&q->skb_bad_txq); |
69 | if (qdisc_is_percpu_stats(q)) { | 69 | if (qdisc_is_percpu_stats(q)) { |
70 | qdisc_qstats_cpu_backlog_dec(q, skb); | 70 | qdisc_qstats_cpu_backlog_dec(q, skb); |
71 | qdisc_qstats_atomic_qlen_dec(q); | 71 | qdisc_qstats_cpu_qlen_dec(q); |
72 | } else { | 72 | } else { |
73 | qdisc_qstats_backlog_dec(q, skb); | 73 | qdisc_qstats_backlog_dec(q, skb); |
74 | q->q.qlen--; | 74 | q->q.qlen--; |
@@ -108,7 +108,7 @@ static inline void qdisc_enqueue_skb_bad_txq(struct Qdisc *q, | |||
108 | 108 | ||
109 | if (qdisc_is_percpu_stats(q)) { | 109 | if (qdisc_is_percpu_stats(q)) { |
110 | qdisc_qstats_cpu_backlog_inc(q, skb); | 110 | qdisc_qstats_cpu_backlog_inc(q, skb); |
111 | qdisc_qstats_atomic_qlen_inc(q); | 111 | qdisc_qstats_cpu_qlen_inc(q); |
112 | } else { | 112 | } else { |
113 | qdisc_qstats_backlog_inc(q, skb); | 113 | qdisc_qstats_backlog_inc(q, skb); |
114 | q->q.qlen++; | 114 | q->q.qlen++; |
@@ -136,7 +136,7 @@ static inline void dev_requeue_skb(struct sk_buff *skb, struct Qdisc *q) | |||
136 | if (qdisc_is_percpu_stats(q)) { | 136 | if (qdisc_is_percpu_stats(q)) { |
137 | qdisc_qstats_cpu_requeues_inc(q); | 137 | qdisc_qstats_cpu_requeues_inc(q); |
138 | qdisc_qstats_cpu_backlog_inc(q, skb); | 138 | qdisc_qstats_cpu_backlog_inc(q, skb); |
139 | qdisc_qstats_atomic_qlen_inc(q); | 139 | qdisc_qstats_cpu_qlen_inc(q); |
140 | } else { | 140 | } else { |
141 | q->qstats.requeues++; | 141 | q->qstats.requeues++; |
142 | qdisc_qstats_backlog_inc(q, skb); | 142 | qdisc_qstats_backlog_inc(q, skb); |
@@ -236,7 +236,7 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate, | |||
236 | skb = __skb_dequeue(&q->gso_skb); | 236 | skb = __skb_dequeue(&q->gso_skb); |
237 | if (qdisc_is_percpu_stats(q)) { | 237 | if (qdisc_is_percpu_stats(q)) { |
238 | qdisc_qstats_cpu_backlog_dec(q, skb); | 238 | qdisc_qstats_cpu_backlog_dec(q, skb); |
239 | qdisc_qstats_atomic_qlen_dec(q); | 239 | qdisc_qstats_cpu_qlen_dec(q); |
240 | } else { | 240 | } else { |
241 | qdisc_qstats_backlog_dec(q, skb); | 241 | qdisc_qstats_backlog_dec(q, skb); |
242 | q->q.qlen--; | 242 | q->q.qlen--; |
@@ -694,6 +694,7 @@ static void pfifo_fast_reset(struct Qdisc *qdisc) | |||
694 | struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i); | 694 | struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i); |
695 | 695 | ||
696 | q->backlog = 0; | 696 | q->backlog = 0; |
697 | q->qlen = 0; | ||
697 | } | 698 | } |
698 | } | 699 | } |
699 | 700 | ||