|
@@ -1187,14 +1187,13 @@ next:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
|
|
|
+int __f2fs_commit_super(struct f2fs_sb_info *sbi, int block)
|
|
|
{
|
|
|
struct f2fs_super_block *super = F2FS_RAW_SUPER(sbi);
|
|
|
struct buffer_head *bh;
|
|
|
int err;
|
|
|
|
|
|
- /* write back-up superblock first */
|
|
|
- bh = sb_getblk(sbi->sb, sbi->valid_super_block ? 0 : 1);
|
|
|
+ bh = sb_getblk(sbi->sb, block);
|
|
|
if (!bh)
|
|
|
return -EIO;
|
|
|
|
|
@@ -1208,25 +1207,22 @@ int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
|
|
|
err = __sync_dirty_buffer(bh, WRITE_FLUSH_FUA);
|
|
|
brelse(bh);
|
|
|
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
+int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ /* write back-up superblock first */
|
|
|
+ err = __f2fs_commit_super(sbi, sbi->valid_super_block ? 0 : 1);
|
|
|
+
|
|
|
/* if we are in recovery path, skip writing valid superblock */
|
|
|
if (recover || err)
|
|
|
return err;
|
|
|
|
|
|
- bh = sb_getblk(sbi->sb, sbi->valid_super_block);
|
|
|
- if (!bh)
|
|
|
- return -EIO;
|
|
|
-
|
|
|
/* write current valid superblock */
|
|
|
- lock_buffer(bh);
|
|
|
- memcpy(bh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super));
|
|
|
- set_buffer_uptodate(bh);
|
|
|
- set_buffer_dirty(bh);
|
|
|
- unlock_buffer(bh);
|
|
|
-
|
|
|
- err = __sync_dirty_buffer(bh, WRITE_FLUSH_FUA);
|
|
|
- brelse(bh);
|
|
|
-
|
|
|
- return err;
|
|
|
+ return __f2fs_commit_super(sbi, sbi->valid_super_block);
|
|
|
}
|
|
|
|
|
|
static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
|