[PATCH] fstests: generic/733: avoid output difference due to bash's version

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



[FALSE ALERT]
When running generic/733 with bash 5.3.3 (any thing newer than 5.3.0
will reproduce the bug), the test case will fail like the following:

generic/733 19s ... - output mismatch (see /home/adam/xfstests/results//generic/733.out.bad)
    --- tests/generic/733.out	2025-09-04 17:30:08.568000000 +0930
    +++ /home/adam/xfstests/results//generic/733.out.bad	2025-09-04 17:30:32.898475103 +0930
    @@ -2,5 +2,5 @@
     Format and mount
     Create a many-block file
     Reflink the big file
    -Terminated
    +Terminated                 $here/src/t_reflink_read_race "$testdir/file1" "$testdir/file2" "$testdir/outcome" &>> $seqres.full
     test completed successfully
    ...
    (Run 'diff -u /home/adam/xfstests/tests/generic/733.out /home/adam/xfstests/results//generic/733.out.bad'  to see the entire diff)

[CAUSE]
The failure is fs independent, but bash version dependent.

In bash v5.3.x, the job control will output the command which triggered
the job control (from termination to core dump etc).

The "Terminated" message is not from the program, but from bash's job
control, thus redirection won't hide that message.

[FIX]
Instead of relying on the job control behavior from bash, run the
t_reflink_read_race tool in background, and wait for it to finish.

Background bash will be non-interactive, thus no job control and no
"Terminated" message.

Thankfully this particular test case does extra checks on the outcome
file to determine if the program is properly terminated, thus we are
safe to delete the "Terminated" line from the golden output.

Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
---
 tests/generic/733     | 15 ++++++++++++++-
 tests/generic/733.out |  1 -
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/tests/generic/733 b/tests/generic/733
index aa7ad994..b8321abc 100755
--- a/tests/generic/733
+++ b/tests/generic/733
@@ -70,8 +70,21 @@ done
 echo "fnr=$fnr" >> $seqres.full
 
 echo "Reflink the big file"
+# Workaround the default job control by running it at background.
+#
+# Job control of bash v5.3.x will output the command which triggered the job
+# control (terminated, core dump etc).
+# And since it's handled by bash itself, redirection won't work for the job
+# control message.
+#
+# Running the command in background will disable the job control thus
+# there will be no extra message like "Terminated".
+#
+# We will check the outcome file to determine if the program is properly
+# terminated, thus no need to bother the job control message.
 $here/src/t_reflink_read_race "$testdir/file1" "$testdir/file2" \
-	"$testdir/outcome" &>> $seqres.full
+	"$testdir/outcome" &>> $seqres.full &
+wait
 
 if [ ! -e "$testdir/outcome" ]; then
 	echo "Could not set up program"
diff --git a/tests/generic/733.out b/tests/generic/733.out
index d4f5a7c7..2383cc8d 100644
--- a/tests/generic/733.out
+++ b/tests/generic/733.out
@@ -2,5 +2,4 @@ QA output created by 733
 Format and mount
 Create a many-block file
 Reflink the big file
-Terminated
 test completed successfully
-- 
2.51.0





[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux