[PATCH 7/9] fstests: verify libblkid resolution of duplicate UUIDs

Anand Jain
2026-02-26T14:42:11Z

Verify how findmnt, df (libblkid) resolve device paths when multiple
block devices share the same FSUUID.

Signed-off-by: Anand Jain <asj@kernel.org>
---
tests/generic/793 | 73 +++++++++++++++++++++++++++++++++++++++++++
tests/generic/793.out | 22 +++++++++++++
2 files changed, 95 insertions(+)
create mode 100644 tests/generic/793
create mode 100644 tests/generic/793.out

diff --git a/tests/generic/793 b/tests/generic/793
new file mode 100644
index 000000000000..dd80212fad73
--- /dev/null
+++ b/tests/generic/793
@@ -0,0 +1,73 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2026 Anand Jain <asj@kernel.org>. All Rights Reserved.
+#
+# FS QA Test 793
+# Verify how libblkid resolve devices when multiple devices sharing the
+# same FSUUID.
+
+. ./common/preamble
+. ./common/filter
+
+_begin_fstest auto quick mount clone
+
+_require_test
+_require_scratch_dev_pool 2
+
+_cleanup()
+{
+ cd /
+ rm -r -f $tmp.*
+ umount $mnt2 2>/dev/null
+ _scratch_dev_pool_put
+}
+
+filter_pool()
+{
+ _filter_scratch | \
+ sed -e "s|${devs[1]}|DEV2|g" \
+ -e "s|$mnt2|MNT2|g" | \
+ _filter_spaces
+}
+
+print_info()
+{
+ local mntpt=$1
+ local tgt=$(findmnt -no SOURCE $mntpt)
+ local fsuuid=$(blkid -s UUID -o value $tgt)
+
+ echo "mntpt=$mntpt tgt=$tgt fsuuid=$fsuuid" >> $seqres.full
+ echo
+ findmnt -o SOURCE,TARGET,UUID "$tgt" | tail -n +2 | \
+ sed -e "s/$fsuuid/FSUUID/g" | filter_pool
+ awk -v dev="$tgt" '$1 == dev { print $1, $2 }' /proc/self/mounts | \
+ filter_pool
+ df --all --output=source,target "$tgt" | tail -n +2 | filter_pool
+ echo
+}
+
+_scratch_dev_pool_get 2
+_scratch_mkfs_sized_clone >$seqres.full 2>&1
+devs=($SCRATCH_DEV_POOL)
+mnt2=$TEST_DIR/mnt2
+mkdir -p $mnt2
+
+_scratch_mount $(_clone_mount_option)
+_mount $(_common_dev_mount_options) $(_clone_mount_option) ${devs[1]} $mnt2 || \
+ _fail "Failed to mount dev2"
+
+print_info $SCRATCH_MNT
+print_info $mnt2
+
+echo "**** mount cycle ****"
+_scratch_unmount
+_unmount $mnt2
+_mount $(_common_dev_mount_options) $(_clone_mount_option) ${devs[1]} $mnt2 || \
+ _fail "Failed to mount dev2"
+_scratch_mount $(_clone_mount_option)
+
+print_info $SCRATCH_MNT
+print_info $mnt2
+
+status=0
+exit
diff --git a/tests/generic/793.out b/tests/generic/793.out
new file mode 100644
index 000000000000..4c7c349ec4ed
--- /dev/null
+++ b/tests/generic/793.out
@@ -0,0 +1,22 @@
+QA output created by 793
+
+SCRATCH_DEV SCRATCH_MNT FSUUID
+SCRATCH_DEV SCRATCH_MNT
+SCRATCH_DEV SCRATCH_MNT
+
+
+DEV2 MNT2 FSUUID
+DEV2 MNT2
+DEV2 MNT2
+
+**** mount cycle ****
+
+SCRATCH_DEV SCRATCH_MNT FSUUID
+SCRATCH_DEV SCRATCH_MNT
+SCRATCH_DEV SCRATCH_MNT
+
+
+DEV2 MNT2 FSUUID
+DEV2 MNT2
+DEV2 MNT2
+
--
2.43.0