Thread (35 messages) 35 messages, 5 authors, 2023-07-13

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

From: Max Gurtovoy <mgurtovoy@nvidia.com>
Date: 2023-07-06 16:12:13
Also in: linux-nvme, lkml


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 ?
quoted hunk ↗ jump to hunk
Signed-off-by: Daniel Wagner <redacted>
---
  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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help