[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aTqMNP3aDpAs044T@fedora>
Date: Thu, 11 Dec 2025 17:17:40 +0800
From: Ming Lei <ming.lei@...hat.com>
To: Caleb Sander Mateos <csander@...estorage.com>
Cc: Shuah Khan <shuah@...nel.org>, linux-block@...r.kernel.org,
linux-kselftest@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 8/8] selftests: ublk: add user copy test cases
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@...estorage.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 ]; 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.
Thanks,
Ming
Powered by blists - more mailing lists