]> git.baikalelectronics.ru Git - kernel.git/commit
rhashtable: Fix walker behaviour during rehash
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 14 Mar 2015 02:57:20 +0000 (13:57 +1100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 15 Mar 2015 05:35:34 +0000 (01:35 -0400)
commit84c6576547dae95dfa2a7896be256d3ad10a949a
tree2cf7fcc92a1e2c2f541eda13aef5efd38501a0fb
parentad551415e4a6ddb11e67012dfea6aaa844756f64
rhashtable: Fix walker behaviour during rehash

Previously whenever the walker encountered a resize it simply
snaps back to the beginning and starts again.  However, this only
works if the rehash started and completed while the walker was
idle.

If the walker attempts to restart while the rehash is still ongoing,
we may miss objects that we shouldn't have.

This patch fixes this by making the walker walk the old table
followed by the new table just like all other readers.  If a
rehash is detected we will still signal our caller of the fact
so they can prepare for duplicates but we will simply continue
the walk onto the new table after the old one is finished either
by us or by the rehasher.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/rhashtable.h
lib/rhashtable.c