]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
f2fs: skip direct I/O iostat context when disabled
authorWenjie Qi <qwjhust@gmail.com>
Tue, 16 Jun 2026 03:06:55 +0000 (11:06 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 22 Jun 2026 19:52:38 +0000 (19:52 +0000)
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>
fs/f2fs/file.c

index d240ca78a31fe6238f7e3f1ad35826c455d61c76..8acdd94272a0ced448e0ba21635d702cfec10682 100644 (file)
@@ -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;