summaryrefslogtreecommitdiffstats
path: root/lib/rhashtable.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-03-13 02:54:10 +0100
committerDavid S. Miller <davem@davemloft.net>2015-03-13 04:02:30 +0100
commit393619474ec0ba2a16dee12ec78fd43164f1e9b7 (patch)
tree892a4eeba956db8f8abc28420ec29ac4cb0e7e53 /lib/rhashtable.c
parentrhashtable: kill ht->shift atomic operations (diff)
downloadlinux-393619474ec0ba2a16dee12ec78fd43164f1e9b7.tar.xz
linux-393619474ec0ba2a16dee12ec78fd43164f1e9b7.zip
rhashtable: Fix read-side crash during rehash
This patch fixes a typo rhashtable_lookup_compare where we fail to recompute the hash when looking up the new table. This causes elements to be missed and potentially a crash during a resize. Reported-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib/rhashtable.c')
-rw-r--r--lib/rhashtable.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c
index adea791ea3ab..fc0d451279f0 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
@@ -606,8 +606,8 @@ void *rhashtable_lookup_compare(struct rhashtable *ht, const void *key,
rcu_read_lock();
tbl = rht_dereference_rcu(ht->tbl, ht);
- hash = key_hashfn(ht, tbl, key);
restart:
+ hash = key_hashfn(ht, tbl, key);
rht_for_each_rcu(he, tbl, hash) {
if (!compare(rht_obj(ht, he), arg))
continue;