[Devel] [PATCH RH7] ext4: Fix fiemap() with FIEMAP_FLAG_CACHE flag

Kirill Tkhai ktkhai at virtuozzo.com
Tue Aug 11 17:02:59 MSK 2020


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 at virtuozzo.com>
---
 fs/ext4/extents.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 8d3e509f39b9..74a283d3ce36 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 */




More information about the Devel mailing list