[LTP] [PATCH] close_range: check for kernel support below 5.9
Li Wang
liwang@redhat.com
Fri Feb 3 09:30:42 CET 2023
Hi Edward, Petr,
Sorry for the late append reply.
On Tue, Jan 31, 2023 at 8:25 AM Edward Liaw via ltp <ltp@lists.linux.it>
wrote:
> Check for close_range syscall support in the kernel before running
> close_range01 and close_range02 tests.
>
> Signed-off-by: Edward Liaw <edliaw@google.com>
> ---
> include/lapi/close_range.h | 13 +++++++++++++
> .../kernel/syscalls/close_range/close_range01.c | 2 ++
> .../kernel/syscalls/close_range/close_range02.c | 1 +
> 3 files changed, 16 insertions(+)
>
> diff --git a/include/lapi/close_range.h b/include/lapi/close_range.h
> index 19db52d3d..0e464bb30 100644
> --- a/include/lapi/close_range.h
> +++ b/include/lapi/close_range.h
> @@ -25,4 +25,17 @@ static inline int close_range(unsigned int fd, unsigned
> int max_fd,
> return tst_syscall(__NR_close_range, fd, max_fd, flags);
> }
> # endif
> +
> +static inline void close_range_supported_by_kernel(void)
> +{
> + long ret;
> +
> + if ((tst_kvercmp(5, 9, 0)) < 0) {
>
Using tst_kvercmp together with ENOSYS check is a repetitive practice,
I think verifying the returned value and errno is quite enough to determine
an un-support syscall.
And there is possible a lite kernel version newer than 5.9 removes this
syscall support. Then this test will fail again because this tst_kvercmp
skips the ENOSYS check.
Otherwise:
Reviewed-by: Li Wang <liwang@redhat.com>
> + /* Check if the syscall is backported on an older kernel */
> + ret = syscall(__NR_close_range, 1, 0, 0);
> + if (ret == -1 && errno == ENOSYS)
> + tst_brk(TCONF, "Test not supported on kernel
> version < v5.9");
> + }
> +}
> +
> #endif /* LAPI_CLOSE_RANGE_H__ */
> diff --git a/testcases/kernel/syscalls/close_range/close_range01.c
> b/testcases/kernel/syscalls/close_range/close_range01.c
> index 30bb600b6..072bbab66 100644
> --- a/testcases/kernel/syscalls/close_range/close_range01.c
> +++ b/testcases/kernel/syscalls/close_range/close_range01.c
> @@ -53,6 +53,8 @@ static inline void do_close_range(unsigned int fd,
> unsigned int max_fd,
>
> static void setup(void)
> {
> + close_range_supported_by_kernel();
> +
> struct rlimit nfd;
>
> SAFE_GETRLIMIT(RLIMIT_NOFILE, &nfd);
> diff --git a/testcases/kernel/syscalls/close_range/close_range02.c
> b/testcases/kernel/syscalls/close_range/close_range02.c
> index aec899261..2aa6d2c9f 100644
> --- a/testcases/kernel/syscalls/close_range/close_range02.c
> +++ b/testcases/kernel/syscalls/close_range/close_range02.c
> @@ -111,4 +111,5 @@ static struct tst_test test = {
> .tcnt = 6,
> .forks_child = 1,
> .test = run,
> + .setup = close_range_supported_by_kernel,
> };
> --
> 2.39.1.456.gfc5497dd1b-goog
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>
--
Regards,
Li Wang
More information about the ltp
mailing list