Skip to content

fstests: tests for cloned filesystem validation and f_fsid

Anand Jain fstests linux-btrfs linux-ext4 linux-f2fs-devel linux-xfs 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest21 patches 1 replyIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/21fstests: introduce _require_clone_mount() helpercommon/rc+15 -00 replies
2/21fstests: introduce _create_cloned_loop_devs() helpercommon/rc+66 -00 replies
3/21fstests: add _clone_mount_options() helpercommon/rc+13 -00 replies
4/21fstests: add FSNOTIFYWAIT_PROGcommon/config+1 -00 replies
5/21fstests: add _require_fanotify_functioncommon/rc+7 -00 replies
6/21fstests: add _require_unique_f_fsid() helpercommon/rc+27 -00 replies
7/21fstests: add SEMANAGE_PROGcommon/config+1 -00 replies
8/21fstests: verify fanotify isolation on cloned filesystemstests/generic/901 tests/generic/901.out+149 -00 replies
9/21fstests: introduce helper _scratch_mkfs_uuid()common/rc+30 -00 replies
10/21fstests: add helpers to verify the expected f_fsidcommon/rc+31 -00 replies
11/21fstests: verify statfs f_fsid is derived from the filesystem UUIDtests/generic/902 tests/generic/902.out+40 -00 replies
12/21fstests: verify libblkid resolution of duplicate UUIDstests/generic/903 tests/generic/903.out+77 -00 replies
13/21fstests: introduce _require_security_ima() helpercommon/rc+23 -00 replies
14/21fstests: verify IMA isolation on cloned filesystemstests/generic/904 tests/generic/904.out+123 -00 replies
15/21fstests: verify exportfs file handles on cloned filesystemstests/generic/905 tests/generic/905.out+81 -00 replies
16/21fstests: introduce _require_metadata_uuid() helpercommon/rc+18 -00 replies
17/21fstests: add _change_metadata_uuid helpercommon/rc+17 -00 replies
18/21fstests: test UUID consistency for clones with metadata_uuidtests/generic/906 tests/generic/906.out+80 -00 replies
19/21fstests: generic/744: use new helper _require_clone_mount()common/rc tests/generic/744+4 -180 replies
20/21fstests: generic/744: migrate to _create_cloned_loop_devs()tests/generic/744+27 -430 replies
21/21fstests: _create_loop_device_like_bdev() remove unused variablecommon/rc+0 -10 replies

Reviews trailers per patch

2 of 21 patches have a Reviewed-by or Acked-by.

PatchDarrick J. WongZorro Lang
1/21
2/21
3/21R-b
4/21R-b R-b
5/21
6/21
7/21
8/21
9/21
10/21
11/21
12/21
13/21
14/21
15/21
16/21
17/21
18/21
19/21
20/21
21/21

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 0/21] fstests: tests for cloned filesystem validation and f_fsid

This series continues the work from the earlier "test coverage for cloned filesystem ids" series (last posted as v8 [1]) and has been tested against the major filesystems: Btrfs, XFS, ext4, and f2fs.

Although this version incorporates the review feedback received on v8, it expands substantially with additional infrastructure helpers, an extra test case to cover the recent regression report, and migration/cleanup of existing generic/744. Because the patch count grew from 13 to 21 patches, disrupting the previous patch numbering and scope, I have reset the versioning and updated the subject line to better reflect the broader validation coverage.

The core motivation remains identical: testing that mounting a block-level cloned filesystem concurrently with the original filesystem behaves correctly across filesystems and VFS subsystems (fanotify, statfs/f_fsid, libblkid resolution, IMA measurement, exportfs file handles, and metadata_uuid handling).

Summary of major changes since v8:
- Added 1 new regression test case to verify statfs f_fsid derivation against FS UUID.
- Dropped the test case verifying f_fsid persistence across mount cycles on cloned filesystems, as this assumption is no longer valid following the Btrfs kernel regression fix [2].
- Introduced common helpers:
. _require_security_ima() and _require_metadata_uuid().
. _scratch_mkfs_uuid() and helpers for f_fsid verification.
- Migrated generic/744 to utilize the new common clone helpers.
- Worked on the review comments.

Details of changes:
- _create_cloned_loop_devs():
. Renamed from _loop_image_create_clone() to _create_cloned_loop_devs(). . Relocated backing image files from "$TEST_DIR/${seq}.*" to a dedicated

    directory "$TEST_DIR/${seq}/*".

. Added internal call to _require_clone_mount().
. Switched from _create_loop_device() to _create_loop_device_like_bdev()
to guarantee identical logical/physical sector sizes (512 vs 4096) between the original and cloned loop devices.
. Used an intermediate local setup step to ensure consistent Direct I/O
attributes across both loop devices (preventing the first device from enabling DIO while the cloned device fell back to buffered mode).
. Added device geometry and DIO attribute dump to $seqres.full for debugging. . Renamed teardown helper _loop_image_destroy() to _destroy_cloned_loop_devs().
- _clone_mount_options():
. Renamed from _clone_mount_option() to _clone_mount_options().
- _require_metadata_uuid():
. Factored out prerequisite checks from _change_metadata_uuid() into a new
dedicated helper _require_metadata_uuid() and invoked it accordingly.
- _require_clone_mount():
. Introduced new helper to check kernel support for concurrent clone mounts. . Removed obsolete _require_duplicate_fsid() in favor of _require_clone_mount().
- _require_security_ima():
. Introduced new helper to check securityfs and IMA policy availability.
- _create_loop_device_like_bdev():
. Removed unused local variable 'dev'.

- Test Cases common update:
- Adjusted test groups: replaced 'clone' with 'tempfsid'.
- Standardized test exits: replaced open-coded "status=0; exit" with "_exit 0".
- Dropped stale "_require_block_device $TEST_DEV" checks left over from before migrating tests to loop devices.
- Percolated helper renames across all tests:

    . _loop_image_create_clone -> _create_cloned_loop_devs
    . _loop_image_destroy      -> _destroy_cloned_loop_devs
    . _clone_mount_option      -> _clone_mount_options

- Added cleanup of "$TEST_DIR/$seq" in test exit/cleanup handlers.

- Test Cases Individual Updates:
- generic/744:
. Replaced _require_duplicate_fsid with _require_clone_mount().
. Migrated to common _create_cloned_loop_devs() and _clone_mount_options().
- generic/902:
. New regression test case added to verify statfs f_fsid derivation against filesystem UUID.
- generic/903:
. Added --noheadings flag to findmnt queries for cleaner output parsing.
- generic/904:
. Dropped 'auto' and 'quick' from test groups due to runtime and policy requirements. . Updated referenced kernel commit IDs.

[1] https://lore.kernel.org/fstests/[email protected]
[2] 72de4807ba84 ("btrfs: derive f_fsid with dev_t only when temp_fsid is active")

Anand Jain (21):
fstests: introduce _require_clone_mount() helper
fstests: introduce _create_cloned_loop_devs() helper
fstests: add _clone_mount_options() helper
fstests: add FSNOTIFYWAIT_PROG
fstests: add _require_fanotify_function
fstests: add _require_unique_f_fsid() helper
fstests: add SEMANAGE_PROG
fstests: verify fanotify isolation on cloned filesystems
fstests: introduce helper _scratch_mkfs_uuid()
fstests: add helpers to verify the expected f_fsid
fstests: verify statfs f_fsid is derived from the filesystem UUID
fstests: verify libblkid resolution of duplicate UUIDs
fstests: introduce _require_security_ima() helper
fstests: verify IMA isolation on cloned filesystems
fstests: verify exportfs file handles on cloned filesystems
fstests: introduce _require_metadata_uuid() helper
fstests: add _change_metadata_uuid helper
fstests: test UUID consistency for clones with metadata_uuid
fstests: generic/744: use new helper _require_clone_mount()
fstests: generic/744: migrate to _create_cloned_loop_devs()
fstests: _create_loop_device_like_bdev() remove unused variable

 common/config         |   2 +
 common/rc             | 262 +++++++++++++++++++++++++++++++++++++++---
 tests/generic/744     |  72 +++++-------
 tests/generic/901     | 142 +++++++++++++++++++++++
 tests/generic/901.out |   7 ++
 tests/generic/902     |  38 ++++++
 tests/generic/902.out |   2 +
 tests/generic/903     |  71 ++++++++++++
 tests/generic/903.out |   6 +
 tests/generic/904     | 113 ++++++++++++++++++
 tests/generic/904.out |  10 ++
 tests/generic/905     |  79 +++++++++++++
 tests/generic/905.out |   2 +
 tests/generic/906     |  74 ++++++++++++
 tests/generic/906.out |   6 +
 15 files changed, 827 insertions(+), 59 deletions(-)
 create mode 100644 tests/generic/901
 create mode 100644 tests/generic/901.out
 create mode 100644 tests/generic/902
 create mode 100644 tests/generic/902.out
 create mode 100644 tests/generic/903
 create mode 100644 tests/generic/903.out
 create mode 100644 tests/generic/904
 create mode 100644 tests/generic/904.out
 create mode 100644 tests/generic/905
 create mode 100644 tests/generic/905.out
 create mode 100644 tests/generic/906
 create mode 100644 tests/generic/906.out
Signature · 1 line
2.43.0