The test fails sporadically when trying to unmount the scratch filesystem
because a filefrag process is still running against a file that exists on
the scrach filesystem. This is because killing the subshell running the
fiemap_work() function does not wait for any filefrag process to complete
first. We need to set a trap for the SIGTERM signal on the subshell so
that it waits for any filefrag process before exitting.
The failure resulted in error messages like the following:
btrfs/079 57s ... umount: /home/fdmanana/btrfs-tests/scratch_1: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
_check_btrfs_filesystem: filesystem on /dev/sdc is inconsistent
(see /home/fdmanana/git/hub/xfstests/results//btrfs/079.full for details)
Fix this by adding a trap for SIGTERM.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
}
fiemap_work() {
+ # Wait for any running 'filefrag' subcommand before exitting so that
+ # after the test kills the subshell running this function, it does not
+ # fail with EBUSY when unmounting the scratch device because the filefrag
+ # subcommand is still running with an open file on the scratch fs.
+ trap "wait; exit" SIGTERM
+
filename=$1
while true; do
$FILEFRAG_PROG $filename 2> $tmp.output 1> /dev/null