pkt_sched: Fix qstats.qlen updating in dump_stats
authorJarek Poplawski <jarkao2@gmail.com>
Thu, 17 Sep 2009 17:26:07 +0000 (10:26 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 17 Sep 2009 17:26:07 +0000 (10:26 -0700)
Some classful qdiscs miss qstats.qlen updating with q.qlen of their
child qdiscs in dump_stats methods.

Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_drr.c
net/sched/sch_mq.c
net/sched/sch_multiq.c
net/sched/sch_prio.c

index 12b2fb04b29b6d4d873e6fe28981dabd7de039b6..5a888af7e5daed2f46d3293a843de8182f3f6cc3 100644 (file)
@@ -274,8 +274,10 @@ static int drr_dump_class_stats(struct Qdisc *sch, unsigned long arg,
        struct tc_drr_stats xstats;
 
        memset(&xstats, 0, sizeof(xstats));
-       if (cl->qdisc->q.qlen)
+       if (cl->qdisc->q.qlen) {
                xstats.deficit = cl->deficit;
+               cl->qdisc->qstats.qlen = cl->qdisc->q.qlen;
+       }
 
        if (gnet_stats_copy_basic(d, &cl->bstats) < 0 ||
            gnet_stats_copy_rate_est(d, &cl->rate_est) < 0 ||
index 600c50143cc7072f3a3fdcf46c1f0a3dcad0f9c0..d1dea3d5dc929f1dc2051b2ed42f65168c88aa09 100644 (file)
@@ -193,6 +193,7 @@ static int mq_dump_class_stats(struct Qdisc *sch, unsigned long cl,
        struct netdev_queue *dev_queue = mq_queue_get(sch, cl);
 
        sch = dev_queue->qdisc_sleeping;
+       sch->qstats.qlen = sch->q.qlen;
        if (gnet_stats_copy_basic(d, &sch->bstats) < 0 ||
            gnet_stats_copy_queue(d, &sch->qstats) < 0)
                return -1;
index 069f81c972778cda6f26b4c276b6b1495f10da5b..7db2c88ce585f04a7361b87dec3aa2760d65f1f3 100644 (file)
@@ -359,6 +359,7 @@ static int multiq_dump_class_stats(struct Qdisc *sch, unsigned long cl,
        struct Qdisc *cl_q;
 
        cl_q = q->queues[cl - 1];
+       cl_q->qstats.qlen = cl_q->q.qlen;
        if (gnet_stats_copy_basic(d, &cl_q->bstats) < 0 ||
            gnet_stats_copy_queue(d, &cl_q->qstats) < 0)
                return -1;
index 0f73c412d04b6005091fc69b0fb068a3e94bb662..93285cecb246942b5640809d34e7d17d9ee1d63a 100644 (file)
@@ -322,6 +322,7 @@ static int prio_dump_class_stats(struct Qdisc *sch, unsigned long cl,
        struct Qdisc *cl_q;
 
        cl_q = q->queues[cl - 1];
+       cl_q->qstats.qlen = cl_q->q.qlen;
        if (gnet_stats_copy_basic(d, &cl_q->bstats) < 0 ||
            gnet_stats_copy_queue(d, &cl_q->qstats) < 0)
                return -1;