From: Daniel Wagner <dwagner@suse.de>
To: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Cc: Chaitanya Kulkarni <chaitanyak@nvidia.com>,
Keith Busch <kbusch@kernel.org>,
linux-block@vger.kernel.org, linux-nvme@lists.infradead.org,
Daniel Wagner <dwagner@suse.de>
Subject: [PATCH blktests v1 2/2] nvme/048: add reconnect after ctrl key change
Date: Mon, 4 Mar 2024 17:13:03 +0100 [thread overview]
Message-ID: <20240304161303.19681-3-dwagner@suse.de> (raw)
In-Reply-To: <20240304161303.19681-1-dwagner@suse.de>
The re-authentication is a soft state, meaning unless the host has to
reconnect a key change on the target side is not observed. Extend the
current test with a forced reconnect after a key change. This
exercises the DNR handling code of the host.
Signed-off-by: Daniel Wagner <dwagner@suse.de>
---
tests/nvme/045 | 72 +++++++++++++++++++++++++++++++++++++++++++++-
tests/nvme/045.out | 3 +-
2 files changed, 73 insertions(+), 2 deletions(-)
diff --git a/tests/nvme/045 b/tests/nvme/045
index be408b629771..b0527685f61f 100755
--- a/tests/nvme/045
+++ b/tests/nvme/045
@@ -21,6 +21,62 @@ requires() {
_have_driver dh_generic
}
+nvmf_wait_for_state() {
+ local def_state_timeout=5
+ local subsys_name="$1"
+ local state="$2"
+ local timeout="${3:-$def_state_timeout}"
+ local nvmedev
+ local state_file
+ local start_time
+ local end_time
+
+ nvmedev=$(_find_nvme_dev "${subsys_name}")
+ state_file="/sys/class/nvme-fabrics/ctl/${nvmedev}/state"
+
+ start_time=$(date +%s)
+ while ! grep -q "${state}" "${state_file}"; do
+ sleep 1
+ end_time=$(date +%s)
+ if (( end_time - start_time > timeout )); then
+ echo "expected state \"${state}\" not " \
+ "reached within ${timeout} seconds"
+ return 1
+ fi
+ done
+
+ return 0
+}
+
+nvmf_wait_for_ctrl_delete() {
+ local def_state_timeout=5
+ local nvmedev="$1"
+ local timeout="${2:-$def_state_timeout}"
+ local ctrl="/sys/class/nvme-fabrics/ctl/${nvmedev}/state"
+ local start_time
+ local end_time
+
+ start_time=$(date +%s)
+ while [ -f "${ctrl}" ]; do
+ sleep 1
+ end_time=$(date +%s)
+ if (( end_time - start_time > timeout )); then
+ echo "controller \"${nvmedev}\" not deleted" \
+ "within ${timeout} seconds"
+ return 1
+ fi
+ done
+
+ return 0
+}
+
+set_nvmet_attr_qid_max() {
+ local nvmet_subsystem="$1"
+ local qid_max="$2"
+ local cfs_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}"
+
+ echo "${qid_max}" > "${cfs_path}/attr_qid_max"
+}
test() {
echo "Running ${TEST_NAME}"
@@ -55,7 +111,11 @@ test() {
--hostnqn "${def_hostnqn}" \
--hostid "${def_hostid}" \
--dhchap-secret "${hostkey}" \
- --dhchap-ctrl-secret "${ctrlkey}"
+ --dhchap-ctrl-secret "${ctrlkey}" \
+ --reconnect-delay 1
+
+ nvmf_wait_for_state "${def_subsysnqn}" "live"
+ nvmedev=$(_find_nvme_dev "${def_subsysnqn}")
echo "Re-authenticate with original host key"
@@ -108,6 +168,16 @@ test() {
rand_io_size="$(_nvme_calc_rand_io_size 4m)"
_run_fio_rand_io --size="${rand_io_size}" --filename="/dev/${nvmedev}n1"
+ echo "Renew host key on the controller and force reconnect"
+
+ new_hostkey="$(nvme gen-dhchap-key -n ${def_subsysnqn} 2> /dev/null)"
+
+ _set_nvmet_hostkey "${def_hostnqn}" "${new_hostkey}"
+
+ # Force a reconnect
+ set_nvmet_attr_qid_max "${def_subsysnqn}" 1
+ nvmf_wait_for_ctrl_delete "${nvmedev}"
+
_nvme_disconnect_subsys "${def_subsysnqn}"
_nvmet_target_cleanup
diff --git a/tests/nvme/045.out b/tests/nvme/045.out
index 84a69ef5c4c6..3331304ef71a 100644
--- a/tests/nvme/045.out
+++ b/tests/nvme/045.out
@@ -8,5 +8,6 @@ Change DH group to ffdhe8192
Re-authenticate with changed DH group
Change hash to hmac(sha512)
Re-authenticate with changed hash
-disconnected 1 controller(s)
+Renew host key on the controller and force reconnect
+disconnected 0 controller(s)
Test complete
--
2.44.0
next prev parent reply other threads:[~2024-03-04 16:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-04 16:13 [PATCH blktests v1 0/2] extend nvme/045 to reconnect with invalid key Daniel Wagner
2024-03-04 16:13 ` [PATCH blktests v1 1/2] nvme/rc: add reconnect-delay argument only for fabrics transports Daniel Wagner
2024-03-04 16:13 ` Daniel Wagner [this message]
2024-03-05 9:38 ` [PATCH blktests v1 2/2] nvme/048: add reconnect after ctrl key change Shinichiro Kawasaki
2024-03-05 11:08 ` Daniel Wagner
2024-03-05 9:44 ` [PATCH blktests v1 0/2] extend nvme/045 to reconnect with invalid key Shinichiro Kawasaki
2024-03-05 11:18 ` Daniel Wagner
2024-03-06 8:44 ` Shinichiro Kawasaki
2024-03-06 9:36 ` Daniel Wagner
2024-03-06 11:28 ` Shinichiro Kawasaki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240304161303.19681-3-dwagner@suse.de \
--to=dwagner@suse.de \
--cc=chaitanyak@nvidia.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=shinichiro.kawasaki@wdc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox