Message ID | 56ACABBC.9050303@huawei.com |
---|---|
State | Awaiting Upstream, archived |
Delegated to: | David Miller |
Headers | show |
Weidong Wang <wangweidong1@huawei.com> wrote: > In the 'for(...) {}', the *bucket alwasy < net->ct.htable_size, > so remove the check > @@ -1383,14 +1383,12 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data), > lockp = &nf_conntrack_locks[*bucket % CONNTRACK_LOCKS]; > local_bh_disable(); > spin_lock(lockp); > - if (*bucket < net->ct.htable_size) { AFAIU net->ct.htable_size can shrink between for-test and aquiring the bucket lockp, so this additional if-test is needed.
On 2016/1/31 5:30, Florian Westphal wrote: > Weidong Wang <wangweidong1@huawei.com> wrote: >> In the 'for(...) {}', the *bucket alwasy < net->ct.htable_size, >> so remove the check >> @@ -1383,14 +1383,12 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data), >> lockp = &nf_conntrack_locks[*bucket % CONNTRACK_LOCKS]; >> local_bh_disable(); >> spin_lock(lockp); >> - if (*bucket < net->ct.htable_size) { > > AFAIU net->ct.htable_size can shrink between for-test and aquiring > the bucket lockp, so this additional if-test is needed. > ok, Got it. So ignore this patch. Regards, Weidong > . >
From: Florian Westphal > Sent: 30 January 2016 21:30 > Weidong Wang <wangweidong1@huawei.com> wrote: > > In the 'for(...) {}', the *bucket alwasy < net->ct.htable_size, > > so remove the check > > @@ -1383,14 +1383,12 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data), > > lockp = &nf_conntrack_locks[*bucket % CONNTRACK_LOCKS]; > > local_bh_disable(); > > spin_lock(lockp); > > - if (*bucket < net->ct.htable_size) { > > AFAIU net->ct.htable_size can shrink between for-test and aquiring > the bucket lockp, so this additional if-test is needed. If the table can shrink, can it not also grow - in which case the references bucket will be incorrect? David
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 3cb3cb8..cd7d5c8 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -1383,14 +1383,12 @@ get_next_corpse(struct net *net, int (*iter)(struct nf_conn *i, void *data), lockp = &nf_conntrack_locks[*bucket % CONNTRACK_LOCKS]; local_bh_disable(); spin_lock(lockp); - if (*bucket < net->ct.htable_size) { - hlist_nulls_for_each_entry(h, n, &net->ct.hash[*bucket], hnnode) { - if (NF_CT_DIRECTION(h) != IP_CT_DIR_ORIGINAL) - continue; - ct = nf_ct_tuplehash_to_ctrack(h); - if (iter(ct, data)) - goto found; - } + hlist_nulls_for_each_entry(h, n, &net->ct.hash[*bucket], hnnode) { + if (NF_CT_DIRECTION(h) != IP_CT_DIR_ORIGINAL) + continue; + ct = nf_ct_tuplehash_to_ctrack(h); + if (iter(ct, data)) + goto found; } spin_unlock(lockp); local_bh_enable();
In the 'for(...) {}', the *bucket alwasy < net->ct.htable_size, so remove the check Signed-off-by: Weidong Wang <wangweidong1@huawei.com> --- net/netfilter/nf_conntrack_core.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)