#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2016 Red Hat, Inc. All Rights Reserved. # # FS QA Test 999 # # Multi-threads freeze/unfreeze testing. This's a stress test case, # it won't do functional check. # seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 _cleanup() { cd / # Make sure $SCRATCH_MNT is unfreezed xfs_freeze -u $SCRATCH_MNT 2>/dev/null rm -f $tmp.* } # get standard environment, filters and checks . ./common/rc . ./common/filter # remove previous $seqres.full before test rm -f $seqres.full # real QA test starts here echo "Silence is golden" # Modify as appropriate. _supported_fs generic _require_scratch _require_freeze _require_test_program "feature" _scratch_mkfs >>$seqres.full 2>&1 # We don't want to freeze/unfreeze root fs if mount scratch dev failed _scratch_mount num_cpus=`$here/src/feature -o` # Start fsstress in background procs=$num_cpus if [ $procs -gt 20 ]; then procs=20 elif [ $procs -le 1 ]; then procs=2 fi nops=1000 stress_dir="$SCRATCH_MNT/fsstress_test_dir" mkdir "$stress_dir" fsstress_args=`_scale_fsstress_args -d $stress_dir -p $procs -n $nops $FSSTRESS_AVOID` $FSSTRESS_PROG $fsstress_args >>$seqres.full 2>&1 & fsstress_pid=$! # Start multi-threads freeze/unfreeze for ((i=0; i<$procs; i++)); do while kill -0 $fsstress_pid 2>/dev/null; do xfs_freeze -f $SCRATCH_MNT 2>/dev/null xfs_freeze -u $SCRATCH_MNT 2>/dev/null done & freeze_pids="$! $freeze_pids" done wait $fsstress_pid result=$? wait $freeze_pids # Exit with fsstress return value status=$result exit