Re: [PATCH v7 04/11] fstests: add _require_unique_f_fsid() helper
"Darrick J. Wong" <[email protected]> Wed, 1 Jul 2026 10:11:22 -0700
| Newsgroups | org.kernel.vger.fstests,net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-ext4,org.kernel.vger.linux-xfs |
|---|---|
| Message-ID | <20260701171122.GF6517@frogsfrogsfrogs> |
On Wed, Jun 17, 2026 at 07:20:31PM +0800, Anand Jain wrote: > 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 <[email protected]> > --- > common/rc | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/common/rc b/common/rc > index 968ba33686f3..d95eec94f7b7 100644 > --- a/common/rc > +++ b/common/rc > @@ -6310,6 +6310,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: > +# Link: https://lore.kernel.org/linux-ext4/[email protected]/ > +_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. I would switch these two comments. The second comment above describes what this predicate function actually determines, whereas the first comment above the function justifies the internal behavior of the function. # 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. # # 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: # Link: https://lore.kernel.org/linux-ext4/[email protected]/ _require_unique_fsid( { case "$FSTYP" in ext*) # Ext4 derives f_fsid from the superblock UUID, meaning # clones share the same f_fsid until their UUIDs # diverge. _notrun "Target filesystem ($FSTYP) does not guarantee unique f_fsid on clones." ;; *) # Conversely, XFS, Btrfs, and F2FS ensure f_fsid remains # unique per filesystem instance (often by deriving it # from the UUID and underlying block device.) ;; fi } --D > + 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 > >