提交 3fa36acb 编写于 作者: H Hugh Dickins 提交者: Linus Torvalds

radix_tree: clean away saw_unset_tag leftovers

radix_tree_tag_get()'s BUG (when it sees a tag after saw_unset_tag) was
unsafe and removed in 2.6.34, but the pointless saw_unset_tag left behind.

Remove it now, and return 0 as soon as we see unset tag - we already rely
upon the root tag to be correct, returning 0 immediately if it's not set.
Signed-off-by: NHugh Dickins <hughd@google.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 0dabec93
...@@ -576,7 +576,6 @@ int radix_tree_tag_get(struct radix_tree_root *root, ...@@ -576,7 +576,6 @@ int radix_tree_tag_get(struct radix_tree_root *root,
{ {
unsigned int height, shift; unsigned int height, shift;
struct radix_tree_node *node; struct radix_tree_node *node;
int saw_unset_tag = 0;
/* check the root's tag bit */ /* check the root's tag bit */
if (!root_tag_get(root, tag)) if (!root_tag_get(root, tag))
...@@ -603,15 +602,10 @@ int radix_tree_tag_get(struct radix_tree_root *root, ...@@ -603,15 +602,10 @@ int radix_tree_tag_get(struct radix_tree_root *root,
return 0; return 0;
offset = (index >> shift) & RADIX_TREE_MAP_MASK; offset = (index >> shift) & RADIX_TREE_MAP_MASK;
/*
* This is just a debug check. Later, we can bale as soon as
* we see an unset tag.
*/
if (!tag_get(node, tag, offset)) if (!tag_get(node, tag, offset))
saw_unset_tag = 1; return 0;
if (height == 1) if (height == 1)
return !!tag_get(node, tag, offset); return 1;
node = rcu_dereference_raw(node->slots[offset]); node = rcu_dereference_raw(node->slots[offset]);
shift -= RADIX_TREE_MAP_SHIFT; shift -= RADIX_TREE_MAP_SHIFT;
height--; height--;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册