ext4/021: make sure the fdatasync subprocess exits
authorzhangyi (F) <yi.zhang@huawei.com>
Wed, 26 Feb 2020 03:22:56 +0000 (11:22 +0800)
committerEryu Guan <guaneryu@gmail.com>
Fri, 6 Mar 2020 07:55:33 +0000 (15:55 +0800)
Now we just kill fdatasync_work process and wait nothing after the
test, so a busy unmount failure may appear if the fdatasync syscall
doesn't return in time.

  umount: /tmp/scratch: target is busy.
  mount: /tmp/scratch: /dev/sdb already mounted on /tmp/scratch.
  !!! failed to remount /dev/sdb on /tmp/scratch

This patch waits the xfs_io fdatasync subprocess exit to make sure
_check_scratch_fs success.

Signed-off-by: zhangyi (F) <yi.zhang@huawei.com>
Reviewed-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/ext4/021

index 519737e18d4a60027f2b1c4568a12e804ac0cc45..3fc38e8906fdbddfbe71013c75efb387a9db1a2b 100755 (executable)
@@ -80,6 +80,10 @@ _scratch_mount
 
 do_fdatasync_work()
 {
+       # Wait for running subcommand before exitting so that
+       # mountpoint is not busy when we try to unmount it
+       trap "wait; exit" SIGTERM
+
        while [ 1 ]; do
                $XFS_IO_PROG -f -c "fdatasync" $SCRATCH_MNT/testfile
        done
@@ -89,6 +93,7 @@ do_fdatasync_work &
 datasync_work_pid=$!
 sleep 10
 kill $datasync_work_pid >/dev/null 2>&1
+wait
 
 # success, all done
 status=0