aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_cbq.c
diff options
context:
space:
mode:
authorJohn Fastabend <john.fastabend@gmail.com>2014-09-28 14:53:57 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-30 01:02:26 -0400
commit6401585366326fc0ecbc372ec60d1a15cd8be2f5 (patch)
treec3e8f777a579ee8b912e98d06ceb2aa1ffbb6a8b /net/sched/sch_cbq.c
parent25331d6ce42bcf4b34b6705fce4da15c3fabe62f (diff)
net: sched: restrict use of qstats qlen
This removes the use of qstats->qlen variable from the classifiers and makes it an explicit argument to gnet_stats_copy_queue(). The qlen represents the qdisc queue length and is packed into the qstats at the last moment before passnig to user space. By handling it explicitely we avoid, in the percpu stats case, having to figure out which per_cpu variable to put it in. It would probably be best to remove it from qstats completely but qstats is a user space ABI and can't be broken. A future patch could make an internal only qstats structure that would avoid having to allocate an additional u32 variable on the Qdisc struct. This would make the qstats struct 128bits instead of 128+32. Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_cbq.c')
-rw-r--r--net/sched/sch_cbq.c3
1 files changed, 1 insertions, 2 deletions
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));