summaryrefslogtreecommitdiffstats
path: root/lib/rhashtable.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2018-04-24 00:29:13 +0200
committerDavid S. Miller <davem@davemloft.net>2018-04-24 19:21:45 +0200
commitb41cc04b662ac96bbb291fb66b7b8aab5bc0a8c9 (patch)
treebb7b31dd529c7fe044ae0737e8c3fecd94d368fc /lib/rhashtable.c
parentrhashtable: Revise incorrect comment on r{hl, hash}table_walk_enter() (diff)
downloadlinux-b41cc04b662ac96bbb291fb66b7b8aab5bc0a8c9.tar.xz
linux-b41cc04b662ac96bbb291fb66b7b8aab5bc0a8c9.zip
rhashtable: reset iter when rhashtable_walk_start sees new table
The documentation claims that when rhashtable_walk_start_check() detects a resize event, it will rewind back to the beginning of the table. This is not true. We need to set ->slot and ->skip to be zero for it to be true. Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib/rhashtable.c')
-rw-r--r--lib/rhashtable.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c
index 6d490f51174e..81edf1ab38ab 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
@@ -737,6 +737,8 @@ int rhashtable_walk_start_check(struct rhashtable_iter *iter)
if (!iter->walker.tbl && !iter->end_of_table) {
iter->walker.tbl = rht_dereference_rcu(ht->tbl, ht);
+ iter->slot = 0;
+ iter->skip = 0;
return -EAGAIN;
}