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
> 
>