Add a helper to check if the target filesystem supports unique f_fsid tracking across cloned or snapshot instances. Certain filesystems like XFS, Btrfs, and F2FS ensure unique f_fsid identifiers per filesystem instance. However, Ext4 derives its f_fsid directly from its superblock UUID, which leads to identical f_fsid values on cloned images until the UUID is manually modified by userspace. Introduce _require_unique_f_fsid() to allow test cases requiring strict f_fsid uniqueness to skip gracefully on unsupported filesystems. Signed-off-by: Anand Jain --- common/rc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/common/rc b/common/rc index 937f478963b4..5446552aed92 100644 --- a/common/rc +++ b/common/rc @@ -6314,6 +6314,27 @@ _require_fanotify_ioerrors() _notrun "$FSTYP does not support fanotify ioerrors" } +# Ext4 derives f_fsid from the superblock UUID, meaning clones share the +# same f_fsid until their UUIDs diverge. Conversely, XFS, Btrfs, +# and F2FS ensure f_fsid remains unique per filesystem instance (often by +# deriving it from the UUID and underlying block device.) +# +# Across all filesystems, a UUID collision causes libblkid tools to return +# non-deterministic device mappings. It is ultimately the responsibility +# of the userspace utility or use-case to enforce uniqueness when a clone +# diverges. For details, see mailing list thread discussions titled: +# "ext4: derive f_fsid from block device to avoid collisions". +_require_unique_f_fsid() +{ + # Skip the test if the filesystem does not enforce unique f_fsids + # natively. Checking this dynamically requires recreating a clone + # layout, so we use a static lookup based on FSTYP. + if [ "$FSTYP" == "ext4" ]; then + _notrun "Target filesystem ($FSTYP) does not guarantee unique f_fsid on clones." + fi +} + + # Computes a percentage of the available space in a filesystem and # returns that quantity in MB. The percentage must not contain a percent # sign ("%"). -- 2.43.0