diff --git a/.gitignore b/.gitignore index 6e18342..6afb700 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/v1.16.tar.gz +SOURCES/nvme-cli-2.0.tar.gz diff --git a/.nvme-cli.metadata b/.nvme-cli.metadata index 29733c4..3a55172 100644 --- a/.nvme-cli.metadata +++ b/.nvme-cli.metadata @@ -1 +1 @@ -2706485a7adb8134943102ff3f1a087e003f2b1f SOURCES/v1.16.tar.gz +ba824c8c79b2f5bbe77f3940481981ef02fa9787 SOURCES/nvme-cli-2.0.tar.gz diff --git a/SOURCES/0001-fabrics-fix-nvme-connect-segfault-if-transport-type-.patch b/SOURCES/0001-fabrics-fix-nvme-connect-segfault-if-transport-type-.patch deleted file mode 100644 index 75942fa..0000000 --- a/SOURCES/0001-fabrics-fix-nvme-connect-segfault-if-transport-type-.patch +++ /dev/null @@ -1,32 +0,0 @@ -From f74ac1b841b0aae73969debaed0444f0ecb03dba Mon Sep 17 00:00:00 2001 -From: Martin George -Date: Mon, 15 Nov 2021 16:00:47 +0530 -Subject: [PATCH 1/3] fabrics: fix 'nvme connect' segfault if transport type is - omitted - -Check if the transport type is available before dereferencing -it in discovery_trsvcid(). - -Fixes: 362c90f ("fabrics: add default port number for NVMe/TCP I/O -controllers") -Signed-off-by: Martin George ---- - fabrics.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/fabrics.c b/fabrics.c -index d691191..adca89b 100644 ---- a/fabrics.c -+++ b/fabrics.c -@@ -1070,6 +1070,8 @@ static void set_discovery_kato(struct fabrics_config *cfg) - - static void discovery_trsvcid(struct fabrics_config *fabrics_cfg, bool discover) - { -+ if (!fabrics_cfg->transport) -+ return; - if (!strcmp(fabrics_cfg->transport, "tcp")) { - if (discover) { - /* Default port for NVMe/TCP discovery controllers */ --- -2.27.0 - diff --git a/SOURCES/0001-nvme-Return-status-error-code-for-effects-log-comman.patch b/SOURCES/0001-nvme-Return-status-error-code-for-effects-log-comman.patch new file mode 100644 index 0000000..16b565c --- /dev/null +++ b/SOURCES/0001-nvme-Return-status-error-code-for-effects-log-comman.patch @@ -0,0 +1,102 @@ +From 43c1ac652b74182e483f2e8033a5f5fe417fb429 Mon Sep 17 00:00:00 2001 +From: Daniel Wagner +Date: Mon, 11 Jul 2022 13:39:39 +0200 +Subject: [PATCH] nvme: Return status/error code for effects-log command + +collect_effects_log eats up the return code from +nvme_get_log_cmd_effects. Forward it to the shell.. + +Fixes: 155fbebfe7b7 ("Update effects-log to handle multiple command sets") + +Signed-off-by: Daniel Wagner +--- + nvme.c | 44 ++++++++++++++++++++++++-------------------- + 1 file changed, 24 insertions(+), 20 deletions(-) + +diff --git a/nvme.c b/nvme.c +index a2a9996a..6df08d7e 100644 +--- a/nvme.c ++++ b/nvme.c +@@ -587,18 +587,22 @@ ret: + return err; + } + +-void collect_effects_log(int fd, enum nvme_csi csi, struct list_head *list, int flags) ++static int collect_effects_log(int fd, enum nvme_csi csi, ++ struct list_head *list, int flags) + { ++ nvme_effects_log_node_t *node; + int err; +- nvme_effects_log_node_t *node = malloc(sizeof(nvme_effects_log_node_t)); ++ ++ node = malloc(sizeof(nvme_effects_log_node_t)); + if (!node) +- return; ++ return -ENOMEM; ++ + node->csi = csi; + + err = nvme_get_log_cmd_effects(fd, csi, &node->effects); + if (!err) { + list_add(list, &node->node); +- return; ++ return err; + } + else if (err > 0) + nvme_show_status(err); +@@ -606,6 +610,7 @@ void collect_effects_log(int fd, enum nvme_csi csi, struct list_head *list, int + fprintf(stderr, "effects log page: %s\n", nvme_strerror(errno)); + + free(node); ++ return err; + } + + static int get_effects_log(int argc, char **argv, struct command *cmd, struct plugin *plugin) +@@ -676,29 +681,28 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl + nvme_command_set_supported = NVME_CAP_CSS(cap) & NVME_CAP_CSS_NVM; + other_command_sets_supported = NVME_CAP_CSS(cap) & NVME_CAP_CSS_CSI; + ++ if (nvme_command_set_supported) ++ err = collect_effects_log(fd, NVME_CSI_NVM, ++ &log_pages, flags); + +- if (nvme_command_set_supported) { +- collect_effects_log(fd, NVME_CSI_NVM, &log_pages, flags); +- } +- +- if (other_command_sets_supported) { +- collect_effects_log(fd, NVME_CSI_ZNS, &log_pages, flags); +- } +- +- nvme_print_effects_log_pages(&log_pages, flags); ++ if (!err && other_command_sets_supported) ++ err = collect_effects_log(fd, NVME_CSI_ZNS, ++ &log_pages, flags); + +- } +- else { +- collect_effects_log(fd, cfg.csi, &log_pages, flags); +- nvme_print_effects_log_pages(&log_pages, flags); ++ } else { ++ err = collect_effects_log(fd, cfg.csi, &log_pages, flags); + } + ++ if (!err) ++ nvme_print_effects_log_pages(&log_pages, flags); ++ else if (err > 0) ++ nvme_show_status(err); ++ else ++ perror("effects log page"); + + close_fd: +- while ((node = list_pop(&log_pages, nvme_effects_log_node_t, node))) { ++ while ((node = list_pop(&log_pages, nvme_effects_log_node_t, node))) + free(node); +- } +- + close(fd); + ret: + return err; +-- +2.31.1 + diff --git a/SOURCES/0002-fabrics-fix-a-buffer-overrun.patch b/SOURCES/0002-fabrics-fix-a-buffer-overrun.patch deleted file mode 100644 index 880fc2f..0000000 --- a/SOURCES/0002-fabrics-fix-a-buffer-overrun.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ff8f9b6f59b574fda24a071fb0af4381c0cc6d9f Mon Sep 17 00:00:00 2001 -From: Maurizio Lombardi -Date: Thu, 9 Dec 2021 12:21:51 +0100 -Subject: [PATCH 2/3] fabrics: fix a buffer overrun - -the uuid buffer size must be at least 37 bytes to avoid -corrupting the memory - -Signed-off-by: Maurizio Lombardi ---- - fabrics.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/fabrics.c b/fabrics.c -index adca89b..0766729 100644 ---- a/fabrics.c -+++ b/fabrics.c -@@ -883,7 +883,7 @@ static char *hostnqn_generate_systemd(void) - - static char *hostnqn_read_dmi(void) - { -- char uuid[16]; -+ char uuid[37]; - char *ret = NULL; - - if (uuid_from_dmi(uuid) < 0) --- -2.27.0 - diff --git a/SOURCES/0003-bash-Fix-nvme-completion.patch b/SOURCES/0003-bash-Fix-nvme-completion.patch deleted file mode 100644 index f08d2ff..0000000 --- a/SOURCES/0003-bash-Fix-nvme-completion.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 821935cccfcad6b18da78d42f9ddf49f4cbe0b8e Mon Sep 17 00:00:00 2001 -From: Daniel Wagner -Date: Thu, 9 Dec 2021 15:40:26 +0100 -Subject: [PATCH 3/3] bash: Fix nvme completion - -Signed-off-by: Daniel Wagner ---- - completions/bash-nvme-completion.sh | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh -index 41938d7..902da01 100644 ---- a/completions/bash-nvme-completion.sh -+++ b/completions/bash-nvme-completion.sh -@@ -101,8 +101,7 @@ _cmds="list list-subsys id-ctrl id-ns \ - connect disconnect disconnect-all gen-hostnqn \ - show-hostnqn dir-receive dir-send virt-mgmt \ - rpmb boot-part-log fid-support-effects-log \ -- supported-log-pages lockdown" -- supported-log-pages list-endgrp" -+ supported-log-pages lockdown list-endgrp" - - # Add plugins: - for plugin in "${!_plugin_subcmds[@]}"; do -@@ -1368,7 +1367,7 @@ plugin_ymtc_opts () { - opts+=" --namespace-id= -n --raw-binary -b" - ;; - "help") -- opts+=NO_OPTS -+ opts+=$NO_OPTS - ;; - esac - --- -2.27.0 - diff --git a/SOURCES/0004-nvme-do-not-leak-an-open-file-handle.patch b/SOURCES/0004-nvme-do-not-leak-an-open-file-handle.patch deleted file mode 100644 index 38bd5e7..0000000 --- a/SOURCES/0004-nvme-do-not-leak-an-open-file-handle.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 45223fd3c5a13da9209c4f44d7593cb42cab94fb Mon Sep 17 00:00:00 2001 -From: Maurizio Lombardi -Date: Tue, 14 Dec 2021 10:09:42 +0100 -Subject: [PATCH 1/4] nvme: do not leak an open file handle - -We performed a "sec_fd=open(cfg.file)" earlier, so we should not -overwrite the handle. - -Signed-off-by: Maurizio Lombardi ---- - nvme.c | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - -diff --git a/nvme.c b/nvme.c -index 862f9b6..5beeac7 100644 ---- a/nvme.c -+++ b/nvme.c -@@ -4379,17 +4379,10 @@ static int sec_send(int argc, char **argv, struct command *cmd, struct plugin *p - fprintf(stderr, "WARNING: --tl not dword aligned; unaligned bytes may be truncated\n"); - - if (strlen(cfg.file) == 0) { -+ close(sec_fd); - sec_fd = STDIN_FILENO; - sec_size = cfg.tl; - } else { -- sec_fd = open(cfg.file, O_RDONLY); -- if (sec_fd < 0) { -- fprintf(stderr, "Failed to open %s: %s\n", -- cfg.file, strerror(errno)); -- err = -EINVAL; -- goto close_fd; -- } -- - err = fstat(sec_fd, &sb); - if (err < 0) { - perror("fstat"); --- -2.27.0 - diff --git a/SOURCES/0005-nvme-topology-fix-memory-leaks-in-nvme_logical_block.patch b/SOURCES/0005-nvme-topology-fix-memory-leaks-in-nvme_logical_block.patch deleted file mode 100644 index f7adc91..0000000 --- a/SOURCES/0005-nvme-topology-fix-memory-leaks-in-nvme_logical_block.patch +++ /dev/null @@ -1,35 +0,0 @@ -From b580886dbc322b2a71d6c0c1b71f9fca7b750b02 Mon Sep 17 00:00:00 2001 -From: Maurizio Lombardi -Date: Tue, 14 Dec 2021 09:58:09 +0100 -Subject: [PATCH 2/4] nvme-topology: fix memory leaks in - nvme_logical_block_size_from_ns_char() - -Free the allocated strings before returning from the function - -Signed-off-by: Maurizio Lombardi ---- - nvme-topology.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/nvme-topology.c b/nvme-topology.c -index 0a22f6b..6be2b09 100644 ---- a/nvme-topology.c -+++ b/nvme-topology.c -@@ -686,10 +686,13 @@ int nvme_logical_block_size_from_ns_char(const char *dev) - return -EINVAL; - - s = nvme_get_ctrl_attr(path, "logical_block_size"); -+ free(path); - if (!s) - return -EINVAL; - -- return atoi(s); -+ ret = atoi(s); -+ free(s); -+ return ret; - } - - void *mmap_registers(const char *dev) --- -2.27.0 - diff --git a/SOURCES/0006-nvme-cli-nvmf-connect-.service-Remove-matching-from-.patch b/SOURCES/0006-nvme-cli-nvmf-connect-.service-Remove-matching-from-.patch deleted file mode 100644 index f8ae46d..0000000 --- a/SOURCES/0006-nvme-cli-nvmf-connect-.service-Remove-matching-from-.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 58c23ceb12d16756b2222a55d1d9dc5f34bb4fa4 Mon Sep 17 00:00:00 2001 -From: James Smart -Date: Fri, 17 Dec 2021 11:32:32 -0800 -Subject: [PATCH 3/4] nvme-cli: nvmf-connect@.service: Remove matching from - default syntax - -commit 53aab69a0add added the "--matching" argument to the systemd -connect script that issues connect-all to a discovery controller. When -this argument is used, only discovery log entries whose target port -traddr's match the traddr of the discovery controller will be connected -to. This eliminates the ability to do referrals by the discovery -controller. - -Revert the commit so that the "--matching" argument is not default -behavior. - -Signed-off-by: James Smart -CC: Martin Wilck -Signed-off-by: Daniel Wagner -Link: https://lore.kernel.org/r/20211217193232.29034-1-jsmart2021@gmail.com ---- - nvmf-autoconnect/systemd/nvmf-connect@.service | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/nvmf-autoconnect/systemd/nvmf-connect@.service b/nvmf-autoconnect/systemd/nvmf-connect@.service -index 5fbf081..c60f146 100644 ---- a/nvmf-autoconnect/systemd/nvmf-connect@.service -+++ b/nvmf-autoconnect/systemd/nvmf-connect@.service -@@ -11,4 +11,4 @@ Requires=nvmf-connect.target - [Service] - Type=simple - Environment="CONNECT_ARGS=%i" --ExecStart=/bin/sh -c "nvme connect-all --matching --quiet `/bin/echo -e '${CONNECT_ARGS}'`" -+ExecStart=/bin/sh -c "nvme connect-all --quiet `/bin/echo -e '${CONNECT_ARGS}'`" --- -2.27.0 - diff --git a/SOURCES/0007-nvme-cli-Make-connect-all-matching-be-case-insensiti.patch b/SOURCES/0007-nvme-cli-Make-connect-all-matching-be-case-insensiti.patch deleted file mode 100644 index 43dac6d..0000000 --- a/SOURCES/0007-nvme-cli-Make-connect-all-matching-be-case-insensiti.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 1264c6323937c4a0342174fdd9be5a66ab1eaf24 Mon Sep 17 00:00:00 2001 -From: James Smart -Date: Fri, 17 Dec 2021 14:20:22 -0800 -Subject: [PATCH 4/4] nvme-cli: Make connect-all matching be case insensitive - -The comparison routine that checks discovery controller traddr with a -discovery log traddr uses a simple strncmp. For FC, which kicks off -connect-all requests vay systemd, the nvme-fc transport will build -traddr strings with lower case hexadecimal. Some FC discovery -controllers return traddr strings with upper case hexadecimal. There -was is no rqmt in the NVME-FC spec that it be upper or lower case. -Given the case difference, the connect-all fails the match logic and -doesn't connect to storage. - -Revise the traddr comparison routine to duplicate the strings and -convert them to lower case for comparison. - -Signed-off-by: James Smart -Signed-off-by: Daniel Wagner -Link: https://lore.kernel.org/r/20211217222022.30516-1-jsmart2021@gmail.com ---- - fabrics.c | 26 +++++++++++++++++++++++++- - 1 file changed, 25 insertions(+), 1 deletion(-) - -diff --git a/fabrics.c b/fabrics.c -index 0766729..a1e2593 100644 ---- a/fabrics.c -+++ b/fabrics.c -@@ -34,6 +34,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -681,6 +682,12 @@ static int space_strip_len(int max, const char *str) - return i + 1; - } - -+static void strtolower(char *str) -+{ -+ for ( ; *str; str++) -+ *str = tolower(*str); -+} -+ - static void print_discovery_log(struct nvmf_disc_rsp_page_hdr *log, int numrec, - int instance) - { -@@ -1385,7 +1392,9 @@ static bool cargs_match_found(struct nvmf_disc_rsp_page_entry *entry) - - static bool should_connect(struct nvmf_disc_rsp_page_entry *entry) - { -+ char *dctrl_traddr, *log_traddr; - int len; -+ bool connect = true; - - if (cargs_match_found(entry)) - return false; -@@ -1398,7 +1407,22 @@ static bool should_connect(struct nvmf_disc_rsp_page_entry *entry) - return true; - - len = space_strip_len(NVMF_TRADDR_SIZE, entry->traddr); -- return !strncmp(fabrics_cfg.traddr, entry->traddr, len); -+ -+ dctrl_traddr = strdup(fabrics_cfg.traddr); -+ log_traddr = strndup(entry->traddr, len); -+ if (!dctrl_traddr || !log_traddr) -+ goto free_exit; -+ -+ strtolower(dctrl_traddr); -+ strtolower(log_traddr); -+ -+ connect = (strlen(dctrl_traddr) == len) && -+ !strcmp(dctrl_traddr, log_traddr); -+ -+free_exit: -+ free(log_traddr); -+ free(dctrl_traddr); -+ return connect; - } - - static int connect_ctrls(struct nvmf_disc_rsp_page_hdr *log, int numrec) --- -2.27.0 - diff --git a/SOURCES/nvme-cli-makefile-dont-install-host-params-patch b/SOURCES/nvme-cli-makefile-dont-install-host-params-patch deleted file mode 100644 index b86149e..0000000 --- a/SOURCES/nvme-cli-makefile-dont-install-host-params-patch +++ /dev/null @@ -1,13 +0,0 @@ ---- nvme-cli-1.9/Makefile.orig 2020-05-27 14:04:56.259961135 -0400 -+++ nvme-cli-1.9/Makefile 2020-05-27 14:05:22.796185371 -0400 -@@ -125,8 +125,8 @@ - $(INSTALL) -m 644 -T ./etc/discovery.conf.in $(DESTDIR)$(SYSCONFDIR)/nvme/discovery.conf; \ - fi - --install-spec: install-bin install-man install-bash-completion install-zsh-completion install-etc install-systemd install-udev install-dracut --install: install-spec install-hostparams -+install-spec: install-bin install-man install-bash-completion install-zsh-completion install-systemd install-udev install-dracut -+install: install-spec - - nvme.spec: nvme.spec.in NVME-VERSION-FILE - sed -e 's/@@VERSION@@/$(NVME_VERSION)/g' < $< > $@+ diff --git a/SPECS/nvme-cli.spec b/SPECS/nvme-cli.spec index 8a46273..cf073d2 100644 --- a/SPECS/nvme-cli.spec +++ b/SPECS/nvme-cli.spec @@ -2,26 +2,27 @@ #%%global shortcommit0 %%(c=%%{commit0}; echo ${c:0:7}) Name: nvme-cli -Version: 1.16 +Version: 2.0 Release: 3%{?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/v%{version}.tar.gz +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -Patch0: nvme-cli-makefile-dont-install-host-params-patch -Patch1: 0001-fabrics-fix-nvme-connect-segfault-if-transport-type-.patch -Patch2: 0002-fabrics-fix-a-buffer-overrun.patch -Patch3: 0003-bash-Fix-nvme-completion.patch -Patch4: 0004-nvme-do-not-leak-an-open-file-handle.patch -Patch5: 0005-nvme-topology-fix-memory-leaks-in-nvme_logical_block.patch -Patch6: 0006-nvme-cli-nvmf-connect-.service-Remove-matching-from-.patch -Patch7: 0007-nvme-cli-Make-connect-all-matching-be-case-insensiti.patch +#Patch0: nvme-cli-makefile-dont-install-host-params-patch +Patch0: 0001-nvme-Return-status-error-code-for-effects-log-comman.patch +BuildRequires: meson >= 0.47.0 +BuildRequires: gcc gcc-c++ BuildRequires: libuuid-devel -BuildRequires: gcc BuildRequires: systemd-devel +BuildRequires: zlib-devel +BuildRequires: libnvme-devel >= 1.0 +BuildRequires: json-c-devel >= 0.14 +BuildRequires: asciidoc +BuildRequires: xmlto + Requires: util-linux %description @@ -30,27 +31,16 @@ nvme-cli provides NVM-Express user space tooling for Linux. %prep #%%setup -qn %%{name}-%%{commit0} %setup -q + %patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 %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. @@ -60,15 +50,20 @@ mkdir -p %{buildroot}%{_sysconfdir}/nvme # 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 %{_datadir}/zsh/site-functions/_nvme %dir %{_sysconfdir}/nvme +%{_sysconfdir}/nvme/discovery.conf %{_unitdir}/nvmefc-boot-connections.service %{_unitdir}/nvmf-autoconnect.service %{_unitdir}/nvmf-connect.target @@ -95,6 +90,15 @@ if [ $1 -eq 1 ] || [ $1 -eq 2 ]; then fi %changelog +* Fri Jul 15 2022 Maurizio Lombardi - 2.0-3 +- Fix BZ2105742 + +* Thu Jun 16 2022 Maurizio Lombardi - 2.0-2 +- Fix the gating tests + +* Wed Apr 27 2022 Maurizio Lombardi - 2.0-1 +- Upgrade to version 2.0 + * Mon Feb 07 2022 Maurizio Lombardi - 1.16-3 - Add a few bugfixes