]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/sched/sch_drr.c
Merge branch 'master' into tk71
[mv-sheeva.git] / net / sched / sch_drr.c
index b74046a95397c6d2e3d9a90e648c3414dd18c50f..6b7fe4a84f138b903928a8c5f5f90f8fe3b855dc 100644 (file)
@@ -110,7 +110,7 @@ static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
        cl->refcnt         = 1;
        cl->common.classid = classid;
        cl->quantum        = quantum;
-       cl->qdisc          = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
+       cl->qdisc          = qdisc_create_dflt(sch->dev_queue,
                                               &pfifo_qdisc_ops, classid);
        if (cl->qdisc == NULL)
                cl->qdisc = &noop_qdisc;
@@ -218,7 +218,7 @@ static int drr_graft_class(struct Qdisc *sch, unsigned long arg,
        struct drr_class *cl = (struct drr_class *)arg;
 
        if (new == NULL) {
-               new = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
+               new = qdisc_create_dflt(sch->dev_queue,
                                        &pfifo_qdisc_ops, cl->common.classid);
                if (new == NULL)
                        new = &noop_qdisc;
@@ -351,7 +351,6 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch)
 {
        struct drr_sched *q = qdisc_priv(sch);
        struct drr_class *cl;
-       unsigned int len;
        int err;
 
        cl = drr_classify(skb, sch, &err);
@@ -362,7 +361,6 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch)
                return err;
        }
 
-       len = qdisc_pkt_len(skb);
        err = qdisc_enqueue(skb, cl->qdisc);
        if (unlikely(err != NET_XMIT_SUCCESS)) {
                if (net_xmit_drop_count(err)) {
@@ -377,10 +375,7 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch)
                cl->deficit = cl->quantum;
        }
 
-       cl->bstats.packets++;
-       cl->bstats.bytes += len;
-       sch->bstats.packets++;
-       sch->bstats.bytes += len;
+       bstats_update(&cl->bstats, skb);
 
        sch->q.qlen++;
        return err;
@@ -407,6 +402,7 @@ static struct sk_buff *drr_dequeue(struct Qdisc *sch)
                        skb = qdisc_dequeue_peeked(cl->qdisc);
                        if (cl->qdisc->q.qlen == 0)
                                list_del(&cl->alist);
+                       qdisc_bstats_update(sch, skb);
                        sch->q.qlen--;
                        return skb;
                }