int tcf_exts_validate(struct net *net, struct tcf_proto *tp,
struct nlattr **tb, struct nlattr *rate_tlv,
struct tcf_exts *exts, bool ovr);
-void tcf_exts_destroy(struct tcf_proto *tp, struct tcf_exts *exts);
+void tcf_exts_destroy(struct tcf_exts *exts);
void tcf_exts_change(struct tcf_proto *tp, struct tcf_exts *dst,
struct tcf_exts *src);
int tcf_exts_dump(struct sk_buff *skb, struct tcf_exts *exts);
return skb->len;
}
-void tcf_exts_destroy(struct tcf_proto *tp, struct tcf_exts *exts)
+void tcf_exts_destroy(struct tcf_exts *exts)
{
#ifdef CONFIG_NET_CLS_ACT
tcf_action_destroy(&exts->actions, TCA_ACT_UNBIND);
struct tcf_proto *tp = f->tp;
tcf_unbind_filter(tp, &f->res);
- tcf_exts_destroy(tp, &f->exts);
+ tcf_exts_destroy(&f->exts);
tcf_em_tree_destroy(tp, &f->ematches);
kfree(f);
}
return 0;
errout:
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}
static void cls_bpf_delete_prog(struct tcf_proto *tp, struct cls_bpf_prog *prog)
{
tcf_unbind_filter(tp, &prog->res);
- tcf_exts_destroy(tp, &prog->exts);
+ tcf_exts_destroy(&prog->exts);
bpf_prog_destroy(prog->filter);
errout_free:
kfree(bpf_ops);
errout:
- tcf_exts_destroy(tp, &exts);
+ tcf_exts_destroy(&exts);
return ret;
}
struct cls_cgroup_head,
rcu);
- tcf_exts_destroy(head->tp, &head->exts);
+ tcf_exts_destroy(&head->exts);
tcf_em_tree_destroy(head->tp, &head->ematches);
kfree(head);
}
err = tcf_em_tree_validate(tp, tb[TCA_CGROUP_EMATCHES], &t);
if (err < 0) {
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
goto errout;
}
struct cls_cgroup_head *head = rtnl_dereference(tp->root);
if (head) {
- tcf_exts_destroy(tp, &head->exts);
+ tcf_exts_destroy(&head->exts);
tcf_em_tree_destroy(tp, &head->ematches);
RCU_INIT_POINTER(tp->root, NULL);
kfree_rcu(head, rcu);
struct flow_filter *f = container_of(head, struct flow_filter, rcu);
del_timer_sync(&f->perturb_timer);
- tcf_exts_destroy(f->tp, &f->exts);
+ tcf_exts_destroy(&f->exts);
tcf_em_tree_destroy(f->tp, &f->ematches);
kfree(f);
}
tcf_em_tree_destroy(tp, &t);
kfree(fnew);
err1:
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}
struct tcf_proto *tp = f->tp;
tcf_unbind_filter(tp, &f->res);
- tcf_exts_destroy(tp, &f->exts);
+ tcf_exts_destroy(&f->exts);
kfree(f);
}
return 0;
errout:
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}
struct tcf_proto *tp = f->tp;
tcf_unbind_filter(tp, &f->res);
- tcf_exts_destroy(tp, &f->exts);
+ tcf_exts_destroy(&f->exts);
kfree(f);
}
return 0;
errout:
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}
rsvp_delete_filter(struct tcf_proto *tp, struct rsvp_filter *f)
{
tcf_unbind_filter(tp, &f->res);
- tcf_exts_destroy(tp, &f->exts);
+ tcf_exts_destroy(&f->exts);
kfree_rcu(f, rcu);
}
errout:
kfree(f);
errout2:
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}
rcu_assign_pointer(*walk, rtnl_dereference(f->next));
}
tcf_unbind_filter(tp, &r->res);
- tcf_exts_destroy(tp, &r->exts);
+ tcf_exts_destroy(&r->exts);
if (f)
kfree_rcu(f, rcu);
return 0;
kfree(cp->h);
errout:
kfree(cp);
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}
bool free_pf)
{
tcf_unbind_filter(tp, &n->res);
- tcf_exts_destroy(tp, &n->exts);
+ tcf_exts_destroy(&n->exts);
if (n->ht_down)
n->ht_down->refcnt--;
#ifdef CONFIG_CLS_U32_PERF
return 0;
errout:
- tcf_exts_destroy(tp, &e);
+ tcf_exts_destroy(&e);
return err;
}