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 ]; 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
+
_cleanup_test "stress"
_show_result $TID $ERR_CODE
diff --git a/tools/testing/selftests/ublk/test_stress_06.sh b/tools/testing/selftests/ublk/test_stress_06.sh
new file mode 100755
index 000000000000..37188ec2e1f7
--- /dev/null
+++ b/tools/testing/selftests/ublk/test_stress_06.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+TID="stress_06"
+ERR_CODE=0
+
+ublk_io_and_remove()
+{
+ run_io_and_remove "$@"
+ 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 "stress" "run IO and remove device (user copy)"
+
+_create_backfile 0 256M
+_create_backfile 1 128M
+_create_backfile 2 128M
+
+ublk_io_and_remove 8G -t null -q 4 -u &
+ublk_io_and_remove 256M -t loop -q 4 -u "${UBLK_BACKFILES[0]}" &
+ublk_io_and_remove 256M -t stripe -q 4 -u "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
+wait
+
+ublk_io_and_remove 8G -t null -q 4 -u --nthreads 8 --per_io_tasks &
+ublk_io_and_remove 256M -t loop -q 4 -u --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[0]}" &
+ublk_io_and_remove 256M -t stripe -q 4 -u --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
+wait
+
+_cleanup_test "stress"
+_show_result $TID $ERR_CODE
diff --git a/tools/testing/selftests/ublk/test_stress_07.sh b/tools/testing/selftests/ublk/test_stress_07.sh
new file mode 100755
index 000000000000..fb061fc26d36
--- /dev/null
+++ b/tools/testing/selftests/ublk/test_stress_07.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+TID="stress_07"
+ERR_CODE=0
+
+ublk_io_and_kill_daemon()
+{
+ run_io_and_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 "stress" "run IO and kill ublk server (user copy)"
+
+_create_backfile 0 256M
+_create_backfile 1 128M
+_create_backfile 2 128M
+
+ublk_io_and_kill_daemon 8G -t null -q 4 -u --no_ublk_fixed_fd &
+ublk_io_and_kill_daemon 256M -t loop -q 4 -u --no_ublk_fixed_fd "${UBLK_BACKFILES[0]}" &
+ublk_io_and_kill_daemon 256M -t stripe -q 4 -u "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
+wait
+
+ublk_io_and_kill_daemon 8G -t null -q 4 -u --nthreads 8 --per_io_tasks &
+ublk_io_and_kill_daemon 256M -t loop -q 4 -u --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[0]}" &
+ublk_io_and_kill_daemon 256M -t stripe -q 4 -u --nthreads 8 --per_io_tasks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" &
+wait
+
+_cleanup_test "stress"
+_show_result $TID $ERR_CODE
diff --git a/tools/testing/selftests/ublk/test_stripe_05.sh b/tools/testing/selftests/ublk/test_stripe_05.sh
new file mode 100755
index 000000000000..05d71951d710
--- /dev/null
+++ b/tools/testing/selftests/ublk/test_stripe_05.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+
+TID="stripe_05"
+ERR_CODE=0
+
+if ! _have_program fio; then
+ exit "$UBLK_SKIP_CODE"
+fi
+
+_prep_test "stripe" "write and verify test on user copy"
+
+_create_backfile 0 256M
+_create_backfile 1 256M
+
+dev_id=$(_add_ublk_dev -t stripe -q 2 -u "${UBLK_BACKFILES[0]}" "${UBLK_BACKFILES[1]}")
+_check_add_dev $TID $?
+
+# run fio over the ublk disk
+_run_fio_verify_io --filename=/dev/ublkb"${dev_id}" --size=512M
+ERR_CODE=$?
+
+_cleanup_test "stripe"
+_show_result $TID $ERR_CODE
diff --git a/tools/testing/selftests/ublk/test_stripe_06.sh b/tools/testing/selftests/ublk/test_stripe_06.sh
new file mode 100755
index 000000000000..d06cac7626e2
--- /dev/null
+++ b/tools/testing/selftests/ublk/test_stripe_06.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh
+
+TID="stripe_06"
+ERR_CODE=0
+
+_prep_test "stripe" "mkfs & mount & umount on user copy"
+
+_create_backfile 0 256M
+_create_backfile 1 256M
+
+dev_id=$(_add_ublk_dev -t stripe -u -q 2 "${UBLK_BACKFILES[0]}" "${UBLK_BACKFILES[1]}")
+_check_add_dev $TID $?
+
+_mkfs_mount_test /dev/ublkb"${dev_id}"
+ERR_CODE=$?
+
+_cleanup_test "stripe"
+_show_result $TID $ERR_CODE
--
2.45.2
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 ]; 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
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 ]; 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?
Thanks,
Caleb
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 <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 ]; 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
© 2016 - 2025 Red Hat, Inc.