summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/super.c')
-rw-r--r--fs/f2fs/super.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index d54c54f6a49d..a06b0b46fe69 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1043,7 +1043,7 @@ out:
1043 return 0; 1043 return 0;
1044} 1044}
1045 1045
1046int f2fs_commit_super(struct f2fs_sb_info *sbi) 1046int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
1047{ 1047{
1048 struct buffer_head *sbh = sbi->raw_super_buf; 1048 struct buffer_head *sbh = sbi->raw_super_buf;
1049 sector_t block = sbh->b_blocknr; 1049 sector_t block = sbh->b_blocknr;
@@ -1055,7 +1055,9 @@ int f2fs_commit_super(struct f2fs_sb_info *sbi)
1055 err = sync_dirty_buffer(sbh); 1055 err = sync_dirty_buffer(sbh);
1056 1056
1057 sbh->b_blocknr = block; 1057 sbh->b_blocknr = block;
1058 if (err) 1058
1059 /* if we are in recovery path, skip writing valid superblock */
1060 if (recover || err)
1059 goto out; 1061 goto out;
1060 1062
1061 /* write current valid superblock */ 1063 /* write current valid superblock */
@@ -1289,7 +1291,7 @@ try_onemore:
1289 /* recover broken superblock */ 1291 /* recover broken superblock */
1290 if (recovery && !f2fs_readonly(sb) && !bdev_read_only(sb->s_bdev)) { 1292 if (recovery && !f2fs_readonly(sb) && !bdev_read_only(sb->s_bdev)) {
1291 f2fs_msg(sb, KERN_INFO, "Recover invalid superblock"); 1293 f2fs_msg(sb, KERN_INFO, "Recover invalid superblock");
1292 f2fs_commit_super(sbi); 1294 f2fs_commit_super(sbi, true);
1293 } 1295 }
1294 1296
1295 return 0; 1297 return 0;