Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
[firefly-linux-kernel-4.4.55.git] / net / sched / sch_drr.c
index 7a6243c5d27098064306a2dde93e288c4f1b3984..338706092c27d1255a5c16bb2cc4c5564f79e558 100644 (file)
@@ -275,17 +275,16 @@ static int drr_dump_class_stats(struct Qdisc *sch, unsigned long arg,
                                struct gnet_dump *d)
 {
        struct drr_class *cl = (struct drr_class *)arg;
+       __u32 qlen = cl->qdisc->q.qlen;
        struct tc_drr_stats xstats;
 
        memset(&xstats, 0, sizeof(xstats));
-       if (cl->qdisc->q.qlen) {
+       if (qlen)
                xstats.deficit = cl->deficit;
-               cl->qdisc->qstats.qlen = cl->qdisc->q.qlen;
-       }
 
        if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 ||
            gnet_stats_copy_rate_est(d, &cl->bstats, &cl->rate_est) < 0 ||
-           gnet_stats_copy_queue(d, &cl->qdisc->qstats) < 0)
+           gnet_stats_copy_queue(d, NULL, &cl->qdisc->qstats, qlen) < 0)
                return -1;
 
        return gnet_stats_copy_app(d, &xstats, sizeof(xstats));
@@ -360,7 +359,7 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch)
        cl = drr_classify(skb, sch, &err);
        if (cl == NULL) {
                if (err & __NET_XMIT_BYPASS)
-                       sch->qstats.drops++;
+                       qdisc_qstats_drop(sch);
                kfree_skb(skb);
                return err;
        }
@@ -369,7 +368,7 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch)
        if (unlikely(err != NET_XMIT_SUCCESS)) {
                if (net_xmit_drop_count(err)) {
                        cl->qstats.drops++;
-                       sch->qstats.drops++;
+                       qdisc_qstats_drop(sch);
                }
                return err;
        }