diff options
author | Changli Gao <xiaosuo@gmail.com> | 2010-06-29 23:07:09 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-30 12:12:37 -0700 |
commit | 504f85c9d05f7c605306e808f0d835fe11bfd18d (patch) | |
tree | 98c3aa1f09c3c84598abfe6555010bfc54a2493d /net/sched | |
parent | 5acbf7f10b9e336510a1de79b4af06f6da9a8c5a (diff) | |
download | linux-3.10-504f85c9d05f7c605306e808f0d835fe11bfd18d.tar.gz linux-3.10-504f85c9d05f7c605306e808f0d835fe11bfd18d.tar.bz2 linux-3.10-504f85c9d05f7c605306e808f0d835fe11bfd18d.zip |
act_nat: use stack variable
act_nat: use stack variable
structure tc_nat isn't too big for stack, so we can put it in stack.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
----
net/sched/act_nat.c | 31 ++++++++++---------------------
1 file changed, 10 insertions(+), 21 deletions(-)
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/act_nat.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c index 570949417f3..0be49a4b4d8 100644 --- a/net/sched/act_nat.c +++ b/net/sched/act_nat.c @@ -265,40 +265,29 @@ static int tcf_nat_dump(struct sk_buff *skb, struct tc_action *a, { unsigned char *b = skb_tail_pointer(skb); struct tcf_nat *p = a->priv; - struct tc_nat *opt; + struct tc_nat opt; struct tcf_t t; - int s; - s = sizeof(*opt); + opt.old_addr = p->old_addr; + opt.new_addr = p->new_addr; + opt.mask = p->mask; + opt.flags = p->flags; - /* netlink spinlocks held above us - must use ATOMIC */ - opt = kzalloc(s, GFP_ATOMIC); - if (unlikely(!opt)) - return -ENOBUFS; + opt.index = p->tcf_index; + opt.action = p->tcf_action; + opt.refcnt = p->tcf_refcnt - ref; + opt.bindcnt = p->tcf_bindcnt - bind; - opt->old_addr = p->old_addr; - opt->new_addr = p->new_addr; - opt->mask = p->mask; - opt->flags = p->flags; - - opt->index = p->tcf_index; - opt->action = p->tcf_action; - opt->refcnt = p->tcf_refcnt - ref; - opt->bindcnt = p->tcf_bindcnt - bind; - - NLA_PUT(skb, TCA_NAT_PARMS, s, opt); + NLA_PUT(skb, TCA_NAT_PARMS, sizeof(opt), &opt); t.install = jiffies_to_clock_t(jiffies - p->tcf_tm.install); t.lastuse = jiffies_to_clock_t(jiffies - p->tcf_tm.lastuse); t.expires = jiffies_to_clock_t(p->tcf_tm.expires); NLA_PUT(skb, TCA_NAT_TM, sizeof(t), &t); - kfree(opt); - return skb->len; nla_put_failure: nlmsg_trim(skb, b); - kfree(opt); return -1; } |