From: Dmitry V. Levin Date: Mon, 11 Feb 2019 21:00:05 +0000 (+0000) Subject: tests: robustify preadv2-pwritev2 test against odd kernels X-Git-Tag: v5.0~63 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=28030d2b51951be018d063b49e19972b45c81daf;p=strace tests: robustify preadv2-pwritev2 test against odd kernels The test used to assume that either both preadv2 and pwritev2 syscalls are implemented or both are not implemented, but, apparently, there are kernels in the wild that implement just preadv2 syscall without pwritev2. * tests/preadv2-pwritev2.c (main): Skip the dumpio part of the test if either preadv2 or pwritev2 syscall is not implemented. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1668750 --- diff --git a/tests/preadv2-pwritev2.c b/tests/preadv2-pwritev2.c index f0e6987d..1dfd674f 100644 --- a/tests/preadv2-pwritev2.c +++ b/tests/preadv2-pwritev2.c @@ -166,7 +166,7 @@ main(void) const unsigned long long pos = 0x7ac5fed6dad7bef8; const kernel_ulong_t pos_l = (kernel_ulong_t) pos; long rc; - int test_dumpio; + bool skip_dumpio_test = false; tprintf("%s", ""); @@ -183,9 +183,17 @@ main(void) (kernel_ulong_t) (pos >> 32); rc = syscall(__NR_preadv2, -1, NULL, vlen, pos_l, pos_h, 1); # endif - if (rc != -1 || (ENOSYS != errno && EBADF != errno)) - perror_msg_and_fail("preadv2"); - test_dumpio = EBADF == errno; + if (rc != -1) + error_msg_and_fail("preadv2: expected -1, returned %ld", rc); + switch (errno) { + case ENOSYS: + skip_dumpio_test = true; + break; + case EBADF: + break; + default: + perror_msg_and_fail("preadv2"); + } tprintf("preadv2(-1, NULL, %lu, %lld, RWF_HIPRI) = %s\n", (unsigned long) vlen, pos, sprintrc(rc)); @@ -198,12 +206,21 @@ main(void) # else rc = syscall(__NR_pwritev2, -1, NULL, vlen, pos_l, pos_h, 1); # endif - if (rc != -1 || (ENOSYS != errno && EBADF != errno)) - perror_msg_and_fail("pwritev2"); + if (rc != -1) + error_msg_and_fail("pwritev2: expected -1, returned %ld", rc); + switch (errno) { + case ENOSYS: + skip_dumpio_test = true; + break; + case EBADF: + break; + default: + perror_msg_and_fail("pwritev2"); + } tprintf("pwritev2(-1, NULL, %lu, %lld, RWF_HIPRI) = %s\n", (unsigned long) vlen, pos, sprintrc(rc)); - if (test_dumpio) + if (!skip_dumpio_test) dumpio(); tprintf("%s\n", "+++ exited with 0 +++");