diff options
author | Florian Westphal <fw@strlen.de> | 2014-07-24 16:50:36 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-07-27 22:34:36 -0700 |
commit | ab1c724f633080ed2e8a0cfe61654599b55cf8f9 (patch) | |
tree | 215b28da3dc0fbbac8dd853501306f65b165a499 /net/ipv6/reassembly.c | |
parent | e3a57d18b06179d68fcf7a0a06ad844493c65e06 (diff) | |
download | linux-ab1c724f633080ed2e8a0cfe61654599b55cf8f9.tar.gz linux-ab1c724f633080ed2e8a0cfe61654599b55cf8f9.tar.bz2 linux-ab1c724f633080ed2e8a0cfe61654599b55cf8f9.zip |
inet: frag: use seqlock for hash rebuild
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>
Diffstat (limited to 'net/ipv6/reassembly.c')
-rw-r--r-- | net/ipv6/reassembly.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index 987fea46b915..57a9707b2032 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c @@ -190,7 +190,6 @@ fq_find(struct net *net, __be32 id, const struct in6_addr *src, arg.dst = dst; arg.ecn = ecn; - read_lock(&ip6_frags.lock); hash = inet6_hash_frag(id, src, dst); q = inet_frag_find(&net->ipv6.frags, &ip6_frags, &arg, hash); |