diff --git a/.gitignore b/.gitignore index fc50d23..e640b52 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ /nvme-cli-2.0-rc4.tar.gz /nvme-cli-2.0-rc5.tar.gz /nvme-cli-2.0-rc6.tar.gz +/nvme-cli-2.0-rc8.tar.gz diff --git a/connect_return_code.patch b/connect_return_code.patch deleted file mode 100644 index 07f1fc4..0000000 --- a/connect_return_code.patch +++ /dev/null @@ -1,25 +0,0 @@ -commit 9ec18159f75512687a3df22eee15fbafc4c87c9a -Author: Tomas Bzatek -Date: Mon Mar 14 18:15:20 2022 +0100 - - connect: Set errno to zero on nvmf_add_ctrl() success - - The libnvme's nvmf_add_ctrl() might return zero (success) while - having errno set to a non-zero value due to lots of calls inside. - And since nvmf_connect() returns errno primarily, make sure - it's zeroed on success. - - See related https://github.com/linux-nvme/libnvme/pull/292 - -diff --git a/fabrics.c b/fabrics.c -index 49378dc..e08ffd6 100644 ---- a/fabrics.c -+++ b/fabrics.c -@@ -688,6 +688,7 @@ int nvmf_connect(const char *desc, int argc, char **argv) - fprintf(stderr, "no controller found: %s\n", - nvme_strerror(errno)); - else { -+ errno = 0; - if (flags == NORMAL) - print_connect_msg(c); - else if (flags == JSON) diff --git a/nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch b/nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch new file mode 100644 index 0000000..9ba6f26 --- /dev/null +++ b/nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch @@ -0,0 +1,84 @@ +commit 539cc29a7cb290523652ea0cdfe0afb1affd0bf4 +Author: Daniel Wagner +Date: Mon Apr 4 12:48:55 2022 +0200 + + fabrics: Do not free static string + + 38f5a54a7306 ("fabrics: Support connect even when no /etc/nvme/hostnqn + file exists") introduce a regression. arg_parser() might assign a + static string to hostnqn and/or hostid. Can't free this. + + Signed-off-by: Daniel Wagner + +diff --git a/fabrics.c b/fabrics.c +index 30388f2d..76d78a91 100644 +--- a/fabrics.c ++++ b/fabrics.c +@@ -505,6 +505,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) + char *hostnqn = NULL, *hostid = NULL, *hostkey = NULL, *ctrlkey = NULL; + char *transport = NULL, *traddr = NULL, *trsvcid = NULL; + char *config_file = PATH_NVMF_CONFIG; ++ char *hnqn = NULL, *hid = NULL; + enum nvme_print_flags flags; + nvme_root_t r; + nvme_host_t h; +@@ -559,11 +560,11 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) + set_discovery_kato(&cfg); + + if (!hostnqn) +- hostnqn = nvmf_hostnqn_from_file(); ++ hostnqn = hnqn = nvmf_hostnqn_from_file(); + if (!hostnqn) +- hostnqn = nvmf_hostnqn_generate(); ++ hostnqn = hnqn = nvmf_hostnqn_generate(); + if (!hostid) +- hostid = nvmf_hostid_from_file(); ++ hostid = hid = nvmf_hostid_from_file(); + h = nvme_lookup_host(r, hostnqn, hostid); + if (!h) { + ret = ENOMEM; +@@ -658,8 +659,8 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) + out_free_ctrl: + nvme_free_ctrl(c); + out_free: +- free(hostnqn); +- free(hostid); ++ free(hnqn); ++ free(hid); + if (dump_config) + nvme_dump_config(r); + nvme_free_tree(r); +@@ -673,6 +674,7 @@ int nvmf_connect(const char *desc, int argc, char **argv) + char *transport = NULL, *traddr = NULL; + char *trsvcid = NULL, *hostnqn = NULL, *hostid = NULL; + char *hostkey = NULL, *ctrlkey = NULL; ++ char *hnqn = NULL, *hid = NULL; + char *config_file = PATH_NVMF_CONFIG; + unsigned int verbose = 0; + nvme_root_t r; +@@ -746,11 +748,11 @@ int nvmf_connect(const char *desc, int argc, char **argv) + nvme_read_config(r, config_file); + + if (!hostnqn) +- hostnqn = nvmf_hostnqn_from_file(); ++ hostnqn = hnqn = nvmf_hostnqn_from_file(); + if (!hostnqn) +- hostnqn = nvmf_hostnqn_generate(); ++ hostnqn = hnqn = nvmf_hostnqn_generate(); + if (!hostid) +- hostid = nvmf_hostid_from_file(); ++ hostid = hid = nvmf_hostid_from_file(); + h = nvme_lookup_host(r, hostnqn, hostid); + if (!h) { + errno = ENOMEM; +@@ -781,8 +783,8 @@ int nvmf_connect(const char *desc, int argc, char **argv) + } + + out_free: +- free(hostnqn); +- free(hostid); ++ free(hnqn); ++ free(hid); + if (dump_config) + nvme_dump_config(r); + nvme_free_tree(r); diff --git a/nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch b/nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch new file mode 100644 index 0000000..5a80f40 --- /dev/null +++ b/nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch @@ -0,0 +1,89 @@ +commit 38f5a54a73069cb8a56564f0b80db99c48633723 +Author: Daniel Wagner +Date: Mon Apr 4 11:56:15 2022 +0200 + + fabrics: Support connect even when no /etc/nvme/hostnqn file exists + + The connect call will fail if there is no /etc/nvme/hostnqn file + available. The 1.x version did have a fallback mechanisme in place + when the config file was missing. + + Let's add this feature back by calling nvmf_hostnqn_generate() when + there is no /etc/nvme/hostnqn file. + + Signed-off-by: Daniel Wagner + +diff --git a/fabrics.c b/fabrics.c +index ef80ec0d..30388f2d 100644 +--- a/fabrics.c ++++ b/fabrics.c +@@ -504,7 +504,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 *transport = NULL, *traddr = NULL, *trsvcid = NULL; +- char *hnqn = NULL, *hid = NULL; + char *config_file = PATH_NVMF_CONFIG; + enum nvme_print_flags flags; + nvme_root_t r; +@@ -560,9 +559,11 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) + set_discovery_kato(&cfg); + + if (!hostnqn) +- hostnqn = hnqn = nvmf_hostnqn_from_file(); ++ hostnqn = nvmf_hostnqn_from_file(); ++ if (!hostnqn) ++ hostnqn = nvmf_hostnqn_generate(); + if (!hostid) +- hostid = hid = nvmf_hostid_from_file(); ++ hostid = nvmf_hostid_from_file(); + h = nvme_lookup_host(r, hostnqn, hostid); + if (!h) { + ret = ENOMEM; +@@ -657,10 +658,8 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) + out_free_ctrl: + nvme_free_ctrl(c); + out_free: +- if (hnqn) +- free(hnqn); +- if (hid) +- free(hid); ++ free(hostnqn); ++ free(hostid); + if (dump_config) + nvme_dump_config(r); + nvme_free_tree(r); +@@ -670,7 +669,6 @@ out_free: + + int nvmf_connect(const char *desc, int argc, char **argv) + { +- char *hnqn = NULL, *hid = NULL; + char *subsysnqn = NULL; + char *transport = NULL, *traddr = NULL; + char *trsvcid = NULL, *hostnqn = NULL, *hostid = NULL; +@@ -748,9 +746,11 @@ int nvmf_connect(const char *desc, int argc, char **argv) + nvme_read_config(r, config_file); + + if (!hostnqn) +- hostnqn = hnqn = nvmf_hostnqn_from_file(); ++ hostnqn = nvmf_hostnqn_from_file(); ++ if (!hostnqn) ++ hostnqn = nvmf_hostnqn_generate(); + if (!hostid) +- hostid = hid = nvmf_hostid_from_file(); ++ hostid = nvmf_hostid_from_file(); + h = nvme_lookup_host(r, hostnqn, hostid); + if (!h) { + errno = ENOMEM; +@@ -781,10 +781,8 @@ int nvmf_connect(const char *desc, int argc, char **argv) + } + + out_free: +- if (hnqn) +- free(hnqn); +- if (hid) +- free(hid); ++ free(hostnqn); ++ free(hostid); + if (dump_config) + nvme_dump_config(r); + nvme_free_tree(r); diff --git a/nvme-cli.spec b/nvme-cli.spec index 29840a3..1ff06c9 100644 --- a/nvme-cli.spec +++ b/nvme-cli.spec @@ -1,5 +1,5 @@ Name: nvme-cli -Version: 2.0~rc6 +Version: 2.0~rc8 Release: 1%{?dist} Summary: NVMe management command line interface @@ -8,7 +8,8 @@ URL: https://github.com/linux-nvme/nvme-cli Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz # backport from upstream -Patch0: connect_return_code.patch +Patch0: nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch +Patch1: nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch BuildRequires: meson >= 0.47.0 BuildRequires: libuuid-devel @@ -17,7 +18,7 @@ BuildRequires: systemd-devel BuildRequires: zlib-devel BuildRequires: openssl-devel -BuildRequires: libnvme-devel >= 1.0~rc4 +BuildRequires: libnvme-devel >= 1.0~rc8 BuildRequires: json-c-devel >= 0.14 BuildRequires: python3-nose2 BuildRequires: python3-mypy @@ -76,7 +77,22 @@ rm -rf %{buildroot}%{_pkgdocdir}/nvme # /usr/lib/dracut/dracut.conf.d/70-nvmf-autoconnect.conf +%post +if [ $1 -eq 1 ] || [ $1 -eq 2 ]; then + if [ ! -s %{_sysconfdir}/nvme/hostnqn ]; then + echo $(nvme gen-hostnqn) > %{_sysconfdir}/nvme/hostnqn + fi + if [ ! -s %{_sysconfdir}/nvme/hostid ]; then + uuidgen > %{_sysconfdir}/nvme/hostid + fi +fi + + %changelog +* Mon Apr 04 2022 Tomas Bzatek - 2.0~rc8-1 +- Update to 2.0-rc8 +- Added scriptlet to generate /etc/nvme/hostnqn and hostid files (#2065886) + * Tue Mar 15 2022 Tomas Bzatek - 2.0~rc6-1 - Update to 2.0-rc6 diff --git a/sources b/sources index 36fb6ae..f3b3363 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (nvme-cli-2.0-rc6.tar.gz) = 00e0376f0a5b69c2a9192c8261da73492aeb6bfe19cd488382e18b50e247a4591b470349f42503bab5d4881c35a056a033213624503efa62de9f8e98dfe4b005 +SHA512 (nvme-cli-2.0-rc8.tar.gz) = ebb4dcca3c23d0f1e586a55a0ce9e0b885f96cefce64521aaeb5419ffcd67595b146496865fe09b2f69870ee7dc4583430178ac71f724278b233cc970d217163