]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
f2fs: optimize f2fs DIO overwrites
authorYohan Joung <jyh429@gmail.com>
Mon, 17 Mar 2025 13:36:11 +0000 (22:36 +0900)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 18 Mar 2025 01:26:04 +0000 (01:26 +0000)
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 <yohan.joung@sk.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/data.c

index d872f785a996032e8563fb13e3c66b6827d271d1..d99ec9370b1d34e8a633a76506a3f12eddbe1747 100644 (file)
@@ -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);