diff options
Diffstat (limited to 'fs/f2fs/super.c')
-rw-r--r-- | fs/f2fs/super.c | 8 |
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 | ||
1046 | int f2fs_commit_super(struct f2fs_sb_info *sbi) | 1046 | int 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; |