f2fs: mark recovery flag correctly in read_raw_super_block()
authorChengguang Xu via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
Fri, 27 Sep 2019 01:35:48 +0000 (09:35 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 22 Oct 2019 17:32:36 +0000 (10:32 -0700)
On the combination of first fail and second success,
we will miss to mark recovery flag because currently
we reuse err variable in the loop.

Signed-off-by: Chengguang Xu <cgxu519@zoho.com.cn>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/super.c

index 1443cee158633d01b6b1dfee3538bde13c4860b8..f3a68af3b43acc04c7ed3209be970edce25fa040 100644 (file)
@@ -2951,6 +2951,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
                        f2fs_err(sbi, "Unable to read %dth superblock",
                                 block + 1);
                        err = -EIO;
+                       *recovery = 1;
                        continue;
                }
 
@@ -2960,6 +2961,7 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
                        f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
                                 block + 1);
                        brelse(bh);
+                       *recovery = 1;
                        continue;
                }
 
@@ -2972,10 +2974,6 @@ static int read_raw_super_block(struct f2fs_sb_info *sbi,
                brelse(bh);
        }
 
-       /* Fail to read any one of the superblocks*/
-       if (err < 0)
-               *recovery = 1;
-
        /* No valid superblock */
        if (!*raw_super)
                kvfree(super);