diff options
author | Thomas Graf <tgraf@suug.ch> | 2015-02-05 02:03:31 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-02-06 15:18:34 -0800 |
commit | c88455ce50ae4224d84960ce2baa53e61580df27 (patch) | |
tree | 8d22b2be3dd981b8a17bf80d9d6f4d5c095bf1df /lib | |
parent | 2ca292d968ef20cb04f31192d1f626bd8d782960 (diff) | |
download | lwn-c88455ce50ae4224d84960ce2baa53e61580df27.tar.gz lwn-c88455ce50ae4224d84960ce2baa53e61580df27.zip |
rhashtable: key_hashfn() must return full hash value
The value computed by key_hashfn() is used by rhashtable_lookup_compare()
to traverse both tables during a resize. key_hashfn() must therefore
return the hash value without the buckets mask applied so it can be
masked to the size of each individual table.
Fixes: 97defe1ecf86 ("rhashtable: Per bucket locks & deferred expansion/shrinking")
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rhashtable.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c index 057919164e23..71fd0dd45ce3 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c @@ -94,13 +94,7 @@ static u32 obj_raw_hashfn(const struct rhashtable *ht, const void *ptr) static u32 key_hashfn(struct rhashtable *ht, const void *key, u32 len) { - struct bucket_table *tbl = rht_dereference_rcu(ht->tbl, ht); - u32 hash; - - hash = ht->p.hashfn(key, len, ht->p.hash_rnd); - hash >>= HASH_RESERVED_SPACE; - - return rht_bucket_index(tbl, hash); + return ht->p.hashfn(key, len, ht->p.hash_rnd) >> HASH_RESERVED_SPACE; } static u32 head_hashfn(const struct rhashtable *ht, |