f2fs: set SBI_NEED_FSCK when encountering exception in recovery
authorChao Yu <chao2.yu@samsung.com>
Mon, 16 Mar 2015 13:08:44 +0000 (21:08 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 10 Apr 2015 22:08:43 +0000 (15:08 -0700)
This patch tries to set SBI_NEED_FSCK flag into sbi only when we fail to recover
in fill_super, so we could skip fscking image when we fail to fill super for
other reason.

Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/super.c

index 0b8a2d8efa7287685438a5e284e1ebb683c29a4c..f9dc543805d9e525c26a89ca76ec60355838220c 100644 (file)
@@ -966,7 +966,7 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
        struct buffer_head *raw_super_buf;
        struct inode *root;
        long err = -EINVAL;
-       bool retry = true;
+       bool retry = true, need_fsck = false;
        char *options = NULL;
        int i;
 
@@ -1155,9 +1155,6 @@ try_onemore:
        if (err)
                goto free_proc;
 
-       if (!retry)
-               set_sbi_flag(sbi, SBI_NEED_FSCK);
-
        /* recover fsynced data */
        if (!test_opt(sbi, DISABLE_ROLL_FORWARD)) {
                /*
@@ -1169,8 +1166,13 @@ try_onemore:
                        err = -EROFS;
                        goto free_kobj;
                }
+
+               if (need_fsck)
+                       set_sbi_flag(sbi, SBI_NEED_FSCK);
+
                err = recover_fsync_data(sbi);
                if (err) {
+                       need_fsck = true;
                        f2fs_msg(sb, KERN_ERR,
                                "Cannot recover all fsync data errno=%ld", err);
                        goto free_kobj;