]> Pileus Git - ~andy/linux/commitdiff
prio_tree: simplify prio_tree_expand()
authorXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Fri, 23 Mar 2012 22:02:15 +0000 (15:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 23 Mar 2012 23:58:36 +0000 (16:58 -0700)
In current code, the deleted-node is recorded from first to last,
actually, we can directly attach these node on 'node' we will insert as
the left child, it can let the code more readable.

Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/prio_tree.c

index 888e8b3a97ea299e318f1cd79418269c95d696e9..928482bb8385cc263395e81d92b2e10dcf21399b 100644 (file)
@@ -94,43 +94,33 @@ static inline unsigned long prio_tree_maxindex(unsigned int bits)
 static struct prio_tree_node *prio_tree_expand(struct prio_tree_root *root,
                struct prio_tree_node *node, unsigned long max_heap_index)
 {
-       struct prio_tree_node *first = NULL, *prev, *last = NULL;
+       struct prio_tree_node *prev;
 
        if (max_heap_index > prio_tree_maxindex(root->index_bits))
                root->index_bits++;
 
+       prev = node;
+       INIT_PRIO_TREE_NODE(node);
+
        while (max_heap_index > prio_tree_maxindex(root->index_bits)) {
+               struct prio_tree_node *tmp = root->prio_tree_node;
+
                root->index_bits++;
 
                if (prio_tree_empty(root))
                        continue;
 
-               if (first == NULL) {
-                       first = root->prio_tree_node;
-                       prio_tree_remove(root, root->prio_tree_node);
-                       INIT_PRIO_TREE_NODE(first);
-                       last = first;
-               } else {
-                       prev = last;
-                       last = root->prio_tree_node;
-                       prio_tree_remove(root, root->prio_tree_node);
-                       INIT_PRIO_TREE_NODE(last);
-                       prev->left = last;
-                       last->parent = prev;
-               }
-       }
-
-       INIT_PRIO_TREE_NODE(node);
+               prio_tree_remove(root, root->prio_tree_node);
+               INIT_PRIO_TREE_NODE(tmp);
 
-       if (first) {
-               node->left = first;
-               first->parent = node;
-       } else
-               last = node;
+               prev->left = tmp;
+               tmp->parent = prev;
+               prev = tmp;
+       }
 
        if (!prio_tree_empty(root)) {
-               last->left = root->prio_tree_node;
-               last->left->parent = last;
+               prev->left = root->prio_tree_node;
+               prev->left->parent = prev;
        }
 
        root->prio_tree_node = node;