From 63c92007599165edb16f92292de2a27008f6cb13 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 14 Jan 2022 13:28:15 +0100 Subject: [PATCH 1/3] fabrics: update for libnvme host_traddr and host_iface changes Libnvme moved the 'host_traddr' and 'host_iface' entries into the fabrics configuration, so update nvme-cli to follow suit. Signed-off-by: Hannes Reinecke --- fabrics.c | 23 ++++++++++------------- nvme-private.h | 2 -- subprojects/libnvme.wrap | 2 +- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/fabrics.c b/fabrics.c index 4ad5291932..2252aa6fc1 100644 --- a/fabrics.c +++ b/fabrics.c @@ -81,8 +81,8 @@ static const char *nvmf_config_file = "Use specified JSON configuration file or OPT_STRING("transport", 't', "STR", &transport, nvmf_tport), \ OPT_STRING("traddr", 'a', "STR", &traddr, nvmf_traddr), \ OPT_STRING("trsvcid", 's', "STR", &trsvcid, nvmf_trsvcid), \ - OPT_STRING("host-traddr", 'w', "STR", &host_traddr, nvmf_htraddr), \ - OPT_STRING("host-iface", 'f', "STR", &host_iface, nvmf_hiface), \ + OPT_STRING("host-traddr", 'w', "STR", &c.host_traddr, nvmf_htraddr), \ + OPT_STRING("host-iface", 'f', "STR", &c.host_iface, nvmf_hiface), \ OPT_STRING("hostnqn", 'q', "STR", &hostnqn, nvmf_hostnqn), \ OPT_STRING("hostid", 'I', "STR", &hostid, nvmf_hostid), \ OPT_STRING("nqn", 'n', "STR", &subsysnqn, nvmf_nqn), \ @@ -325,7 +325,6 @@ static int discover_from_conf_file(nvme_host_t h, const char *desc, bool connect, const struct nvme_fabrics_config *defcfg) { char *transport = NULL, *traddr = NULL, *trsvcid = NULL; - char *host_traddr = NULL, *host_iface = NULL; char *hostnqn = NULL, *hostid = NULL, *hostkey = NULL, *ctrlkey = NULL; char *subsysnqn = NULL; char *ptr, **argv, *p, line[4096]; @@ -388,8 +387,8 @@ static int discover_from_conf_file(nvme_host_t h, const char *desc, if (!transport && !traddr) goto next; - c = nvme_create_ctrl(subsysnqn, transport, - traddr, host_traddr, host_iface, trsvcid); + c = nvme_create_ctrl(subsysnqn, transport, traddr, + cfg.host_traddr, cfg.host_iface, trsvcid); if (!c) goto next; nvme_ctrl_set_discovery_ctrl(c, true); @@ -415,7 +414,6 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) { char *subsysnqn = NVME_DISC_SUBSYS_NAME; char *hostnqn = NULL, *hostid = NULL, *hostkey = NULL, *ctrlkey = NULL; - char *host_traddr = NULL, *host_iface = NULL; char *transport = NULL, *traddr = NULL, *trsvcid = NULL; char *hnqn = NULL, *hid = NULL; char *config_file = PATH_NVMF_CONFIG; @@ -505,12 +503,12 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) if (strcmp(nvme_ctrl_get_subsysnqn(c), subsysnqn) || strcmp(nvme_ctrl_get_transport(c), transport) || strcmp(nvme_ctrl_get_traddr(c), traddr) || - (host_traddr && nvme_ctrl_get_host_traddr(c) && + (cfg.host_traddr && nvme_ctrl_get_host_traddr(c) && strcmp(nvme_ctrl_get_host_traddr(c), - host_traddr)) || - (host_iface && nvme_ctrl_get_host_iface(c) && + cfg.host_traddr)) || + (cfg.host_iface && nvme_ctrl_get_host_iface(c) && strcmp(nvme_ctrl_get_host_iface(c), - host_iface)) || + cfg.host_iface)) || (trsvcid && nvme_ctrl_get_trsvcid(c) && strcmp(nvme_ctrl_get_trsvcid(c), trsvcid))) { nvme_msg(LOG_WARNING, @@ -541,7 +539,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) if (!c) { /* No device or non-matching device, create a new controller */ c = nvme_create_ctrl(subsysnqn, transport, traddr, - host_traddr, host_iface, trsvcid); + cfg.host_traddr, cfg.host_iface, trsvcid); if (!c) { ret = errno; goto out_free; @@ -580,7 +578,6 @@ int nvmf_connect(const char *desc, int argc, char **argv) char *hnqn = NULL, *hid = NULL; char *subsysnqn = NULL; char *transport = NULL, *traddr = NULL; - char *host_traddr = NULL, *host_iface = NULL; char *trsvcid = NULL, *hostnqn = NULL, *hostid = NULL; char *hostkey = NULL, *ctrlkey = NULL; char *config_file = PATH_NVMF_CONFIG; @@ -669,7 +666,7 @@ int nvmf_connect(const char *desc, int argc, char **argv) if (hostkey) nvme_host_set_dhchap_key(h, hostkey); c = nvme_create_ctrl(subsysnqn, transport, traddr, - host_traddr, host_iface, trsvcid); + cfg.host_traddr, cfg.host_iface, trsvcid); if (!c) { errno = ENOMEM; goto out_free; diff --git a/nvme-private.h b/nvme-private.h index 17185fc5c8..c9f67d41dc 100644 --- a/nvme-private.h +++ b/nvme-private.h @@ -23,8 +23,6 @@ struct nvme_ctrl { char *ana_state; char *traddr; char *trsvcid; - char *host_traddr; - char *host_iface; char *hostnqn; char *hostid; diff --git a/subprojects/libnvme.wrap b/subprojects/libnvme.wrap index 205d637dcf..67bd0653ce 100644 --- a/subprojects/libnvme.wrap +++ b/subprojects/libnvme.wrap @@ -1,6 +1,6 @@ [wrap-git] url = https://github.com/linux-nvme/libnvme.git -revision = c921be9f1be46a2dea78bcd8d32c0a9df6f17b4e +revision = 209c5abbeb27eca607cbc3adfb0509b0f4cd7722 [provide] libnvme = libnvme_dep From de544776f905c299bb3e32716fb7b96f9a2e3efd Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 14 Jan 2022 13:29:37 +0100 Subject: [PATCH 2/3] Remove 'nvme-private.h' With the libnvme split this file is not used anymore. Signed-off-by: Hannes Reinecke --- nvme-private.h | 68 -------------------------------------------------- 1 file changed, 68 deletions(-) delete mode 100644 nvme-private.h diff --git a/nvme-private.h b/nvme-private.h deleted file mode 100644 index c9f67d41dc..0000000000 --- a/nvme-private.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef _NVME_PRIVATE_H -#define _NVME_PRIVATE_H - -struct nvme_subsystem; -struct nvme_ctrl; - -struct nvme_namespace { - char *name; - struct nvme_ctrl *ctrl; - - unsigned nsid; - struct nvme_id_ns ns; -}; - -struct nvme_ctrl { - char *name; - char *path; - struct nvme_subsystem *subsys; - - char *address; - char *transport; - char *state; - char *ana_state; - char *traddr; - char *trsvcid; - char *hostnqn; - char *hostid; - - struct nvme_id_ctrl id; - - int nr_namespaces; - struct nvme_namespace *namespaces; -}; - -struct nvme_subsystem { - char *name; - char *subsysnqn; - - int nr_ctrls; - struct nvme_ctrl *ctrls; - - int nr_namespaces; - struct nvme_namespace *namespaces; -}; - -struct nvme_topology { - int nr_subsystems; - struct nvme_subsystem *subsystems; -}; - -void *mmap_registers(const char *dev); - -int scan_ctrl_namespace_filter(const struct dirent *d); -int scan_namespace_filter(const struct dirent *d); -int scan_ctrl_paths_filter(const struct dirent *d); -int scan_ctrls_filter(const struct dirent *d); -int scan_subsys_filter(const struct dirent *d); -int scan_dev_filter(const struct dirent *d); - -int scan_subsystems(struct nvme_topology *t, const char *subsysnqn, - __u32 ns_instance, int nsid, char *dev_dir); -void free_topology(struct nvme_topology *t); -char *get_nvme_subsnqn(char *path); - -int uuid_from_dmi(char *uuid); -int uuid_from_systemd(char *uuid); - -#endif /* _NVME_PRIVATE_H */ From 5cf86c2cbda7c5140ecca850ff3722c8ed90e622 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Fri, 14 Jan 2022 14:16:22 +0100 Subject: [PATCH 3/3] fabrics: Only disconnect discovery controllers during 'connect-all' When calling 'connect-all' the 'persistent' argument only applies to discovery controllers; normal I/O controllers should stay connected, as this was kinda the point... Signed-off-by: Hannes Reinecke --- fabrics.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fabrics.c b/fabrics.c index 2252aa6fc1..55cc247c0e 100644 --- a/fabrics.c +++ b/fabrics.c @@ -302,7 +302,8 @@ static int __discover(nvme_ctrl_t c, const struct nvme_fabrics_config *defcfg, __discover(child, defcfg, raw, persistent, true, flags); - if (!persistent) { + if (e->subtype != NVME_NQN_NVME && + !persistent) { nvme_disconnect_ctrl(child); nvme_free_ctrl(child); }