projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
video: rockchip: iep: add drm support
[firefly-linux-kernel-4.4.55.git]
/
lib
/
radix-tree.c
diff --git
a/lib/radix-tree.c
b/lib/radix-tree.c
index fcf5d98574ce46871dca087d2c803dbfb67c0b81..6b79e9026e24894000a2bdf4180db80f8190b357 100644
(file)
--- 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) {
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 (!results[ret])
continue;
+ if (radix_tree_is_indirect_ptr(results[ret])) {
+ slot = radix_tree_iter_retry(&iter);
+ continue;
+ }
if (++ret == max_items)
break;
}
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) {
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 (!results[ret])
continue;
+ if (radix_tree_is_indirect_ptr(results[ret])) {
+ slot = radix_tree_iter_retry(&iter);
+ continue;
+ }
if (++ret == max_items)
break;
}
if (++ret == max_items)
break;
}