Commit 0415ae5
f2fs: optimize f2fs_overwrite_io() for f2fs_iomap_begin
commit d860974 upstream.
When overwriting already allocated blocks, f2fs_iomap_begin() calls
f2fs_overwrite_io() to check block mappings. However,
f2fs_overwrite_io() iterates through all mapped blocks in the range,
which can be inefficient for fragmented files with large I/O requests.
This patch optimizes f2fs_overwrite_io() by adding a 'check_first'
parameter and introducing __f2fs_overwrite_io() helper. When called from
f2fs_iomap_begin(), we only check the first mapping to determine if the
range is already allocated, which is sufficient for setting
map.m_may_create.
This optimization significantly reduces the number of f2fs_map_blocks()
calls in f2fs_overwrite_io() when called from f2fs_iomap_begin(),
especially for fragmented files with large I/O requests.
Cc: stable@kernel.org
Fixes: 351bc76 ("f2fs: optimize f2fs DIO overwrites")
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Reviewed-by: Sunmin Jeong <s_min.jeong@samsung.com>
Signed-off-by: Yeongjin Gil <youngjin.gil@samsung.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>1 parent fee27b6 commit 0415ae5
1 file changed
Lines changed: 10 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1799 | 1799 | | |
1800 | 1800 | | |
1801 | 1801 | | |
1802 | | - | |
| 1802 | + | |
| 1803 | + | |
1803 | 1804 | | |
1804 | 1805 | | |
1805 | 1806 | | |
| |||
1821 | 1822 | | |
1822 | 1823 | | |
1823 | 1824 | | |
| 1825 | + | |
| 1826 | + | |
1824 | 1827 | | |
1825 | 1828 | | |
1826 | 1829 | | |
1827 | 1830 | | |
| 1831 | + | |
| 1832 | + | |
| 1833 | + | |
| 1834 | + | |
| 1835 | + | |
1828 | 1836 | | |
1829 | 1837 | | |
1830 | 1838 | | |
| |||
4191 | 4199 | | |
4192 | 4200 | | |
4193 | 4201 | | |
4194 | | - | |
| 4202 | + | |
4195 | 4203 | | |
4196 | 4204 | | |
4197 | 4205 | | |
| |||
0 commit comments