From f885bee393778398eb0815c281dbfee6db630b4b Mon Sep 17 00:00:00 2001 From: Artem Bityutskiy Date: Mon, 2 May 2011 21:51:17 +0300 Subject: [PATCH] --- yaml --- r: 250439 b: refs/heads/master c: 69f8a75a7d9db05a7ee708514d605ab74956c73e h: refs/heads/master i: 250437: a9eb1df43e7dd4ecf0576031fa131752c405eb89 250435: 514e9c33e0b2b93f92f745f67d35d7075ce121a3 250431: f60152cacdba6daffa1507059e3baa925d065b91 v: v3 --- [refs] | 2 +- trunk/fs/ubifs/recovery.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index e05b66eaa5d2..65f3acab576e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4c9545200a3bd9e87b36475c263034a38be02e44 +refs/heads/master: 69f8a75a7d9db05a7ee708514d605ab74956c73e diff --git a/trunk/fs/ubifs/recovery.c b/trunk/fs/ubifs/recovery.c index 596dede32611..d6c8ce3c722e 100644 --- a/trunk/fs/ubifs/recovery.c +++ b/trunk/fs/ubifs/recovery.c @@ -1436,7 +1436,7 @@ static int fix_size_in_place(struct ubifs_info *c, struct size_entry *e) err = ubi_leb_change(c->ubi, lnum, c->sbuf, len, UBI_UNKNOWN); if (err) goto out; - dbg_rcvry("inode %lu at %d:%d size %lld -> %lld ", + dbg_rcvry("inode %lu at %d:%d size %lld -> %lld", (unsigned long)e->inum, lnum, offs, i_size, e->d_size); return 0; @@ -1485,11 +1485,14 @@ int ubifs_recover_size(struct ubifs_info *c) e->i_size = le64_to_cpu(ino->size); } } + if (e->exists && e->i_size < e->d_size) { - if (!e->inode && c->ro_mount) { + if (c->ro_mount) { /* Fix the inode size and pin it in memory */ struct inode *inode; + ubifs_assert(!e->inode); + inode = ubifs_iget(c->vfs_sb, e->inum); if (IS_ERR(inode)) return PTR_ERR(inode); @@ -1513,9 +1516,11 @@ int ubifs_recover_size(struct ubifs_info *c) iput(e->inode); } } + this = rb_next(this); rb_erase(&e->rb, &c->size_tree); kfree(e); } + return 0; }