Re: [f2fs-dev] [PATCH] fsck.f2fs: flush device buffer before zone transition on zoned storage

Daeho Jeong <[email protected]> Wed, 22 Jul 2026 07:55:44 -0700
Newsgroups net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-kernel
Message-ID <CACOAw_wVAxNO+p54LhSj473FbNvp3EHuQY2pFz45nTGU5353AA@mail.gmail.com>
On Wed, Jul 22, 2026 at 6:51 AM Bart Van Assche <[email protected]> wrote:
>
> On 7/21/26 9:47 AM, Daeho Jeong wrote:
> > On zoned storage devices (F2FS_ZONED_HM), fsck.f2fs opens block devices
> > with buffered I/O (O_RDWR). When a curseg fills up its current zone and
> > moves to a new zone in find_next_free_block(), pending buffered writes
> > to the previous zone may still reside in the OS page cache / I/O queue.
> >
> > As a result, issuing a write to the newly allocated zone can happen before
> > the device hardware finishes committing all blocks of the previous zone,
> > causing the hardware to see an additional open zone request that exceeds
> > the device's max open zone limit (e.g. open zones exceeded error).
> >
> > Fix this by calling f2fs_fsync_device() right before allocating a new zone
> > when crossing zone boundaries (!(segno % segs_per_zone)). This flushes
> > all pending writes to physical media, ensuring the device hardware
> > auto-closes (FULL) the previous zone before opening the new zone.
> >
> > Signed-off-by: Daeho Jeong <[email protected]>
> > ---
> >   fsck/mount.c | 3 +++
> >   1 file changed, 3 insertions(+)
> >
> > diff --git a/fsck/mount.c b/fsck/mount.c
> > index 6f640a0..3bd40fe 100644
> > --- a/fsck/mount.c
> > +++ b/fsck/mount.c
> > @@ -3073,6 +3073,9 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left,
> >                       if (!(segno % segs_per_zone)) {
> >                               u64 new_blkaddr = SM_I(sbi)->main_blkaddr;
> >
> > +                             if (c.zoned_model == F2FS_ZONED_HM)
> > +                                     f2fs_fsync_device();
> > +
> >                               ret = find_next_free_block(sbi, &new_blkaddr, 0,
> >                                               want_type, true);
> >                               if (ret)
>
> Will this change make a difference on Android because the Android
> f2fs-tools already use O_DSYNC when opening a zoned block device?
>  From lib/libf2fs.c:
>
>                  if (dev->zoned_model == F2FS_ZONED_HM)
>                          flags |= O_DSYNC;
>
> See also commit 10dad5ed7ce1 ("f2fs-tools: support zoned ufs devices").

Oops, we already have this patch upstream.
Plz, ignore this patch.

Bart, thanks for letting me know this.

>
> Thanks,
>
> Bart.
>


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel