Loading include/net/sch_generic.h +2 −8 Original line number Diff line number Diff line Loading @@ -177,14 +177,8 @@ extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n); extern struct Qdisc *qdisc_alloc(struct net_device *dev, struct Qdisc_ops *ops); extern struct Qdisc *qdisc_create_dflt(struct net_device *dev, struct Qdisc_ops *ops, u32 parentid); static inline void tcf_destroy(struct tcf_proto *tp) { tp->ops->destroy(tp); module_put(tp->ops->owner); kfree(tp); } extern void tcf_destroy(struct tcf_proto *tp); extern void tcf_destroy_chain(struct tcf_proto *fl); static inline int __qdisc_enqueue_tail(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff_head *list) Loading net/sched/sch_api.c +18 −0 Original line number Diff line number Diff line Loading @@ -1220,6 +1220,24 @@ int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, return -1; } void tcf_destroy(struct tcf_proto *tp) { tp->ops->destroy(tp); module_put(tp->ops->owner); kfree(tp); } void tcf_destroy_chain(struct tcf_proto *fl) { struct tcf_proto *tp; while ((tp = fl) != NULL) { fl = tp->next; tcf_destroy(tp); } } EXPORT_SYMBOL(tcf_destroy_chain); #ifdef CONFIG_PROC_FS static int psched_show(struct seq_file *seq, void *v) { Loading net/sched/sch_atm.c +2 −15 Original line number Diff line number Diff line Loading @@ -158,19 +158,6 @@ static unsigned long atm_tc_bind_filter(struct Qdisc *sch, return atm_tc_get(sch,classid); } static void destroy_filters(struct atm_flow_data *flow) { struct tcf_proto *filter; while ((filter = flow->filter_list)) { DPRINTK("destroy_filters: destroying filter %p\n",filter); flow->filter_list = filter->next; tcf_destroy(filter); } } /* * atm_tc_put handles all destructions, including the ones that are explicitly * requested (atm_tc_destroy, etc.). The assumption here is that we never drop Loading @@ -195,7 +182,7 @@ static void atm_tc_put(struct Qdisc *sch, unsigned long cl) *prev = flow->next; DPRINTK("atm_tc_put: qdisc %p\n",flow->q); qdisc_destroy(flow->q); destroy_filters(flow); tcf_destroy_chain(flow->filter_list); if (flow->sock) { DPRINTK("atm_tc_put: f_count %d\n", file_count(flow->sock->file)); Loading Loading @@ -611,7 +598,7 @@ static void atm_tc_destroy(struct Qdisc *sch) DPRINTK("atm_tc_destroy(sch %p,[qdisc %p])\n",sch,p); /* races ? */ while ((flow = p->flows)) { destroy_filters(flow); tcf_destroy_chain(flow->filter_list); if (flow->ref > 1) printk(KERN_ERR "atm_destroy: %p->ref = %d\n",flow, flow->ref); Loading net/sched/sch_cbq.c +2 −12 Original line number Diff line number Diff line Loading @@ -1717,23 +1717,13 @@ static unsigned long cbq_get(struct Qdisc *sch, u32 classid) return 0; } static void cbq_destroy_filters(struct cbq_class *cl) { struct tcf_proto *tp; while ((tp = cl->filter_list) != NULL) { cl->filter_list = tp->next; tcf_destroy(tp); } } static void cbq_destroy_class(struct Qdisc *sch, struct cbq_class *cl) { struct cbq_sched_data *q = qdisc_priv(sch); BUG_TRAP(!cl->filters); cbq_destroy_filters(cl); tcf_destroy_chain(cl->filter_list); qdisc_destroy(cl->q); qdisc_put_rtab(cl->R_tab); #ifdef CONFIG_NET_ESTIMATOR Loading @@ -1760,7 +1750,7 @@ cbq_destroy(struct Qdisc* sch) */ for (h = 0; h < 16; h++) for (cl = q->classes[h]; cl; cl = cl->next) cbq_destroy_filters(cl); tcf_destroy_chain(cl->filter_list); for (h = 0; h < 16; h++) { struct cbq_class *next; Loading net/sched/sch_dsmark.c +1 −7 Original line number Diff line number Diff line Loading @@ -412,16 +412,10 @@ static void dsmark_reset(struct Qdisc *sch) static void dsmark_destroy(struct Qdisc *sch) { struct dsmark_qdisc_data *p = PRIV(sch); struct tcf_proto *tp; DPRINTK("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p); while (p->filter_list) { tp = p->filter_list; p->filter_list = tp->next; tcf_destroy(tp); } tcf_destroy_chain(p->filter_list); qdisc_destroy(p->q); kfree(p->mask); } Loading Loading
include/net/sch_generic.h +2 −8 Original line number Diff line number Diff line Loading @@ -177,14 +177,8 @@ extern void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n); extern struct Qdisc *qdisc_alloc(struct net_device *dev, struct Qdisc_ops *ops); extern struct Qdisc *qdisc_create_dflt(struct net_device *dev, struct Qdisc_ops *ops, u32 parentid); static inline void tcf_destroy(struct tcf_proto *tp) { tp->ops->destroy(tp); module_put(tp->ops->owner); kfree(tp); } extern void tcf_destroy(struct tcf_proto *tp); extern void tcf_destroy_chain(struct tcf_proto *fl); static inline int __qdisc_enqueue_tail(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff_head *list) Loading
net/sched/sch_api.c +18 −0 Original line number Diff line number Diff line Loading @@ -1220,6 +1220,24 @@ int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, return -1; } void tcf_destroy(struct tcf_proto *tp) { tp->ops->destroy(tp); module_put(tp->ops->owner); kfree(tp); } void tcf_destroy_chain(struct tcf_proto *fl) { struct tcf_proto *tp; while ((tp = fl) != NULL) { fl = tp->next; tcf_destroy(tp); } } EXPORT_SYMBOL(tcf_destroy_chain); #ifdef CONFIG_PROC_FS static int psched_show(struct seq_file *seq, void *v) { Loading
net/sched/sch_atm.c +2 −15 Original line number Diff line number Diff line Loading @@ -158,19 +158,6 @@ static unsigned long atm_tc_bind_filter(struct Qdisc *sch, return atm_tc_get(sch,classid); } static void destroy_filters(struct atm_flow_data *flow) { struct tcf_proto *filter; while ((filter = flow->filter_list)) { DPRINTK("destroy_filters: destroying filter %p\n",filter); flow->filter_list = filter->next; tcf_destroy(filter); } } /* * atm_tc_put handles all destructions, including the ones that are explicitly * requested (atm_tc_destroy, etc.). The assumption here is that we never drop Loading @@ -195,7 +182,7 @@ static void atm_tc_put(struct Qdisc *sch, unsigned long cl) *prev = flow->next; DPRINTK("atm_tc_put: qdisc %p\n",flow->q); qdisc_destroy(flow->q); destroy_filters(flow); tcf_destroy_chain(flow->filter_list); if (flow->sock) { DPRINTK("atm_tc_put: f_count %d\n", file_count(flow->sock->file)); Loading Loading @@ -611,7 +598,7 @@ static void atm_tc_destroy(struct Qdisc *sch) DPRINTK("atm_tc_destroy(sch %p,[qdisc %p])\n",sch,p); /* races ? */ while ((flow = p->flows)) { destroy_filters(flow); tcf_destroy_chain(flow->filter_list); if (flow->ref > 1) printk(KERN_ERR "atm_destroy: %p->ref = %d\n",flow, flow->ref); Loading
net/sched/sch_cbq.c +2 −12 Original line number Diff line number Diff line Loading @@ -1717,23 +1717,13 @@ static unsigned long cbq_get(struct Qdisc *sch, u32 classid) return 0; } static void cbq_destroy_filters(struct cbq_class *cl) { struct tcf_proto *tp; while ((tp = cl->filter_list) != NULL) { cl->filter_list = tp->next; tcf_destroy(tp); } } static void cbq_destroy_class(struct Qdisc *sch, struct cbq_class *cl) { struct cbq_sched_data *q = qdisc_priv(sch); BUG_TRAP(!cl->filters); cbq_destroy_filters(cl); tcf_destroy_chain(cl->filter_list); qdisc_destroy(cl->q); qdisc_put_rtab(cl->R_tab); #ifdef CONFIG_NET_ESTIMATOR Loading @@ -1760,7 +1750,7 @@ cbq_destroy(struct Qdisc* sch) */ for (h = 0; h < 16; h++) for (cl = q->classes[h]; cl; cl = cl->next) cbq_destroy_filters(cl); tcf_destroy_chain(cl->filter_list); for (h = 0; h < 16; h++) { struct cbq_class *next; Loading
net/sched/sch_dsmark.c +1 −7 Original line number Diff line number Diff line Loading @@ -412,16 +412,10 @@ static void dsmark_reset(struct Qdisc *sch) static void dsmark_destroy(struct Qdisc *sch) { struct dsmark_qdisc_data *p = PRIV(sch); struct tcf_proto *tp; DPRINTK("dsmark_destroy(sch %p,[qdisc %p])\n", sch, p); while (p->filter_list) { tp = p->filter_list; p->filter_list = tp->next; tcf_destroy(tp); } tcf_destroy_chain(p->filter_list); qdisc_destroy(p->q); kfree(p->mask); } Loading