]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/sched/sch_htb.c
[PATCH] mv643xx_eth: Fix handling of small, unaligned fragments
[karo-tx-linux.git] / net / sched / sch_htb.c
index a85935e7d53d2852ed126f8f1045c798176ad0d0..3ec95df4a85ed50c2548b69c591c33333e3edd63 100644 (file)
@@ -321,7 +321,7 @@ static struct htb_class *htb_classify(struct sk_buff *skb, struct Qdisc *sch, in
        if ((cl = htb_find(skb->priority,sch)) != NULL && cl->level == 0) 
                return cl;
 
-       *qerr = NET_XMIT_DROP;
+       *qerr = NET_XMIT_BYPASS;
        tcf = q->filter_list;
        while (tcf && (result = tc_classify(skb, tcf, &res)) >= 0) {
 #ifdef CONFIG_NET_CLS_ACT
@@ -717,10 +717,14 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)
        if (q->direct_queue.qlen < q->direct_qlen) {
            __skb_queue_tail(&q->direct_queue, skb);
            q->direct_pkts++;
+       } else {
+           kfree_skb(skb);
+           sch->qstats.drops++;
+           return NET_XMIT_DROP;
        }
 #ifdef CONFIG_NET_CLS_ACT
     } else if (!cl) {
-       if (ret == NET_XMIT_DROP)
+       if (ret == NET_XMIT_BYPASS)
                sch->qstats.drops++;
        kfree_skb (skb);
        return ret;