# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2003/12/24 19:20:12-08:00 kaber@trash.net # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_prio.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_ingress.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_htb.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_dsmark.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_csz.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_cbq.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/sch_atm.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # net/sched/cls_api.c # 2003/12/24 19:19:50-08:00 kaber@trash.net +1 -3 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # # include/net/pkt_cls.h # 2003/12/24 19:19:50-08:00 kaber@trash.net +5 -1 # [PKT_SCHED]: Fix module refcount and mem leaks in classful qdiscs. # # Create common routine, tcf_destroy(), that does all the work properly # in one centralized place. # diff -Nru a/include/net/pkt_cls.h b/include/net/pkt_cls.h --- a/include/net/pkt_cls.h Tue Jan 6 06:37:06 2004 +++ b/include/net/pkt_cls.h Tue Jan 6 06:37:06 2004 @@ -77,7 +77,11 @@ return -1; } - +static inline void tcf_destroy(struct tcf_proto *tp) +{ + tp->ops->destroy(tp); + kfree(tp); +} extern int register_tcf_proto_ops(struct tcf_proto_ops *ops); extern int unregister_tcf_proto_ops(struct tcf_proto_ops *ops); diff -Nru a/net/sched/cls_api.c b/net/sched/cls_api.c --- a/net/sched/cls_api.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/cls_api.c Tue Jan 6 06:37:06 2004 @@ -246,9 +246,7 @@ *back = tp->next; spin_unlock_bh(&dev->queue_lock); write_unlock(&qdisc_tree_lock); - - tp->ops->destroy(tp); - kfree(tp); + tcf_destroy(tp); err = 0; goto errout; } diff -Nru a/net/sched/sch_atm.c b/net/sched/sch_atm.c --- a/net/sched/sch_atm.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_atm.c Tue Jan 6 06:37:06 2004 @@ -165,7 +165,7 @@ while ((filter = flow->filter_list)) { DPRINTK("destroy_filters: destroying filter %p\n",filter); flow->filter_list = filter->next; - filter->ops->destroy(filter); + tcf_destroy(filter); } } diff -Nru a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c --- a/net/sched/sch_cbq.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_cbq.c Tue Jan 6 06:37:06 2004 @@ -1708,7 +1708,7 @@ while ((tp = cl->filter_list) != NULL) { cl->filter_list = tp->next; - tp->ops->destroy(tp); + tcf_destroy(tp); } } diff -Nru a/net/sched/sch_csz.c b/net/sched/sch_csz.c --- a/net/sched/sch_csz.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_csz.c Tue Jan 6 06:37:06 2004 @@ -752,7 +752,7 @@ while ((tp = q->filter_list) != NULL) { q->filter_list = tp->next; - tp->ops->destroy(tp); + tcf_destroy(tp); } MOD_DEC_USE_COUNT; diff -Nru a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c --- a/net/sched/sch_dsmark.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_dsmark.c Tue Jan 6 06:37:06 2004 @@ -378,7 +378,7 @@ while (p->filter_list) { tp = p->filter_list; p->filter_list = tp->next; - tp->ops->destroy(tp); + tcf_destroy(tp); } qdisc_destroy(p->q); p->q = &noop_qdisc; diff -Nru a/net/sched/sch_htb.c b/net/sched/sch_htb.c --- a/net/sched/sch_htb.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_htb.c Tue Jan 6 06:37:06 2004 @@ -1348,7 +1348,7 @@ while ((tp = *fl) != NULL) { *fl = tp->next; - tp->ops->destroy(tp); + tcf_destroy(tp); } } diff -Nru a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c --- a/net/sched/sch_ingress.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_ingress.c Tue Jan 6 06:37:06 2004 @@ -294,7 +294,7 @@ while (p->filter_list) { tp = p->filter_list; p->filter_list = tp->next; - tp->ops->destroy(tp); + tcf_destroy(tp); } memset(p, 0, sizeof(*p)); p->filter_list = NULL; diff -Nru a/net/sched/sch_prio.c b/net/sched/sch_prio.c --- a/net/sched/sch_prio.c Tue Jan 6 06:37:06 2004 +++ b/net/sched/sch_prio.c Tue Jan 6 06:37:06 2004 @@ -162,7 +162,7 @@ while ((tp = q->filter_list) != NULL) { q->filter_list = tp->next; - tp->ops->destroy(tp); + tcf_destroy(tp); } for (prio=0; priobands; prio++) {