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

fs/jffs2: 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>
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d1866bd0
...@@ -564,25 +564,10 @@ struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_ ...@@ -564,25 +564,10 @@ struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_
they're killed. */ they're killed. */
void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c) void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c)
{ {
struct jffs2_node_frag *frag; struct jffs2_node_frag *frag, *next;
struct jffs2_node_frag *parent;
if (!root->rb_node)
return;
dbg_fragtree("killing\n"); dbg_fragtree("killing\n");
rbtree_postorder_for_each_entry_safe(frag, next, root, rb) {
frag = (rb_entry(root->rb_node, struct jffs2_node_frag, rb));
while(frag) {
if (frag->rb.rb_left) {
frag = frag_left(frag);
continue;
}
if (frag->rb.rb_right) {
frag = frag_right(frag);
continue;
}
if (frag->node && !(--frag->node->frags)) { if (frag->node && !(--frag->node->frags)) {
/* Not a hole, and it's the final remaining frag /* Not a hole, and it's the final remaining frag
of this node. Free the node */ of this node. Free the node */
...@@ -591,17 +576,8 @@ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c) ...@@ -591,17 +576,8 @@ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c)
jffs2_free_full_dnode(frag->node); jffs2_free_full_dnode(frag->node);
} }
parent = frag_parent(frag);
if (parent) {
if (frag_left(parent) == frag)
parent->rb.rb_left = NULL;
else
parent->rb.rb_right = NULL;
}
jffs2_free_node_frag(frag); jffs2_free_node_frag(frag);
frag = parent;
cond_resched(); cond_resched();
} }
} }
......
...@@ -543,33 +543,13 @@ static int jffs2_build_inode_fragtree(struct jffs2_sb_info *c, ...@@ -543,33 +543,13 @@ static int jffs2_build_inode_fragtree(struct jffs2_sb_info *c,
static void jffs2_free_tmp_dnode_info_list(struct rb_root *list) static void jffs2_free_tmp_dnode_info_list(struct rb_root *list)
{ {
struct rb_node *this; struct jffs2_tmp_dnode_info *tn, *next;
struct jffs2_tmp_dnode_info *tn;
this = list->rb_node;
/* Now at bottom of tree */ rbtree_postorder_for_each_entry_safe(tn, next, list, rb) {
while (this) {
if (this->rb_left)
this = this->rb_left;
else if (this->rb_right)
this = this->rb_right;
else {
tn = rb_entry(this, struct jffs2_tmp_dnode_info, rb);
jffs2_free_full_dnode(tn->fn); jffs2_free_full_dnode(tn->fn);
jffs2_free_tmp_dnode_info(tn); jffs2_free_tmp_dnode_info(tn);
this = rb_parent(this);
if (!this)
break;
if (this->rb_left == &tn->rb)
this->rb_left = NULL;
else if (this->rb_right == &tn->rb)
this->rb_right = NULL;
else BUG();
}
} }
*list = RB_ROOT; *list = RB_ROOT;
} }
......
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