diff options
author | David S. Miller <davem@davemloft.net> | 2009-12-03 13:23:12 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-03 13:23:12 -0800 |
commit | 424eff975192553a9ea8bfd51bf65039ffb356ef (patch) | |
tree | 5fa7b15715b3ce904f7250c50d09bc921d9f28bf /net/netfilter/nf_conntrack_core.c | |
parent | 55dbabee63462a455d8fb57caf08b69db256b012 (diff) | |
parent | 3666ed1c4837fd6906da0224c5373d7a2186a193 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-next-2.6
Diffstat (limited to 'net/netfilter/nf_conntrack_core.c')
-rw-r--r-- | net/netfilter/nf_conntrack_core.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index b9168c1864c..0e98c3282d4 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -512,11 +512,17 @@ static noinline int early_drop(struct net *net, unsigned int hash) cnt++; } - if (ct && unlikely(nf_ct_is_dying(ct) || - !atomic_inc_not_zero(&ct->ct_general.use))) - ct = NULL; - if (ct || cnt >= NF_CT_EVICTION_RANGE) + if (ct != NULL) { + if (likely(!nf_ct_is_dying(ct) && + atomic_inc_not_zero(&ct->ct_general.use))) + break; + else + ct = NULL; + } + + if (cnt >= NF_CT_EVICTION_RANGE) break; + hash = (hash + 1) % nf_conntrack_htable_size; } rcu_read_unlock(); |