[PATCH 8/8] selftests: ublk: add user copy test cases

Caleb Sander Mateos posted 8 patches 5 days, 11 hours ago
There is a newer version of this series
[PATCH 8/8] selftests: ublk: add user copy test cases
Posted by Caleb Sander Mateos 5 days, 11 hours ago
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
Re: [PATCH 8/8] selftests: ublk: add user copy test cases
Posted by Ming Lei 5 days, 7 hours ago
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
Re: [PATCH 8/8] selftests: ublk: add user copy test cases
Posted by Caleb Sander Mateos 4 days, 21 hours ago
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
Re: [PATCH 8/8] selftests: ublk: add user copy test cases
Posted by Ming Lei 4 days, 18 hours ago
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