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

From: Max Gurtovoy
Date: Thu Jul 06 2023 - 12:12:13 EST




On 20/06/2023 16:27, Daniel Wagner wrote:
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.

why would we like to ignore connect attempts during blktests ?
We define unique nqn/ids/etc. So we never should disturb other running services, unless it uses the same parameters, which shouldn't happen.

Agree on setting the hard coded values for hostnqn and hostid instead of reading the /etc/nvme/* files. This should do the work IMO, isn't it ?


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
+}
+
+_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