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: Cody 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d1866bd061
commit
e8bbeeb755
2 changed files with 5 additions and 49 deletions
|
@ -564,25 +564,10 @@ struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_
|
|||
they're killed. */
|
||||
void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c)
|
||||
{
|
||||
struct jffs2_node_frag *frag;
|
||||
struct jffs2_node_frag *parent;
|
||||
|
||||
if (!root->rb_node)
|
||||
return;
|
||||
struct jffs2_node_frag *frag, *next;
|
||||
|
||||
dbg_fragtree("killing\n");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
rbtree_postorder_for_each_entry_safe(frag, next, root, rb) {
|
||||
if (frag->node && !(--frag->node->frags)) {
|
||||
/* Not a hole, and it's the final remaining frag
|
||||
of this node. Free the node */
|
||||
|
@ -591,17 +576,8 @@ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c)
|
|||
|
||||
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);
|
||||
frag = parent;
|
||||
|
||||
cond_resched();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
struct rb_node *this;
|
||||
struct jffs2_tmp_dnode_info *tn;
|
||||
struct jffs2_tmp_dnode_info *tn, *next;
|
||||
|
||||
this = list->rb_node;
|
||||
|
||||
/* Now at bottom of tree */
|
||||
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);
|
||||
rbtree_postorder_for_each_entry_safe(tn, next, list, rb) {
|
||||
jffs2_free_full_dnode(tn->fn);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue