diff options
| author | Ingo Molnar <mingo@kernel.org> | 2016-02-04 08:57:44 +0100 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2016-02-04 08:57:44 +0100 |
| commit | b83ea91f08f648460b08e8980560abdf96060a19 (patch) | |
| tree | 1a6db205770ed7103afe0aa1234dec0b1227f380 /lib/radix-tree.c | |
| parent | Merge tag 'perf-core-for-mingo-3' of git://git.kernel.org/pub/scm/linux/kerne... (diff) | |
| parent | Merge tag 'perf-urgent-for-mingo-2' of git://git.kernel.org/pub/scm/linux/ker... (diff) | |
| download | linux-b83ea91f08f648460b08e8980560abdf96060a19.tar.gz linux-b83ea91f08f648460b08e8980560abdf96060a19.zip | |
Merge branch 'perf/urgent' into perf/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib/radix-tree.c')
| -rw-r--r-- | lib/radix-tree.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index fcf5d98574ce..6b79e9026e24 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -1019,9 +1019,13 @@ radix_tree_gang_lookup(struct radix_tree_root *root, void **results, return 0; radix_tree_for_each_slot(slot, root, &iter, first_index) { - results[ret] = indirect_to_ptr(rcu_dereference_raw(*slot)); + results[ret] = rcu_dereference_raw(*slot); if (!results[ret]) continue; + if (radix_tree_is_indirect_ptr(results[ret])) { + slot = radix_tree_iter_retry(&iter); + continue; + } if (++ret == max_items) break; } @@ -1098,9 +1102,13 @@ radix_tree_gang_lookup_tag(struct radix_tree_root *root, void **results, return 0; radix_tree_for_each_tagged(slot, root, &iter, first_index, tag) { - results[ret] = indirect_to_ptr(rcu_dereference_raw(*slot)); + results[ret] = rcu_dereference_raw(*slot); if (!results[ret]) continue; + if (radix_tree_is_indirect_ptr(results[ret])) { + slot = radix_tree_iter_retry(&iter); + continue; + } if (++ret == max_items) break; } |
