diff options
| author | Patrick McHardy <kaber@trash.net> | 2003-11-18 01:37:45 -0800 |
|---|---|---|
| committer | Patrick McHardy <kaber@coreworks.de> | 2003-11-18 01:37:45 -0800 |
| commit | 4a2c290d0cc3db69a8ad4e4065a5caaed9a4faee (patch) | |
| tree | f8932f429ff840014b1e99106eeab3cb64f8e077 /net | |
| parent | b55b564f74882d4dde3e19f842a0048e72997365 (diff) | |
[NET SCHED]: Fix queue limits in multiple qdiscs.
Diffstat (limited to 'net')
| -rw-r--r-- | net/sched/sch_fifo.c | 4 | ||||
| -rw-r--r-- | net/sched/sch_generic.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_gred.c | 4 | ||||
| -rw-r--r-- | net/sched/sch_red.c | 2 |
4 files changed, 6 insertions, 6 deletions
diff --git a/net/sched/sch_fifo.c b/net/sched/sch_fifo.c index 1272f443e330..c53b06b9eb31 100644 --- a/net/sched/sch_fifo.c +++ b/net/sched/sch_fifo.c @@ -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++; diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index a4b206d3ad97..97b56255c7be 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -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; diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c index 051c2527fcca..6f5e6c7031fc 100644 --- a/net/sched/sch_gred.c +++ b/net/sched/sch_gred.c @@ -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); diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index b2e8956418ae..05879ec4c9cd 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c @@ -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; |
