summaryrefslogtreecommitdiffstats
path: root/net/sched/act_ipt.c
diff options
context:
space:
mode:
authorWANG Cong2014-02-12 02:07:32 +0100
committerDavid S. Miller2014-02-13 01:23:32 +0100
commita5b5c958ffd1610545d6b4b8290aa9c5266d10fa (patch)
tree532a87c5ae6d0c2f2f766820c051f7a5b8f7a366 /net/sched/act_ipt.c
parentnet_sched: act: hide struct tcf_common from API (diff)
downloadkernel-qcow2-linux-a5b5c958ffd1610545d6b4b8290aa9c5266d10fa.tar.gz
kernel-qcow2-linux-a5b5c958ffd1610545d6b4b8290aa9c5266d10fa.tar.xz
kernel-qcow2-linux-a5b5c958ffd1610545d6b4b8290aa9c5266d10fa.zip
net_sched: act: refactor cleanup ops
For bindcnt and refcnt etc., they are common for all actions, not need to repeat such operations for their own, they can be unified now. Actions just need to do its specific cleanup if needed. Cc: Jamal Hadi Salim <jhs@mojatatu.com> Cc: David S. Miller <davem@davemloft.net> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_ipt.c')
-rw-r--r--net/sched/act_ipt.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c
index f5e69782d400..71f29f1b5a20 100644
--- a/net/sched/act_ipt.c
+++ b/net/sched/act_ipt.c
@@ -69,23 +69,12 @@ static void ipt_destroy_target(struct xt_entry_target *t)
module_put(par.target->me);
}
-static int tcf_ipt_release(struct tc_action *a, int bind)
+static void tcf_ipt_release(struct tc_action *a, int bind)
{
struct tcf_ipt *ipt = to_ipt(a);
- int ret = 0;
- if (ipt) {
- if (bind)
- ipt->tcf_bindcnt--;
- ipt->tcf_refcnt--;
- if (ipt->tcf_bindcnt <= 0 && ipt->tcf_refcnt <= 0) {
- ipt_destroy_target(ipt->tcfi_t);
- kfree(ipt->tcfi_tname);
- kfree(ipt->tcfi_t);
- tcf_hash_destroy(a);
- ret = ACT_P_DELETED;
- }
- }
- return ret;
+ ipt_destroy_target(ipt->tcfi_t);
+ kfree(ipt->tcfi_tname);
+ kfree(ipt->tcfi_t);
}
static const struct nla_policy ipt_policy[TCA_IPT_MAX + 1] = {
@@ -133,7 +122,7 @@ static int tcf_ipt_init(struct net *net, struct nlattr *nla, struct nlattr *est,
} else {
if (bind)/* dont override defaults */
return 0;
- tcf_ipt_release(a, bind);
+ tcf_hash_release(a, bind);
if (!ovr)
return -EEXIST;