]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/sched/sch_fifo.c
Merge branch 'master' into tk71
[mv-sheeva.git] / net / sched / sch_fifo.c
index 5948bafa8ce29de97bf4a824139ee2f033579810..d468b479aa937f410a665045eb4018bfc08de255 100644 (file)
@@ -46,19 +46,14 @@ static int pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 
 static int pfifo_tail_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 {
-       struct sk_buff *skb_head;
        struct fifo_sched_data *q = qdisc_priv(sch);
 
        if (likely(skb_queue_len(&sch->q) < q->limit))
                return qdisc_enqueue_tail(skb, sch);
 
        /* queue full, remove one skb to fulfill the limit */
-       skb_head = qdisc_dequeue_head(sch);
-       sch->bstats.bytes -= qdisc_pkt_len(skb_head);
-       sch->bstats.packets--;
+       __qdisc_queue_drop_head(sch, &sch->q);
        sch->qstats.drops++;
-       kfree_skb(skb_head);
-
        qdisc_enqueue_tail(skb, sch);
 
        return NET_XMIT_CN;
@@ -172,8 +167,7 @@ struct Qdisc *fifo_create_dflt(struct Qdisc *sch, struct Qdisc_ops *ops,
        struct Qdisc *q;
        int err = -ENOMEM;
 
-       q = qdisc_create_dflt(qdisc_dev(sch), sch->dev_queue,
-                             ops, TC_H_MAKE(sch->handle, 1));
+       q = qdisc_create_dflt(sch->dev_queue, ops, TC_H_MAKE(sch->handle, 1));
        if (q) {
                err = fifo_set_limit(q, limit);
                if (err < 0) {