diff options
author | Zhang Yi <yi.zhang@huawei.com> | 2024-01-27 09:58:02 +0800 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2024-02-01 23:47:02 -0500 |
commit | 6430dea07e85958fa87d0276c0c4388dd51e630b (patch) | |
tree | 2501e6c1526ba4ca1906233212149dd578fcb4c8 /fs/ext4/inode.c | |
parent | acf795dc161f3cf481db20f05db4250714e375e5 (diff) | |
download | linux-stable-6430dea07e85958fa87d0276c0c4388dd51e630b.tar.gz linux-stable-6430dea07e85958fa87d0276c0c4388dd51e630b.tar.bz2 linux-stable-6430dea07e85958fa87d0276c0c4388dd51e630b.zip |
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/inode.c')
0 files changed, 0 insertions, 0 deletions