Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c97964520503c60aa91680d4b525236c2885a36
Commit:     1c97964520503c60aa91680d4b525236c2885a36
Parent:     fcf3cafb3e7e7750f4876571492594c3a4854ee5
Author:     David Woodhouse <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 00:19:54 2007 +0100
Committer:  David Woodhouse <[EMAIL PROTECTED]>
CommitDate: Tue May 8 00:19:54 2007 +0100

    [JFFS2] Simplify and clean up jffs2_add_tn_to_tree() some more.
    
    Fixing at least a couple more bugs in the process.
    
    Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
---
 fs/jffs2/readinode.c |   29 ++++++++++++-----------------
 1 files changed, 12 insertions(+), 17 deletions(-)

diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
index bd31d49..4884d5e 100644
--- a/fs/jffs2/readinode.c
+++ b/fs/jffs2/readinode.c
@@ -240,20 +240,16 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
 
        /* Find the earliest node which _may_ be relevant to this one */
        this = jffs2_lookup_tn(&rii->tn_root, tn->fn->ofs);
-       if (!this) {
-               /* First addition to empty tree. $DEITY how I love the easy 
cases */
-               rb_link_node(&tn->rb, NULL, &rii->tn_root.rb_node);
-               rb_insert_color(&tn->rb, &rii->tn_root);
-               dbg_readinode("keep new frag\n");
-               return 0;
-       }
-
-       /* If the node is coincident with another at a lower address,
-          back up until the other node is found. It may be relevant */
-       while (tn->overlapped)
-               tn = tn_prev(tn);
+       if (this) {
+               /* If the node is coincident with another at a lower address,
+                  back up until the other node is found. It may be relevant */
+               while (this->overlapped)
+                       this = tn_prev(this);
 
-       dbg_readinode("'this' found %#04x-%#04x (%s)\n", this->fn->ofs, 
this->fn->ofs + this->fn->size, this->fn ? "data" : "hole");
+               /* First node should never be marked overlapped */
+               BUG_ON(!this);
+               dbg_readinode("'this' found %#04x-%#04x (%s)\n", this->fn->ofs, 
this->fn->ofs + this->fn->size, this->fn ? "data" : "hole");
+       }
 
        while (this) {
                if (this->fn->ofs > fn_end)
@@ -288,7 +284,7 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
                                return 0;
                        }
                        /* ... and is good. Kill 'this' and any subsequent 
nodes which are also overlapped */
-                       while (this && this->fn->ofs + this->fn->size < fn_end) 
{
+                       while (this && this->fn->ofs + this->fn->size <= 
fn_end) {
                                struct jffs2_tmp_dnode_info *next = 
tn_next(this);
                                if (this->version < tn->version) {
                                        tn_erase(this, &rii->tn_root);
@@ -300,7 +296,7 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
                                this = next;
                        }
                        dbg_readinode("Done killing overlapped nodes\n");
-                       break;
+                       continue;
                }
                if (this->version > tn->version &&
                    this->fn->ofs <= tn->fn->ofs &&
@@ -326,7 +322,7 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
        {
                struct rb_node *parent;
                struct rb_node **link = &rii->tn_root.rb_node;
-               struct jffs2_tmp_dnode_info *insert_point;
+               struct jffs2_tmp_dnode_info *insert_point = NULL;
 
                while (*link) {
                        parent = *link;
@@ -343,7 +339,6 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
                rb_insert_color(&tn->rb, &rii->tn_root);
        }
 
- calc_overlaps:
        /* If there's anything behind that overlaps us, note it */
        this = tn_prev(tn);
        if (this) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to