Re: [f2fs-dev] [PATCH] f2fs: stop checkpoint on compressed write IO error

Wenjie Qi <[email protected]>
Newsgroups net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-kernel
Message-ID <CAGFpFsS0Edkcg7WTD+nbnqBwc6yiyM2=nWcNFYjYUA5NfeOuNw@mail.gmail.com>
  I see. The old patch assumed compressed writeback should follow the
  F2FS_WB_CP_DATA path because the current code accounts it that way.

  After rechecking it, I agree that stopping checkpoint from this path
is not
  the right fix.

  I sent a separate patch to fix the accounting side instead:

  f2fs: account compressed writeback by raw folio type

  It derives the writeback count type from the raw pagecache folio, so normal
  compressed writeback stays in F2FS_WB_DATA, while gcing/CP-guaranteed raw
  folios still use F2FS_WB_CP_DATA.





On Tue, Jun 16, 2026 at 4:24 AM Jaegeuk Kim <[email protected]> wrote:
>
> On 05/25, Wenjie Qi wrote:
> > Compressed data writes are accounted as F2FS_WB_CP_DATA because they
> > write compressed pages through fio->compressed_page.  Their end_io path
> > should therefore have the same checkpoint-stop behavior as ordinary
> > F2FS_WB_CP_DATA writes.
> >
> > However, f2fs_compress_write_end_io() only records -EIO in the inode
> > mapping when the bio fails.  The filesystem can keep checkpointing after
> > that failure, so a later checkpoint may persist metadata that points to
> > compressed data blocks whose writeback failed.
> >
> > Stop checkpointing with STOP_CP_REASON_WRITE_FAIL for failed compressed
> > F2FS_WB_CP_DATA writes, matching the ordinary data write end_io path.
> >
> > Fixes: 4c8ff7095bef ("f2fs: support data compression")
> > Cc: [email protected]
> > Signed-off-by: Wenjie Qi <[email protected]>
> > ---
> >  fs/f2fs/compress.c | 5 ++++-
> >  1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
> > index caf522d667d6..9b1501004456 100644
> > --- a/fs/f2fs/compress.c
> > +++ b/fs/f2fs/compress.c
> > @@ -1488,8 +1488,11 @@ void f2fs_compress_write_end_io(struct bio *bio, struct folio *folio)
> >                               f2fs_is_compressed_page(folio));
> >       int i;
> >
> > -     if (unlikely(bio->bi_status != BLK_STS_OK))
> > +     if (unlikely(bio->bi_status != BLK_STS_OK)) {
> >               mapping_set_error(cic->inode->i_mapping, -EIO);
> > +             if (type == F2FS_WB_CP_DATA)
>
> It turns out the type should not be F2FS_WB_CP_DATA.
>
> > +                     f2fs_stop_checkpoint(sbi, true, STOP_CP_REASON_WRITE_FAIL);
> > +     }
> >
> >       f2fs_compress_free_page(page);
> >
> > --
> > 2.43.0
> >
> >
> >
> > _______________________________________________
> > Linux-f2fs-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.