mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
f2fs: fix to propagate error from f2fs_enable_checkpoint()
[ Upstream commit be112e7449a6e1b54aa9feac618825d154b3a5c7 ]
In order to let userspace detect such error rather than suffering
silent failure.
Fixes: 4354994f09 ("f2fs: checkpoint disabling")
Cc: stable@kernel.org
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
[ Adjust context, no rollback ]
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
bcd0086ee5
commit
34c817843c
@@ -2267,9 +2267,10 @@ restore_flag:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
|
||||
static int f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
int retry = DEFAULT_RETRY_IO_COUNT;
|
||||
int ret;
|
||||
|
||||
/* we should flush all the data to keep data consistency */
|
||||
do {
|
||||
@@ -2287,10 +2288,14 @@ static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
|
||||
set_sbi_flag(sbi, SBI_IS_DIRTY);
|
||||
f2fs_up_write(&sbi->gc_lock);
|
||||
|
||||
f2fs_sync_fs(sbi->sb, 1);
|
||||
ret = f2fs_sync_fs(sbi->sb, 1);
|
||||
if (ret)
|
||||
f2fs_err(sbi, "%s sync_fs failed, ret: %d", __func__, ret);
|
||||
|
||||
/* Let's ensure there's no pending checkpoint anymore */
|
||||
f2fs_flush_ckpt_thread(sbi);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int f2fs_remount(struct super_block *sb, int *flags, char *data)
|
||||
@@ -2511,7 +2516,9 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
|
||||
if (err)
|
||||
goto restore_discard;
|
||||
} else {
|
||||
f2fs_enable_checkpoint(sbi);
|
||||
err = f2fs_enable_checkpoint(sbi);
|
||||
if (err)
|
||||
goto restore_discard;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4689,13 +4696,12 @@ reset_checkpoint:
|
||||
/* f2fs_recover_fsync_data() cleared this already */
|
||||
clear_sbi_flag(sbi, SBI_POR_DOING);
|
||||
|
||||
if (test_opt(sbi, DISABLE_CHECKPOINT)) {
|
||||
if (test_opt(sbi, DISABLE_CHECKPOINT))
|
||||
err = f2fs_disable_checkpoint(sbi);
|
||||
if (err)
|
||||
goto sync_free_meta;
|
||||
} else if (is_set_ckpt_flags(sbi, CP_DISABLED_FLAG)) {
|
||||
f2fs_enable_checkpoint(sbi);
|
||||
}
|
||||
else if (is_set_ckpt_flags(sbi, CP_DISABLED_FLAG))
|
||||
err = f2fs_enable_checkpoint(sbi);
|
||||
if (err)
|
||||
goto sync_free_meta;
|
||||
|
||||
/*
|
||||
* If filesystem is not mounted as read-only then
|
||||
|
||||
Reference in New Issue
Block a user