On Thu, 30 Oct 2003 20:50:16 +0100 (CET)
devik <devik@xxxxxx> wrote:
> thanks for the report. I know that there is an issue regarding
> HTB in 2.6.x. Please send me net/sched/sch_htb.o,
> net/sched/sch_htb.c (just to be sure) and be sure that you
> build the kernel with debugging symbols (see debugging section
> of menuconfig/xconfig).
I think the problem is the changes that were made
in 2.5.x to htb_next_rb_node(). It used to be:
static void htb_next_rb_node(rb_node_t **n)
{
rb_node_t *p;
if ((*n)->rb_right) {
/* child at right. use it or its leftmost ancestor */
*n = (*n)->rb_right;
while ((*n)->rb_left)
*n = (*n)->rb_left;
return;
}
while ((p = (*n)->rb_parent) != NULL) {
/* if we've arrived from left child then we have next node */
if (p->rb_left == *n) break;
*n = p;
}
*n = p;
}
But it was changed into:
static void htb_next_rb_node(struct rb_node **n)
{
*n = rb_next(*n);
}
This is wrong, the new code has much different side effects
than the original code.
This looks like the problem, devik what do you think?
|