vserver 1.9.5.x5
[linux-2.6.git] / net / sched / sch_fifo.c
index 132a5bc..4888305 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/module.h>
 #include <asm/uaccess.h>
 #include <asm/system.h>
-#include <asm/bitops.h>
+#include <linux/bitops.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -45,16 +45,16 @@ struct fifo_sched_data
 static int
 bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 {
-       struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data;
+       struct fifo_sched_data *q = qdisc_priv(sch);
 
-       if (sch->stats.backlog + skb->len <= q->limit) {
+       if (sch->qstats.backlog + skb->len <= q->limit) {
                __skb_queue_tail(&sch->q, skb);
-               sch->stats.backlog += skb->len;
-               sch->stats.bytes += skb->len;
-               sch->stats.packets++;
+               sch->qstats.backlog += skb->len;
+               sch->bstats.bytes += skb->len;
+               sch->bstats.packets++;
                return 0;
        }
-       sch->stats.drops++;
+       sch->qstats.drops++;
 #ifdef CONFIG_NET_CLS_POLICE
        if (sch->reshape_fail==NULL || sch->reshape_fail(skb, sch))
 #endif
@@ -66,7 +66,8 @@ static int
 bfifo_requeue(struct sk_buff *skb, struct Qdisc* sch)
 {
        __skb_queue_head(&sch->q, skb);
-       sch->stats.backlog += skb->len;
+       sch->qstats.backlog += skb->len;
+       sch->qstats.requeues++;
        return 0;
 }
 
@@ -77,7 +78,7 @@ bfifo_dequeue(struct Qdisc* sch)
 
        skb = __skb_dequeue(&sch->q);
        if (skb)
-               sch->stats.backlog -= skb->len;
+               sch->qstats.backlog -= skb->len;
        return skb;
 }
 
@@ -89,7 +90,7 @@ fifo_drop(struct Qdisc* sch)
        skb = __skb_dequeue_tail(&sch->q);
        if (skb) {
                unsigned int len = skb->len;
-               sch->stats.backlog -= len;
+               sch->qstats.backlog -= len;
                kfree_skb(skb);
                return len;
        }
@@ -100,21 +101,21 @@ static void
 fifo_reset(struct Qdisc* sch)
 {
        skb_queue_purge(&sch->q);
-       sch->stats.backlog = 0;
+       sch->qstats.backlog = 0;
 }
 
 static int
 pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 {
-       struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data;
+       struct fifo_sched_data *q = qdisc_priv(sch);
 
        if (sch->q.qlen < q->limit) {
                __skb_queue_tail(&sch->q, skb);
-               sch->stats.bytes += skb->len;
-               sch->stats.packets++;
+               sch->bstats.bytes += skb->len;
+               sch->bstats.packets++;
                return 0;
        }
-       sch->stats.drops++;
+       sch->qstats.drops++;
 #ifdef CONFIG_NET_CLS_POLICE
        if (sch->reshape_fail==NULL || sch->reshape_fail(skb, sch))
 #endif
@@ -126,6 +127,7 @@ static int
 pfifo_requeue(struct sk_buff *skb, struct Qdisc* sch)
 {
        __skb_queue_head(&sch->q, skb);
+       sch->qstats.requeues++;
        return 0;
 }
 
@@ -138,7 +140,7 @@ pfifo_dequeue(struct Qdisc* sch)
 
 static int fifo_init(struct Qdisc *sch, struct rtattr *opt)
 {
-       struct fifo_sched_data *q = (void*)sch->data;
+       struct fifo_sched_data *q = qdisc_priv(sch);
 
        if (opt == NULL) {
                unsigned int limit = sch->dev->tx_queue_len ? : 1;
@@ -158,7 +160,7 @@ static int fifo_init(struct Qdisc *sch, struct rtattr *opt)
 
 static int fifo_dump(struct Qdisc *sch, struct sk_buff *skb)
 {
-       struct fifo_sched_data *q = (void*)sch->data;
+       struct fifo_sched_data *q = qdisc_priv(sch);
        unsigned char    *b = skb->tail;
        struct tc_fifo_qopt opt;