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