[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <9e5b9c8b-e8a5-c1ec-d2ed-a068afb03b4a@kernel.org>
Date: Sun, 18 Sep 2022 18:45:57 +0800
From: Chao Yu <chao@...nel.org>
To: "zhiguo.niu" <zhiguo.niu@...soc.com>, jaegeuk@...nel.org,
linux-f2fs-devel@...ts.sourceforge.net,
linux-kernel@...r.kernel.org
Cc: lvqiang.huang@...soc.com
Subject: Re: [PATCH Vx 1/1] f2fs: fix some error handling case in gc
On 2022/9/15 14:18, zhiguo.niu wrote:
> During GC, if segment type stored in SSA and SIT is inconsistent,
> we set SBI_NEED_FSCK first and then stop checkpoint, this will
> cause the following issues:
> 1. SBI_NEED_FSCK can not be set to flash truly because of checkpoint
> has been stopped.
> 2. Will cause more EIO error because of CP_ERROR_FLAG is set in
> f2fs_stop_checkpoint, this is not reasonable.
>
> So we fix this error handling case by recording current victim segment
> as invalid for gc.
>
> Signed-off-by: zhiguo.niu <zhiguo.niu@...soc.com>
> ---
> fs/f2fs/gc.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index d5fb426e0747..66bdf2678b5e 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -1700,10 +1700,13 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
>
> sum = page_address(sum_page);
> if (type != GET_SUM_TYPE((&sum->footer))) {
> - f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
> - segno, type, GET_SUM_TYPE((&sum->footer)));
> - set_sbi_flag(sbi, SBI_NEED_FSCK);
> - f2fs_stop_checkpoint(sbi, false);
> +#ifdef CONFIG_F2FS_CHECK_FS
> + if (!test_and_set_bit(segno, SIT_I(sbi)->invalid_segmap)) {
> + f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
> + segno, type, GET_SUM_TYPE((&sum->footer)));
> + set_sbi_flag(sbi, SBI_NEED_FSCK);
> + }
> +#endif
What about:
f2fs_err(sbi, "...");
set_sbi_flag(sbi, SBI_NEED_FSCK);
#ifdef CONFIG_F2FS_CHECK_FS
if (test_bit())
set_bit();
#endif
> goto skip;
> }
>
> --
> 2.17.1
Powered by blists - more mailing lists