Commit 34636c6dcd6f for kernel

commit 34636c6dcd6f75570c553a4188b5dbe0f758159a
Author: Wenjie Qi <qwjhust@gmail.com>
Date:   Tue Jun 16 11:06:55 2026 +0800

    f2fs: skip direct I/O iostat context when disabled

    F2FS iostat is optional and is disabled by default.  Direct I/O still
    allocates and binds a bio_iostat_ctx, updates the submit timestamp, and
    replaces bi_end_io for every DIO bio even when sbi->iostat_enable is
    false.

    The byte accounting calls do not need an extra guard because
    f2fs_update_iostat() already checks sbi->iostat_enable.  Only skip the
    DIO bio context setup when iostat is disabled.  If iostat is enabled
    through sysfs before submission, the existing context allocation and
    latency accounting path is still used.

    QEMU benchmark on a 1GiB F2FS virtio-blk image, with iostat_enable=0,
    4KiB O_DIRECT I/O over a 64MiB file, 50000 iterations per run:

                             baseline     patched
      direct_read median    65264.50 ns  55470.95 ns
      direct_read recheck   65553.75 ns  55470.95 ns
      direct_write median   68054.62 ns  56309.44 ns
      direct_write recheck  66873.51 ns  56309.44 ns

    Signed-off-by: Wenjie Qi <qiwenjie@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index d240ca78a31f..8acdd94272a0 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -4801,6 +4801,9 @@ static void f2fs_dio_iostat_start(struct f2fs_sb_info *sbi, struct bio *bio)
 {
 	void *bi_private = bio->bi_private;

+	if (!sbi->iostat_enable)
+		return;
+
 	iostat_alloc_and_bind_ctx(sbi, bio, bi_private);
 	iostat_update_submit_ctx(bio, DATA);
 	bio->bi_end_io = f2fs_dio_end_bio;