src/seek_sanity_test (test generic/285) assumes that after preallocating space in a file with fallocate, fseek SEEK_HOLE / SEEK_DATA will still report the allocated space as a hole. On filesystems without unwritten extent support, that space will be reported as data, though. Tested on ext4, xfs, and gfs2 + patches for fseek SEEK_HOLE / SEEK_DATA support. Signed-off-by: Andreas Gruenbacher <agruenba@xxxxxxxxxx> --- src/seek_sanity_test.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/seek_sanity_test.c b/src/seek_sanity_test.c index a6dd48c..0d7fa0a 100644 --- a/src/seek_sanity_test.c +++ b/src/seek_sanity_test.c @@ -37,6 +37,7 @@ static blksize_t alloc_size; int default_behavior = 0; +int unwritten_extents = 0; char *base_file_path; static void get_file_system(int fd) @@ -282,6 +283,11 @@ static int test09(int fd, int testnum) int bufsz = alloc_size; int filsz = 8 << 20; + if (!unwritten_extents) { + fprintf(stdout, "Test skipped\n"); + goto out; + } + /* * HOLE - unwritten DATA in dirty page - HOLE - * unwritten DATA in writeback page @@ -338,6 +344,11 @@ static int test08(int fd, int testnum) int bufsz = alloc_size; int filsz = 4 << 20; + if (!unwritten_extents) { + fprintf(stdout, "Test skipped\n"); + goto out; + } + /* HOLE - unwritten DATA in writeback page */ /* Each unit is bufsz */ buf = do_malloc(bufsz); @@ -387,6 +398,11 @@ static int test07(int fd, int testnum) int bufsz = alloc_size; int filsz = 4 << 20; + if (!unwritten_extents) { + fprintf(stdout, "Test skipped\n"); + goto out; + } + /* HOLE - unwritten DATA in dirty page */ /* Each unit is bufsz */ buf = do_malloc(bufsz); @@ -776,6 +792,25 @@ static int test_basic_support(void) fprintf(stderr, "File system supports the default behavior.\n"); } + ftruncate(fd, 0); + if (fallocate(fd, 0, 0, alloc_size) == -1) { + if (errno == EOPNOTSUPP) { + fprintf(stderr, "File system does not support fallocate."); + } else { + fprintf(stderr, "ERROR %d: Failed to preallocate " + "space to %ld bytes.", errno, (long) alloc_size); + } + fprintf(stderr, " Skipping unwritten extent tests.\n"); + goto out; + } else { + pos = lseek(fd, 0, SEEK_DATA); + if (pos == 0) { + fprintf(stderr, "File system does not support unwritten extents.\n"); + goto out; + } + } + unwritten_extents = 1; + printf("\n"); out: -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html