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

Bart Van Assche via Linux-f2fs-devel <[email protected]> Wed, 22 Jul 2026 06:51:19 -0700
Newsgroups net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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").

Thanks,

Bart.



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