]> git.hungrycats.org Git - linux/commitdiff
[NET SCHED]: Fix queue limits in multiple qdiscs.
authorPatrick McHardy <kaber@trash.net>
Tue, 18 Nov 2003 09:37:45 +0000 (01:37 -0800)
committerPatrick McHardy <kaber@coreworks.de>
Tue, 18 Nov 2003 09:37:45 +0000 (01:37 -0800)
net/sched/sch_fifo.c
net/sched/sch_generic.c
net/sched/sch_gred.c
net/sched/sch_red.c

index 1272f443e33001f629685342289fe20da5d5981e..c53b06b9eb316ebfa0bd39946b8b5c68ca164a34 100644 (file)
@@ -47,7 +47,7 @@ bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 {
        struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data;
 
-       if (sch->stats.backlog <= q->limit) {
+       if (sch->stats.backlog + skb->len <= q->limit) {
                __skb_queue_tail(&sch->q, skb);
                sch->stats.backlog += skb->len;
                sch->stats.bytes += skb->len;
@@ -108,7 +108,7 @@ pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 {
        struct fifo_sched_data *q = (struct fifo_sched_data *)sch->data;
 
-       if (sch->q.qlen <= q->limit) {
+       if (sch->q.qlen < q->limit) {
                __skb_queue_tail(&sch->q, skb);
                sch->stats.bytes += skb->len;
                sch->stats.packets++;
index a4b206d3ad97a913b0dcf23f8594e411adbbd70a..97b56255c7be36e5005419b814428a3289d522db 100644 (file)
@@ -275,7 +275,7 @@ pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
        list = ((struct sk_buff_head*)qdisc->data) +
                prio2band[skb->priority&TC_PRIO_MAX];
 
-       if (list->qlen <= qdisc->dev->tx_queue_len) {
+       if (list->qlen < qdisc->dev->tx_queue_len) {
                __skb_queue_tail(list, skb);
                qdisc->q.qlen++;
                qdisc->stats.bytes += skb->len;
index 051c2527fcca5ff8d58c4c717c8ce87b5ebf5eaf..6f5e6c7031fcde837d2b556926fd5e4d176d883e 100644 (file)
@@ -110,7 +110,7 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
        unsigned long   qave=0; 
        int i=0;
 
-       if (!t->initd && skb_queue_len(&sch->q) <= sch->dev->tx_queue_len) {
+       if (!t->initd && skb_queue_len(&sch->q) < sch->dev->tx_queue_len) {
                D2PRINTK("NO GRED Queues setup yet! Enqueued anyway\n");
                goto do_enqueue;
        }
@@ -175,7 +175,7 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch)
        if ((q->qave+qave) < q->qth_min) {
                q->qcount = -1;
 enqueue:
-               if (q->backlog <= q->limit) {
+               if (q->backlog + skb->len <= q->limit) {
                        q->backlog += skb->len;
 do_enqueue:
                        __skb_queue_tail(&sch->q, skb);
index b2e8956418aeecc8d99d5e0c0b53aa640b9692bc..05879ec4c9cd08e933ac320e3bc90547d262c595 100644 (file)
@@ -257,7 +257,7 @@ red_enqueue(struct sk_buff *skb, struct Qdisc* sch)
        if (q->qave < q->qth_min) {
                q->qcount = -1;
 enqueue:
-               if (sch->stats.backlog <= q->limit) {
+               if (sch->stats.backlog + skb->len <= q->limit) {
                        __skb_queue_tail(&sch->q, skb);
                        sch->stats.backlog += skb->len;
                        sch->stats.bytes += skb->len;