radix-tree: tidy up range_tag_if_tagged
authorMatthew Wilcox <willy@linux.intel.com>
Sat, 21 May 2016 00:03:39 +0000 (17:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 21 May 2016 00:58:30 +0000 (17:58 -0700)
Convert radix_tree_range_tag_if_tagged to name the nodes parent, node
and child instead of node & slot.

Use parent->offset instead of playing games with 'upindex'.

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Kirill Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jan Kara <jack@suse.com>
Cc: Neil Brown <neilb@suse.de>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/radix-tree.c

index c42867a1769ae49d4436ac97a8af928e2f318ba1..1a82066165dbefd8ef7597d4e6fd779dd017aa63 100644 (file)
@@ -1009,9 +1009,9 @@ unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
                unsigned long nr_to_tag,
                unsigned int iftag, unsigned int settag)
 {
-       struct radix_tree_node *slot, *node = NULL;
+       struct radix_tree_node *parent, *node, *child;
        unsigned long maxindex;
-       unsigned int shift = radix_tree_load_root(root, &slot, &maxindex);
+       unsigned int shift = radix_tree_load_root(root, &child, &maxindex);
        unsigned long tagged = 0;
        unsigned long index = *first_indexp;
 
@@ -1024,28 +1024,25 @@ unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
                *first_indexp = last_index + 1;
                return 0;
        }
-       if (!radix_tree_is_internal_node(slot)) {
+       if (!radix_tree_is_internal_node(child)) {
                *first_indexp = last_index + 1;
                root_tag_set(root, settag);
                return 1;
        }
 
-       node = entry_to_node(slot);
+       node = entry_to_node(child);
        shift -= RADIX_TREE_MAP_SHIFT;
 
        for (;;) {
-               unsigned long upindex;
-               unsigned offset;
-
-               offset = (index >> shift) & RADIX_TREE_MAP_MASK;
-               offset = radix_tree_descend(node, &slot, offset);
-               if (!slot)
+               unsigned offset = (index >> shift) & RADIX_TREE_MAP_MASK;
+               offset = radix_tree_descend(node, &child, offset);
+               if (!child)
                        goto next;
                if (!tag_get(node, iftag, offset))
                        goto next;
                /* Sibling slots never have tags set on them */
-               if (radix_tree_is_internal_node(slot)) {
-                       node = entry_to_node(slot);
+               if (radix_tree_is_internal_node(child)) {
+                       node = entry_to_node(child);
                        shift -= RADIX_TREE_MAP_SHIFT;
                        continue;
                }
@@ -1054,20 +1051,18 @@ unsigned long radix_tree_range_tag_if_tagged(struct radix_tree_root *root,
                tagged++;
                tag_set(node, settag, offset);
 
-               slot = node->parent;
                /* walk back up the path tagging interior nodes */
-               upindex = index >> shift;
-               while (slot) {
-                       upindex >>= RADIX_TREE_MAP_SHIFT;
-                       offset = upindex & RADIX_TREE_MAP_MASK;
-
+               parent = node;
+               for (;;) {
+                       offset = parent->offset;
+                       parent = parent->parent;
+                       if (!parent)
+                               break;
                        /* stop if we find a node with the tag already set */
-                       if (tag_get(slot, settag, offset))
+                       if (tag_get(parent, settag, offset))
                                break;
-                       tag_set(slot, settag, offset);
-                       slot = slot->parent;
+                       tag_set(parent, settag, offset);
                }
-
  next:
                /* Go to next item at level determined by 'shift' */
                index = ((index >> shift) + 1) << shift;