From: Petr Vorel <pvorel@suse.cz>
To: Jan Kara <jack@suse.cz>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] name_to_handle_at: Add test cases for AT_HANDLE_FID
Date: Mon, 20 Oct 2025 16:16:43 +0200 [thread overview]
Message-ID: <20251020141643.GA404362@pevik> (raw)
In-Reply-To: <20251001145600.24767-1-jack@suse.cz>
Hi Jan,
> Add a few testcases verifying AT_HANDLE_FID flag.
Thanks for keeping tests updated, we really appreciate that.
I wonder if the functionality got merged.
> Signed-off-by: Jan Kara <jack@suse.cz>
> ---
> include/lapi/fcntl.h | 4 +
> .../name_to_handle_at/name_to_handle_at03.c | 88 +++++++++++++++++++
> 2 files changed, 92 insertions(+)
> create mode 100644 testcases/kernel/syscalls/name_to_handle_at/name_to_handle_at03.c
> This is actually a testcase for a kernel regression, the kernel fix is on the
> way.
> diff --git a/include/lapi/fcntl.h b/include/lapi/fcntl.h
> index 7c050248892e..55a5e8b40432 100644
> --- a/include/lapi/fcntl.h
> +++ b/include/lapi/fcntl.h
> @@ -98,6 +98,10 @@
> # define AT_HANDLE_FID AT_REMOVEDIR
> #endif
> +#ifndef AT_HANDLE_CONNECTABLE
> +# define AT_HANDLE_CONNECTABLE 0x002
> +#endif
> +
> #ifndef AT_SYMLINK_FOLLOW
> # define AT_SYMLINK_FOLLOW 0x400
> #endif
> diff --git a/testcases/kernel/syscalls/name_to_handle_at/name_to_handle_at03.c b/testcases/kernel/syscalls/name_to_handle_at/name_to_handle_at03.c
> new file mode 100644
> index 000000000000..4a6df5e46fd7
> --- /dev/null
> +++ b/testcases/kernel/syscalls/name_to_handle_at/name_to_handle_at03.c
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2020 Viresh Kumar <viresh.kumar@linaro.org>
> + */
> +
> +/*\
> + * Basic name_to_handle_at() tests.
> + *
> + * [Algorithm]
nit: unrelated to the test subject. Here needs to be a blank line, otherwise
following lines aren't recognised as list, but they remain inline (RST format
used for spinx).
> + * - Check that EOVERFLOW is returned as expected by name_to_handle_at().
> + * - Check that we were able to access a file's stat with name_to_handle_at()
> + * and open_by_handle_at().
> + */
> +
> +#define _GNU_SOURCE
> +#include <sys/stat.h>
> +#include "lapi/name_to_handle_at.h"
> +
> +#define TEST_FILE "test_file"
> +
> +static int fd_atcwd = AT_FDCWD;
> +static struct file_handle *fhp;
> +
> +static struct tcase {
> + const char *name;
> + int *dfd;
> + const char *pathname;
> + int name_flags;
> + int exp_errno;
> +} tcases[] = {
> + {"test-file", &fd_atcwd, TEST_FILE, AT_HANDLE_FID, 0},
> + {"unexportable-file", &fd_atcwd, "/proc/filesystems", AT_HANDLE_FID, 0},
> + {"test-file-connectable", &fd_atcwd, TEST_FILE, AT_HANDLE_FID | AT_HANDLE_CONNECTABLE, EINVAL},
> +};
> +
> +static bool handle_type_supported(unsigned int flag, const char *name)
> +{
> + if (name_to_handle_at(-1, ".", NULL, NULL, flag) && errno == EINVAL) {
> + tst_brk(TCONF, "%s not supported by the kernel.", name);
> + return false;
> + }
> + return true;
> +}
> +
> +#define REQUIRE_HANDLE_TYPE_SUPPORT(flag) handle_type_supported(flag, #flag)
> +
> +static void setup(void)
> +{
> + SAFE_TOUCH(TEST_FILE, 0600, NULL);
> + fhp = malloc(MAX_HANDLE_SZ);
> + if (!fhp)
> + tst_brk(TBROK, "malloc failed");
> +
> + REQUIRE_HANDLE_TYPE_SUPPORT(AT_HANDLE_FID);
> + REQUIRE_HANDLE_TYPE_SUPPORT(AT_HANDLE_CONNECTABLE);
> +}
> +
> +static void run(unsigned int n)
> +{
> + struct tcase *tc = &tcases[n];
> + int mount_id;
> +
> + fhp->handle_bytes = MAX_HANDLE_SZ;
> + TEST(name_to_handle_at(*tc->dfd, tc->pathname, fhp, &mount_id,
> + tc->name_flags));
> + if (!tc->exp_errno) {
> + if (TST_RET)
> + tst_res(TFAIL | TTERRNO, "%s: name_to_handle_at() failed", tc->name);
> + else
> + tst_res(TPASS, "%s: name_to_handle_at() passed", tc->name);
> + return;
nit: We have TST_EXP_PASS() ...
> + }
> +
> + if (TST_RET != -1)
> + tst_res(TFAIL, "%s: name_to_handle_at() unexpectedly succeeded", tc->name);
> + else if (TST_ERR != tc->exp_errno)
> + tst_res(TFAIL | TTERRNO, "%s: name_to_handle_at() should fail with errno %s",
> + tc->name, tst_strerrno(tc->exp_errno));
> + else
> + tst_res(TPASS, "%s: name_to_handle_at() failed as expected", tc->name);
... and TST_EXP_FAIL() to simplify. Something like should work (untested):
if (!tc->exp_errno) {
TST_EXP_PASS(name_to_handle_at(*tc->dfd, tc->pathname, fhp, &mount_id,
tc->name_flags));
return;
} else {
TST_EXP_FAIL(name_to_handle_at(*tc->dfd, tc->pathname, fhp, &mount_id,
tc->name_flags), tc->exp_errno);
}
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2025-10-20 14:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-01 14:56 [LTP] [PATCH] name_to_handle_at: Add test cases for AT_HANDLE_FID Jan Kara
2025-10-02 9:49 ` Amir Goldstein
2025-10-03 16:26 ` Jan Kara
2025-10-20 14:16 ` Petr Vorel [this message]
2025-10-20 16:30 ` Jan Kara
-- strict thread matches above, loose matches on Subject: below --
2025-10-21 9:58 Jan Kara
2025-10-21 11:23 ` Petr Vorel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251020141643.GA404362@pevik \
--to=pvorel@suse.cz \
--cc=jack@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.