diff options
| -rw-r--r-- | tools/testing/selftests/ublk/Makefile | 2 | ||||
| -rwxr-xr-x | tools/testing/selftests/ublk/test_common.sh | 26 | ||||
| -rwxr-xr-x | tools/testing/selftests/ublk/test_stress_01.sh | 47 | 
3 files changed, 75 insertions, 0 deletions
| diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftests/ublk/Makefile index 9415f6f6df48..40af938cd277 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -9,6 +9,8 @@ TEST_PROGS += test_loop_02.sh  TEST_PROGS += test_loop_03.sh  TEST_PROGS += test_loop_04.sh +TEST_PROGS += test_stress_01.sh +  TEST_GEN_PROGS_EXTENDED = kublk  include ../lib.mk diff --git a/tools/testing/selftests/ublk/test_common.sh b/tools/testing/selftests/ublk/test_common.sh index bcb0c7aa3956..89244a7e275c 100755 --- a/tools/testing/selftests/ublk/test_common.sh +++ b/tools/testing/selftests/ublk/test_common.sh @@ -155,5 +155,31 @@ _add_ublk_dev() {  	echo "${dev_id}"  } +__remove_ublk_dev_return() { +	local dev_id=$1 + +	${UBLK_PROG} del -n "${dev_id}" +	local res=$? +	udevadm settle +	return ${res} +} + +__run_io_and_remove() +{ +	local dev_id=$1 +	local size=$2 + +	fio --name=job1 --filename=/dev/ublkb"${dev_id}" --ioengine=libaio \ +		--rw=readwrite --iodepth=64 --size="${size}" --numjobs=4 \ +		--runtime=20 --time_based > /dev/null 2>&1 & +	sleep 2 +	if ! __remove_ublk_dev_return "${dev_id}"; then +		echo "delete dev ${dev_id} failed" +		return 255 +	fi +	wait +} + +  UBLK_PROG=$(pwd)/kublk  export UBLK_PROG diff --git a/tools/testing/selftests/ublk/test_stress_01.sh b/tools/testing/selftests/ublk/test_stress_01.sh new file mode 100755 index 000000000000..2dfd01cfd265 --- /dev/null +++ b/tools/testing/selftests/ublk/test_stress_01.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. test_common.sh +TID="stress_01" +ERR_CODE=0 +DEV_ID=-1 + +ublk_io_and_remove() +{ +	local size=$1 +	shift 1 +	local backfile="" +	if echo "$@" | grep -q "loop"; then +		backfile=${*: -1} +	fi +	DEV_ID=$(_add_ublk_dev "$@") +	_check_add_dev $TID $? "${backfile}" + +	echo "run ublk IO vs. remove device(ublk add $*)" +	if ! __run_io_and_remove "${DEV_ID}" "${size}"; then +		echo "/dev/ublkc${DEV_ID} isn't removed" +		_remove_backfile "${backfile}" +		exit 255 +	fi +} + +_prep_test "stress" "run IO and remove device" + +ublk_io_and_remove 8G -t null +ERR_CODE=$? +if [ ${ERR_CODE} -ne 0 ]; then +	_show_result $TID $ERR_CODE +fi + +BACK_FILE=$(_create_backfile 256M) +ublk_io_and_remove 256M -t loop "${BACK_FILE}" +ERR_CODE=$? +if [ ${ERR_CODE} -ne 0 ]; then +	_show_result $TID $ERR_CODE +fi + +ublk_io_and_remove 256M -t loop -z "${BACK_FILE}" +ERR_CODE=$? +_cleanup_test "stress" +_remove_backfile "${BACK_FILE}" +_show_result $TID $ERR_CODE | 
