* [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE
@ 2025-04-09 11:52 Amir Goldstein
2025-04-09 11:52 ` [PATCH 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Amir Goldstein @ 2025-04-09 11:52 UTC (permalink / raw)
To: Zorro Lang
Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever,
Jeff Layton, fstests, linux-fsdevel
Hi Zorro,
This is a test for new flag AT_HANDLE_CONNECTABLE from v6.13.
I've had this test for a while, but apparently I forgot to post it.
See man page update of this flag here [1].
Thanks,
Amir.
[1] https://lore.kernel.org/linux-fsdevel/20250330163502.1415011-1-amir73il@gmail.com/
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 | 44 +++++++++++++++++++-----
tests/generic/777 | 79 +++++++++++++++++++++++++++++++++++++++++++
tests/generic/777.out | 15 ++++++++
4 files changed, 142 insertions(+), 12 deletions(-)
create mode 100755 tests/generic/777
create mode 100644 tests/generic/777.out
--
2.34.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] open_by_handle: add support for testing connectable file handles
2025-04-09 11:52 [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein
@ 2025-04-09 11:52 ` Amir Goldstein
2025-04-09 11:52 ` [PATCH 2/2] open_by_handle: add a test for " Amir Goldstein
2025-05-06 21:08 ` [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein
2 siblings, 0 replies; 7+ messages in thread
From: Amir Goldstein @ 2025-04-09 11:52 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.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
common/rc | 16 +++++++++++++---
src/open_by_handle.c | 44 +++++++++++++++++++++++++++++++++++---------
2 files changed, 48 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..d281343a 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;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] open_by_handle: add a test for connectable file handles
2025-04-09 11:52 [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein
2025-04-09 11:52 ` [PATCH 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein
@ 2025-04-09 11:52 ` Amir Goldstein
2025-05-08 19:38 ` Zorro Lang
2025-05-06 21:08 ` [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein
2 siblings, 1 reply; 7+ messages in thread
From: Amir Goldstein @ 2025-04-09 11:52 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.
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
tests/generic/777 | 79 +++++++++++++++++++++++++++++++++++++++++++
tests/generic/777.out | 15 ++++++++
2 files changed, 94 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..52a461c3
--- /dev/null
+++ b/tests/generic/777
@@ -0,0 +1,79 @@
+#! /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.
+#
+. ./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"
+
+# Decode file handles of files/dir after move to new parent and cycle mount
+# This is expected to fail because the conectable file handle encodes the
+# old parent.
+create_test_files $testdir
+rm -rf $testdir.new
+mkdir -p $testdir.new
+mv $testdir/* $testdir.new/
+_test_cycle_mount
+test_file_handles -r "move to new parent" | _filter_test_dir
+
+status=0
+exit
diff --git a/tests/generic/777.out b/tests/generic/777.out
new file mode 100644
index 00000000..648c480c
--- /dev/null
+++ b/tests/generic/777.out
@@ -0,0 +1,15 @@
+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
+open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000002) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000003) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000004) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000005) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000006) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000007) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000008) returned 116 incorrectly on a linked file!
+open_by_handle(TEST_DIR/file000009) returned 116 incorrectly on a linked file!
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE
2025-04-09 11:52 [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein
2025-04-09 11:52 ` [PATCH 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein
2025-04-09 11:52 ` [PATCH 2/2] open_by_handle: add a test for " Amir Goldstein
@ 2025-05-06 21:08 ` Amir Goldstein
2 siblings, 0 replies; 7+ messages in thread
From: Amir Goldstein @ 2025-05-06 21:08 UTC (permalink / raw)
To: Zorro Lang
Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever,
Jeff Layton, fstests, linux-fsdevel
On Wed, Apr 9, 2025 at 1:52 PM Amir Goldstein <amir73il@gmail.com> wrote:
>
> Hi Zorro,
>
> This is a test for new flag AT_HANDLE_CONNECTABLE from v6.13.
> I've had this test for a while, but apparently I forgot to post it.
> See man page update of this flag here [1].
>
Ping.
Zorro,
Can you take these patches which add one new test?
Thanks,
Amir.
>
> [1] https://lore.kernel.org/linux-fsdevel/20250330163502.1415011-1-amir73il@gmail.com/
>
> 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 | 44 +++++++++++++++++++-----
> tests/generic/777 | 79 +++++++++++++++++++++++++++++++++++++++++++
> tests/generic/777.out | 15 ++++++++
> 4 files changed, 142 insertions(+), 12 deletions(-)
> create mode 100755 tests/generic/777
> create mode 100644 tests/generic/777.out
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] open_by_handle: add a test for connectable file handles
2025-04-09 11:52 ` [PATCH 2/2] open_by_handle: add a test for " Amir Goldstein
@ 2025-05-08 19:38 ` Zorro Lang
2025-05-08 20:38 ` Amir Goldstein
0 siblings, 1 reply; 7+ messages in thread
From: Zorro Lang @ 2025-05-08 19:38 UTC (permalink / raw)
To: Amir Goldstein
Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever,
Jeff Layton, fstests, linux-fsdevel
On Wed, Apr 09, 2025 at 01:52:20PM +0200, Amir Goldstein 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.
>
> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> ---
Hi Amir,
This test case fails on some filesystems, e.g. nfs [1] and tmpfs [2].
Is this as your expected?
Thanks,
Zorro
[1]
generic/777 fails on nfs:
--- /dev/fd/63 2025-05-07 02:44:24.150560533 -0400
+++ generic/777.out.bad 2025-05-07 02:44:23.999734558 -0400
@@ -1,7 +1,37 @@
QA output created by 777
test_file_handles after cycle mount
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000000) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000001) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000002) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000003) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000004) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000005) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000006) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000007) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000008) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000009) returned 116 incorrectly on a linked file!
test_file_handles after rename parent
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000000) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000001) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000002) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000003) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000004) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000005) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000006) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000007) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000008) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000009) returned 116 incorrectly on a linked file!
test_file_handles after rename grandparent
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000000) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000001) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000002) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000003) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000004) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000005) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000006) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000007) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000008) returned 116 incorrectly on a linked file!
+open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000009) returned 116 incorrectly on a linked file!
test_file_handles after move to new parent
open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
[2]
generic/777 fails on tmpfs:
--- /dev/fd/63 2025-05-07 07:53:26.265453903 -0400
+++ generic/777.out.bad 2025-05-07 07:53:25.536434660 -0400
@@ -3,13 +3,3 @@
test_file_handles after rename parent
test_file_handles after rename grandparent
test_file_handles after move to new parent
-open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000002) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000003) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000004) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000005) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000006) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000007) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000008) returned 116 incorrectly on a linked file!
-open_by_handle(TEST_DIR/file000009) returned 116 incorrectly on a linked file!
> tests/generic/777 | 79 +++++++++++++++++++++++++++++++++++++++++++
> tests/generic/777.out | 15 ++++++++
> 2 files changed, 94 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..52a461c3
> --- /dev/null
> +++ b/tests/generic/777
> @@ -0,0 +1,79 @@
> +#! /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.
> +#
> +. ./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"
> +
> +# Decode file handles of files/dir after move to new parent and cycle mount
> +# This is expected to fail because the conectable file handle encodes the
> +# old parent.
> +create_test_files $testdir
> +rm -rf $testdir.new
> +mkdir -p $testdir.new
> +mv $testdir/* $testdir.new/
> +_test_cycle_mount
> +test_file_handles -r "move to new parent" | _filter_test_dir
> +
> +status=0
> +exit
> diff --git a/tests/generic/777.out b/tests/generic/777.out
> new file mode 100644
> index 00000000..648c480c
> --- /dev/null
> +++ b/tests/generic/777.out
> @@ -0,0 +1,15 @@
> +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
> +open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000002) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000003) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000004) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000005) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000006) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000007) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000008) returned 116 incorrectly on a linked file!
> +open_by_handle(TEST_DIR/file000009) returned 116 incorrectly on a linked file!
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] open_by_handle: add a test for connectable file handles
2025-05-08 19:38 ` Zorro Lang
@ 2025-05-08 20:38 ` Amir Goldstein
2025-05-09 16:57 ` Amir Goldstein
0 siblings, 1 reply; 7+ messages in thread
From: Amir Goldstein @ 2025-05-08 20:38 UTC (permalink / raw)
To: Zorro Lang
Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever,
Jeff Layton, fstests, linux-fsdevel
On Thu, May 8, 2025 at 9:38 PM Zorro Lang <zlang@redhat.com> wrote:
>
> On Wed, Apr 09, 2025 at 01:52:20PM +0200, Amir Goldstein 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.
> >
> > Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> > ---
>
> Hi Amir,
>
> This test case fails on some filesystems, e.g. nfs [1] and tmpfs [2].
> Is this as your expected?
No. I will look into this failure.
Thanks for testing!
Amir.
>
> Thanks,
> Zorro
>
> [1]
> generic/777 fails on nfs:
>
> --- /dev/fd/63 2025-05-07 02:44:24.150560533 -0400
> +++ generic/777.out.bad 2025-05-07 02:44:23.999734558 -0400
> @@ -1,7 +1,37 @@
> QA output created by 777
> test_file_handles after cycle mount
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000000) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000001) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000002) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000003) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000004) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000005) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000006) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000007) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000008) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000009) returned 116 incorrectly on a linked file!
> test_file_handles after rename parent
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000000) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000001) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000002) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000003) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000004) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000005) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000006) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000007) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000008) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000009) returned 116 incorrectly on a linked file!
> test_file_handles after rename grandparent
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000000) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000001) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000002) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000003) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000004) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000005) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000006) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000007) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000008) returned 116 incorrectly on a linked file!
> +open_by_handle(/mnt/fstests/TEST_DIR/nfs-client/file000009) returned 116 incorrectly on a linked file!
> test_file_handles after move to new parent
> open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
> open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
>
> [2]
> generic/777 fails on tmpfs:
>
> --- /dev/fd/63 2025-05-07 07:53:26.265453903 -0400
> +++ generic/777.out.bad 2025-05-07 07:53:25.536434660 -0400
> @@ -3,13 +3,3 @@
> test_file_handles after rename parent
> test_file_handles after rename grandparent
> test_file_handles after move to new parent
> -open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000002) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000003) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000004) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000005) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000006) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000007) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000008) returned 116 incorrectly on a linked file!
> -open_by_handle(TEST_DIR/file000009) returned 116 incorrectly on a linked file!
>
>
> > tests/generic/777 | 79 +++++++++++++++++++++++++++++++++++++++++++
> > tests/generic/777.out | 15 ++++++++
> > 2 files changed, 94 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..52a461c3
> > --- /dev/null
> > +++ b/tests/generic/777
> > @@ -0,0 +1,79 @@
> > +#! /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.
> > +#
> > +. ./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"
> > +
> > +# Decode file handles of files/dir after move to new parent and cycle mount
> > +# This is expected to fail because the conectable file handle encodes the
> > +# old parent.
> > +create_test_files $testdir
> > +rm -rf $testdir.new
> > +mkdir -p $testdir.new
> > +mv $testdir/* $testdir.new/
> > +_test_cycle_mount
> > +test_file_handles -r "move to new parent" | _filter_test_dir
> > +
> > +status=0
> > +exit
> > diff --git a/tests/generic/777.out b/tests/generic/777.out
> > new file mode 100644
> > index 00000000..648c480c
> > --- /dev/null
> > +++ b/tests/generic/777.out
> > @@ -0,0 +1,15 @@
> > +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
> > +open_by_handle(TEST_DIR/file000000) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000001) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000002) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000003) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000004) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000005) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000006) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000007) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000008) returned 116 incorrectly on a linked file!
> > +open_by_handle(TEST_DIR/file000009) returned 116 incorrectly on a linked file!
> > --
> > 2.34.1
> >
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] open_by_handle: add a test for connectable file handles
2025-05-08 20:38 ` Amir Goldstein
@ 2025-05-09 16:57 ` Amir Goldstein
0 siblings, 0 replies; 7+ messages in thread
From: Amir Goldstein @ 2025-05-09 16:57 UTC (permalink / raw)
To: Zorro Lang
Cc: Aleksa Sarai, Christian Brauner, Jan Kara, Chuck Lever,
Jeff Layton, fstests, linux-fsdevel
On Thu, May 8, 2025 at 10:38 PM Amir Goldstein <amir73il@gmail.com> wrote:
>
> On Thu, May 8, 2025 at 9:38 PM Zorro Lang <zlang@redhat.com> wrote:
> >
> > On Wed, Apr 09, 2025 at 01:52:20PM +0200, Amir Goldstein 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.
> > >
> > > Signed-off-by: Amir Goldstein <amir73il@gmail.com>
> > > ---
> >
> > Hi Amir,
> >
> > This test case fails on some filesystems, e.g. nfs [1] and tmpfs [2].
> > Is this as your expected?
>
> No. I will look into this failure.
So what happens is that on filesystems that really get unmounted in
mount cycle, trying to open a connectable file handle after file was
moved to another parent is expected to fail and this is what the test
expects, but tmpfs does not really get unmounted on mount cycle
so opening the file handle does work.
Similarly for nfs, the file remains in cache on the local server so opening
by handle works.
I have removed that test case in v2 because it is unpredictable and added
verification that opened files have a connected path.
Thanks,
Amir.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-05-09 16:57 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-09 11:52 [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE Amir Goldstein
2025-04-09 11:52 ` [PATCH 1/2] open_by_handle: add support for testing connectable file handles Amir Goldstein
2025-04-09 11:52 ` [PATCH 2/2] open_by_handle: add a test for " Amir Goldstein
2025-05-08 19:38 ` Zorro Lang
2025-05-08 20:38 ` Amir Goldstein
2025-05-09 16:57 ` Amir Goldstein
2025-05-06 21:08 ` [PATCH 0/2] Tests for AT_HANDLE_CONNECTABLE 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).