[RHEL7,COMMIT] ext4: Fix fiemap() with FIEMAP_FLAG_CACHE flag

Submitted by Vasily Averin on Aug. 17, 2020, 6:52 a.m.


Message ID 202008170652.07H6qhZn006492@vz7build.vvs.sw.ru
State New
Series "ext4: Fix fiemap() with FIEMAP_FLAG_CACHE flag"
Headers show

Commit Message

Vasily Averin Aug. 17, 2020, 6:52 a.m.
The commit is pushed to "branch-rh7-3.10.0-1127.18.2.vz7.163.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-1127.18.2.vz7.163.2
commit df8daecb4f65ab2c7b5447500f6afa5522c113d2
Author: Kirill Tkhai <ktkhai@virtuozzo.com>
Date:   Mon Aug 17 09:52:43 2020 +0300

    ext4: Fix fiemap() with FIEMAP_FLAG_CACHE flag
    This flag says to cache extents in extent tree before iterations over them,
    but the combination of these two actions does not work.
    ext4_ext_precache() populates cache, but extent iteration can't occur,
    since fiemap_check_flags() does not know this flag.
    So, the result of this flag is: 1)cache is populated, 2)-EBADR is returned
    instead of extents array. This looks like a BUG in mainstream, which was
    blindly fixed in commit bb5835edcdf8bf7 "ext4: add new ioctl EXT4_IOC_GET_ES_CACHE".
    This patch makes the flag to work as expected.
    Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
    Acked-by: Konstantin Khorenko <khorenko@virtuozzo.com>
 fs/ext4/extents.c | 1 +
 1 file changed, 1 insertion(+)

Patch hide | download patch | download mbox

diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 8d3e509..74a283d 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -5250,6 +5250,7 @@  int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 		error = ext4_ext_precache(inode);
 		if (error)
 			return error;
+		fieinfo->fi_flags &= ~FIEMAP_FLAG_CACHE;
 	/* fallback to generic here if not in extents fmt */