generic/648: dmerror must be unmounted
authorZorro Lang <zlang@redhat.com>
Sun, 24 Oct 2021 12:05:12 +0000 (20:05 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 14 Nov 2021 10:46:01 +0000 (18:46 +0800)
Sometimes g/648 fail to unmount dmerror with this error:

   umount: /mnt/xfstests/scratch: target is busy.

Even worse, it will cause all later test cases fail as:

  mount: bad usage
  Try 'mount --help' for more information.
  check: failed to mount $SCRATCH_DEV using specified options
  Interrupted!

So we shouldn't _fail directly if dmerror_unmount fails, use a while
loop to try to unmount it enough times.

Signed-off-by: Zorro Lang <zlang@redhat.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/generic/648

index 83dd111dbc2ed13dc813ebcb9717288b9b671344..e5c743c53c59235d8bd7f8c5d85d1c31d892bca2 100755 (executable)
@@ -104,7 +104,7 @@ for i in $(seq 1 $((25 * TIME_FACTOR)) ); do
                wait > /dev/null 2>&1
                ps -e | grep fsstress > /dev/null 2>&1
        done
-       for ((i = 0; i < 10; i++)); do
+       for ((j = 0; j < 10; j++)); do
                test -e "$snap_aliveflag" || break
                sleep 1
        done
@@ -112,7 +112,21 @@ for i in $(seq 1 $((25 * TIME_FACTOR)) ); do
        # Mount again to replay log after loading working table, so we have a
        # consistent fs after test.
        $UMOUNT_PROG $loopmnt
-       _dmerror_unmount || _fail "iteration $i scratch unmount failed"
+       is_unmounted=1
+       # We must unmount dmerror at here, or whole later testing will crash.
+       # So try to umount enough times, before we have no choice.
+       for ((j = 0; j < 100; j++)); do
+               sleep 1
+               _dmerror_unmount > $tmp.unmount.err 2>&1
+               if [ $? -eq 0 ];then
+                       is_unmounted=0
+                       break
+               fi
+       done
+       if [ $is_unmounted -ne 0 ];then
+               cat $tmp.unmount.err
+               _fail "iteration $i scratch unmount failed"
+       fi
        _dmerror_load_working_table
        if ! _dmerror_mount; then
                _metadump_dev $DMERROR_DEV $seqres.scratch.$i.md