From: Christoph Hellwig Date: Thu, 18 Dec 2025 07:30:04 +0000 (+0100) Subject: xfs/157: don't override SCRATCH_{,LOG,RT}DEV X-Git-Tag: v2026.01.05~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=255cb1f0dd6e9c604f01acc49b1d735916e80514;p=xfstests-dev.git xfs/157: don't override SCRATCH_{,LOG,RT}DEV This tests wants to test various difference device configurations, and does so by overriding SCRATCH_{,LOG,RT}DEV. This has two downside: 1) the actual SCRATCH_{,LOG,RT}DEV configuration is still injected by default, thus making the test dependent on that configuration 2) the MKFS_OPTIONS might not actually be compatible with the configuration created Fix this by open coding the mkfs, db, admin and repair calls and always run them on the specific configuration. Signed-off-by: Christoph Hellwig Reviewed-by: Darrick J. Wong Signed-off-by: Zorro Lang --- diff --git a/tests/xfs/157 b/tests/xfs/157 index e102a5a1..31f05db2 100755 --- a/tests/xfs/157 +++ b/tests/xfs/157 @@ -50,53 +50,105 @@ fake_rtfile=$TEST_DIR/$seq.scratch.rt rm -f $fake_rtfile truncate -s $fs_size $fake_rtfile -# Save the original variables -orig_ddev=$SCRATCH_DEV -orig_external=$USE_EXTERNAL -orig_logdev=$SCRATCH_LOGDEV -orig_rtdev=$SCRATCH_RTDEV - scenario() { echo "$@" | tee -a $seqres.full - SCRATCH_DEV=$orig_ddev - USE_EXTERNAL=$orig_external - SCRATCH_LOGDEV=$orig_logdev - SCRATCH_RTDEV=$orig_rtdev + dev=$SCRATCH_DEV + logdev= + rtdev= +} + +_fake_mkfs() +{ + OPTIONS="$*" + if [ -n "$logdev" ]; then + OPTIONS="$OPTIONS -l logdev=$logdev" + fi + if [ -n "$rtdev" ]; then + OPTIONS="$OPTIONS -r rtdev=$rtdev" + fi + $MKFS_XFS_PROG -f $OPTIONS $dev || _fail "mkfs failed" +} + +_fake_xfs_db_options() +{ + OPTIONS="" + if [ ! -z "$logdev" ]; then + OPTIONS="-l $logdev" + fi + if [ ! -z "$rtdev" ]; then + if [ $XFS_DB_PROG --help 2>&1 | grep -q -- '-R rtdev']; then + OPTIONS="$OPTIONS -R $rtdev" + fi + fi + echo $OPTIONS $* $dev +} + +_fake_xfs_db() +{ + $XFS_DB_PROG "$@" $(_fake_xfs_db_options) +} + +_fake_xfs_admin() +{ + local options=("$dev") + local rt_opts=() + if [ -n "$logdev" ]; then + options+=("$logdev") + fi + if [ -n "$rtdev" ]; then + $XFS_ADMIN_PROG --help 2>&1 | grep -q 'rtdev' || \ + _notrun 'xfs_admin does not support rt devices' + rt_opts+=(-r "$rtdev") + fi + + # xfs_admin in xfsprogs 5.11 has a bug where an external log device + # forces xfs_db to be invoked, potentially with zero command arguments. + # When this happens, xfs_db will wait for input on stdin, which causes + # fstests to hang. Since xfs_admin is not an interactive tool, we + # can redirect stdin from /dev/null to prevent this issue. + $XFS_ADMIN_PROG "${rt_opts[@]}" "$@" "${options[@]}" < /dev/null +} + + +_fake_xfs_repair() +{ + OPTIONS="" + if [ -n "$logdev" ]; then + OPTIONS="-l $logdev" + fi + if [ -n "$rtdev" ]; then + OPTIONS="$OPTIONS -r $rtdev" + fi + $XFS_REPAIR_PROG $OPTIONS $* $dev } check_label() { - _scratch_mkfs_sized "$fs_size" "" -L oldlabel >> $seqres.full 2>&1 - _scratch_xfs_db -c label - _scratch_xfs_admin -L newlabel "$@" >> $seqres.full - _scratch_xfs_db -c label - _scratch_xfs_repair -n &>> $seqres.full || echo "Check failed?" + _fake_mkfs -L oldlabel >> $seqres.full 2>&1 + _fake_xfs_db -c label + _fake_xfs_admin -L newlabel "$@" >> $seqres.full + _fake_xfs_db -c label + _fake_xfs_repair -n &>> $seqres.full || echo "Check failed?" } scenario "S1: Check that label setting with file image" -SCRATCH_DEV=$fake_datafile +dev=$fake_datafile check_label -f scenario "S2: Check that setting with logdev works" -USE_EXTERNAL=yes -SCRATCH_LOGDEV=$fake_logfile +logdev=$fake_logfile check_label scenario "S3: Check that setting with rtdev works" -USE_EXTERNAL=yes -SCRATCH_RTDEV=$fake_rtfile +rtdev=$fake_rtfile check_label scenario "S4: Check that setting with rtdev + logdev works" -USE_EXTERNAL=yes -SCRATCH_LOGDEV=$fake_logfile -SCRATCH_RTDEV=$fake_rtfile +logdev=$fake_logfile +rtdev=$fake_rtfile check_label scenario "S5: Check that setting with nortdev + nologdev works" -USE_EXTERNAL= -SCRATCH_LOGDEV= -SCRATCH_RTDEV= check_label scenario "S6: Check that setting with bdev incorrectly flagged as file works"