fs/jffs2: use rbtree postorder iteration helper instead of opencoding
authorCody P Schafer <cody@linux.vnet.ibm.com>
Thu, 23 Jan 2014 23:56:11 +0000 (15:56 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Jan 2014 00:37:03 +0000 (16:37 -0800)
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>
fs/jffs2/nodelist.c
fs/jffs2/readinode.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();
        }
 }
index ae81b01e6fd7ebe8291cfcba8b419b245a6a2310..386303dca382e636fa9aab5d547f343e2e5058a1 100644 (file)
@@ -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;
-
-       this = list->rb_node;
+       struct jffs2_tmp_dnode_info *tn, *next;
 
-       /* 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;
 }