From: Michel Lespinasse Date: Fri, 7 Sep 2012 00:23:45 +0000 (+1000) Subject: rbtree: fix incorrect rbtree node insertion in fs/proc/proc_sysctl.c X-Git-Tag: next-20120907~1^2~131 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ee2d63de6e37092d36c312f3470b7963fbaaebe3;p=karo-tx-linux.git rbtree: fix incorrect rbtree node insertion in fs/proc/proc_sysctl.c The recently added code to use rbtrees in sysctl did not follow the proper rbtree interface on insertion - it was calling rb_link_node() which inserts a new node into the binary tree, but missed the call to rb_insert_color() which properly balances the rbtree and establishes all expected rbtree invariants. I found out about this only because faulty commit also used rb_init_node(), which I am removing within this patchset. But I think it's an easy mistake to make, and it makes me wonder if we should change the rbtree API so that insertions would be done with a single rb_insert() call (even if its implementation could still inline the rb_link_node() part and call a private __rb_insert_color function to do the rebalancing). Signed-off-by: Michel Lespinasse Cc: Andrea Arcangeli Acked-by: David Woodhouse Cc: Rik van Riel Cc: Peter Zijlstra Cc: Daniel Santos Cc: Jens Axboe Cc: "Eric W. Biederman" Signed-off-by: Andrew Morton --- diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index a93dec45b6b7..14c5bdd0ee76 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c @@ -142,6 +142,7 @@ static int insert_entry(struct ctl_table_header *head, struct ctl_table *entry) } rb_link_node(node, parent, p); + rb_insert_color(node, &head->parent->root); return 0; }