[PATCH blktests] nvme: add regression test for concurrently enable/disable nvmet ns
Sagi Grimberg
sagi at grimberg.me
Tue May 21 03:07:23 PDT 2024
Forgot to CC Shinichiro...
On 21/05/2024 11:56, Sagi Grimberg wrote:
> Reproduce a hang in nvmet when concurrently disabling/enabling
> an nvmet namespace.
>
> Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
> ---
> tests/nvme/051 | 48 ++++++++++++++++++++++++++++++++++++++++++++++
> tests/nvme/051.out | 2 ++
> 2 files changed, 50 insertions(+)
> create mode 100755 tests/nvme/051
> create mode 100644 tests/nvme/051.out
>
> diff --git a/tests/nvme/051 b/tests/nvme/051
> new file mode 100755
> index 000000000000..ddc097310dd7
> --- /dev/null
> +++ b/tests/nvme/051
> @@ -0,0 +1,48 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-3.0+
> +# Copyright (C) 2024 Sagi Grimberg
> +#
> +# Regression test for kernel hang when enabling/disabling nvmet
> +# namespace concurrently
> +
> +. tests/nvme/rc
> +
> +DESCRIPTION="test nvmet concurrent ns enable/disable"
> +QUICK=1
> +
> +requires() {
> + _nvme_requires
> + _require_nvme_trtype_is_fabrics
> +}
> +
> +set_conditions() {
> + _set_nvme_trtype "$@"
> +}
> +
> +ns_enable_disable_loop() {
> + local ns="$1"
> + local iterations=200
> + for ((i = 1; i <= ${iterations}; i++)); do
> + echo 0 > $ns/enable
> + echo 1 > $ns/enable
> + done
> +}
> +
> +test() {
> + echo "Running ${TEST_NAME}"
> +
> + _setup_nvmet
> +
> + _nvmet_target_setup
> + ns="${NVMET_CFS}subsystems/${def_subsysnqn}/namespaces/1"
> +
> + # fire off two enable/disable loops concurrently and wait
> + # for them to complete...
> + ns_enable_disable_loop $ns &
> + ns_enable_disable_loop $ns &
> + wait
> +
> + _nvmet_target_cleanup
> +
> + echo "Test complete"
> +}
> diff --git a/tests/nvme/051.out b/tests/nvme/051.out
> new file mode 100644
> index 000000000000..156f0687aab2
> --- /dev/null
> +++ b/tests/nvme/051.out
> @@ -0,0 +1,2 @@
> +Running nvme/051
> +Test complete
More information about the Linux-nvme
mailing list