Re: [LTP] [PATCH] fallocate04: another check if SEEK_HOLE is not supported

Alexey Kodanev
2015-05-18T14:00:51Z

Hi!
On 05/18/2015 01:14 PM, Zeng Linggang wrote:
> 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.jy@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);

'check_file_data' function read the file and check for zeroes (a few
lines after lseek), so 'check_file_hole' seems pointless here.

Best regards,
Alexey