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:

committed by
Linus Torvalds

parent
d1866bd061
commit
e8bbeeb755
@@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user