diff options
-rw-r--r-- | include/net/gen_stats.h | 3 | ||||
-rw-r--r-- | net/core/gen_stats.c | 6 | ||||
-rw-r--r-- | net/sched/act_api.c | 4 | ||||
-rw-r--r-- | net/sched/sch_api.c | 5 | ||||
-rw-r--r-- | net/sched/sch_atm.c | 4 | ||||
-rw-r--r-- | net/sched/sch_cbq.c | 3 | ||||
-rw-r--r-- | net/sched/sch_drr.c | 7 | ||||
-rw-r--r-- | net/sched/sch_fq_codel.c | 2 | ||||
-rw-r--r-- | net/sched/sch_hfsc.c | 3 | ||||
-rw-r--r-- | net/sched/sch_htb.c | 5 | ||||
-rw-r--r-- | net/sched/sch_mq.c | 4 | ||||
-rw-r--r-- | net/sched/sch_mqprio.c | 9 | ||||
-rw-r--r-- | net/sched/sch_multiq.c | 3 | ||||
-rw-r--r-- | net/sched/sch_prio.c | 3 | ||||
-rw-r--r-- | net/sched/sch_qfq.c | 3 | ||||
-rw-r--r-- | net/sched/sch_sfq.c | 2 |
16 files changed, 32 insertions, 34 deletions
diff --git a/include/net/gen_stats.h b/include/net/gen_stats.h index ce3c1281f2a0..de9b3dd5750e 100644 --- a/include/net/gen_stats.h +++ b/include/net/gen_stats.h | |||
@@ -40,7 +40,8 @@ void __gnet_stats_copy_basic(struct gnet_stats_basic_packed *bstats, | |||
40 | int gnet_stats_copy_rate_est(struct gnet_dump *d, | 40 | int gnet_stats_copy_rate_est(struct gnet_dump *d, |
41 | const struct gnet_stats_basic_packed *b, | 41 | const struct gnet_stats_basic_packed *b, |
42 | struct gnet_stats_rate_est64 *r); | 42 | struct gnet_stats_rate_est64 *r); |
43 | int gnet_stats_copy_queue(struct gnet_dump *d, struct gnet_stats_queue *q); | 43 | int gnet_stats_copy_queue(struct gnet_dump *d, |
44 | struct gnet_stats_queue *q, __u32 len); | ||
44 | int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len); | 45 | int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len); |
45 | 46 | ||
46 | int gnet_stats_finish_copy(struct gnet_dump *d); | 47 | int gnet_stats_finish_copy(struct gnet_dump *d); |
diff --git a/net/core/gen_stats.c b/net/core/gen_stats.c index 5ff8e80fe0bb..ad3ecb6ba835 100644 --- a/net/core/gen_stats.c +++ b/net/core/gen_stats.c | |||
@@ -219,6 +219,7 @@ EXPORT_SYMBOL(gnet_stats_copy_rate_est); | |||
219 | * gnet_stats_copy_queue - copy queue statistics into statistics TLV | 219 | * gnet_stats_copy_queue - copy queue statistics into statistics TLV |
220 | * @d: dumping handle | 220 | * @d: dumping handle |
221 | * @q: queue statistics | 221 | * @q: queue statistics |
222 | * @qlen: queue length statistics | ||
222 | * | 223 | * |
223 | * Appends the queue statistics to the top level TLV created by | 224 | * Appends the queue statistics to the top level TLV created by |
224 | * gnet_stats_start_copy(). | 225 | * gnet_stats_start_copy(). |
@@ -227,8 +228,11 @@ EXPORT_SYMBOL(gnet_stats_copy_rate_est); | |||
227 | * if the room in the socket buffer was not sufficient. | 228 | * if the room in the socket buffer was not sufficient. |
228 | */ | 229 | */ |
229 | int | 230 | int |
230 | gnet_stats_copy_queue(struct gnet_dump *d, struct gnet_stats_queue *q) | 231 | gnet_stats_copy_queue(struct gnet_dump *d, |
232 | struct gnet_stats_queue *q, __u32 qlen) | ||
231 | { | 233 | { |
234 | q->qlen = qlen; | ||
235 | |||
232 | if (d->compat_tc_stats) { | 236 | if (d->compat_tc_stats) { |
233 | d->tc_stats.drops = q->drops; | 237 | d->tc_stats.drops = q->drops; |
234 | d->tc_stats.qlen = q->qlen; | 238 | d->tc_stats.qlen = q->qlen; |
diff --git a/net/sched/act_api.c b/net/sched/act_api.c index eca4cf9ece2f..2e134093b8ec 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c | |||
@@ -623,7 +623,9 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a, | |||
623 | if (gnet_stats_copy_basic(&d, NULL, &p->tcfc_bstats) < 0 || | 623 | if (gnet_stats_copy_basic(&d, NULL, &p->tcfc_bstats) < 0 || |
624 | gnet_stats_copy_rate_est(&d, &p->tcfc_bstats, | 624 | gnet_stats_copy_rate_est(&d, &p->tcfc_bstats, |
625 | &p->tcfc_rate_est) < 0 || | 625 | &p->tcfc_rate_est) < 0 || |
626 | gnet_stats_copy_queue(&d, &p->tcfc_qstats) < 0) | 626 | gnet_stats_copy_queue(&d, |
627 | &p->tcfc_qstats, | ||
628 | p->tcfc_qstats.qlen) < 0) | ||
627 | goto errout; | 629 | goto errout; |
628 | 630 | ||
629 | if (gnet_stats_finish_copy(&d) < 0) | 631 | if (gnet_stats_finish_copy(&d) < 0) |
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 2862bc61a358..ca00ea8e84dc 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -1318,6 +1318,7 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, | |||
1318 | unsigned char *b = skb_tail_pointer(skb); | 1318 | unsigned char *b = skb_tail_pointer(skb); |
1319 | struct gnet_dump d; | 1319 | struct gnet_dump d; |
1320 | struct qdisc_size_table *stab; | 1320 | struct qdisc_size_table *stab; |
1321 | __u32 qlen; | ||
1321 | 1322 | ||
1322 | cond_resched(); | 1323 | cond_resched(); |
1323 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*tcm), flags); | 1324 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*tcm), flags); |
@@ -1335,7 +1336,7 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, | |||
1335 | goto nla_put_failure; | 1336 | goto nla_put_failure; |
1336 | if (q->ops->dump && q->ops->dump(q, skb) < 0) | 1337 | if (q->ops->dump && q->ops->dump(q, skb) < 0) |
1337 | goto nla_put_failure; | 1338 | goto nla_put_failure; |
1338 | q->qstats.qlen = q->q.qlen; | 1339 | qlen = q->q.qlen; |
1339 | 1340 | ||
1340 | stab = rtnl_dereference(q->stab); | 1341 | stab = rtnl_dereference(q->stab); |
1341 | if (stab && qdisc_dump_stab(skb, stab) < 0) | 1342 | if (stab && qdisc_dump_stab(skb, stab) < 0) |
@@ -1353,7 +1354,7 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, | |||
1353 | 1354 | ||
1354 | if (gnet_stats_copy_basic(&d, cpu_bstats, &q->bstats) < 0 || | 1355 | if (gnet_stats_copy_basic(&d, cpu_bstats, &q->bstats) < 0 || |
1355 | gnet_stats_copy_rate_est(&d, &q->bstats, &q->rate_est) < 0 || | 1356 | gnet_stats_copy_rate_est(&d, &q->bstats, &q->rate_est) < 0 || |
1356 | gnet_stats_copy_queue(&d, &q->qstats) < 0) | 1357 | gnet_stats_copy_queue(&d, &q->qstats, qlen) < 0) |
1357 | goto nla_put_failure; | 1358 | goto nla_put_failure; |
1358 | 1359 | ||
1359 | if (gnet_stats_finish_copy(&d) < 0) | 1360 | if (gnet_stats_finish_copy(&d) < 0) |
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 040212cab988..c145eb6279cc 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
@@ -637,10 +637,8 @@ atm_tc_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
637 | { | 637 | { |
638 | struct atm_flow_data *flow = (struct atm_flow_data *)arg; | 638 | struct atm_flow_data *flow = (struct atm_flow_data *)arg; |
639 | 639 | ||
640 | flow->qstats.qlen = flow->q->q.qlen; | ||
641 | |||
642 | if (gnet_stats_copy_basic(d, NULL, &flow->bstats) < 0 || | 640 | if (gnet_stats_copy_basic(d, NULL, &flow->bstats) < 0 || |
643 | gnet_stats_copy_queue(d, &flow->qstats) < 0) | 641 | gnet_stats_copy_queue(d, &flow->qstats, flow->q->q.qlen) < 0) |
644 | return -1; | 642 | return -1; |
645 | 643 | ||
646 | return 0; | 644 | return 0; |
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index 60432c3d3cd4..c610081ffba5 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c | |||
@@ -1594,7 +1594,6 @@ cbq_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
1594 | struct cbq_sched_data *q = qdisc_priv(sch); | 1594 | struct cbq_sched_data *q = qdisc_priv(sch); |
1595 | struct cbq_class *cl = (struct cbq_class *)arg; | 1595 | struct cbq_class *cl = (struct cbq_class *)arg; |
1596 | 1596 | ||
1597 | cl->qstats.qlen = cl->q->q.qlen; | ||
1598 | cl->xstats.avgidle = cl->avgidle; | 1597 | cl->xstats.avgidle = cl->avgidle; |
1599 | cl->xstats.undertime = 0; | 1598 | cl->xstats.undertime = 0; |
1600 | 1599 | ||
@@ -1603,7 +1602,7 @@ cbq_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
1603 | 1602 | ||
1604 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || | 1603 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || |
1605 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || | 1604 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || |
1606 | gnet_stats_copy_queue(d, &cl->qstats) < 0) | 1605 | gnet_stats_copy_queue(d, &cl->qstats, cl->q->q.qlen) < 0) |
1607 | return -1; | 1606 | return -1; |
1608 | 1607 | ||
1609 | return gnet_stats_copy_app(d, &cl->xstats, sizeof(cl->xstats)); | 1608 | return gnet_stats_copy_app(d, &cl->xstats, sizeof(cl->xstats)); |
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c index 907b12fd6825..5835a93905b1 100644 --- a/net/sched/sch_drr.c +++ b/net/sched/sch_drr.c | |||
@@ -275,17 +275,16 @@ static int drr_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
275 | struct gnet_dump *d) | 275 | struct gnet_dump *d) |
276 | { | 276 | { |
277 | struct drr_class *cl = (struct drr_class *)arg; | 277 | struct drr_class *cl = (struct drr_class *)arg; |
278 | __u32 qlen = cl->qdisc->q.qlen; | ||
278 | struct tc_drr_stats xstats; | 279 | struct tc_drr_stats xstats; |
279 | 280 | ||
280 | memset(&xstats, 0, sizeof(xstats)); | 281 | memset(&xstats, 0, sizeof(xstats)); |
281 | if (cl->qdisc->q.qlen) { | 282 | if (qlen) |
282 | xstats.deficit = cl->deficit; | 283 | xstats.deficit = cl->deficit; |
283 | cl->qdisc->qstats.qlen = cl->qdisc->q.qlen; | ||
284 | } | ||
285 | 284 | ||
286 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || | 285 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || |
287 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || | 286 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || |
288 | gnet_stats_copy_queue(d, &cl->qdisc->qstats) < 0) | 287 | gnet_stats_copy_queue(d, &cl->qdisc->qstats, qlen) < 0) |
289 | return -1; | 288 | return -1; |
290 | 289 | ||
291 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); | 290 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); |
diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c index 9270e1b2f25d..226d73597539 100644 --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c | |||
@@ -550,7 +550,7 @@ static int fq_codel_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
550 | qs.backlog = q->backlogs[idx]; | 550 | qs.backlog = q->backlogs[idx]; |
551 | qs.drops = flow->dropped; | 551 | qs.drops = flow->dropped; |
552 | } | 552 | } |
553 | if (gnet_stats_copy_queue(d, &qs) < 0) | 553 | if (gnet_stats_copy_queue(d, &qs, 0) < 0) |
554 | return -1; | 554 | return -1; |
555 | if (idx < q->flows_cnt) | 555 | if (idx < q->flows_cnt) |
556 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); | 556 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); |
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index ad278251d811..d364acb2ad07 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c | |||
@@ -1370,7 +1370,6 @@ hfsc_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
1370 | struct hfsc_class *cl = (struct hfsc_class *)arg; | 1370 | struct hfsc_class *cl = (struct hfsc_class *)arg; |
1371 | struct tc_hfsc_stats xstats; | 1371 | struct tc_hfsc_stats xstats; |
1372 | 1372 | ||
1373 | cl->qstats.qlen = cl->qdisc->q.qlen; | ||
1374 | cl->qstats.backlog = cl->qdisc->qstats.backlog; | 1373 | cl->qstats.backlog = cl->qdisc->qstats.backlog; |
1375 | xstats.level = cl->level; | 1374 | xstats.level = cl->level; |
1376 | xstats.period = cl->cl_vtperiod; | 1375 | xstats.period = cl->cl_vtperiod; |
@@ -1379,7 +1378,7 @@ hfsc_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
1379 | 1378 | ||
1380 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || | 1379 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || |
1381 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || | 1380 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || |
1382 | gnet_stats_copy_queue(d, &cl->qstats) < 0) | 1381 | gnet_stats_copy_queue(d, &cl->qstats, cl->qdisc->q.qlen) < 0) |
1383 | return -1; | 1382 | return -1; |
1384 | 1383 | ||
1385 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); | 1384 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index c40ab7a98c50..3a691fd88f99 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
@@ -1138,15 +1138,16 @@ static int | |||
1138 | htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d) | 1138 | htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d) |
1139 | { | 1139 | { |
1140 | struct htb_class *cl = (struct htb_class *)arg; | 1140 | struct htb_class *cl = (struct htb_class *)arg; |
1141 | __u32 qlen = 0; | ||
1141 | 1142 | ||
1142 | if (!cl->level && cl->un.leaf.q) | 1143 | if (!cl->level && cl->un.leaf.q) |
1143 | cl->qstats.qlen = cl->un.leaf.q->q.qlen; | 1144 | qlen = cl->un.leaf.q->q.qlen; |
1144 | cl->xstats.tokens = PSCHED_NS2TICKS(cl->tokens); | 1145 | cl->xstats.tokens = PSCHED_NS2TICKS(cl->tokens); |
1145 | cl->xstats.ctokens = PSCHED_NS2TICKS(cl->ctokens); | 1146 | cl->xstats.ctokens = PSCHED_NS2TICKS(cl->ctokens); |
1146 | 1147 | ||
1147 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || | 1148 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || |
1148 | gnet_stats_copy_rate_est(d, NULL, &cl->rate_est) < 0 || | 1149 | gnet_stats_copy_rate_est(d, NULL, &cl->rate_est) < 0 || |
1149 | gnet_stats_copy_queue(d, &cl->qstats) < 0) | 1150 | gnet_stats_copy_queue(d, &cl->qstats, qlen) < 0) |
1150 | return -1; | 1151 | return -1; |
1151 | 1152 | ||
1152 | return gnet_stats_copy_app(d, &cl->xstats, sizeof(cl->xstats)); | 1153 | return gnet_stats_copy_app(d, &cl->xstats, sizeof(cl->xstats)); |
diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c index d3a27fb607af..6416a6942062 100644 --- a/net/sched/sch_mq.c +++ b/net/sched/sch_mq.c | |||
@@ -112,7 +112,6 @@ static int mq_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
112 | sch->q.qlen += qdisc->q.qlen; | 112 | sch->q.qlen += qdisc->q.qlen; |
113 | sch->bstats.bytes += qdisc->bstats.bytes; | 113 | sch->bstats.bytes += qdisc->bstats.bytes; |
114 | sch->bstats.packets += qdisc->bstats.packets; | 114 | sch->bstats.packets += qdisc->bstats.packets; |
115 | sch->qstats.qlen += qdisc->qstats.qlen; | ||
116 | sch->qstats.backlog += qdisc->qstats.backlog; | 115 | sch->qstats.backlog += qdisc->qstats.backlog; |
117 | sch->qstats.drops += qdisc->qstats.drops; | 116 | sch->qstats.drops += qdisc->qstats.drops; |
118 | sch->qstats.requeues += qdisc->qstats.requeues; | 117 | sch->qstats.requeues += qdisc->qstats.requeues; |
@@ -200,9 +199,8 @@ static int mq_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
200 | struct netdev_queue *dev_queue = mq_queue_get(sch, cl); | 199 | struct netdev_queue *dev_queue = mq_queue_get(sch, cl); |
201 | 200 | ||
202 | sch = dev_queue->qdisc_sleeping; | 201 | sch = dev_queue->qdisc_sleeping; |
203 | sch->qstats.qlen = sch->q.qlen; | ||
204 | if (gnet_stats_copy_basic(d, NULL, &sch->bstats) < 0 || | 202 | if (gnet_stats_copy_basic(d, NULL, &sch->bstats) < 0 || |
205 | gnet_stats_copy_queue(d, &sch->qstats) < 0) | 203 | gnet_stats_copy_queue(d, &sch->qstats, sch->q.qlen) < 0) |
206 | return -1; | 204 | return -1; |
207 | return 0; | 205 | return 0; |
208 | } | 206 | } |
diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c index 8917372fddc6..03dbeb5e8181 100644 --- a/net/sched/sch_mqprio.c +++ b/net/sched/sch_mqprio.c | |||
@@ -236,7 +236,6 @@ static int mqprio_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
236 | sch->q.qlen += qdisc->q.qlen; | 236 | sch->q.qlen += qdisc->q.qlen; |
237 | sch->bstats.bytes += qdisc->bstats.bytes; | 237 | sch->bstats.bytes += qdisc->bstats.bytes; |
238 | sch->bstats.packets += qdisc->bstats.packets; | 238 | sch->bstats.packets += qdisc->bstats.packets; |
239 | sch->qstats.qlen += qdisc->qstats.qlen; | ||
240 | sch->qstats.backlog += qdisc->qstats.backlog; | 239 | sch->qstats.backlog += qdisc->qstats.backlog; |
241 | sch->qstats.drops += qdisc->qstats.drops; | 240 | sch->qstats.drops += qdisc->qstats.drops; |
242 | sch->qstats.requeues += qdisc->qstats.requeues; | 241 | sch->qstats.requeues += qdisc->qstats.requeues; |
@@ -327,6 +326,7 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
327 | 326 | ||
328 | if (cl <= netdev_get_num_tc(dev)) { | 327 | if (cl <= netdev_get_num_tc(dev)) { |
329 | int i; | 328 | int i; |
329 | __u32 qlen = 0; | ||
330 | struct Qdisc *qdisc; | 330 | struct Qdisc *qdisc; |
331 | struct gnet_stats_queue qstats = {0}; | 331 | struct gnet_stats_queue qstats = {0}; |
332 | struct gnet_stats_basic_packed bstats = {0}; | 332 | struct gnet_stats_basic_packed bstats = {0}; |
@@ -344,9 +344,9 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
344 | 344 | ||
345 | qdisc = rtnl_dereference(q->qdisc); | 345 | qdisc = rtnl_dereference(q->qdisc); |
346 | spin_lock_bh(qdisc_lock(qdisc)); | 346 | spin_lock_bh(qdisc_lock(qdisc)); |
347 | qlen += qdisc->q.qlen; | ||
347 | bstats.bytes += qdisc->bstats.bytes; | 348 | bstats.bytes += qdisc->bstats.bytes; |
348 | bstats.packets += qdisc->bstats.packets; | 349 | bstats.packets += qdisc->bstats.packets; |
349 | qstats.qlen += qdisc->qstats.qlen; | ||
350 | qstats.backlog += qdisc->qstats.backlog; | 350 | qstats.backlog += qdisc->qstats.backlog; |
351 | qstats.drops += qdisc->qstats.drops; | 351 | qstats.drops += qdisc->qstats.drops; |
352 | qstats.requeues += qdisc->qstats.requeues; | 352 | qstats.requeues += qdisc->qstats.requeues; |
@@ -356,15 +356,14 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
356 | /* Reclaim root sleeping lock before completing stats */ | 356 | /* Reclaim root sleeping lock before completing stats */ |
357 | spin_lock_bh(d->lock); | 357 | spin_lock_bh(d->lock); |
358 | if (gnet_stats_copy_basic(d, NULL, &bstats) < 0 || | 358 | if (gnet_stats_copy_basic(d, NULL, &bstats) < 0 || |
359 | gnet_stats_copy_queue(d, &qstats) < 0) | 359 | gnet_stats_copy_queue(d, &qstats, qlen) < 0) |
360 | return -1; | 360 | return -1; |
361 | } else { | 361 | } else { |
362 | struct netdev_queue *dev_queue = mqprio_queue_get(sch, cl); | 362 | struct netdev_queue *dev_queue = mqprio_queue_get(sch, cl); |
363 | 363 | ||
364 | sch = dev_queue->qdisc_sleeping; | 364 | sch = dev_queue->qdisc_sleeping; |
365 | sch->qstats.qlen = sch->q.qlen; | ||
366 | if (gnet_stats_copy_basic(d, NULL, &sch->bstats) < 0 || | 365 | if (gnet_stats_copy_basic(d, NULL, &sch->bstats) < 0 || |
367 | gnet_stats_copy_queue(d, &sch->qstats) < 0) | 366 | gnet_stats_copy_queue(d, &sch->qstats, sch->q.qlen) < 0) |
368 | return -1; | 367 | return -1; |
369 | } | 368 | } |
370 | return 0; | 369 | return 0; |
diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c index 7f4e1d8504b0..53357b368bff 100644 --- a/net/sched/sch_multiq.c +++ b/net/sched/sch_multiq.c | |||
@@ -360,9 +360,8 @@ static int multiq_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
360 | struct Qdisc *cl_q; | 360 | struct Qdisc *cl_q; |
361 | 361 | ||
362 | cl_q = q->queues[cl - 1]; | 362 | cl_q = q->queues[cl - 1]; |
363 | cl_q->qstats.qlen = cl_q->q.qlen; | ||
364 | if (gnet_stats_copy_basic(d, NULL, &cl_q->bstats) < 0 || | 363 | if (gnet_stats_copy_basic(d, NULL, &cl_q->bstats) < 0 || |
365 | gnet_stats_copy_queue(d, &cl_q->qstats) < 0) | 364 | gnet_stats_copy_queue(d, &cl_q->qstats, cl_q->q.qlen) < 0) |
366 | return -1; | 365 | return -1; |
367 | 366 | ||
368 | return 0; | 367 | return 0; |
diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index b411e78a02fc..4644f55242d2 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c | |||
@@ -324,9 +324,8 @@ static int prio_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
324 | struct Qdisc *cl_q; | 324 | struct Qdisc *cl_q; |
325 | 325 | ||
326 | cl_q = q->queues[cl - 1]; | 326 | cl_q = q->queues[cl - 1]; |
327 | cl_q->qstats.qlen = cl_q->q.qlen; | ||
328 | if (gnet_stats_copy_basic(d, NULL, &cl_q->bstats) < 0 || | 327 | if (gnet_stats_copy_basic(d, NULL, &cl_q->bstats) < 0 || |
329 | gnet_stats_copy_queue(d, &cl_q->qstats) < 0) | 328 | gnet_stats_copy_queue(d, &cl_q->qstats, cl_q->q.qlen) < 0) |
330 | return -1; | 329 | return -1; |
331 | 330 | ||
332 | return 0; | 331 | return 0; |
diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c index 3fb26555c79b..66df9d9e301a 100644 --- a/net/sched/sch_qfq.c +++ b/net/sched/sch_qfq.c | |||
@@ -664,14 +664,13 @@ static int qfq_dump_class_stats(struct Qdisc *sch, unsigned long arg, | |||
664 | struct tc_qfq_stats xstats; | 664 | struct tc_qfq_stats xstats; |
665 | 665 | ||
666 | memset(&xstats, 0, sizeof(xstats)); | 666 | memset(&xstats, 0, sizeof(xstats)); |
667 | cl->qdisc->qstats.qlen = cl->qdisc->q.qlen; | ||
668 | 667 | ||
669 | xstats.weight = cl->agg->class_weight; | 668 | xstats.weight = cl->agg->class_weight; |
670 | xstats.lmax = cl->agg->lmax; | 669 | xstats.lmax = cl->agg->lmax; |
671 | 670 | ||
672 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || | 671 | if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 || |
673 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || | 672 | gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 || |
674 | gnet_stats_copy_queue(d, &cl->qdisc->qstats) < 0) | 673 | gnet_stats_copy_queue(d, &cl->qdisc->qstats, cl->qdisc->q.qlen) < 0) |
675 | return -1; | 674 | return -1; |
676 | 675 | ||
677 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); | 676 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); |
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index 158dfa641d18..d4afcbc1c6f7 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c | |||
@@ -871,7 +871,7 @@ static int sfq_dump_class_stats(struct Qdisc *sch, unsigned long cl, | |||
871 | qs.qlen = slot->qlen; | 871 | qs.qlen = slot->qlen; |
872 | qs.backlog = slot->backlog; | 872 | qs.backlog = slot->backlog; |
873 | } | 873 | } |
874 | if (gnet_stats_copy_queue(d, &qs) < 0) | 874 | if (gnet_stats_copy_queue(d, &qs, qs.qlen) < 0) |
875 | return -1; | 875 | return -1; |
876 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); | 876 | return gnet_stats_copy_app(d, &xstats, sizeof(xstats)); |
877 | } | 877 | } |