From c791897dc53538650a15be57eb203358ef43c828 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Fri, 4 Mar 2022 14:37:03 +0100 Subject: [PATCH 1/5] * Fri Mar 04 2022 Tomas Bzatek - 2.0~rc5-1 - Update to 2.0-rc5 --- .gitignore | 2 ++ nvme-cli.spec | 48 ++++++++++++++++++++++++++++++------------------ sources | 2 +- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index bc5dcae..eb68f3e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ /v1.10.1.tar.gz /v1.11.tar.gz /v1.11.1.tar.gz +/nvme-cli-2.0-rc4.tar.gz +/nvme-cli-2.0-rc5.tar.gz diff --git a/nvme-cli.spec b/nvme-cli.spec index 4ba7af5..82c5510 100644 --- a/nvme-cli.spec +++ b/nvme-cli.spec @@ -1,40 +1,44 @@ -#%%global commit0 bdbb4da0979fbdc079cf98410cdb31cf799e83b3 -#%%global shortcommit0 %%(c=%%{commit0}; echo ${c:0:7}) - Name: nvme-cli -Version: 1.11.1 -Release: 5%{?dist} +Version: 2.0~rc5 +Release: 1%{?dist} Summary: NVMe management command line interface License: GPLv2+ URL: https://github.com/linux-nvme/nvme-cli -#Source0: https://github.com/linux-nvme/%%{name}/archive/%%{commit0}.tar.gz -Source0: https://github.com/linux-nvme/%{name}/archive/v%{version}.tar.gz +Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz -BuildRequires: make +BuildRequires: meson >= 0.47.0 BuildRequires: libuuid-devel -BuildRequires: gcc +BuildRequires: gcc gcc-c++ BuildRequires: systemd-devel +BuildRequires: zlib-devel +BuildRequires: openssl-devel + +BuildRequires: libnvme-devel >= 1.0~rc4 +BuildRequires: json-c-devel >= 0.14 +BuildRequires: python3-nose2 +BuildRequires: python3-mypy +BuildRequires: python3-flake8 +BuildRequires: python3-autopep8 +BuildRequires: python3-isort +BuildRequires: asciidoc +BuildRequires: xmlto + %description nvme-cli provides NVM-Express user space tooling for Linux. %prep -#%%setup -qn %%{name}-%%{commit0} -%setup -q +%autosetup -p1 -n %{name}-%{version_no_tilde} %build - -# CFLAGS on the command line breaks the build. It works okay as an -# environment variable, though. See: -# https://github.com/linux-nvme/nvme-cli/pull/480 -CFLAGS="%{optflags}" make PREFIX=/usr LDFLAGS="%{__global_ldflags}" %{?_smp_mflags} +%meson -Dudevrulesdir=%{_udevrulesdir} -Dsystemddir=%{_unitdir} -Ddocs=all -Ddocs-build=true -Dhtmldir=%{_pkgdocdir} +%meson_build %install -%make_install PREFIX=/usr UDEVDIR="%{_udevrulesdir}/.." SYSTEMDDIR="%{_unitdir}/.." -mkdir -p %{buildroot}%{_sysconfdir}/nvme +%meson_install # hostid and hostnqn are supposed to be unique per machine. We obviously # can't package them. @@ -44,10 +48,15 @@ rm -f %{buildroot}%{_sysconfdir}/nvme/hostnqn # Do not install the dracut rule yet. See rhbz 1742764 rm -f %{buildroot}/usr/lib/dracut/dracut.conf.d/70-nvmf-autoconnect.conf +# Move html docs into the right place +mv %{buildroot}%{_pkgdocdir}/nvme %{buildroot}%{_pkgdocdir}/html +rm -rf %{buildroot}%{_pkgdocdir}/nvme + %files %license LICENSE %doc README.md +%doc %{_pkgdocdir} %{_sbindir}/nvme %{_mandir}/man1/nvme*.gz %{_datadir}/bash-completion/completions/nvme @@ -65,6 +74,9 @@ rm -f %{buildroot}/usr/lib/dracut/dracut.conf.d/70-nvmf-autoconnect.conf %changelog +* Fri Mar 04 2022 Tomas Bzatek - 2.0~rc5-1 +- Update to 2.0-rc5 + * Thu Jan 20 2022 Fedora Release Engineering - 1.11.1-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild diff --git a/sources b/sources index d9f6fa3..52eeb54 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (v1.11.1.tar.gz) = 467e327f45500d80cebd6e5e55d4e6d3731a754423e71180efa9d4f5e98f0774f7a31393fefc2794250b487446005dad8e7002a27aff1f2b285983d55ec0d0b3 +SHA512 (nvme-cli-2.0-rc5.tar.gz) = 499d1476aee77195f06aaaaf9543340605212554bbe731af8f03a62a221f26857f23e10dc2ef6e2555930b5e40601f64f01da303d91ed88d200ed11f94220e44 From 5d7a9ab7393dc004b5f6adeb2f876e7944d8b106 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 15 Mar 2022 16:23:19 +0100 Subject: [PATCH 2/5] * Tue Mar 15 2022 Tomas Bzatek - 2.0~rc6-1 - Update to 2.0-rc6 --- .gitignore | 1 + connect_return_code.patch | 25 +++++++++++++++++++++++++ nvme-cli.spec | 8 +++++++- sources | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 connect_return_code.patch diff --git a/.gitignore b/.gitignore index eb68f3e..fc50d23 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ /v1.11.1.tar.gz /nvme-cli-2.0-rc4.tar.gz /nvme-cli-2.0-rc5.tar.gz +/nvme-cli-2.0-rc6.tar.gz diff --git a/connect_return_code.patch b/connect_return_code.patch new file mode 100644 index 0000000..07f1fc4 --- /dev/null +++ b/connect_return_code.patch @@ -0,0 +1,25 @@ +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.spec b/nvme-cli.spec index 82c5510..29840a3 100644 --- a/nvme-cli.spec +++ b/nvme-cli.spec @@ -1,5 +1,5 @@ Name: nvme-cli -Version: 2.0~rc5 +Version: 2.0~rc6 Release: 1%{?dist} Summary: NVMe management command line interface @@ -7,6 +7,9 @@ License: GPLv2+ 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 + BuildRequires: meson >= 0.47.0 BuildRequires: libuuid-devel BuildRequires: gcc gcc-c++ @@ -74,6 +77,9 @@ rm -rf %{buildroot}%{_pkgdocdir}/nvme %changelog +* Tue Mar 15 2022 Tomas Bzatek - 2.0~rc6-1 +- Update to 2.0-rc6 + * Fri Mar 04 2022 Tomas Bzatek - 2.0~rc5-1 - Update to 2.0-rc5 diff --git a/sources b/sources index 52eeb54..36fb6ae 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (nvme-cli-2.0-rc5.tar.gz) = 499d1476aee77195f06aaaaf9543340605212554bbe731af8f03a62a221f26857f23e10dc2ef6e2555930b5e40601f64f01da303d91ed88d200ed11f94220e44 +SHA512 (nvme-cli-2.0-rc6.tar.gz) = 00e0376f0a5b69c2a9192c8261da73492aeb6bfe19cd488382e18b50e247a4591b470349f42503bab5d4881c35a056a033213624503efa62de9f8e98dfe4b005 From cf593b1d1d56e6856b1a4b1ae9a45a4877675064 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Mon, 4 Apr 2022 17:30:20 +0200 Subject: [PATCH 3/5] * 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) --- .gitignore | 1 + connect_return_code.patch | 25 ------ ...c9_fabrics_Do_not_free_static_string.patch | 84 +++++++++++++++++ ...ect_even_when_no_hostnqn_file_exists.patch | 89 +++++++++++++++++++ nvme-cli.spec | 22 ++++- sources | 2 +- 6 files changed, 194 insertions(+), 29 deletions(-) delete mode 100644 connect_return_code.patch create mode 100644 nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch create mode 100644 nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch 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 From 08d796bb5afd60606a67bea697825a10fbb03b37 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Mon, 11 Apr 2022 14:22:07 +0200 Subject: [PATCH 4/5] * Mon Apr 11 2022 Tomas Bzatek - 2.0-1 - Update to 2.0 --- .gitignore | 1 + ...c9_fabrics_Do_not_free_static_string.patch | 84 ----------------- ...ect_even_when_no_hostnqn_file_exists.patch | 89 ------------------- nvme-cli.spec | 11 ++- sources | 2 +- 5 files changed, 7 insertions(+), 180 deletions(-) delete mode 100644 nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch delete mode 100644 nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch diff --git a/.gitignore b/.gitignore index e640b52..6d1a9b5 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ /nvme-cli-2.0-rc5.tar.gz /nvme-cli-2.0-rc6.tar.gz /nvme-cli-2.0-rc8.tar.gz +/nvme-cli-2.0.tar.gz 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 deleted file mode 100644 index 9ba6f26..0000000 --- a/nvme-cli-2.0-rc9_fabrics_Do_not_free_static_string.patch +++ /dev/null @@ -1,84 +0,0 @@ -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 deleted file mode 100644 index 5a80f40..0000000 --- a/nvme-cli-2.0-rc9_fabrics_Support_connect_even_when_no_hostnqn_file_exists.patch +++ /dev/null @@ -1,89 +0,0 @@ -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 1ff06c9..688a6d7 100644 --- a/nvme-cli.spec +++ b/nvme-cli.spec @@ -1,5 +1,5 @@ Name: nvme-cli -Version: 2.0~rc8 +Version: 2.0 Release: 1%{?dist} Summary: NVMe management command line interface @@ -7,10 +7,6 @@ License: GPLv2+ 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: 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 BuildRequires: gcc gcc-c++ @@ -18,7 +14,7 @@ BuildRequires: systemd-devel BuildRequires: zlib-devel BuildRequires: openssl-devel -BuildRequires: libnvme-devel >= 1.0~rc8 +BuildRequires: libnvme-devel >= 1.0 BuildRequires: json-c-devel >= 0.14 BuildRequires: python3-nose2 BuildRequires: python3-mypy @@ -89,6 +85,9 @@ fi %changelog +* Mon Apr 11 2022 Tomas Bzatek - 2.0-1 +- Update to 2.0 + * 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) diff --git a/sources b/sources index f3b3363..2b256e1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (nvme-cli-2.0-rc8.tar.gz) = ebb4dcca3c23d0f1e586a55a0ce9e0b885f96cefce64521aaeb5419ffcd67595b146496865fe09b2f69870ee7dc4583430178ac71f724278b233cc970d217163 +SHA512 (nvme-cli-2.0.tar.gz) = 24a00ee8e0fc963c1757797413ff5725cec18f821a714d6bbbf37906010d72934d6fdd7b466c085f13716a5279d1a7bd3254ee474e37a0ecd00a85ef23e12417 From 6b68767989bbbc679cb2f4e1d3e30b12418bba01 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Fri, 19 Aug 2022 18:02:26 +0200 Subject: [PATCH 5/5] * Fri Aug 19 2022 Tomas Bzatek - 2.0-2 - Fix bash completion (#2115983) --- nvme-cli.spec | 12 +++- ...better_fix_for_readonly_with_bash_5x.patch | 33 ++++++++++ ...on.sh_fixed_error_when_sourced_twice.patch | 25 +++++++ ...on.sh_fixed_typo_with_seagate_plugin.patch | 23 +++++++ ...declaration_and_attribute_assignment.patch | 66 +++++++++++++++++++ 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch create mode 100644 nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch create mode 100644 nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch create mode 100644 nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch diff --git a/nvme-cli.spec b/nvme-cli.spec index 688a6d7..d2516c4 100644 --- a/nvme-cli.spec +++ b/nvme-cli.spec @@ -1,6 +1,6 @@ Name: nvme-cli Version: 2.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: NVMe management command line interface License: GPLv2+ @@ -24,6 +24,13 @@ BuildRequires: python3-isort BuildRequires: asciidoc BuildRequires: xmlto +# https://bugzilla.redhat.com/show_bug.cgi?id=2115983 +# backport of bash completion fixes from git master +Patch0: nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch +Patch1: nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch +Patch2: nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch +Patch3: nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch + %description nvme-cli provides NVM-Express user space tooling for Linux. @@ -85,6 +92,9 @@ fi %changelog +* Fri Aug 19 2022 Tomas Bzatek - 2.0-2 +- Fix bash completion (#2115983) + * Mon Apr 11 2022 Tomas Bzatek - 2.0-1 - Update to 2.0 diff --git a/nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch b/nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch new file mode 100644 index 0000000..60eca5a --- /dev/null +++ b/nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch @@ -0,0 +1,33 @@ +From 86b73b3136ec96dd3eefd5a721744ed2d6d7bd41 Mon Sep 17 00:00:00 2001 +From: Evgeny Grin +Date: Fri, 17 Jun 2022 15:00:39 +0300 +Subject: [PATCH] bash-nvme-completion.sh: a better fix for "readonly" with + bash 5.x + +The error with one-line "readonly" with assignment on bash 5.x was fixed +by 25fd8c707b106ca0763402566ad657ef710bf09e. This commit restores "readonly" +functionality and adds some uniformity. +--- + completions/bash-nvme-completion.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index 00593b96a..e8177018a 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -55,6 +55,7 @@ typeset -Ar _plugin_subcmds=( + [nvidia]="id-ctrl" + [ymtc]="smart-log-add" + ) ++readonly _plugin_subcmds + + # Associative array mapping plugins to coresponding option completions + typeset -Ar _plugin_funcs=( +@@ -75,6 +76,7 @@ typeset -Ar _plugin_funcs=( + [nvidia]="plugin_nvidia_opts" + [ymtc]="plugin_ymtc_opts" + ) ++readonly _plugin_funcs + + # Top level commands + _cmds="list list-subsys id-ctrl id-ns \ diff --git a/nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch new file mode 100644 index 0000000..e513247 --- /dev/null +++ b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch @@ -0,0 +1,25 @@ +From eac9f9b70081ff2df2e2ea11efb8fc6ec3754f64 Mon Sep 17 00:00:00 2001 +From: Evgeny Grin +Date: Fri, 17 Jun 2022 15:00:39 +0300 +Subject: [PATCH] bash-nvme-completion.sh: fixed error when sourced twice + +One-line "readonly" with assignment produce error if completion file +is sourced for the second time (/etc/profile reload, su etc.) +--- + completions/bash-nvme-completion.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index e5d9ff190..7b8a2121d 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -5,7 +5,8 @@ + # Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015 + + # Constant to indicate command has no options +-readonly NO_OPTS="" ++NO_OPTS="" ++readonly NO_OPTS + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile diff --git a/nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch new file mode 100644 index 0000000..84bcd87 --- /dev/null +++ b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch @@ -0,0 +1,23 @@ +From 4284d4cc299e8604f898856bdd38fc4979e56586 Mon Sep 17 00:00:00 2001 +From: Evgeny Grin +Date: Fri, 17 Jun 2022 15:08:02 +0300 +Subject: [PATCH] bash-nvme-completion.sh: fixed typo with seagate plugin + +Obvious typo resulted in broken completion for seagete plugin +--- + completions/bash-nvme-completion.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index 7b8a2121d..00593b96a 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -940,7 +940,7 @@ plugin_micron_opts () { + return 0 + } + +-lugin_seagate_opts () { ++plugin_seagate_opts () { + local opts="" + local compargs="" + diff --git a/nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch b/nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch new file mode 100644 index 0000000..12268f9 --- /dev/null +++ b/nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch @@ -0,0 +1,66 @@ +From 25fd8c707b106ca0763402566ad657ef710bf09e Mon Sep 17 00:00:00 2001 +From: Brad Mouring +Date: Mon, 2 May 2022 22:38:24 -0500 +Subject: [PATCH] completions: Collapse declaration and attribute assignment + +Previously, the associative arrays for the vendor/subcommands and +vendor/functions listings were split into a declaration of type +(using "typeset") and attribute definition (using "readonly"). On +bash 5.1.16 (at least), this lead to the following error (reported +after enabling -xv to expand and print shell inputs) + + ... + + . /usr/share/bash-completion/completions/nvme + # bash tab completion for the nvme command line utility + # (unfortunately, bash won't let me add descriptions to cmds) + # Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015 + + # Constant to indicate command has no options + readonly NO_OPTS="" + ++ readonly NO_OPTS= + ++ NO_OPTS= + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile + typeset -A _plugin_subcmds + ++ typeset -A _plugin_subcmds + readonly _plugin_subcmds=( + [intel]="id-ctrl internal-log lat-stats \ + ... + ++ _plugin_subcmds=(['intel']='id-ctrl internal-log lat-stats... + bash: 'intel': syntax error: operand expected (error token is "'intel'") + ... + +Using the available flags for "typeset" to declare the variables as +readonly arrays resolved the issue (and allows for bash completion +to work as-expected) + +Signed-off-by: Brad Mouring +--- + completions/bash-nvme-completion.sh | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index 5e0eb23bb..51931bc19 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -7,8 +7,7 @@ readonly NO_OPTS="" + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile +-typeset -A _plugin_subcmds +-readonly _plugin_subcmds=( ++typeset -Ar _plugin_subcmds=( + [intel]="id-ctrl internal-log lat-stats \ + set-bucket-thresholds lat-stats-tracking \ + market-name smart-log-add temp-stats" +@@ -55,8 +54,7 @@ readonly _plugin_subcmds=( + ) + + # Associative array mapping plugins to coresponding option completions +-typeset -A _plugin_funcs +-readonly _plugin_funcs=( ++typeset -Ar _plugin_funcs=( + [intel]="plugin_intel_opts" + [amzn]="plugin_amzn_opts" + [memblaze]="plugin_memblaze_opts"