SEEK_HOLE is only supported since version 3.1. Check the specified range blocks are zeroed while the kernel does not supported SEEK_HOLE.
Signed-off-by: Zeng Linggang <zenglg...@cn.fujitsu.com> --- testcases/kernel/syscalls/fallocate/fallocate04.c | 49 ++++++++++++++++++----- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/testcases/kernel/syscalls/fallocate/fallocate04.c b/testcases/kernel/syscalls/fallocate/fallocate04.c index 911bbe8..9d9587b 100644 --- a/testcases/kernel/syscalls/fallocate/fallocate04.c +++ b/testcases/kernel/syscalls/fallocate/fallocate04.c @@ -50,6 +50,8 @@ static const option_t options[] = { {NULL, NULL, NULL} }; +static off_t check_file_hole(int, off_t, off_t); + static void help(void) { printf(" -v Verbose\n"); @@ -150,17 +152,12 @@ static void test02(void) } tst_resm(TINFO, "check that file has a hole with lseek(,,SEEK_HOLE)"); - off_t ret = lseek(fd, 0, SEEK_HOLE); - if (ret != (ssize_t)block_size) { - /* exclude error when kernel doesn't have SEEK_HOLE support */ - if (errno != EINVAL) { - tst_brkm(TFAIL | TERRNO, cleanup, - "fallocate() or lseek() failed"); - } - tst_resm(TWARN | TERRNO, "lseek() doesn't support SEEK_HOLE"); - } - tst_resm(TINFO, "found a hole at '%ld' offset", ret); + off_t ret = check_file_hole(fd, block_size, block_size); + if (ret != (ssize_t)block_size) + tst_resm(TWARN | TERRNO, "No file hole found"); + else + tst_resm(TINFO, "found a hole at '%ld' offset", ret); size_t alloc_size1 = get_allocsize(); @@ -275,3 +272,35 @@ int main(int argc, char *argv[]) tst_exit(); } + +static off_t check_file_hole(int fd, off_t offset, off_t len) +{ + off_t ret; + + ret = lseek(fd, 0, SEEK_HOLE); + if (ret < 0) { + /* exclude error when kernel doesn't have SEEK_HOLE support */ + if (errno != EINVAL) + tst_brkm(TFAIL | TERRNO, cleanup, "lseek() failed"); + + int i; + char *buf; + + SAFE_LSEEK(cleanup, fd, offset, SEEK_SET); + + buf = SAFE_MALLOC(cleanup, len); + + SAFE_READ(cleanup, 1, fd, buf, len); + + for (i = 0; i < len; i++) { + if (buf[i] != '\0') + break; + } + + free(buf); + + return i; + } + + return ret; +} -- 1.9.3 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list