]> err.no Git - linux-2.6/commitdiff
[PKT_SCHED]: GRED: Use generic queue management interface
authorThomas Graf <tgraf@suug.ch>
Sat, 5 Nov 2005 20:14:19 +0000 (21:14 +0100)
committerThomas Graf <tgr@axs.localdomain>
Sat, 5 Nov 2005 21:02:27 +0000 (22:02 +0100)
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
net/sched/sch_gred.c

index f7c6c0359ce52f0d6c90d314ffa0d423e6a97b6c..95c5f2cf3fdf790e2e247eec6b9aba24ebb473b3 100644 (file)
@@ -230,22 +230,15 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
        if (q->backlog + skb->len <= q->limit) {
                q->backlog += skb->len;
 do_enqueue:
-               __skb_queue_tail(&sch->q, skb);
-               sch->qstats.backlog += skb->len;
-               sch->bstats.bytes += skb->len;
-               sch->bstats.packets++;
-               return 0;
+               return qdisc_enqueue_tail(skb, sch);
        }
 
        q->stats.pdrop++;
 drop:
-       kfree_skb(skb);
-       sch->qstats.drops++;
-       return NET_XMIT_DROP;
+       return qdisc_drop(skb, sch);
 
 congestion_drop:
-       kfree_skb(skb);
-       sch->qstats.drops++;
+       qdisc_drop(skb, sch);
        return NET_XMIT_CN;
 }
 
@@ -260,11 +253,8 @@ gred_requeue(struct sk_buff *skb, struct Qdisc* sch)
        if (red_is_idling(&q->parms))
                red_end_of_idle_period(&q->parms);
 
-       __skb_queue_head(&sch->q, skb);
-       sch->qstats.backlog += skb->len;
-       sch->qstats.requeues++;
        q->backlog += skb->len;
-       return 0;
+       return qdisc_requeue(skb, sch);
 }
 
 static struct sk_buff *
@@ -274,9 +264,9 @@ gred_dequeue(struct Qdisc* sch)
        struct gred_sched_data *q;
        struct gred_sched *t= qdisc_priv(sch);
 
-       skb = __skb_dequeue(&sch->q);
+       skb = qdisc_dequeue_head(sch);
+
        if (skb) {
-               sch->qstats.backlog -= skb->len;
                q= t->tab[(skb->tc_index&0xf)];
                if (q) {
                        q->backlog -= skb->len;
@@ -307,11 +297,9 @@ static unsigned int gred_drop(struct Qdisc* sch)
        struct gred_sched_data *q;
        struct gred_sched *t= qdisc_priv(sch);
 
-       skb = __skb_dequeue_tail(&sch->q);
+       skb = qdisc_dequeue_tail(sch);
        if (skb) {
                unsigned int len = skb->len;
-               sch->qstats.backlog -= len;
-               sch->qstats.drops++;
                q= t->tab[(skb->tc_index&0xf)];
                if (q) {
                        q->backlog -= len;
@@ -322,7 +310,7 @@ static unsigned int gred_drop(struct Qdisc* sch)
                        D2PRINTK("gred_dequeue: skb has bad tcindex %x\n",skb->tc_index&0xf); 
                }
 
-               kfree_skb(skb);
+               qdisc_drop(skb, sch);
                return len;
        }
 
@@ -343,9 +331,7 @@ static void gred_reset(struct Qdisc* sch)
        struct gred_sched_data *q;
        struct gred_sched *t= qdisc_priv(sch);
 
-       __skb_queue_purge(&sch->q);
-
-       sch->qstats.backlog = 0;
+       qdisc_reset_queue(sch);
 
         for (i=0;i<t->DPs;i++) {
                q= t->tab[i];