summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2003-11-18 01:37:45 -0800
committerPatrick McHardy <kaber@coreworks.de>2003-11-18 01:37:45 -0800
commit4a2c290d0cc3db69a8ad4e4065a5caaed9a4faee (patch)
treef8932f429ff840014b1e99106eeab3cb64f8e077 /net
parentb55b564f74882d4dde3e19f842a0048e72997365 (diff)
[NET SCHED]: Fix queue limits in multiple qdiscs.
Diffstat (limited to 'net')
-rw-r--r--net/sched/sch_fifo.c4
-rw-r--r--net/sched/sch_generic.c2
-rw-r--r--net/sched/sch_gred.c4
-rw-r--r--net/sched/sch_red.c2
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;