On Thu, Dec 11, 2025 at 10:46:41AM -0800, Caleb Sander Mateos wrote: > On Thu, Dec 11, 2025 at 1:17 AM Ming Lei <[email protected]> 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 <[email protected]> > > > --- > > > 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 ]; then > > > + echo "$TID failure: $*" > > > + _show_result $TID $ERR_CODE > > > + fi > > > +} > > > + > > > +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?
Yeah, it is fine to drop it in test_stress_05.sh. Thanks, Ming
