> can you still reproduce this bug with newer linux kernel images, > like the linux image 2.6.12?
I haven't tested it since I figured out the reason and patched 2.6.10. The fix is originally by someone else and for 2.6.9, I just changed a couple of characters to make it apply cleanly to 2.6.10. Assuming this patch made it to 2.6.1[12], they should be fine. I'll check the status next time I happen to compile a new kernel for my laptop - if it isn't broken, don't fix it... The patch is below (this is against *Debian version* of 2.6.10): diff -Nru a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c --- a/net/sched/sch_cbq.c 2004-08-22 14:33:59 +02:00 +++ b/net/sched/sch_cbq.c 2004-08-22 14:33:59 +02:00 @@ -1746,15 +1746,18 @@ } } -static void cbq_destroy_class(struct cbq_class *cl) +static void cbq_destroy_class(struct Qdisc *sch, struct cbq_class *cl) { + struct cbq_sched_data *q = qdisc_priv(sch); + cbq_destroy_filters(cl); qdisc_destroy(cl->q); qdisc_put_rtab(cl->R_tab); #ifdef CONFIG_NET_ESTIMATOR qdisc_kill_estimator(&cl->stats); #endif - kfree(cl); + if (cl != &q->link) + kfree(cl); } static void @@ -1777,8 +1780,7 @@ for (cl = q->classes[h]; cl; cl = next) { next = cl->next; - if (cl != &q->link) - cbq_destroy_class(cl); + cbq_destroy_class(sch, cl); } } @@ -1799,7 +1801,7 @@ spin_unlock_bh(&sch->dev->queue_lock); #endif - cbq_destroy_class(cl); + cbq_destroy_class(sch, cl); } } @@ -2035,7 +2037,7 @@ sch_tree_unlock(sch); if (--cl->refcnt == 0) - cbq_destroy_class(cl); + cbq_destroy_class(sch, cl); return 0; } - -- ----------------------------------------------- | Juha Jäykkä, [EMAIL PROTECTED] | | Laboratory of Theoretical Physics | | Department of Physics, University of Turku | | home: http://www.utu.fi/~juolja/ | -----------------------------------------------
pgpDi2hipvrTf.pgp
Description: PGP signature