mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-04-03 12:05:13 +02:00
f2fs: fix to propagate error from f2fs_enable_checkpoint()
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>
This commit is contained in:
@@ -2632,10 +2632,11 @@ restore_flag:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
|
||||
static int f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
unsigned int nr_pages = get_pages(sbi, F2FS_DIRTY_DATA) / 16;
|
||||
long long start, writeback, end;
|
||||
int ret;
|
||||
|
||||
f2fs_info(sbi, "f2fs_enable_checkpoint() starts, meta: %lld, node: %lld, data: %lld",
|
||||
get_pages(sbi, F2FS_DIRTY_META),
|
||||
@@ -2669,7 +2670,9 @@ 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);
|
||||
@@ -2679,6 +2682,7 @@ static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
|
||||
f2fs_info(sbi, "f2fs_enable_checkpoint() finishes, writeback:%llu, sync:%llu",
|
||||
ktime_ms_delta(writeback, start),
|
||||
ktime_ms_delta(end, writeback));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __f2fs_remount(struct fs_context *fc, struct super_block *sb)
|
||||
@@ -2892,7 +2896,9 @@ static int __f2fs_remount(struct fs_context *fc, struct super_block *sb)
|
||||
goto restore_discard;
|
||||
need_enable_checkpoint = true;
|
||||
} else {
|
||||
f2fs_enable_checkpoint(sbi);
|
||||
err = f2fs_enable_checkpoint(sbi);
|
||||
if (err)
|
||||
goto restore_discard;
|
||||
need_disable_checkpoint = true;
|
||||
}
|
||||
}
|
||||
@@ -2935,7 +2941,8 @@ skip:
|
||||
return 0;
|
||||
restore_checkpoint:
|
||||
if (need_enable_checkpoint) {
|
||||
f2fs_enable_checkpoint(sbi);
|
||||
if (f2fs_enable_checkpoint(sbi))
|
||||
f2fs_warn(sbi, "checkpoint has not been enabled");
|
||||
} else if (need_disable_checkpoint) {
|
||||
if (f2fs_disable_checkpoint(sbi))
|
||||
f2fs_warn(sbi, "checkpoint has not been disabled");
|
||||
@@ -5212,13 +5219,12 @@ reset_checkpoint:
|
||||
if (err)
|
||||
goto sync_free_meta;
|
||||
|
||||
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