mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
selftests: ublk: add one stress test for covering IO vs. removing device
Add stress_test_01 for running IO vs. removing device for verifying that ublk device removal can work as expected when heavy IO workloads are in progress. null, loop and loop/zc are covered in this tests. Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20250303124324.3563605-10-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
87a9265213
commit
c60ac48eab
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
47
tools/testing/selftests/ublk/test_stress_01.sh
Executable file
47
tools/testing/selftests/ublk/test_stress_01.sh
Executable file
|
|
@ -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
|
||||
Loading…
Reference in New Issue
Block a user