#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2014 Red Hat Inc. All rights reserved.
#
# FSQA Test No. btrfs/069
#
# Run btrfs replace operations and scrub simultaneously with fsstress
# running in background.
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=1
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
	cd /
	rm -f $tmp.*
}

# get standard environment, filters and checks
. ./common/rc
. ./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

rm -f $seqres.full

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=$!

	echo -n "Start replace worker: " >>$seqres.full
	_btrfs_stress_replace $SCRATCH_MNT >>$seqres.full 2>&1 &
	replace_pid=$!
	echo "$replace_pid" >>$seqres.full

	echo -n "Start scrub worker: " >>$seqres.full
	_btrfs_stress_scrub $SCRATCH_MNT >/dev/null 2>&1 &
	scrub_pid=$!
	echo "$scrub_pid" >>$seqres.full

	echo "Wait for fsstress to exit and kill all background workers" >>$seqres.full
	wait $fsstress_pid
	kill $replace_pid $scrub_pid
	wait

	# wait for the scrub and replace operations to finish
	while ps aux | grep "scrub 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
