]> Pileus Git - ~andy/linux/blobdiff - fs/jffs2/nodelist.c
fs/jffs2: use rbtree postorder iteration helper instead of opencoding
[~andy/linux] / fs / jffs2 / nodelist.c
index 975a1f562c10de31f3859b1dded82d134f4c2d0e..9a5449bc3afb0b3b784bfb04c69b011219f013d2 100644 (file)
@@ -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();
        }
 }