diff options
author | Florian Westphal <fw@strlen.de> | 2009-06-05 13:26:21 +0200 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2009-06-05 13:26:21 +0200 |
commit | 17f2f52be0edb6d1ff5a3675f2bc545aea2dbf76 (patch) | |
tree | 50c1e9cb16c43c23525eccded67615f009bd691e /net/ipv4 | |
parent | 10662aa3083f869c645cc2abf5d66849001e2f5d (diff) | |
download | kernel_samsung_smdk4412-17f2f52be0edb6d1ff5a3675f2bc545aea2dbf76.zip kernel_samsung_smdk4412-17f2f52be0edb6d1ff5a3675f2bc545aea2dbf76.tar.gz kernel_samsung_smdk4412-17f2f52be0edb6d1ff5a3675f2bc545aea2dbf76.tar.bz2 |
netfilter: ipt_MASQUERADE: remove redundant rwlock
The lock "protects" an assignment and a comparision of an integer.
When the caller of device_cmp() evaluates the result, nat->masq_index
may already have been changed (regardless if the lock is there or not).
So, the lock either has to be held during nf_ct_iterate_cleanup(),
or can be removed.
This does the latter.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/netfilter/ipt_MASQUERADE.c | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/net/ipv4/netfilter/ipt_MASQUERADE.c b/net/ipv4/netfilter/ipt_MASQUERADE.c index f389f60..855505d 100644 --- a/net/ipv4/netfilter/ipt_MASQUERADE.c +++ b/net/ipv4/netfilter/ipt_MASQUERADE.c @@ -27,9 +27,6 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>"); MODULE_DESCRIPTION("Xtables: automatic-address SNAT"); -/* Lock protects masq region inside conntrack */ -static DEFINE_RWLOCK(masq_lock); - /* FIXME: Multiple targets. --RR */ static bool masquerade_tg_check(const struct xt_tgchk_param *par) { @@ -79,9 +76,7 @@ masquerade_tg(struct sk_buff *skb, const struct xt_target_param *par) return NF_DROP; } - write_lock_bh(&masq_lock); nat->masq_index = par->out->ifindex; - write_unlock_bh(&masq_lock); /* Transfer from original range. */ newrange = ((struct nf_nat_range) @@ -97,16 +92,11 @@ static int device_cmp(struct nf_conn *i, void *ifindex) { const struct nf_conn_nat *nat = nfct_nat(i); - int ret; if (!nat) return 0; - read_lock_bh(&masq_lock); - ret = (nat->masq_index == (int)(long)ifindex); - read_unlock_bh(&masq_lock); - - return ret; + return nat->masq_index == (int)(long)ifindex; } static int masq_device_event(struct notifier_block *this, |