[JFFS2] Fix obsoletion of metadata nodes in jffs2_add_tn_to_tree()
authorDavid Woodhouse <dwmw2@infradead.org>
Fri, 1 Jun 2007 19:04:43 +0000 (20:04 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Fri, 1 Jun 2007 19:04:43 +0000 (20:04 +0100)
We should keep the mdata node with higher version number, not just the
one we happen to find latest. Doh.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
fs/jffs2/readinode.c

index 5663e8c7a959aff84168454da182b1409829799c..12e83f67eee493cfe625430e14e1e7a938d09395 100644 (file)
@@ -229,9 +229,16 @@ static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
           check anyway. */
        if (!tn->fn->size) {
                if (rii->mdata_tn) {
-                       /* We had a candidate mdata node already */
-                       dbg_readinode("kill old mdata with ver %d\n", rii->mdata_tn->version);
-                       jffs2_kill_tn(c, rii->mdata_tn);
+                       if (rii->mdata_tn->version < tn->version) {
+                               /* We had a candidate mdata node already */
+                               dbg_readinode("kill old mdata with ver %d\n", rii->mdata_tn->version);
+                               jffs2_kill_tn(c, rii->mdata_tn);
+                       } else {
+                               dbg_readinode("kill new mdata with ver %d (older than existing %d\n",
+                                             tn->version, rii->mdata_tn->version);
+                               jffs2_kill_tn(c, tn);
+                               return 0;
+                       }
                }
                rii->mdata_tn = tn;
                dbg_readinode("keep new mdata with ver %d\n", tn->version);