[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
linux-diffserv and 2.3.x
I am trying to get packet scheduling to work on a 2.3.22 kernel
(with Werner Almesbergers diffserv patches). I discovered the following problem :
Both dsmark_dequeue and cbq_dequeue (and possibly others, I didn't check them
all), decrement the queue length after calling a lower layer dequeue function.
However this lower layer dequeue function also decrements the queue length.
This results in a negative queue length when the upper dequeueing function exits.
Unfortunately __qdisc_wakeup will try to dequeue packets as long as qdisc_restart
returns < 0 and the transmitter is not busy. So this negative queue length results
in an endless loop. As a quick hack I removed the q.qlen-- from dsmark_dequeue and
cbq_dequeue. This seems to work, but I didn't verify in depth if this might cause
Ideas ? Comments ?
In a world without walls and fences - who needs Windows and Gates ?