Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[firefly-linux-kernel-4.4.55.git] / net / sched / sch_htb.c
index 063e953d9848afb7e1502462303492787f845503..f1acb0f60dc35b724289f98498b5cf2162583ce9 100644 (file)
@@ -586,13 +586,13 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
 #ifdef CONFIG_NET_CLS_ACT
        } else if (!cl) {
                if (ret & __NET_XMIT_BYPASS)
-                       sch->qstats.drops++;
+                       qdisc_qstats_drop(sch);
                kfree_skb(skb);
                return ret;
 #endif
        } else if ((ret = qdisc_enqueue(skb, cl->un.leaf.q)) != NET_XMIT_SUCCESS) {
                if (net_xmit_drop_count(ret)) {
-                       sch->qstats.drops++;
+                       qdisc_qstats_drop(sch);
                        cl->qstats.drops++;
                }
                return ret;
@@ -925,7 +925,7 @@ ok:
                                goto ok;
                }
        }
-       sch->qstats.overlimits++;
+       qdisc_qstats_overlimit(sch);
        if (likely(next_event > q->now)) {
                if (!test_bit(__QDISC_STATE_DEACTIVATED,
                              &qdisc_root_sleeping(q->watchdog.qdisc)->state)) {
@@ -1138,15 +1138,16 @@ static int
 htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d)
 {
        struct htb_class *cl = (struct htb_class *)arg;
+       __u32 qlen = 0;
 
        if (!cl->level && cl->un.leaf.q)
-               cl->qstats.qlen = cl->un.leaf.q->q.qlen;
+               qlen = cl->un.leaf.q->q.qlen;
        cl->xstats.tokens = PSCHED_NS2TICKS(cl->tokens);
        cl->xstats.ctokens = PSCHED_NS2TICKS(cl->ctokens);
 
-       if (gnet_stats_copy_basic(d, &cl->bstats) < 0 ||
+       if (gnet_stats_copy_basic(d, NULL, &cl->bstats) < 0 ||
            gnet_stats_copy_rate_est(d, NULL, &cl->rate_est) < 0 ||
-           gnet_stats_copy_queue(d, &cl->qstats) < 0)
+           gnet_stats_copy_queue(d, NULL, &cl->qstats, qlen) < 0)
                return -1;
 
        return gnet_stats_copy_app(d, &cl->xstats, sizeof(cl->xstats));
@@ -1402,7 +1403,8 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
                        goto failure;
 
                if (htb_rate_est || tca[TCA_RATE]) {
-                       err = gen_new_estimator(&cl->bstats, &cl->rate_est,
+                       err = gen_new_estimator(&cl->bstats, NULL,
+                                               &cl->rate_est,
                                                qdisc_root_sleeping_lock(sch),
                                                tca[TCA_RATE] ? : &est.nla);
                        if (err) {
@@ -1464,8 +1466,11 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
                        parent->children++;
        } else {
                if (tca[TCA_RATE]) {
-                       err = gen_replace_estimator(&cl->bstats, &cl->rate_est,
-                                                   qdisc_root_sleeping_lock(sch),
+                       spinlock_t *lock = qdisc_root_sleeping_lock(sch);
+
+                       err = gen_replace_estimator(&cl->bstats, NULL,
+                                                   &cl->rate_est,
+                                                   lock,
                                                    tca[TCA_RATE]);
                        if (err)
                                return err;