]> www.infradead.org Git - users/hch/blktests.git/commitdiff
nvme: add nvmf reset/disconnect during traffic test
authorSagi Grimberg <sagi@grimberg.me>
Thu, 30 Jun 2022 15:44:44 +0000 (18:44 +0300)
committerShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Mon, 11 Jul 2022 11:03:58 +0000 (20:03 +0900)
Test traffic controller reset and disconnect during traffic.

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Alan Adamson <alan.adamson@oracle.com>
Link: https://lore.kernel.org/linux-nvme/20220630154444.475600-1-sagi@grimberg.me/
[Shin'ichiro: removed kill and wait for fio job, fixed shellcheck warnings]
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
tests/nvme/040 [new file with mode: 0755]
tests/nvme/040.out [new file with mode: 0644]
tests/nvme/rc

diff --git a/tests/nvme/040 b/tests/nvme/040
new file mode 100755 (executable)
index 0000000..10c1815
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2022 Sagi Grimberg <sagi@grimberg.me>
+#
+# Test nvme fabrics controller reset/disconnect/reconnect operation during I/O
+# This test is somewhat similar to test 032 but for fabrics controllers.
+
+. tests/nvme/rc
+
+DESCRIPTION="test nvme fabrics controller reset/disconnect operation during I/O"
+
+requires() {
+       _nvme_requires
+       _have_loop
+       _have_fio
+       _require_nvme_trtype_is_fabrics
+}
+
+test() {
+       local subsys="blktests-subsystem-1"
+       local port
+       local loop_dev
+       local nvmedev
+
+       echo "Running ${TEST_NAME}"
+
+       _setup_nvmet
+       truncate -s 1G "$TMPDIR/img"
+       loop_dev="$(losetup -f --show "$TMPDIR/img")"
+
+       port="$(_create_nvmet_port "${nvme_trtype}")"
+       _create_nvmet_subsystem "${subsys}" "${loop_dev}"
+       _add_nvmet_subsys_to_port "${port}" "${subsys}"
+       _nvme_connect_subsys "${nvme_trtype}" "${subsys}"
+       udevadm settle
+       nvmedev=$(_find_nvme_dev "${subsys}")
+
+       # start fio job
+       echo "starting background fio"
+       _run_fio_rand_io --filename="${nvmedev}n1" --size=1g \
+               --group_reporting --ramp_time=5  &> /dev/null &
+       sleep 5
+
+       # do reset/remove operation
+       echo "resetting controller"
+       _nvme_reset_ctrl "${nvmedev}"
+       sleep 1
+       echo "deleting controller"
+       _nvme_delete_ctrl "${nvmedev}"
+
+       _remove_nvmet_subsystem_from_port "${port}" "${subsys}"
+       _remove_nvmet_subsystem "${subsys}"
+       _remove_nvmet_port "${port}"
+
+       echo "Test complete"
+}
diff --git a/tests/nvme/040.out b/tests/nvme/040.out
new file mode 100644 (file)
index 0000000..ddc4efe
--- /dev/null
@@ -0,0 +1,5 @@
+Running nvme/040
+starting background fio
+resetting controller
+deleting controller
+Test complete
index 4bebbc762cbb121eba1b1b96ebf05b24d2f7b1be..dfea7f3a0da45e1ca0f84a6ff9966ff61a30b734 100644 (file)
@@ -447,3 +447,11 @@ _nvme_disable_err_inject()
         echo 0 > /sys/kernel/debug/"$1"/fault_inject/probability
         echo 0 > /sys/kernel/debug/"$1"/fault_inject/times
 }
+
+_nvme_reset_ctrl() {
+       echo 1 > /sys/class/nvme/"$1"/reset_controller
+}
+
+_nvme_delete_ctrl() {
+       echo 1 > /sys/class/nvme/"$1"/delete_controller
+}