From c42a04c2731b1990de8bad535fc260862291ffa7 Mon Sep 17 00:00:00 2001 From: Tao Ma Date: Tue, 4 May 2010 16:01:00 +1000 Subject: [PATCH] xfstests: Add query fiemap count test. According to Documentation/filesystems/fiemap.txt, If fm_extent_count is zero, then the fm_extents[] array is ignored (no extents will be returned), and the fm_mapped_extents count will hold the number of extents needed. This is broken by commit 97db39a1f6f69e906e98118392400de5217aa33a. So add this test case in fiemap tester to avoid future regression. Signed-off-by: Tao Ma Reviewed-by: Dave Chinner --- src/fiemap-tester.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/fiemap-tester.c b/src/fiemap-tester.c index acec1b55..138acbf0 100644 --- a/src/fiemap-tester.c +++ b/src/fiemap-tester.c @@ -402,6 +402,20 @@ check_hole(struct fiemap *fiemap, int fd, __u64 logical_offset, int blocksize) return 0; } +static int query_fiemap_count(int fd, int blocks, int blocksize) +{ + struct fiemap fiemap = { 0, }; + + fiemap.fm_length = blocks * blocksize; + + if (ioctl(fd, FS_IOC_FIEMAP, (unsigned long)&fiemap) < 0) { + perror("FIEMAP query ioctl failed"); + return -1; + } + + return 0; +} + static int compare_fiemap_and_map(int fd, char *map, int blocks, int blocksize) { @@ -411,6 +425,9 @@ compare_fiemap_and_map(int fd, char *map, int blocks, int blocksize) __u64 map_start, map_length; int i, c; + if (query_fiemap_count(fd, blocks, blocksize) < 0) + return -1; + blocks_to_map = (random() % blocks) + 1; fiebuf = malloc(sizeof(struct fiemap) + (blocks_to_map * sizeof(struct fiemap_extent))); -- 2.39.5