sch_red: fix red_change
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 1 Dec 2011 11:06:34 +0000 (11:06 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Dec 2011 00:24:38 +0000 (19:24 -0500)
commit1ee5fa1e9970a16036e37c7b9d5ce81c778252fc
tree8f8b414130339eb15d398ace18c7e061d477329d
parent59c2cdae2791c0b2ee13d148edc6b771e7e7953f
sch_red: fix red_change

Le mercredi 30 novembre 2011 à 14:36 -0800, Stephen Hemminger a écrit :

> (Almost) nobody uses RED because they can't figure it out.
> According to Wikipedia, VJ says that:
>  "there are not one, but two bugs in classic RED."

RED is useful for high throughput routers, I doubt many linux machines
act as such devices.

I was considering adding Adaptative RED (Sally Floyd, Ramakrishna
Gummadi, Scott Shender), August 2001

In this version, maxp is dynamic (from 1% to 50%), and user only have to
setup min_th (target average queue size)
(max_th and wq (burst in linux RED) are automatically setup)

By the way it seems we have a small bug in red_change()

if (skb_queue_empty(&sch->q))
red_end_of_idle_period(&q->parms);

First, if queue is empty, we should call
red_start_of_idle_period(&q->parms);

Second, since we dont use anymore sch->q, but q->qdisc, the test is
meaningless.

Oh well...

[PATCH] sch_red: fix red_change()

Now RED is classful, we must check q->qdisc->q.qlen, and if queue is empty,
we start an idle period, not end it.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_red.c