rb_tree: remove redundant if()-condition in rb_erase()
authorWolfram Strepp <wstrepp@gmx.de>
Tue, 16 Jun 2009 22:34:13 +0000 (15:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 17 Jun 2009 02:47:56 +0000 (19:47 -0700)
Furthermore, notice that the initial checks:

if (!node->rb_left)
child = node->rb_right;
else if (!node->rb_right)
child = node->rb_left;
else
{
...
}
guarantee that old->rb_right is set in the final else branch, therefore
we can omit checking that again.

Signed-off-by: Wolfram Strepp <wstrepp@gmx.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/rbtree.c

index 4b4b29b4577da1fa3c6a924b2072ec766b933901..e2aa3be29858cdcdd69bf4a43a67813db84079ee 100644 (file)
@@ -250,15 +250,15 @@ void rb_erase(struct rb_node *node, struct rb_root *root)
                        if (child)
                                rb_set_parent(child, parent);
                        parent->rb_left = child;
+
+                       node->rb_right = old->rb_right;
+                       rb_set_parent(old->rb_right, node);
                }
 
                node->rb_parent_color = old->rb_parent_color;
-               node->rb_right = old->rb_right;
                node->rb_left = old->rb_left;
-
                rb_set_parent(old->rb_left, node);
-               if (old->rb_right)
-                       rb_set_parent(old->rb_right, node);
+
                goto color;
        }