Files
apfstests/tests/btrfs/064
T
Darrick J. Wong 7e98d41a6e fstests: move test group info to test files
Refactor every test in the entire test suite to use the new boilerplate
functions.  This also migrates all the test group information into the
test files.  This patch has been autogenerated via the command:

./tools/convert-group btrfs ceph cifs ext4 f2fs generic nfs ocfs2 overlay perf shared udf xfs

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2021-06-27 22:50:02 +08:00

95 lines
2.8 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2014 Red Hat Inc. All rights reserved.
#
# FSQA Test No. btrfs/064
#
# Run btrfs balance and replace operations simultaneously with fsstress running
# in the background, check with the scrub if all the blocks are ok.
# Balance and replace operations are mutually exclusive operations they can't
# run simultaneously. One of them is expected to fail when the other is running.
. ./common/preamble
_begin_fstest auto balance replace volume
# Import common functions.
. ./common/filter
# real QA test starts here
_supported_fs btrfs
# we check scratch dev after each loop
_require_scratch_nocheck
_require_scratch_dev_pool 5
_require_scratch_dev_pool_equal_size
_btrfs_get_profile_configs replace
run_test()
{
local mkfs_opts=$1
local saved_scratch_dev_pool=$SCRATCH_DEV_POOL
echo "Test $mkfs_opts" >>$seqres.full
# remove the last device from the SCRATCH_DEV_POOL list so
# _scratch_pool_mkfs won't use all devices in pool
local last_dev="`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $NF}'`"
SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | sed -e "s# *$last_dev *##"`
_scratch_pool_mkfs $mkfs_opts >>$seqres.full 2>&1
# make sure we created btrfs with desired options
if [ $? -ne 0 ]; then
echo "mkfs $mkfs_opts failed"
SCRATCH_DEV_POOL=$saved_scratch_dev_pool
return
fi
_scratch_mount >>$seqres.full 2>&1
SCRATCH_DEV_POOL=$saved_scratch_dev_pool
args=`_scale_fsstress_args -p 20 -n 100 $FSSTRESS_AVOID -d $SCRATCH_MNT/stressdir`
echo "Run fsstress $args" >>$seqres.full
$FSSTRESS_PROG $args >/dev/null 2>&1 &
fsstress_pid=$!
# Start both balance and replace in the background.
# Either balance or replace shall run, the other fails.
echo -n "Start balance worker: " >>$seqres.full
_btrfs_stress_balance $SCRATCH_MNT >/dev/null 2>&1 &
balance_pid=$!
echo "$balance_pid" >>$seqres.full
echo -n "Start replace worker: " >>$seqres.full
_btrfs_stress_replace $SCRATCH_MNT >>$seqres.full 2>&1 &
replace_pid=$!
echo "$replace_pid" >>$seqres.full
echo "Wait for fsstress to exit and kill all background workers" >>$seqres.full
wait $fsstress_pid
kill $balance_pid $replace_pid
wait
# wait for the balance and replace operations to finish
while ps aux | grep "balance start" | grep -qv grep; do
sleep 1
done
while ps aux | grep "replace start" | grep -qv grep; do
sleep 1
done
echo "Scrub the filesystem" >>$seqres.full
$BTRFS_UTIL_PROG scrub start -B $SCRATCH_MNT >>$seqres.full 2>&1
if [ $? -ne 0 ]; then
echo "Scrub find errors in \"$mkfs_opts\" test" | tee -a $seqres.full
fi
_scratch_unmount
# we called _require_scratch_nocheck instead of _require_scratch
# do check after test for each profile config
_check_scratch_fs
}
echo "Silence is golden"
for t in "${_btrfs_profile_configs[@]}"; do
run_test "$t"
done
status=0
exit