X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=fs%2Ff2fs%2Fsuper.c;h=8f9648ffbbc30499e46c4b9484cee2fce8e6e1c4;hb=6781eabba1bdb133eb9125c4acf6704ccbe4df02;hp=f5fbbfdb3d93d8049bae40ca4263cddbfc8baad3;hpb=df728b0f6954c38545f4bf12dedeeb9e07469a94;p=deliverable%2Flinux.git diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index f5fbbfdb3d93..8f9648ffbbc3 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -1562,14 +1562,24 @@ try_onemore: if (need_fsck) set_sbi_flag(sbi, SBI_NEED_FSCK); - err = recover_fsync_data(sbi); - if (err) { + err = recover_fsync_data(sbi, false); + if (err < 0) { need_fsck = true; f2fs_msg(sb, KERN_ERR, "Cannot recover all fsync data errno=%ld", err); goto free_kobj; } + } else { + err = recover_fsync_data(sbi, true); + + if (!f2fs_readonly(sb) && err > 0) { + err = -EINVAL; + f2fs_msg(sb, KERN_ERR, + "Need to recover fsync data"); + goto free_kobj; + } } + /* recover_fsync_data() cleared this already */ clear_sbi_flag(sbi, SBI_POR_DOING);