From: Yohan Joung Date: Mon, 17 Mar 2025 13:36:11 +0000 (+0900) Subject: f2fs: optimize f2fs DIO overwrites X-Git-Tag: v6.15-rc1~151^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=351bc761338d9be29065c2b99e603bab336792b7;p=thirdparty%2Fkernel%2Flinux.git f2fs: optimize f2fs DIO overwrites this is unnecessary when we know we are overwriting already allocated blocks and the overhead of starting a transaction can be significant especially for multithreaded workloads doing small writes. Signed-off-by: Yohan Joung Reviewed-by: Chao Yu Signed-off-by: Jaegeuk Kim --- diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index d872f785a9960..d99ec9370b1d3 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -4181,7 +4181,13 @@ static int f2fs_iomap_begin(struct inode *inode, loff_t offset, loff_t length, map.m_next_pgofs = &next_pgofs; map.m_seg_type = f2fs_rw_hint_to_seg_type(F2FS_I_SB(inode), inode->i_write_hint); - if (flags & IOMAP_WRITE) + + /* + * If the blocks being overwritten are already allocated, + * f2fs_map_lock and f2fs_balance_fs are not necessary. + */ + if ((flags & IOMAP_WRITE) && + !f2fs_overwrite_io(inode, offset, length)) map.m_may_create = true; err = f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DIO);