diff options
author | David S. Miller <davem@davemloft.net> | 2012-03-09 17:34:20 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-09 17:34:20 -0500 |
commit | b2d3298e0916fa059712691c85a0e97becc4ab9f (patch) | |
tree | c7d5ea46a9dbf9cebdb122df4aaf0beda6e7621e /net/netfilter | |
parent | 1a0bdadb4e36abac63b0a9787f372aac30c11a9e (diff) | |
parent | a7f4255f906f60f72e00aad2fb000939449ff32e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'net/netfilter')
-rw-r--r-- | net/netfilter/nf_conntrack_core.c | 8 | ||||
-rw-r--r-- | net/netfilter/nf_conntrack_netlink.c | 3 |
2 files changed, 6 insertions, 5 deletions
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 81e2aa4ca1f..7b48035826e 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c | |||
@@ -636,8 +636,12 @@ static noinline int early_drop(struct net *net, unsigned int hash) | |||
636 | 636 | ||
637 | if (del_timer(&ct->timeout)) { | 637 | if (del_timer(&ct->timeout)) { |
638 | death_by_timeout((unsigned long)ct); | 638 | death_by_timeout((unsigned long)ct); |
639 | dropped = 1; | 639 | /* Check if we indeed killed this entry. Reliable event |
640 | NF_CT_STAT_INC_ATOMIC(net, early_drop); | 640 | delivery may have inserted it into the dying list. */ |
641 | if (test_bit(IPS_DYING_BIT, &ct->status)) { | ||
642 | dropped = 1; | ||
643 | NF_CT_STAT_INC_ATOMIC(net, early_drop); | ||
644 | } | ||
641 | } | 645 | } |
642 | nf_ct_put(ct); | 646 | nf_ct_put(ct); |
643 | return dropped; | 647 | return dropped; |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index c1ea64c6c70..2124977ac31 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -1084,16 +1084,13 @@ ctnetlink_parse_nat_setup(struct nf_conn *ct, | |||
1084 | if (!parse_nat_setup) { | 1084 | if (!parse_nat_setup) { |
1085 | #ifdef CONFIG_MODULES | 1085 | #ifdef CONFIG_MODULES |
1086 | rcu_read_unlock(); | 1086 | rcu_read_unlock(); |
1087 | spin_unlock_bh(&nf_conntrack_lock); | ||
1088 | nfnl_unlock(); | 1087 | nfnl_unlock(); |
1089 | if (request_module("nf-nat-ipv4") < 0) { | 1088 | if (request_module("nf-nat-ipv4") < 0) { |
1090 | nfnl_lock(); | 1089 | nfnl_lock(); |
1091 | spin_lock_bh(&nf_conntrack_lock); | ||
1092 | rcu_read_lock(); | 1090 | rcu_read_lock(); |
1093 | return -EOPNOTSUPP; | 1091 | return -EOPNOTSUPP; |
1094 | } | 1092 | } |
1095 | nfnl_lock(); | 1093 | nfnl_lock(); |
1096 | spin_lock_bh(&nf_conntrack_lock); | ||
1097 | rcu_read_lock(); | 1094 | rcu_read_lock(); |
1098 | if (nfnetlink_parse_nat_setup_hook) | 1095 | if (nfnetlink_parse_nat_setup_hook) |
1099 | return -EAGAIN; | 1096 | return -EAGAIN; |