Re: [f2fs-dev] [PATCH] f2fs: fix to avoid forcing direct write to use buffered IO on inline_data ino

From: Jinsu Lee
Date: Sun Nov 03 2024 - 22:32:49 EST


> Jinsu Lee reported aperformance regression issue, after commit
> 5c8764f8679e ("f2fs: fixto force buffered IO on inline_data
> inode"), we forced directwrite to use buffered IO on inline_data
> inode, it will causeperformace regression due to memory copy
> and data flush.
 
> It's fine to not force directwrite to use buffered IO, as it
> can convert inline inodebefore committing direct write IO.
 
> Fixes: 5c8764f8679e("f2fs: fix to force buffered IO on inline_data inode")
> Reported-by: Jinsu Lee<jinsu1.lee@xxxxxxxxxxx>
> Closes:https://lore.kernel.org/linux-f2fs-devel/af03dd2c-e361-4f80-b2fd-39440766cf6e@xxxxxxxxxx
> Signed-off-by: Chao Yu<chao@xxxxxxxxxx>
> ---
> fs/f2fs/file.c 6 +++++-
> 1 file changed, 5insertions(+), 1 deletion(-)
 
> diff --git a/fs/f2fs/file.cb/fs/f2fs/file.c
> index0e7a0195eca8..377a10b81bf3 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -883,7 +883,11 @@ staticbool f2fs_force_buffered_io(struct inode *inode, int rw)
>         return true;
>     if(f2fs_compressed_file(inode))
>         return true;
> -     if (f2fs_has_inline_data(inode))
> +     /*
> +     * only force direct read to use bufferedIO, for direct write,
> +     * it expects inline data conversion beforecommitting IO.
> +     */
> +     if (f2fs_has_inline_data(inode) &&rw == READ)
 
Hi, Chao Yu
The fio direct performance problem I reported did not improve when reflecting this commit.
Rather, it has been improved when reflecting your commit below.
 
The previous commit seems to be mistitled as read and the following commit appears to be the final version. 

commit 2b6bb0cd3bdcb1108189301ec4ec76c89f939310
Author: Chao Yu via Linux-f2fs-devel <linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx>
Date: Mon Nov 4 09:35:51 2024 +0800

[f2fs-dev] [PATCH v2] f2fs: fix to map blocks correctly for direct write


the reason for the improvement to commit (2b6bb0cd3bdc) seems to be because of the "m_may_create" condition.
when performing "io_submit" directly, so performance regression issue may occur.