diff options
author | Florian Westphal <fw@strlen.de> | 2014-07-24 16:50:36 +0200 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2015-12-01 15:01:20 +0800 |
commit | 31b36090a9807196f6885b8ed2c39a6ab31d23f5 (patch) | |
tree | c42be4eff2d1b9bd28939f3073317953381337ad /net/ipv6/netfilter/nf_conntrack_reasm.c | |
parent | 1af41b58c2d3572206912ac0becd4197b62de419 (diff) |
inet: frag: use seqlock for hash rebuildv3.10/topic/hisilicon-inetlinux-linaro-lsk-v3.10-android-test
rehash is rare operation, don't force readers to take
the read-side rwlock.
Instead, we only have to detect the (rare) case where
the secret was altered while we are trying to insert
a new inetfrag queue into the table.
If it was changed, drop the bucket lock and recompute
the hash to get the 'new' chain bucket that we have to
insert into.
Joint work with Nikolay Aleksandrov.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit ab1c724f633080ed2e8a0cfe61654599b55cf8f9)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
Conflicts:
net/ipv6/netfilter/nf_conntrack_reasm.c
net/ipv6/reassembly.c
Diffstat (limited to 'net/ipv6/netfilter/nf_conntrack_reasm.c')
-rw-r--r-- | net/ipv6/netfilter/nf_conntrack_reasm.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c index d4ea995e4bdb..2197b29afbc0 100644 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c @@ -193,7 +193,7 @@ static inline struct frag_queue *fq_find(struct net *net, __be32 id, arg.dst = dst; arg.ecn = ecn; - read_lock_bh(&nf_frags.lock); + local_bh_disable(); hash = inet6_hash_frag(id, src, dst, nf_frags.rnd); q = inet_frag_find(&net->nf_frag.frags, &nf_frags, &arg, hash); |