From 570f6c6542671094759765cdeedb0f7d19265d2a Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 10 Apr 2003 09:00:19 -0700 Subject: [PATCH] [SCHED]: Some schedulers forget to flush filter list at destroy. --- net/sched/sch_csz.c | 8 ++++++++ net/sched/sch_prio.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/net/sched/sch_csz.c b/net/sched/sch_csz.c index 8f72cbe0cc557..788db30363ef3 100644 --- a/net/sched/sch_csz.c +++ b/net/sched/sch_csz.c @@ -749,6 +749,14 @@ csz_reset(struct Qdisc* sch) 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; } diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index 6c0509d01f287..3d864121ffd79 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c @@ -158,6 +158,12 @@ prio_destroy(struct Qdisc* sch) { int prio; struct prio_sched_data *q = (struct prio_sched_data *)sch->data; + struct tcf_proto *tp; + + while ((tp = q->filter_list) != NULL) { + q->filter_list = tp->next; + tp->ops->destroy(tp); + } for (prio=0; priobands; prio++) { qdisc_destroy(q->queues[prio]); -- 2.53.0