From: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
To: Daniel Wagner <dwagner@suse.de>
Cc: linux-block@vger.kernel.org, linux-nvme@lists.infradead.org
Subject: Re: [PATCH blktests 07/10] common/nvme: support the ports of a remote target
Date: Wed, 11 Nov 2026 19:30:27 +0900 [thread overview]
Message-ID: <avRDFXYVmzax74cy@shinmob> (raw)
In-Reply-To: <20261104-nvme-target-control-v1-7-b31b40537bb4@suse.de>
On Nov 04, 2026 / 17:44, Daniel Wagner wrote:
> With NVME_TARGET_CONTROL the port helpers still use the local nvmet
> configfs. _create_nvmet_port, _remove_nvmet_port and
> _setup_nvmet_port_ana write to it. _get_nvmet_ports and
> _get_nvmet_port_params read from it. The ports of a remote subsystem
> are not there. _nvmet_target_setup doesn't pass the number of ports to
> the script, and _nvmet_target_add_ports only reports that add-ports is a
> stub. The tests which use more than one port don't work with a remote
> target, e.g. nvme/057 finds no port and connects to none.
>
> Use the port commands of the script instead: setup --ports, add-ports,
> add-port, remove-port, list-ports, show-port and set-ana, with --tls or
> --force-tls for the TLS mode. _nvme_connect_subsys finds the port of the
> subsystem with list-ports, as it does with the local target. If the
> script lists no port, e.g. for a target which is configured already, it
> connects to the address config shows, as before.
>
> Document the port commands in running-tests.md.
>
> Signed-off-by: Daniel Wagner <dwagner@suse.de>
[...]
> diff --git a/common/nvme b/common/nvme
> index dfe85b6e281f..698d6bf780ef 100644
> --- a/common/nvme
> +++ b/common/nvme
> @@ -888,20 +888,21 @@ _nvme_connect_subsys() {
> esac
> done
>
> + if [[ -z "${port}" ]]; then
> + local ports
> +
> + _get_nvmet_ports "${subsysnqn}" ports
> + port="${ports[0]##*/}"
> + fi
> if [[ -n "${nvme_target_control}" && -z "${port}" ]]; then
> + # The target doesn't list ports, e.g. it is configured already.
> ARGS+=(--transport "$(${nvme_target_control} config --show-trtype)")
> ARGS+=(--traddr "${def_traddr}")
> ARGS+=(--trsvcid "${def_trsvcid}")
> else
> if [[ -z "${port}" ]]; then
> - local ports
> -
> - _get_nvmet_ports "${subsysnqn}" ports
> - port="${ports[0]##*/}"
> - if [[ -z "${port}" ]]; then
> - echo "WARNING: no port found"
> - return 1
> - fi
> + echo "WARNING: no port found"
> + return 1
> fi
> _get_nvmet_port_params "${port}" ARGS
> fi
> @@ -1079,6 +1080,18 @@ _fc_host_traddr() {
> printf "nn-%s:pn-%s" "$(_host_wwnn $port)" "$(_host_wwpn $port)"
> }
>
> +# Print the nvme-target-control option for the TLS mode of a port.
> +_nvme_target_control_tls() {
> + case "$1" in
> + not-required)
> + echo "--tls"
> + ;;
> + required)
> + echo "--force-tls"
> + ;;
> + esac
> +}
> +
> _create_nvmet_port() {
> local tls="${1:-none}"
> local host_port="${2:-0}"
> @@ -1088,6 +1101,13 @@ _create_nvmet_port() {
> local trsvcid="${def_trsvcid}"
> local portcfs
>
> + if [[ -n "${nvme_target_control}" ]]; then
> + # shellcheck disable=SC2046
I think the shellcheck exception above can be by,
> + "${nvme_target_control}" add-port \
> + $(_nvme_target_control_tls "${tls}")
adding double quotations in the line above.
"$(_nvme_target_control_tls "${tls}")"
> + return
> + fi
> +
> local port
> for ((port = 0; ; port++)); do
> if [[ ! -e "${NVMET_CFS}/ports/${port}" ]]; then
> @@ -1157,6 +1177,12 @@ _setup_nvmet_port_ana() {
> local cfsport="${NVMET_CFS}/ports/${port}"
> local anaport="${cfsport}/ana_groups/${anagrpid}"
>
> + if [[ -n "${nvme_target_control}" ]]; then
> + "${nvme_target_control}" set-ana --port "${port}" \
> + --grpid "${anagrpid}" --state "${anastate}"
> + return
> + fi
> +
> if [[ ! -d "${anaport}" ]] ; then
> if [[ "${anagrpid}" -eq 1 ]]; then
> echo "FAIL target setup failed, ANA not supported"
> @@ -1173,6 +1199,11 @@ _remove_nvmet_port() {
> local cfsport="${NVMET_CFS}/ports/${port}"
> local a
>
> + if [[ -n "${nvme_target_control}" ]]; then
> + "${nvme_target_control}" remove-port --port "${port}"
> + return
> + fi
> +
> if [[ "${nvme_trtype}" == "fc" ]]; then
> _nvme_fcloop_del_tport "$(_remote_wwnn "$port")" \
> "$(_remote_wwpn "$port")"
> @@ -1446,6 +1477,13 @@ _get_nvmet_ports() {
> local -n nvmet_ports="$2"
> local cfs_path="${NVMET_CFS}/ports"
>
> + if [[ -n "${nvme_target_control}" ]]; then
> + mapfile -t -O "${#nvmet_ports[@]}" nvmet_ports < <(
> + "${nvme_target_control}" list-ports \
> + --subsysnqn "${nvmet_subsysnqn}")
> + return
> + fi
> +
> for port in "${cfs_path}/"*; do
> if [[ -e "${port}/subsystems/${nvmet_subsysnqn}" ]]; then
> nvmet_ports+=("${port##*/}")
> @@ -1473,7 +1511,12 @@ _get_nvmet_port_params() {
> local trsvcid="${def_trsvcid}"
>
> # When port is specified, get port dependent parameter values
> - if [[ $port != none ]]; then
> + if [[ $port != none && -n "${nvme_target_control}" ]]; then
> + read -r trtype traddr trsvcid < <(
> + "${nvme_target_control}" show-port --port "${port}")
> + [[ -n "${trsvcid}" ]] || exit 1
> + args+=(--traddr "${traddr}")
> + elif [[ $port != none ]]; then
> [[ -d "${cfs_path}" ]] || exit 1
> trtype=$(cat "${cfs_path}/addr_trtype")
> traddr=$(cat "${cfs_path}/addr_traddr")
> @@ -1621,10 +1664,13 @@ _nvmet_target_setup() {
> ARGS+=(--ctrlkey "${ctrlkey}")
> fi
>
> + # shellcheck disable=SC2046
Same here, I suggest to add,
> "${nvme_target_control}" setup \
> --subsysnqn "${subsysnqn}" \
> --subsys-uuid "${subsys_uuid:-$def_subsys_uuid}" \
> --hostnqn "${def_hostnqn}" \
> + --ports "${num_ports}" \
> + $(_nvme_target_control_tls "${tls}") \
double quotations in the line above.
> "${ARGS[@]}" &> /dev/null
> p=0
> while (( p < num_ports )); do
> @@ -1719,19 +1765,20 @@ _nvmet_target_add_ports() {
> ARGS+=(--ctrlkey "${ctrlkey}")
> fi
>
> + # shellcheck disable=SC2046
Again, same here,
> "${nvme_target_control}" add-ports \
> --ports "${num_ports}" \
> --subsysnqn "${subsysnqn}" \
> --subsys-uuid "${subsys_uuid:-$def_subsys_uuid}" \
> --hostnqn "${def_hostnqn}" \
> - "${ARGS[@]}" &> /dev/null
> + $(_nvme_target_control_tls "${tls}") \
double qutotaions above.
> + "${ARGS[@]}" > /dev/null
> p=0
> while (( p < num_ports )); do
> # Set ports_to_hosts so that _get_fc_host_port() can return the correct host port
> ports_to_hosts+=("${host_port}")
> p=$(( p + 1 ))
> done
> - echo "'${nvme_target_control} add-ports' is a stub"
> return
> fi
>
>
> --
> 2.56.0
>
next prev parent reply other threads:[~2026-11-11 10:30 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 16:44 [PATCH blktests 00/10] nvme: make NVME_TARGET_CONTROL work with remote targets Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 01/10] common/nvme: pass --ctrlkey to the target control script Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 02/10] common/nvme: wait for the namespace of a remote target Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 03/10] common/nvme: check the subsystem in _nvmet_target_add_ports Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 04/10] nvme: skip the tests which need the kernel target with a remote target Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 05/10] nvme/029: skip if the I/O exceeds the maximum transfer size Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 06/10] contrib: make nvme-target-control a standalone project Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 07/10] common/nvme: support the ports of a remote target Daniel Wagner
2026-11-11 10:30 ` Shin'ichiro Kawasaki [this message]
2026-11-04 16:44 ` [PATCH blktests 08/10] nvme/rc: change the host keys on " Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 09/10] nvme: skip the tests which need a feature the remote target lacks Daniel Wagner
2026-11-11 10:33 ` Shin'ichiro Kawasaki
2026-11-12 9:17 ` Daniel Wagner
2026-11-04 16:44 ` [PATCH blktests 10/10] contrib/nvme-target-control: add a NetApp ONTAP target Daniel Wagner
2026-11-11 10:36 ` [PATCH blktests 00/10] nvme: make NVME_TARGET_CONTROL work with remote targets Shin'ichiro Kawasaki
2026-11-12 9:19 ` Daniel Wagner
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=avRDFXYVmzax74cy@shinmob \
--to=shinichiro.kawasaki@wdc.com \
--cc=dwagner@suse.de \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.