lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ