[<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
 
