On Thu, Dec 11, 2025 at 1:17 AM Ming Lei ming.lei@redhat.com wrote:
On Wed, Dec 10, 2025 at 10:16:03PM -0700, Caleb Sander Mateos wrote:
The ublk selftests cover every data copy mode except user copy. Add tests for user copy based on the existing test suite:
- generic_14 ("basic recover function verification (user copy)") based on generic_04 and generic_05
- null_03 ("basic IO test with user copy") based on null_01 and null_02
- loop_06 ("write and verify over user copy") based on loop_01 and loop_03
- loop_07 ("mkfs & mount & umount with user copy") based on loop_02 and loop_04
- stripe_05 ("write and verify test on user copy") based on stripe_03
- stripe_06 ("mkfs & mount & umount on user copy") based on stripe_02 and stripe_04
- Added test cases to stress_05 ("run IO and remove device with recovery enabled") for user copy
- stress_06 ("run IO and remove device (user copy)") based on stress_01 and stress_03
- stress_07 ("run IO and kill ublk server (user copy)") based on stress_02 and stress_04
Signed-off-by: Caleb Sander Mateos csander@purestorage.com
tools/testing/selftests/ublk/Makefile | 8 ++++ .../testing/selftests/ublk/test_generic_14.sh | 40 +++++++++++++++++++ tools/testing/selftests/ublk/test_loop_06.sh | 25 ++++++++++++ tools/testing/selftests/ublk/test_loop_07.sh | 21 ++++++++++ tools/testing/selftests/ublk/test_null_03.sh | 24 +++++++++++ .../testing/selftests/ublk/test_stress_05.sh | 7 ++++ .../testing/selftests/ublk/test_stress_06.sh | 39 ++++++++++++++++++ .../testing/selftests/ublk/test_stress_07.sh | 39 ++++++++++++++++++ .../testing/selftests/ublk/test_stripe_05.sh | 26 ++++++++++++ .../testing/selftests/ublk/test_stripe_06.sh | 21 ++++++++++ 10 files changed, 250 insertions(+) create mode 100755 tools/testing/selftests/ublk/test_generic_14.sh create mode 100755 tools/testing/selftests/ublk/test_loop_06.sh create mode 100755 tools/testing/selftests/ublk/test_loop_07.sh create mode 100755 tools/testing/selftests/ublk/test_null_03.sh create mode 100755 tools/testing/selftests/ublk/test_stress_06.sh create mode 100755 tools/testing/selftests/ublk/test_stress_07.sh create mode 100755 tools/testing/selftests/ublk/test_stripe_05.sh create mode 100755 tools/testing/selftests/ublk/test_stripe_06.sh
diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftests/ublk/Makefile index 770269efe42a..837977b62417 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -19,28 +19,36 @@ TEST_PROGS += test_generic_08.sh TEST_PROGS += test_generic_09.sh TEST_PROGS += test_generic_10.sh TEST_PROGS += test_generic_11.sh TEST_PROGS += test_generic_12.sh TEST_PROGS += test_generic_13.sh +TEST_PROGS += test_generic_14.sh
TEST_PROGS += test_null_01.sh TEST_PROGS += test_null_02.sh +TEST_PROGS += test_null_03.sh TEST_PROGS += test_loop_01.sh TEST_PROGS += test_loop_02.sh TEST_PROGS += test_loop_03.sh TEST_PROGS += test_loop_04.sh TEST_PROGS += test_loop_05.sh +TEST_PROGS += test_loop_06.sh +TEST_PROGS += test_loop_07.sh TEST_PROGS += test_stripe_01.sh TEST_PROGS += test_stripe_02.sh TEST_PROGS += test_stripe_03.sh TEST_PROGS += test_stripe_04.sh +TEST_PROGS += test_stripe_05.sh +TEST_PROGS += test_stripe_06.sh
TEST_PROGS += test_stress_01.sh TEST_PROGS += test_stress_02.sh TEST_PROGS += test_stress_03.sh TEST_PROGS += test_stress_04.sh TEST_PROGS += test_stress_05.sh +TEST_PROGS += test_stress_06.sh +TEST_PROGS += test_stress_07.sh
TEST_GEN_PROGS_EXTENDED = kublk
include ../lib.mk
diff --git a/tools/testing/selftests/ublk/test_generic_14.sh b/tools/testing/selftests/ublk/test_generic_14.sh new file mode 100755 index 000000000000..cd9b44b97c24 --- /dev/null +++ b/tools/testing/selftests/ublk/test_generic_14.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+TID="generic_14" +ERR_CODE=0
+ublk_run_recover_test() +{
run_io_and_recover 256M "kill_daemon" "$@"ERR_CODE=$?if [ ${ERR_CODE} -ne 0 ]; thenecho "$TID failure: $*"_show_result $TID $ERR_CODEfi+}
+if ! _have_program fio; then
exit "$UBLK_SKIP_CODE"+fi
+_prep_test "recover" "basic recover function verification (user copy)"
+_create_backfile 0 256M +_create_backfile 1 128M +_create_backfile 2 128M
+ublk_run_recover_test -t null -q 2 -r 1 -u & +ublk_run_recover_test -t loop -q 2 -r 1 -u "${UBLK_BACKFILES[0]}" & +ublk_run_recover_test -t stripe -q 2 -r 1 -u "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & +wait
+ublk_run_recover_test -t null -q 2 -r 1 -u -i 1 & +ublk_run_recover_test -t loop -q 2 -r 1 -u -i 1 "${UBLK_BACKFILES[0]}" & +ublk_run_recover_test -t stripe -q 2 -r 1 -u -i 1 "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & +wait
+_cleanup_test "recover" +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_loop_06.sh b/tools/testing/selftests/ublk/test_loop_06.sh new file mode 100755 index 000000000000..1d1a8a725502 --- /dev/null +++ b/tools/testing/selftests/ublk/test_loop_06.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+TID="loop_06" +ERR_CODE=0
+if ! _have_program fio; then
exit "$UBLK_SKIP_CODE"+fi
+_prep_test "loop" "write and verify over user copy"
+_create_backfile 0 256M +dev_id=$(_add_ublk_dev -t loop -u "${UBLK_BACKFILES[0]}") +_check_add_dev $TID $?
+# run fio over the ublk disk +_run_fio_verify_io --filename=/dev/ublkb"${dev_id}" --size=256M +ERR_CODE=$?
+_cleanup_test "loop"
+_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_loop_07.sh b/tools/testing/selftests/ublk/test_loop_07.sh new file mode 100755 index 000000000000..493f3fb611a5 --- /dev/null +++ b/tools/testing/selftests/ublk/test_loop_07.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+TID="loop_07" +ERR_CODE=0
+_prep_test "loop" "mkfs & mount & umount with user copy"
+_create_backfile 0 256M
+dev_id=$(_add_ublk_dev -t loop -u "${UBLK_BACKFILES[0]}") +_check_add_dev $TID $?
+_mkfs_mount_test /dev/ublkb"${dev_id}" +ERR_CODE=$?
+_cleanup_test "loop"
+_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_null_03.sh b/tools/testing/selftests/ublk/test_null_03.sh new file mode 100755 index 000000000000..0051067b4686 --- /dev/null +++ b/tools/testing/selftests/ublk/test_null_03.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+TID="null_03" +ERR_CODE=0
+if ! _have_program fio; then
exit "$UBLK_SKIP_CODE"+fi
+_prep_test "null" "basic IO test with user copy"
+dev_id=$(_add_ublk_dev -t null -u) +_check_add_dev $TID $?
+# run fio over the two disks +fio --name=job1 --filename=/dev/ublkb"${dev_id}" --ioengine=libaio --rw=readwrite --iodepth=32 --size=256M > /dev/null 2>&1 +ERR_CODE=$?
+_cleanup_test "null"
+_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stress_05.sh b/tools/testing/selftests/ublk/test_stress_05.sh index 09b94c36f2ba..cb8203957d1d 100755 --- a/tools/testing/selftests/ublk/test_stress_05.sh +++ b/tools/testing/selftests/ublk/test_stress_05.sh @@ -78,7 +78,14 @@ if _have_feature "PER_IO_DAEMON"; then ublk_io_and_remove 256M -t loop -q 4 --nthreads 8 --per_io_tasks -r 1 -i "$reissue" "${UBLK_BACKFILES[0]}" & ublk_io_and_remove 8G -t null -q 4 --nthreads 8 --per_io_tasks -r 1 -i "$reissue" & fi wait
+for reissue in $(seq 0 1); do
ublk_io_and_remove 8G -t null -q 4 -u -r 1 -i "$reissue" &ublk_io_and_remove 256M -t loop -q 4 -u -r 1 -i "$reissue" "${UBLK_BACKFILES[1]}" &ublk_io_and_remove 8G -t null -q 4 -u -r 1 -i "$reissue" &wait+done
I'd suggest to not add new test coverage in old stress tests until default timeout is overrided, now it is close to default 45 seconds timeout.
Okay, I can just drop the changes in test_stress_05.sh if that sounds good to you?
Thanks, Caleb