Recently I've posted these patches in lkml and netdev mailing lists. Just repeating them here if someone is interesting: sch_prio.c and sch_csz.c do not destroy their filter lists, when someone deletes qdisc from interface without explicit filter deleting. So here is the patches. :) --- linux-2.4.20/net/sched/sch_prio.c Sat Aug 3 04:39:46 2002 +++ linux/net/sched/sch_prio.c Thu Apr 10 17:52:55 2003 @@ -158,11 +158,19 @@ { int prio; struct prio_sched_data *q = (struct prio_sched_data *)sch->data; + struct tcf_proto *tp; for (prio=0; prio<q->bands; prio++) { qdisc_destroy(q->queues[prio]); q->queues[prio] = &noop_qdisc; } + + while((tp = q->filter_list) != NULL) + { + q->filter_list = tp->next; + tp->ops->destroy(tp); + } + MOD_DEC_USE_COUNT; } --- linux-2.4.20/net/sched/sch_csz.c Fri Dec 21 20:42:06 2001 +++ linux/net/sched/sch_csz.c Fri Apr 11 12:33:08 2003 @@ -749,6 +749,15 @@ static void csz_destroy(struct Qdisc* sch) { + struct csz_sched_data *q = (struct csz_sched_data *)sch->data; + struct tcf_proto *tp; + + while((tp = q->filter_list) != NULL) + { + q->filter_list = tp->next; + tp->ops->destroy(tp); + } + MOD_DEC_USE_COUNT; }