* [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE @ 2025-05-09 17:00 Amir Goldstein 2025-05-09 17:00 ` [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Amir Goldstein @ 2025-05-09 17:00 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel This is a test for new flag AT_HANDLE_CONNECTABLE from v6.13. See man page update of this flag here [1]. This v2 fixes the failures that you observed with tmpfs and nfs. Thanks, Amir. [1] https://lore.kernel.org/linux-fsdevel/20250330163502.1415011-1-amir73il@gmail.com/ Changes since v1: - Remove unpredictable test case of open fh after move to new parent - Add check that open fds are connected Amir Goldstein (2): open_by_handle: add support for testing connectable file handles open_by_handle: add a test for connectable file handles common/rc | 16 ++++++++-- src/open_by_handle.c | 53 ++++++++++++++++++++++++++------ tests/generic/777 | 70 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/777.out | 5 ++++ 4 files changed, 132 insertions(+), 12 deletions(-) create mode 100755 tests/generic/777 create mode 100644 tests/generic/777.out -- 2.34.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles 2025-05-09 17:00 [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein @ 2025-05-09 17:00 ` Amir Goldstein 2025-05-25 10:49 ` Zorro Lang 2025-05-09 17:00 ` [PATCH v2 2/2] open_by_handle: add a test for " Amir Goldstein 2025-05-23 14:20 ` [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein 2 siblings, 1 reply; 10+ messages in thread From: Amir Goldstein @ 2025-05-09 17:00 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel Test for kernel and filesystem support for conenctable file handles. With -N flag, encode connectable file handles and fail the test if the kernel or filesystem do not support conenctable file handles. Verify that decoding connectable file handles always results in a non empty path of the fd. Signed-off-by: Amir Goldstein <amir73il@gmail.com> --- common/rc | 16 ++++++++++--- src/open_by_handle.c | 53 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/common/rc b/common/rc index 6592c835..6407b744 100644 --- a/common/rc +++ b/common/rc @@ -3829,8 +3829,14 @@ _require_freeze() } # Does NFS export work on this fs? -_require_exportfs() +_require_open_by_handle() { + local what="NFS export" + local opts="$1" + if [ "$1" == "-N" ]; then + what="connectable file handles" + fi + _require_test_program "open_by_handle" # virtiofs doesn't support open_by_handle_at(2) yet, though the syscall @@ -3841,10 +3847,14 @@ _require_exportfs() _notrun "$FSTYP doesn't support open_by_handle_at(2)" mkdir -p "$TEST_DIR"/exportfs_test - $here/src/open_by_handle -c "$TEST_DIR"/exportfs_test 2>&1 \ - || _notrun "$FSTYP does not support NFS export" + $here/src/open_by_handle $opts -c "$TEST_DIR"/exportfs_test 2>&1 \ + || _notrun "$FSTYP does not support $what" } +_require_exportfs() +{ + _require_open_by_handle +} # Does shutdown work on this fs? _require_scratch_shutdown() diff --git a/src/open_by_handle.c b/src/open_by_handle.c index a99cce4b..7b664201 100644 --- a/src/open_by_handle.c +++ b/src/open_by_handle.c @@ -96,6 +96,9 @@ Examples: #ifndef AT_HANDLE_MNT_ID_UNIQUE # define AT_HANDLE_MNT_ID_UNIQUE 0x001 #endif +#ifndef AT_HANDLE_CONNECTABLE +# define AT_HANDLE_CONNECTABLE 0x002 +#endif #define MAXFILES 1024 @@ -121,6 +124,7 @@ void usage(void) fprintf(stderr, "open_by_handle -d <test_dir> [N] - unlink test files and hardlinks, drop caches and try to open by handle\n"); fprintf(stderr, "open_by_handle -m <test_dir> [N] - rename test files, drop caches and try to open by handle\n"); fprintf(stderr, "open_by_handle -M <test_dir> [N] - do not silently skip the mount ID verifications\n"); + fprintf(stderr, "open_by_handle -N <test_dir> [N] - encode connectable file handles\n"); fprintf(stderr, "open_by_handle -p <test_dir> - create/delete and try to open by handle also test_dir itself\n"); fprintf(stderr, "open_by_handle -i <handles_file> <test_dir> [N] - read test files handles from file and try to open by handle\n"); fprintf(stderr, "open_by_handle -o <handles_file> <test_dir> [N] - get file handles of test files and write handles to file\n"); @@ -130,14 +134,16 @@ void usage(void) fprintf(stderr, "open_by_handle -C <feature> - check if <feature> is supported by the kernel.\n"); fprintf(stderr, " <feature> can be any of the following values:\n"); fprintf(stderr, " - AT_HANDLE_MNT_ID_UNIQUE\n"); + fprintf(stderr, " - AT_HANDLE_CONNECTABLE\n"); exit(EXIT_FAILURE); } -static int do_name_to_handle_at(const char *fname, struct file_handle *fh, - int bufsz, bool force_check_mountid) +static int do_name_to_handle_at(const char *fname, struct file_handle *fh, int bufsz, + bool force_check_mountid, bool connectable) { int ret; int mntid_short; + int at_flags; static bool skip_mntid, skip_mntid_unique; @@ -181,18 +187,24 @@ static int do_name_to_handle_at(const char *fname, struct file_handle *fh, } } + at_flags = connectable ? AT_HANDLE_CONNECTABLE : 0; fh->handle_bytes = bufsz; - ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, 0); + ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, at_flags); if (bufsz < fh->handle_bytes) { /* Query the filesystem required bufsz and the file handle */ if (ret != -1 || errno != EOVERFLOW) { fprintf(stderr, "%s: unexpected result from name_to_handle_at: %d (%m)\n", fname, ret); return EXIT_FAILURE; } - ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, 0); + ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, at_flags); } if (ret < 0) { - fprintf(stderr, "%s: name_to_handle: %m\n", fname); + /* No filesystem support for encoding connectable file handles (e.g. overlayfs)? */ + if (connectable) + fprintf(stderr, "%s: name_to_handle_at(AT_HANDLE_CONNECTABLE) not supported by %s\n", + fname, errno == EINVAL ? "kernel" : "filesystem"); + else + fprintf(stderr, "%s: name_to_handle: %m\n", fname); return EXIT_FAILURE; } @@ -245,8 +257,17 @@ static int check_feature(const char *feature) return EXIT_FAILURE; } return 0; + } else if (!strcmp(feature, "AT_HANDLE_CONNECTABLE")) { + int ret = name_to_handle_at(AT_FDCWD, ".", NULL, NULL, AT_HANDLE_CONNECTABLE); + /* If AT_HANDLE_CONNECTABLE is supported, we get EFAULT. */ + if (ret < 0 && errno == EINVAL) { + fprintf(stderr, "name_to_handle_at(AT_HANDLE_CONNECTABLE) not supported by running kernel\n"); + return EXIT_FAILURE; + } + return 0; } + fprintf(stderr, "unknown feature name '%s'\n", feature); return EXIT_FAILURE; } @@ -270,13 +291,13 @@ int main(int argc, char **argv) int create = 0, delete = 0, nlink = 1, move = 0; int rd = 0, wr = 0, wrafter = 0, parent = 0; int keepopen = 0, drop_caches = 1, sleep_loop = 0; - int force_check_mountid = 0; + bool force_check_mountid = 0, connectable = 0; int bufsz = MAX_HANDLE_SZ; if (argc < 2) usage(); - while ((c = getopt(argc, argv, "cC:ludmMrwapknhi:o:sz")) != -1) { + while ((c = getopt(argc, argv, "cC:ludmMNrwapknhi:o:sz")) != -1) { switch (c) { case 'c': create = 1; @@ -313,6 +334,9 @@ int main(int argc, char **argv) case 'M': force_check_mountid = 1; break; + case 'N': + connectable = 1; + break; case 'p': parent = 1; break; @@ -445,7 +469,8 @@ int main(int argc, char **argv) return EXIT_FAILURE; } } else { - ret = do_name_to_handle_at(fname, &handle[i].fh, bufsz, force_check_mountid); + ret = do_name_to_handle_at(fname, &handle[i].fh, bufsz, + force_check_mountid, connectable); if (ret) return EXIT_FAILURE; } @@ -475,7 +500,8 @@ int main(int argc, char **argv) return EXIT_FAILURE; } } else { - ret = do_name_to_handle_at(test_dir, &dir_handle.fh, bufsz, force_check_mountid); + ret = do_name_to_handle_at(test_dir, &dir_handle.fh, bufsz, + force_check_mountid, connectable); if (ret) return EXIT_FAILURE; } @@ -589,6 +615,15 @@ int main(int argc, char **argv) errno = 0; fd = open_by_handle_at(mount_fd, &handle[i].fh, wrafter ? O_RDWR : O_RDONLY); if ((nlink || keepopen) && fd >= 0) { + char linkname[PATH_MAX]; + char procname[64]; + sprintf(procname, "/proc/self/fd/%i", fd); + int n = readlink(procname, linkname, PATH_MAX); + + /* check that fd is "connected" - that is has a non empty path */ + if (connectable && n <= 1) { + printf("open_by_handle(%s) returned a disconnected fd!\n", fname); + } if (rd) { char buf[4] = {0}; int size = read(fd, buf, 4); -- 2.34.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles 2025-05-09 17:00 ` [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein @ 2025-05-25 10:49 ` Zorro Lang 0 siblings, 0 replies; 10+ messages in thread From: Zorro Lang @ 2025-05-25 10:49 UTC (permalink / raw) To: Amir Goldstein Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel On Fri, May 09, 2025 at 07:00:32PM +0200, Amir Goldstein wrote: > Test for kernel and filesystem support for conenctable file handles. > > With -N flag, encode connectable file handles and fail the test if the > kernel or filesystem do not support conenctable file handles. > > Verify that decoding connectable file handles always results in a non > empty path of the fd. > > Signed-off-by: Amir Goldstein <amir73il@gmail.com> > --- Reviewed-by: Zorro Lang <zlang@redhat.com> > common/rc | 16 ++++++++++--- > src/open_by_handle.c | 53 ++++++++++++++++++++++++++++++++++++-------- > 2 files changed, 57 insertions(+), 12 deletions(-) > > diff --git a/common/rc b/common/rc > index 6592c835..6407b744 100644 > --- a/common/rc > +++ b/common/rc > @@ -3829,8 +3829,14 @@ _require_freeze() > } > > # Does NFS export work on this fs? > -_require_exportfs() > +_require_open_by_handle() > { > + local what="NFS export" > + local opts="$1" > + if [ "$1" == "-N" ]; then > + what="connectable file handles" > + fi > + > _require_test_program "open_by_handle" > > # virtiofs doesn't support open_by_handle_at(2) yet, though the syscall > @@ -3841,10 +3847,14 @@ _require_exportfs() > _notrun "$FSTYP doesn't support open_by_handle_at(2)" > > mkdir -p "$TEST_DIR"/exportfs_test > - $here/src/open_by_handle -c "$TEST_DIR"/exportfs_test 2>&1 \ > - || _notrun "$FSTYP does not support NFS export" > + $here/src/open_by_handle $opts -c "$TEST_DIR"/exportfs_test 2>&1 \ > + || _notrun "$FSTYP does not support $what" > } > > +_require_exportfs() > +{ > + _require_open_by_handle > +} > > # Does shutdown work on this fs? > _require_scratch_shutdown() > diff --git a/src/open_by_handle.c b/src/open_by_handle.c > index a99cce4b..7b664201 100644 > --- a/src/open_by_handle.c > +++ b/src/open_by_handle.c > @@ -96,6 +96,9 @@ Examples: > #ifndef AT_HANDLE_MNT_ID_UNIQUE > # define AT_HANDLE_MNT_ID_UNIQUE 0x001 > #endif > +#ifndef AT_HANDLE_CONNECTABLE > +# define AT_HANDLE_CONNECTABLE 0x002 > +#endif > > #define MAXFILES 1024 > > @@ -121,6 +124,7 @@ void usage(void) > fprintf(stderr, "open_by_handle -d <test_dir> [N] - unlink test files and hardlinks, drop caches and try to open by handle\n"); > fprintf(stderr, "open_by_handle -m <test_dir> [N] - rename test files, drop caches and try to open by handle\n"); > fprintf(stderr, "open_by_handle -M <test_dir> [N] - do not silently skip the mount ID verifications\n"); > + fprintf(stderr, "open_by_handle -N <test_dir> [N] - encode connectable file handles\n"); > fprintf(stderr, "open_by_handle -p <test_dir> - create/delete and try to open by handle also test_dir itself\n"); > fprintf(stderr, "open_by_handle -i <handles_file> <test_dir> [N] - read test files handles from file and try to open by handle\n"); > fprintf(stderr, "open_by_handle -o <handles_file> <test_dir> [N] - get file handles of test files and write handles to file\n"); > @@ -130,14 +134,16 @@ void usage(void) > fprintf(stderr, "open_by_handle -C <feature> - check if <feature> is supported by the kernel.\n"); > fprintf(stderr, " <feature> can be any of the following values:\n"); > fprintf(stderr, " - AT_HANDLE_MNT_ID_UNIQUE\n"); > + fprintf(stderr, " - AT_HANDLE_CONNECTABLE\n"); > exit(EXIT_FAILURE); > } > > -static int do_name_to_handle_at(const char *fname, struct file_handle *fh, > - int bufsz, bool force_check_mountid) > +static int do_name_to_handle_at(const char *fname, struct file_handle *fh, int bufsz, > + bool force_check_mountid, bool connectable) > { > int ret; > int mntid_short; > + int at_flags; > > static bool skip_mntid, skip_mntid_unique; > > @@ -181,18 +187,24 @@ static int do_name_to_handle_at(const char *fname, struct file_handle *fh, > } > } > > + at_flags = connectable ? AT_HANDLE_CONNECTABLE : 0; > fh->handle_bytes = bufsz; > - ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, 0); > + ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, at_flags); > if (bufsz < fh->handle_bytes) { > /* Query the filesystem required bufsz and the file handle */ > if (ret != -1 || errno != EOVERFLOW) { > fprintf(stderr, "%s: unexpected result from name_to_handle_at: %d (%m)\n", fname, ret); > return EXIT_FAILURE; > } > - ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, 0); > + ret = name_to_handle_at(AT_FDCWD, fname, fh, &mntid_short, at_flags); > } > if (ret < 0) { > - fprintf(stderr, "%s: name_to_handle: %m\n", fname); > + /* No filesystem support for encoding connectable file handles (e.g. overlayfs)? */ > + if (connectable) > + fprintf(stderr, "%s: name_to_handle_at(AT_HANDLE_CONNECTABLE) not supported by %s\n", > + fname, errno == EINVAL ? "kernel" : "filesystem"); > + else > + fprintf(stderr, "%s: name_to_handle: %m\n", fname); > return EXIT_FAILURE; > } > > @@ -245,8 +257,17 @@ static int check_feature(const char *feature) > return EXIT_FAILURE; > } > return 0; > + } else if (!strcmp(feature, "AT_HANDLE_CONNECTABLE")) { > + int ret = name_to_handle_at(AT_FDCWD, ".", NULL, NULL, AT_HANDLE_CONNECTABLE); > + /* If AT_HANDLE_CONNECTABLE is supported, we get EFAULT. */ > + if (ret < 0 && errno == EINVAL) { > + fprintf(stderr, "name_to_handle_at(AT_HANDLE_CONNECTABLE) not supported by running kernel\n"); > + return EXIT_FAILURE; > + } > + return 0; > } > > + > fprintf(stderr, "unknown feature name '%s'\n", feature); > return EXIT_FAILURE; > } > @@ -270,13 +291,13 @@ int main(int argc, char **argv) > int create = 0, delete = 0, nlink = 1, move = 0; > int rd = 0, wr = 0, wrafter = 0, parent = 0; > int keepopen = 0, drop_caches = 1, sleep_loop = 0; > - int force_check_mountid = 0; > + bool force_check_mountid = 0, connectable = 0; > int bufsz = MAX_HANDLE_SZ; > > if (argc < 2) > usage(); > > - while ((c = getopt(argc, argv, "cC:ludmMrwapknhi:o:sz")) != -1) { > + while ((c = getopt(argc, argv, "cC:ludmMNrwapknhi:o:sz")) != -1) { > switch (c) { > case 'c': > create = 1; > @@ -313,6 +334,9 @@ int main(int argc, char **argv) > case 'M': > force_check_mountid = 1; > break; > + case 'N': > + connectable = 1; > + break; > case 'p': > parent = 1; > break; > @@ -445,7 +469,8 @@ int main(int argc, char **argv) > return EXIT_FAILURE; > } > } else { > - ret = do_name_to_handle_at(fname, &handle[i].fh, bufsz, force_check_mountid); > + ret = do_name_to_handle_at(fname, &handle[i].fh, bufsz, > + force_check_mountid, connectable); > if (ret) > return EXIT_FAILURE; > } > @@ -475,7 +500,8 @@ int main(int argc, char **argv) > return EXIT_FAILURE; > } > } else { > - ret = do_name_to_handle_at(test_dir, &dir_handle.fh, bufsz, force_check_mountid); > + ret = do_name_to_handle_at(test_dir, &dir_handle.fh, bufsz, > + force_check_mountid, connectable); > if (ret) > return EXIT_FAILURE; > } > @@ -589,6 +615,15 @@ int main(int argc, char **argv) > errno = 0; > fd = open_by_handle_at(mount_fd, &handle[i].fh, wrafter ? O_RDWR : O_RDONLY); > if ((nlink || keepopen) && fd >= 0) { > + char linkname[PATH_MAX]; > + char procname[64]; > + sprintf(procname, "/proc/self/fd/%i", fd); > + int n = readlink(procname, linkname, PATH_MAX); > + > + /* check that fd is "connected" - that is has a non empty path */ > + if (connectable && n <= 1) { > + printf("open_by_handle(%s) returned a disconnected fd!\n", fname); > + } > if (rd) { > char buf[4] = {0}; > int size = read(fd, buf, 4); > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 2/2] open_by_handle: add a test for connectable file handles 2025-05-09 17:00 [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein 2025-05-09 17:00 ` [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein @ 2025-05-09 17:00 ` Amir Goldstein 2025-05-09 17:06 ` Amir Goldstein 2025-05-23 14:20 ` [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein 2 siblings, 1 reply; 10+ messages in thread From: Amir Goldstein @ 2025-05-09 17:00 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel This is a variant of generic/477 with connectable file handles. This test uses load and store of file handles from a temp file to test decoding connectable file handles after cycle mount and after renames. Decoding connectable file handles after being moved to a new parent is expected to fail on some filesystems, but not on filesystems that do not really get unmounted in mount cycle like tmpfs, so skip this test. Signed-off-by: Amir Goldstein <amir73il@gmail.com> --- tests/generic/777 | 70 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/777.out | 5 ++++ 2 files changed, 75 insertions(+) create mode 100755 tests/generic/777 create mode 100644 tests/generic/777.out diff --git a/tests/generic/777 b/tests/generic/777 new file mode 100755 index 00000000..d8d33e55 --- /dev/null +++ b/tests/generic/777 @@ -0,0 +1,70 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2018-2025 CTERA Networks. All Rights Reserved. +# +# FS QA Test No. 777 +# +# Check open by connectable file handle after cycle mount. +# +# This is a variant of test 477 with connectable file handles. +# This test uses load and store of file handles from a temp file to test +# decoding file handles after cycle mount and after directory renames. +# Decoding connectable file handles after being moved to a new parent +# is expected to fail on some filesystems, but not on filesystems that +# do not really get unmounted in mount cycle like tmpfs, so skip this test. +# +. ./common/preamble +_begin_fstest auto quick exportfs + +# Import common functions. +. ./common/filter + + +# Modify as appropriate. +_require_test +# Require connectable file handles support +_require_open_by_handle -N + +NUMFILES=10 +testroot=$TEST_DIR/$seq-dir +testdir=$testroot/testdir + +# Create test dir and test files, encode connectable file handles and store to tmp file +create_test_files() +{ + rm -rf $testdir + mkdir -p $testdir + $here/src/open_by_handle -N -cwp -o $tmp.handles_file $testdir $NUMFILES +} + +# Decode connectable file handles loaded from tmp file +test_file_handles() +{ + local opt=$1 + local when=$2 + + echo test_file_handles after $when + $here/src/open_by_handle $opt -i $tmp.handles_file $TEST_DIR $NUMFILES +} + +# Decode file handles of files/dir after cycle mount +create_test_files +_test_cycle_mount +test_file_handles -rp "cycle mount" + +# Decode file handles of files/dir after rename of parent and cycle mount +create_test_files $testdir +rm -rf $testdir.renamed +mv $testdir $testdir.renamed/ +_test_cycle_mount +test_file_handles -rp "rename parent" + +# Decode file handles of files/dir after rename of grandparent and cycle mount +create_test_files $testdir +rm -rf $testroot.renamed +mv $testroot $testroot.renamed/ +_test_cycle_mount +test_file_handles -rp "rename grandparent" + +status=0 +exit diff --git a/tests/generic/777.out b/tests/generic/777.out new file mode 100644 index 00000000..c0617681 --- /dev/null +++ b/tests/generic/777.out @@ -0,0 +1,5 @@ +QA output created by 777 +test_file_handles after cycle mount +test_file_handles after rename parent +test_file_handles after rename grandparent +test_file_handles after move to new parent -- 2.34.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/2] open_by_handle: add a test for connectable file handles 2025-05-09 17:00 ` [PATCH v2 2/2] open_by_handle: add a test for " Amir Goldstein @ 2025-05-09 17:06 ` Amir Goldstein 0 siblings, 0 replies; 10+ messages in thread From: Amir Goldstein @ 2025-05-09 17:06 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel On Fri, May 9, 2025 at 7:00 PM Amir Goldstein <amir73il@gmail.com> wrote: > > This is a variant of generic/477 with connectable file handles. > This test uses load and store of file handles from a temp file to test > decoding connectable file handles after cycle mount and after renames. > > Decoding connectable file handles after being moved to a new parent > is expected to fail on some filesystems, but not on filesystems that > do not really get unmounted in mount cycle like tmpfs, so skip this test. > > Signed-off-by: Amir Goldstein <amir73il@gmail.com> > --- > tests/generic/777 | 70 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/777.out | 5 ++++ > 2 files changed, 75 insertions(+) > create mode 100755 tests/generic/777 > create mode 100644 tests/generic/777.out > > diff --git a/tests/generic/777 b/tests/generic/777 > new file mode 100755 > index 00000000..d8d33e55 > --- /dev/null > +++ b/tests/generic/777 > @@ -0,0 +1,70 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (C) 2018-2025 CTERA Networks. All Rights Reserved. > +# > +# FS QA Test No. 777 > +# > +# Check open by connectable file handle after cycle mount. > +# > +# This is a variant of test 477 with connectable file handles. > +# This test uses load and store of file handles from a temp file to test > +# decoding file handles after cycle mount and after directory renames. > +# Decoding connectable file handles after being moved to a new parent > +# is expected to fail on some filesystems, but not on filesystems that > +# do not really get unmounted in mount cycle like tmpfs, so skip this test. > +# > +. ./common/preamble > +_begin_fstest auto quick exportfs > + > +# Import common functions. > +. ./common/filter > + > + > +# Modify as appropriate. > +_require_test > +# Require connectable file handles support > +_require_open_by_handle -N > + > +NUMFILES=10 > +testroot=$TEST_DIR/$seq-dir > +testdir=$testroot/testdir > + > +# Create test dir and test files, encode connectable file handles and store to tmp file > +create_test_files() > +{ > + rm -rf $testdir > + mkdir -p $testdir > + $here/src/open_by_handle -N -cwp -o $tmp.handles_file $testdir $NUMFILES > +} > + > +# Decode connectable file handles loaded from tmp file > +test_file_handles() > +{ > + local opt=$1 > + local when=$2 > + > + echo test_file_handles after $when > + $here/src/open_by_handle $opt -i $tmp.handles_file $TEST_DIR $NUMFILES > +} > + > +# Decode file handles of files/dir after cycle mount > +create_test_files > +_test_cycle_mount > +test_file_handles -rp "cycle mount" > + > +# Decode file handles of files/dir after rename of parent and cycle mount > +create_test_files $testdir > +rm -rf $testdir.renamed > +mv $testdir $testdir.renamed/ > +_test_cycle_mount > +test_file_handles -rp "rename parent" > + > +# Decode file handles of files/dir after rename of grandparent and cycle mount > +create_test_files $testdir > +rm -rf $testroot.renamed > +mv $testroot $testroot.renamed/ > +_test_cycle_mount > +test_file_handles -rp "rename grandparent" > + > +status=0 > +exit > diff --git a/tests/generic/777.out b/tests/generic/777.out > new file mode 100644 > index 00000000..c0617681 > --- /dev/null > +++ b/tests/generic/777.out > @@ -0,0 +1,5 @@ > +QA output created by 777 > +test_file_handles after cycle mount > +test_file_handles after rename parent > +test_file_handles after rename grandparent > +test_file_handles after move to new parent OOPS this line was supposed to be removed - resending ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE 2025-05-09 17:00 [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein 2025-05-09 17:00 ` [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein 2025-05-09 17:00 ` [PATCH v2 2/2] open_by_handle: add a test for " Amir Goldstein @ 2025-05-23 14:20 ` Amir Goldstein 2025-05-23 14:50 ` Zorro Lang 2 siblings, 1 reply; 10+ messages in thread From: Amir Goldstein @ 2025-05-23 14:20 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel Hi Zorro. Ping. On Fri, May 9, 2025 at 7:00 PM Amir Goldstein <amir73il@gmail.com> wrote: > > This is a test for new flag AT_HANDLE_CONNECTABLE from v6.13. > See man page update of this flag here [1]. > > This v2 fixes the failures that you observed with tmpfs and nfs. > > Thanks, > Amir. > > [1] https://lore.kernel.org/linux-fsdevel/20250330163502.1415011-1-amir73il@gmail.com/ > > Changes since v1: > - Remove unpredictable test case of open fh after move to new parent > - Add check that open fds are connected > > Amir Goldstein (2): > open_by_handle: add support for testing connectable file handles > open_by_handle: add a test for connectable file handles > > common/rc | 16 ++++++++-- > src/open_by_handle.c | 53 ++++++++++++++++++++++++++------ > tests/generic/777 | 70 +++++++++++++++++++++++++++++++++++++++++++ > tests/generic/777.out | 5 ++++ > 4 files changed, 132 insertions(+), 12 deletions(-) > create mode 100755 tests/generic/777 > create mode 100644 tests/generic/777.out > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE 2025-05-23 14:20 ` [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein @ 2025-05-23 14:50 ` Zorro Lang 2025-05-23 17:11 ` Amir Goldstein 0 siblings, 1 reply; 10+ messages in thread From: Zorro Lang @ 2025-05-23 14:50 UTC (permalink / raw) To: Amir Goldstein Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel On Fri, May 23, 2025 at 04:20:29PM +0200, Amir Goldstein wrote: > Hi Zorro. > > Ping. Sure Amir, don't worry, this patchset is already in my testing list. I'll merge it after testing passed :) > > On Fri, May 9, 2025 at 7:00 PM Amir Goldstein <amir73il@gmail.com> wrote: > > > > This is a test for new flag AT_HANDLE_CONNECTABLE from v6.13. > > See man page update of this flag here [1]. > > > > This v2 fixes the failures that you observed with tmpfs and nfs. > > > > Thanks, > > Amir. > > > > [1] https://lore.kernel.org/linux-fsdevel/20250330163502.1415011-1-amir73il@gmail.com/ > > > > Changes since v1: > > - Remove unpredictable test case of open fh after move to new parent > > - Add check that open fds are connected > > > > Amir Goldstein (2): > > open_by_handle: add support for testing connectable file handles > > open_by_handle: add a test for connectable file handles > > > > common/rc | 16 ++++++++-- > > src/open_by_handle.c | 53 ++++++++++++++++++++++++++------ > > tests/generic/777 | 70 +++++++++++++++++++++++++++++++++++++++++++ > > tests/generic/777.out | 5 ++++ > > 4 files changed, 132 insertions(+), 12 deletions(-) > > create mode 100755 tests/generic/777 > > create mode 100644 tests/generic/777.out > > > > -- > > 2.34.1 > > > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE 2025-05-23 14:50 ` Zorro Lang @ 2025-05-23 17:11 ` Amir Goldstein 2025-05-25 5:36 ` Zorro Lang 0 siblings, 1 reply; 10+ messages in thread From: Amir Goldstein @ 2025-05-23 17:11 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel On Fri, May 23, 2025 at 4:50 PM Zorro Lang <zlang@redhat.com> wrote: > > On Fri, May 23, 2025 at 04:20:29PM +0200, Amir Goldstein wrote: > > Hi Zorro. > > > > Ping. > > Sure Amir, don't worry, this patchset is already in my testing list. > I'll merge it after testing passed :) > Thanks! ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE 2025-05-23 17:11 ` Amir Goldstein @ 2025-05-25 5:36 ` Zorro Lang 2025-05-25 7:40 ` Amir Goldstein 0 siblings, 1 reply; 10+ messages in thread From: Zorro Lang @ 2025-05-25 5:36 UTC (permalink / raw) To: Amir Goldstein Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel On Fri, May 23, 2025 at 07:11:23PM +0200, Amir Goldstein wrote: > On Fri, May 23, 2025 at 4:50 PM Zorro Lang <zlang@redhat.com> wrote: > > > > On Fri, May 23, 2025 at 04:20:29PM +0200, Amir Goldstein wrote: > > > Hi Zorro. > > > > > > Ping. > > > > Sure Amir, don't worry, this patchset is already in my testing list. > > I'll merge it after testing passed :) > > > > Thanks! Hi Amir, Although the v2 test passed on tmpfs, but it still fails on nfsv4.2, the diff output as [1]. Is that as your expected? Anyway I think this's not a big issue, so we still can merge this test case at first (as it's blocked long time), then fix this failure later :) Thanks, Zorro [1] --- /dev/fd/63 2025-05-23 17:25:52.283688434 -0400 +++ generic/777.out.bad 2025-05-23 17:25:51.955645147 -0400 @@ -1,4 +1,34 @@ QA output created by 777 test_file_handles after cycle mount +open_by_handle(/mnt/xfstests/test/nfs-client/file000000) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000001) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000002) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000003) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000004) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000005) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000006) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000007) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000008) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000009) returned 116 incorrectly on a linked file! test_file_handles after rename parent +open_by_handle(/mnt/xfstests/test/nfs-client/file000000) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000001) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000002) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000003) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000004) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000005) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000006) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000007) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000008) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000009) returned 116 incorrectly on a linked file! test_file_handles after rename grandparent +open_by_handle(/mnt/xfstests/test/nfs-client/file000000) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000001) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000002) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000003) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000004) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000005) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000006) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000007) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000008) returned 116 incorrectly on a linked file! +open_by_handle(/mnt/xfstests/test/nfs-client/file000009) returned 116 incorrectly on a linked file! > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE 2025-05-25 5:36 ` Zorro Lang @ 2025-05-25 7:40 ` Amir Goldstein 0 siblings, 0 replies; 10+ messages in thread From: Amir Goldstein @ 2025-05-25 7:40 UTC (permalink / raw) To: Zorro Lang Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever, Jeff Layton, fstests, linux-fsdevel On Sun, May 25, 2025 at 7:36 AM Zorro Lang <zlang@redhat.com> wrote: > > On Fri, May 23, 2025 at 07:11:23PM +0200, Amir Goldstein wrote: > > On Fri, May 23, 2025 at 4:50 PM Zorro Lang <zlang@redhat.com> wrote: > > > > > > On Fri, May 23, 2025 at 04:20:29PM +0200, Amir Goldstein wrote: > > > > Hi Zorro. > > > > > > > > Ping. > > > > > > Sure Amir, don't worry, this patchset is already in my testing list. > > > I'll merge it after testing passed :) > > > > > > > Thanks! > > Hi Amir, > > Although the v2 test passed on tmpfs, but it still fails on nfsv4.2, the > diff output as [1]. Is that as your expected? Anyway I think this's not > a big issue, so we still can merge this test case at first (as it's blocked > long time), then fix this failure later :) It seems like a kernel bug, so the test is good. Looking at nfsv4.2 implementation, it does not implement fh_to_parent(), so AT_HANDLE_CONNECTALE should not be supported and the test should have notrun due to "does not support connectable file handles" I will post a patch to fix the kernel and setup my env to test nfsv4.2. Thanks! Amir. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2025-05-25 10:49 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-05-09 17:00 [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein 2025-05-09 17:00 ` [PATCH v2 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein 2025-05-25 10:49 ` Zorro Lang 2025-05-09 17:00 ` [PATCH v2 2/2] open_by_handle: add a test for " Amir Goldstein 2025-05-09 17:06 ` Amir Goldstein 2025-05-23 14:20 ` [PATCH v2 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein 2025-05-23 14:50 ` Zorro Lang 2025-05-23 17:11 ` Amir Goldstein 2025-05-25 5:36 ` Zorro Lang 2025-05-25 7:40 ` Amir Goldstein
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).