aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorChangli Gao <xiaosuo@gmail.com>2009-11-05 08:51:31 -0500
committerPatrick McHardy <kaber@trash.net>2009-11-05 08:51:31 -0500
commit5ae27aa2b16478a84d833ab4065798e752941c5a (patch)
treeb3b50c6401a3b0579097cc21ce9c15a13d881dcf /net
parent9481721be10a1bfd1ee9ccf507eecd7f37caa5ec (diff)
netfilter: nf_conntrack: avoid additional compare.
Signed-off-by: Changli Gao <xiaosuo@gmail.com> Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/nf_conntrack_core.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 7c9ec3dee96e..8e572d7c08c5 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -511,11 +511,17 @@ static noinline int early_drop(struct net *net, unsigned int hash)
511 cnt++; 511 cnt++;
512 } 512 }
513 513
514 if (ct && unlikely(nf_ct_is_dying(ct) || 514 if (ct != NULL) {
515 !atomic_inc_not_zero(&ct->ct_general.use))) 515 if (likely(!nf_ct_is_dying(ct) &&
516 ct = NULL; 516 atomic_inc_not_zero(&ct->ct_general.use)))
517 if (ct || cnt >= NF_CT_EVICTION_RANGE) 517 break;
518 else
519 ct = NULL;
520 }
521
522 if (cnt >= NF_CT_EVICTION_RANGE)
518 break; 523 break;
524
519 hash = (hash + 1) % nf_conntrack_htable_size; 525 hash = (hash + 1) % nf_conntrack_htable_size;
520 } 526 }
521 rcu_read_unlock(); 527 rcu_read_unlock();