summaryrefslogtreecommitdiff
path: root/fs/ext4/dir.c
diff options
context:
space:
mode:
authorZhang Yi <yi.zhang@huawei.com>2024-01-27 04:58:02 +0300
committerTheodore Ts'o <tytso@mit.edu>2024-02-02 07:47:02 +0300
commit6430dea07e85958fa87d0276c0c4388dd51e630b (patch)
tree2501e6c1526ba4ca1906233212149dd578fcb4c8 /fs/ext4/dir.c
parentacf795dc161f3cf481db20f05db4250714e375e5 (diff)
downloadlinux-6430dea07e85958fa87d0276c0c4388dd51e630b.tar.xz
ext4: correct the hole length returned by ext4_map_blocks()
In ext4_map_blocks(), if we can't find a range of mapping in the extents cache, we are calling ext4_ext_map_blocks() to search the real path and ext4_ext_determine_hole() to determine the hole range. But if the querying range was partially or completely overlaped by a delalloc extent, we can't find it in the real extent path, so the returned hole length could be incorrect. Fortunately, ext4_ext_put_gap_in_cache() have already handle delalloc extent, but it searches start from the expanded hole_start, doesn't start from the querying range, so the delalloc extent found could not be the one that overlaped the querying range, plus, it also didn't adjust the hole length. Let's just remove ext4_ext_put_gap_in_cache(), handle delalloc and insert adjusted hole extent in ext4_ext_determine_hole(). Signed-off-by: Zhang Yi <yi.zhang@huawei.com> Suggested-by: Jan Kara <jack@suse.cz> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20240127015825.1608160-4-yi.zhang@huaweicloud.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/dir.c')
0 files changed, 0 insertions, 0 deletions