]> www.infradead.org Git - users/sagi/blktests.git/commitdiff
nvme: add regression test for concurrently enable/disable nvmet ns sagi/ns-parallel-enable-disable
authorSagi Grimberg <sagi@grimberg.me>
Tue, 21 May 2024 08:52:33 +0000 (11:52 +0300)
committerSagi Grimberg <sagi@grimberg.me>
Wed, 22 May 2024 09:02:44 +0000 (12:02 +0300)
Reproduce a hang in nvmet when concurrently disabling/enabling
an nvmet namespace.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
tests/nvme/051 [new file with mode: 0755]
tests/nvme/051.out [new file with mode: 0644]

diff --git a/tests/nvme/051 b/tests/nvme/051
new file mode 100755 (executable)
index 0000000..624b42f
--- /dev/null
@@ -0,0 +1,47 @@
+#!/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"
+       for ((i = 1; i <= 200; 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 (file)
index 0000000..156f068
--- /dev/null
@@ -0,0 +1,2 @@
+Running nvme/051
+Test complete