[PATCH blktests 09/15] nvme: check for controller device in _nvme_connect_subsys()
Daniel Wagner
dwagner at suse.de
Fri Oct 25 07:40:33 PDT 2024
On Thu, Oct 24, 2024 at 10:00:19AM GMT, Shin'ichiro Kawasaki wrote:
> From: Hannes Reinecke <hare at suse.de>
>
> When calling 'nvme connect' we cannot assume that a namespace is
> always present (eg if connecting to a discovery service), so better
> check for the controller device to ensure that 'nvme connect' has
> succeeded.
>
> Signed-off-by: Hannes Reinecke <hare at suse.de>
> [Shin'ichiro: fixed _nvme_connect_subsys() return for no_wait case]
> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki at wdc.com>
> ---
> common/nvme | 37 ++++++++++++++++++-------------------
> 1 file changed, 18 insertions(+), 19 deletions(-)
>
> diff --git a/common/nvme b/common/nvme
> index 758df33..fa64ad4 100644
> --- a/common/nvme
> +++ b/common/nvme
> @@ -373,17 +373,20 @@ _nvme_connect_subsys() {
> if [[ -n "${ctrl_loss_tmo}" ]]; then
> ARGS+=(--ctrl-loss-tmo="${ctrl_loss_tmo}")
> fi
> + ARGS+=(-o json)
> + connect=$(nvme connect "${ARGS[@]}" 2> /dev/null)
>
> - nvme connect "${ARGS[@]}" 2> /dev/null | grep -v "connecting to device:"
> -
> - # Wait until device file and uuid/wwid sysfs attributes get ready for
> - # all namespaces.
> + # Wait until device file and sysfs attributes get ready
> if [[ ${no_wait} = false ]]; then
> + local ctrldev
> +
> + ctrldev=$(echo "${connect}" | sed -n 's/.*device.:.\(nvme[0-9]*\)./\1/p')
> udevadm settle
> for ((i = 0; i < 10; i++)); do
> - _nvme_ns_ready "${subsysnqn}" && return
> + _nvme_ctrl_ready "${ctrldev}" "${subsysnqn}" && return 0
> sleep .1
> done
> + return 1
> fi
> }
>
> @@ -408,21 +411,17 @@ _nvme_disconnect_subsys() {
> }
>
>
> -_nvme_ns_ready() {
> - local subsysnqn="${1}"
> - local ns_path ns_id dev
> - local cfs_path="${NVMET_CFS}/subsystems/$subsysnqn"
> +_nvme_ctrl_ready() {
> + local ctrldev="${1}"
> + local subsysnqn="${2:-$def_subsysnqn}"
> + local ctrlpath="/sys/class/nvme/${ctrldev}"
>
> - dev=$(_find_nvme_dev "$subsysnqn")
> - for ns_path in "${cfs_path}/namespaces/"*; do
> - ns_id=${ns_path##*/}
> - if [[ ! -b /dev/${dev}n${ns_id} ||
> - ! -e /sys/block/${dev}n${ns_id}/uuid ||
> - ! -e /sys/block/${dev}n${ns_id}/wwid ]]; then
> - return 1
IIRC, the uuid/wwid test were originally from nvme/004 and copied to the
other test. When we refactored we moved the uuid/wwid here. I suggest we
add this part back to nvme/004 so that we don't loose this test case.
More information about the Linux-nvme
mailing list