]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
btrfs: add helper to kill background process running _btrfs_stress_defrag
authorFilipe Manana <fdmanana@suse.com>
Wed, 27 Mar 2024 17:11:39 +0000 (17:11 +0000)
committerAnand Jain <anand.jain@oracle.com>
Wed, 3 Apr 2024 07:08:24 +0000 (15:08 +0800)
Killing a background process running _btrfs_stress_defrag() is not as
simple as sending a signal to the process and waiting for it to die.
Therefore we have the following logic to terminate such process:

       kill $pid
       wait $pid
       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
           sleep 1
       done

Since this is repeated in several test cases, move this logic to a common
helper and use it in all affected test cases. This will help to avoid
repeating the same code again several times in upcoming changes.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
common/btrfs
tests/btrfs/062
tests/btrfs/067
tests/btrfs/070
tests/btrfs/072
tests/btrfs/074

index cf320190b22f86a97ce76cdf0325038a99559839..dd7bb6c26c23fb0660380c371f258f10f2c50128 100644 (file)
@@ -393,6 +393,20 @@ _btrfs_stress_defrag()
        done
 }
 
+# Kill a background process running _btrfs_stress_defrag()
+_btrfs_kill_stress_defrag_pid()
+{
+       local defrag_pid=$1
+
+       # Ignore if process already died.
+       kill $defrag_pid &> /dev/null
+       wait $defrag_pid &> /dev/null
+       # Wait for the defrag operation to finish.
+       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
+               sleep 1
+       done
+}
+
 # stress btrfs by remounting it with different compression algorithms in a loop
 # run this with fsstress running at background could exercise the compression
 # code path and ensure no race when switching compression algorithm with constant
index a2639d6ccc1631d57af29a5c91ae7ed86d4f263e..59d581beadd1e2ed1edae41a543626d9c64da7bf 100755 (executable)
@@ -53,12 +53,7 @@ run_test()
        echo "Wait for fsstress to exit and kill all background workers" >>$seqres.full
        wait $fsstress_pid
        _btrfs_kill_stress_balance_pid $balance_pid
-       kill $defrag_pid
-       wait $defrag_pid
-       # wait for the defrag operation to finish
-       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
-               sleep 1
-       done
+       _btrfs_kill_stress_defrag_pid $defrag_pid
 
        echo "Scrub the filesystem" >>$seqres.full
        $BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >>$seqres.full 2>&1
index 709db155d20934888371966b171f3bcc68374197..2bb00b875abaa57ffaf32ca1aa80fe38fce95d70 100755 (executable)
@@ -58,12 +58,8 @@ run_test()
        wait $fsstress_pid
 
        touch $stop_file
-       kill $defrag_pid
-       wait
-       # wait for btrfs defrag process to exit, otherwise it will block umount
-       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
-               sleep 1
-       done
+       wait $subvol_pid
+       _btrfs_kill_stress_defrag_pid $defrag_pid
 
        echo "Scrub the filesystem" >>$seqres.full
        $BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >>$seqres.full 2>&1
index 54aa275c7d0f724bd98019aede9a97614f121b70..cefa572300a7a81e7af97c54fd7ae45c7790fa9d 100755 (executable)
@@ -60,17 +60,16 @@ run_test()
 
        echo "Wait for fsstress to exit and kill all background workers" >>$seqres.full
        wait $fsstress_pid
-       kill $replace_pid $defrag_pid
-       wait
+       kill $replace_pid
+       wait $replace_pid
 
-       # wait for the defrag and replace operations to finish
-       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
-               sleep 1
-       done
+       # wait for the replace operation to finish
        while ps aux | grep "replace start" | grep -qv grep; do
                sleep 1
        done
 
+       _btrfs_kill_stress_defrag_pid $defrag_pid
+
        echo "Scrub the filesystem" >>$seqres.full
        $BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >>$seqres.full 2>&1
        if [ $? -ne 0 ]; then
index 6c15b51f046578fb2985aa7b1fc323ea70c07869..505d0b578c221419e834c8b1d44c4a4190946999 100755 (executable)
@@ -52,13 +52,8 @@ run_test()
 
        echo "Wait for fsstress to exit and kill all background workers" >>$seqres.full
        wait $fsstress_pid
-       kill $defrag_pid
-       wait $defrag_pid
-       # wait for the defrag operation to finish
-       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
-               sleep 1
-       done
 
+       _btrfs_kill_stress_defrag_pid $defrag_pid
        _btrfs_kill_stress_scrub_pid $scrub_pid
 
        echo "Scrub the filesystem" >>$seqres.full
index 9b22c62029f0bb75960747dd9cc6572cc348a4da..d51922d08b8b8278cbd35f3b37443fccadcfac08 100755 (executable)
@@ -52,16 +52,15 @@ run_test()
 
        echo "Wait for fsstress to exit and kill all background workers" >>$seqres.full
        wait $fsstress_pid
-       kill $defrag_pid $remount_pid
-       wait
-       # wait for the defrag and remount operations to finish
-       while ps aux | grep "btrfs filesystem defrag" | grep -qv grep; do
-               sleep 1
-       done
+       kill $remount_pid
+       wait $remount_pid
+       # wait for the remount operation to finish
        while ps aux | grep "mount.*$SCRATCH_MNT" | grep -qv grep; do
                sleep 1
        done
 
+       _btrfs_kill_stress_defrag_pid $defrag_pid
+
        echo "Scrub the filesystem" >>$seqres.full
        $BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >>$seqres.full 2>&1
        if [ $? -ne 0 ]; then