[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
other problems. 

Ideas ? Comments ?

In a world without walls and fences  -  who needs Windows and Gates ?