Commit b1c8047c authored by Cody P Schafer's avatar Cody P Schafer Committed by Linus Torvalds

fs/ext3: use rbtree postorder iteration helper instead of opencoding

Use rbtree_postorder_for_each_entry_safe() to destroy the rbtree instead
of opencoding an alternate postorder iteration that modifies the tree
Signed-off-by: default avatarCody P Schafer <cody@linux.vnet.ibm.com>
Cc: Michel Lespinasse <walken@google.com>
Cc: Jan Kara <jack@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e8bbeeb7
...@@ -309,44 +309,18 @@ struct fname { ...@@ -309,44 +309,18 @@ struct fname {
*/ */
static void free_rb_tree_fname(struct rb_root *root) static void free_rb_tree_fname(struct rb_root *root)
{ {
struct rb_node *n = root->rb_node; struct fname *fname, *next;
struct rb_node *parent;
struct fname *fname;
while (n) { rbtree_postorder_for_each_entry_safe(fname, next, root, rb_hash)
/* Do the node's children first */
if (n->rb_left) {
n = n->rb_left;
continue;
}
if (n->rb_right) {
n = n->rb_right;
continue;
}
/*
* The node has no children; free it, and then zero
* out parent's link to it. Finally go to the
* beginning of the loop and try to free the parent
* node.
*/
parent = rb_parent(n);
fname = rb_entry(n, struct fname, rb_hash);
while (fname) { while (fname) {
struct fname * old = fname; struct fname * old = fname;
fname = fname->next; fname = fname->next;
kfree (old); kfree (old);
} }
if (!parent)
*root = RB_ROOT; *root = RB_ROOT;
else if (parent->rb_left == n)
parent->rb_left = NULL;
else if (parent->rb_right == n)
parent->rb_right = NULL;
n = parent;
}
} }
static struct dir_private_info *ext3_htree_create_dir_info(struct file *filp, static struct dir_private_info *ext3_htree_create_dir_info(struct file *filp,
loff_t pos) loff_t pos)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment