Re: [PATCH blktests v1 2/3] nvme/rc: Avoid triggering host nvme-cli autoconnect

From: Sagi Grimberg
Date: Tue Jun 20 2023 - 10:07:53 EST



When the host has enabled the udev/systemd autoconnect services for the
fc transport it interacts with blktests and make tests break.

nvme-cli learned to ignore connects attemps when using the
--context command line option paired with a volatile configuration. Thus
we can mark all the resources created by blktests and avoid any
interaction with the systemd autoconnect scripts.

Hmm... is this hapenning with non-fc as well?


Signed-off-by: Daniel Wagner <dwagner@xxxxxxx>
---
tests/nvme/rc | 73 ++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 63 insertions(+), 10 deletions(-)

diff --git a/tests/nvme/rc b/tests/nvme/rc
index 191f3e2e0c43..00117d314a38 100644
--- a/tests/nvme/rc
+++ b/tests/nvme/rc
@@ -14,8 +14,8 @@ def_remote_wwnn="0x10001100aa000001"
def_remote_wwpn="0x20001100aa000001"
def_local_wwnn="0x10001100aa000002"
def_local_wwpn="0x20001100aa000002"
-def_hostnqn="$(cat /etc/nvme/hostnqn 2> /dev/null)"
-def_hostid="$(cat /etc/nvme/hostid 2> /dev/null)"
+def_hostnqn="nqn.2014-08.org.nvmexpress:uuid:242d4a24-2484-4a80-8234-d0169409c5e8"
+def_hostid="242d4a24-2484-4a80-8234-d0169409c5e8"
nvme_trtype=${nvme_trtype:-"loop"}
nvme_img_size=${nvme_img_size:-"1G"}
nvme_num_iter=${nvme_num_iter:-"1000"}
@@ -161,6 +161,50 @@ _nvme_calc_rand_io_size() {
echo "${io_size_kb}k"
}
+_nvme_cli_supports_context() {
+ if ! nvme connect --help 2>&1 | grep -q context > /dev/null; then
+ return 1
+ fi
+ return 0
+}

Not a great way to check support.

+
+_setup_nvme_cli() {
+ if ! _nvme_cli_supports_context; then
+ return
+ fi
+
+ mkdir -p /run/nvme
+ cat >> /run/nvme/blktests.json <<-EOF
+ [
+ {
+ "hostnqn": "${def_hostnqn}",
+ "hostid": "${def_hostid}",
+ "subsystems": [
+ {
+ "application": "blktests",
+ "nqn": "blktests-subsystem-1",
+ "ports": [
+ {
+ "transport": "fc",
+ "traddr": "nn-${def_remote_wwnn}:pn-${def_remote_wwpn}",
+ "host_traddr": "nn-${def_local_wwnn}:pn-${def_local_wwpn}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ EOF
+}
+
+_cleanup_nvme_cli() {
+ if ! _nvme_cli_supports_context; then
+ return
+ fi
+
+ rm -f /run/nvme/blktests.json
+}
+
_nvme_fcloop_add_rport() {
local local_wwnn="$1"
local local_wwpn="$2"
@@ -235,6 +279,8 @@ _cleanup_fcloop() {
_nvme_fcloop_del_lport "${local_wwnn}" "${local_wwpn}"
_nvme_fcloop_del_rport "${local_wwnn}" "${local_wwpn}" \
"${remote_wwnn}" "${remote_wwpn}"
+
+ _cleanup_nvme_cli
}
_cleanup_nvmet() {
@@ -337,6 +383,8 @@ _setup_nvmet() {
def_host_traddr=$(printf "nn-%s:pn-%s" \
"${def_local_wwnn}" \
"${def_local_wwpn}")
+
+ _setup_nvme_cli
fi
}
@@ -436,18 +484,18 @@ _nvme_connect_subsys() {
trtype="$1"
subsysnqn="$2"
- ARGS=(-t "${trtype}" -n "${subsysnqn}")
+ ARGS=(-t "${trtype}"
+ -n "${subsysnqn}"
+ --hostnqn="${hostnqn}"
+ --hostid="${hostid}")
+ if _nvme_cli_supports_context; then
+ ARGS+=(--context="blktests")
+ fi
if [[ "${trtype}" == "fc" ]] ; then
ARGS+=(-a "${traddr}" -w "${host_traddr}")
elif [[ "${trtype}" != "loop" ]]; then
ARGS+=(-a "${traddr}" -s "${trsvcid}")
fi
- if [[ "${hostnqn}" != "$def_hostnqn" ]]; then
- ARGS+=(--hostnqn="${hostnqn}")
- fi
- if [[ "${hostid}" != "$def_hostid" ]]; then
- ARGS+=(--hostid="${hostid}")
- fi
if [[ -n "${hostkey}" ]]; then
ARGS+=(--dhchap-secret="${hostkey}")
fi
@@ -482,7 +530,12 @@ _nvme_discover() {
local host_traddr="${3:-$def_host_traddr}"
local trsvcid="${3:-$def_trsvcid}"
- ARGS=(-t "${trtype}")
+ ARGS=(-t "${trtype}"
+ --hostnqn="${def_hostnqn}"
+ --hostid="${def_hostid}")
+ if _nvme_cli_supports_context; then
+ ARGS+=(--context="blktests")
+ fi
if [[ "${trtype}" = "fc" ]]; then
ARGS+=(-a "${traddr}" -w "${host_traddr}")
elif [[ "${trtype}" != "loop" ]]; then