* Fri Sep 29 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.6-1

- Update to 2.6
This commit is contained in:
Tomas Bzatek 2023-09-29 15:49:48 +02:00
parent 75620ef422
commit 1f94235a8f
4 changed files with 9 additions and 110 deletions

1
.gitignore vendored
View File

@ -30,3 +30,4 @@
/nvme-cli-2.3.tar.gz /nvme-cli-2.3.tar.gz
/nvme-cli-2.4.tar.gz /nvme-cli-2.4.tar.gz
/nvme-cli-2.5.tar.gz /nvme-cli-2.5.tar.gz
/nvme-cli-2.6.tar.gz

View File

@ -1,103 +0,0 @@
From 7d1c18f581e489e0cedfd9991bc97a2f8239cf82 Mon Sep 17 00:00:00 2001
From: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Date: Thu, 3 Aug 2023 20:21:39 +0900
Subject: [PATCH] fabrics: Use corresponding hostid when hostnqn is generated
After the kernel commit ae8bd606e09b ("nvme-fabrics: prevent overriding
of existing host"), kernel ensures hostid and hostnqn maintain 1:1
mapping and "non 1:1 mapping will be rejected". This makes 'nvme
discover' and 'nvme connect' commands fail when they generate hostnqn,
since it does not use corresponding hostid.
To avoid the failures, prepare and use corresponding hostid to the
generated hostnqn, taking the hostid from the hostnqn string. Also add
checks for prepared hostnqn and hostid. If the hostid taken from the
generated hostnqn is different from the hostid from file, print a
warning message. Also, if the prepared hostnqn are inconsistent with the
prepared hostid, print a warning.
Link: https://lore.kernel.org/linux-nvme/l7vk7fnzltpmvkwujsbf2btrzip6wh7ug62iwa3totqcda25l6@siqx7tj6lt3l/
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Daniel Wagner <dwagner@suse.de>
---
fabrics.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 45 insertions(+), 2 deletions(-)
diff --git a/fabrics.c b/fabrics.c
index 14a91cc6b..40aef6932 100644
--- a/fabrics.c
+++ b/fabrics.c
@@ -689,6 +689,43 @@ static int nvme_read_volatile_config(nvme_root_t r)
return ret;
}
+char *nvmf_hostid_from_hostnqn(const char *hostnqn)
+{
+ const char *uuid;
+
+ if (!hostnqn)
+ return NULL;
+
+ uuid = strstr(hostnqn, "uuid:");
+ if (!uuid)
+ return NULL;
+
+ return strdup(uuid + strlen("uuid:"));
+}
+
+void nvmf_check_hostid_and_hostnqn(const char *hostid, const char *hostnqn)
+{
+ char *hostid_from_file, *hostid_from_hostnqn;
+
+ if (!hostid)
+ return;
+
+ hostid_from_file = nvmf_hostid_from_file();
+ if (hostid_from_file && strcmp(hostid_from_file, hostid)) {
+ fprintf(stderr, "warning: use generated hostid instead of hostid file\n");
+ free(hostid_from_file);
+ }
+
+ if (!hostnqn)
+ return;
+
+ hostid_from_hostnqn = nvmf_hostid_from_hostnqn(hostnqn);
+ if (hostid_from_hostnqn && strcmp(hostid_from_hostnqn, hostid)) {
+ fprintf(stderr, "warning: use hostid which does not match uuid in hostnqn\n");
+ free(hostid_from_hostnqn);
+ }
+}
+
int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
{
char *subsysnqn = NVME_DISC_SUBSYS_NAME;
@@ -765,10 +802,13 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
hostid_arg = hostid;
if (!hostnqn)
hostnqn = hnqn = nvmf_hostnqn_from_file();
- if (!hostnqn)
+ if (!hostnqn) {
hostnqn = hnqn = nvmf_hostnqn_generate();
+ hostid = hid = nvmf_hostid_from_hostnqn(hostnqn);
+ }
if (!hostid)
hostid = hid = nvmf_hostid_from_file();
+ nvmf_check_hostid_and_hostnqn(hostid, hostnqn);
h = nvme_lookup_host(r, hostnqn, hostid);
if (!h) {
ret = ENOMEM;
@@ -978,10 +1018,13 @@ int nvmf_connect(const char *desc, int argc, char **argv)
if (!hostnqn)
hostnqn = hnqn = nvmf_hostnqn_from_file();
- if (!hostnqn)
+ if (!hostnqn) {
hostnqn = hnqn = nvmf_hostnqn_generate();
+ hostid = hid = nvmf_hostid_from_hostnqn(hostnqn);
+ }
if (!hostid)
hostid = hid = nvmf_hostid_from_file();
+ nvmf_check_hostid_and_hostnqn(hostid, hostnqn);
h = nvme_lookup_host(r, hostnqn, hostid);
if (!h) {
errno = ENOMEM;

View File

@ -2,11 +2,11 @@
%{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}} %{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}}
Name: nvme-cli Name: nvme-cli
Version: 2.5 Version: 2.6
Release: 4%{?dist} Release: 1%{?dist}
Summary: NVMe management command line interface Summary: NVMe management command line interface
License: GPLv2 License: GPL-2.0-only
URL: https://github.com/linux-nvme/nvme-cli URL: https://github.com/linux-nvme/nvme-cli
Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz
@ -17,7 +17,7 @@ BuildRequires: systemd-rpm-macros
BuildRequires: zlib-devel BuildRequires: zlib-devel
BuildRequires: openssl-devel BuildRequires: openssl-devel
BuildRequires: libnvme-devel >= 1.5 BuildRequires: libnvme-devel >= 1.6
BuildRequires: json-c-devel >= 0.13 BuildRequires: json-c-devel >= 0.13
BuildRequires: asciidoc BuildRequires: asciidoc
@ -25,8 +25,6 @@ BuildRequires: xmlto
Requires: util-linux Requires: util-linux
Patch0: nvme-cli-2.6-fabrics-Use_corresponding_hostid_when_hostnqn_is_generated.patch
%description %description
nvme-cli provides NVM-Express user space tooling for Linux. nvme-cli provides NVM-Express user space tooling for Linux.
@ -78,6 +76,9 @@ rm -rf %{buildroot}%{_pkgdocdir}/nvme
%changelog %changelog
* Fri Sep 29 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.6-1
- Update to 2.6
* Thu Aug 17 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.5-4 * Thu Aug 17 2023 Tomas Bzatek <tbzatek@redhat.com> - 2.5-4
- Mark /etc/nvme/discovery.conf as (noreplace) - Mark /etc/nvme/discovery.conf as (noreplace)

View File

@ -1 +1 @@
SHA512 (nvme-cli-2.5.tar.gz) = 50c557e86e95b27a0ad57779c33bbb847e12dd45c30e792f5ce1d52dedd4bc704ac25fa0af2fdebd281c9dfe0059f7ed7c1620fccfde9323f6f9a97afdf8c3cb SHA512 (nvme-cli-2.6.tar.gz) = da4daef2d7c554455e0c195c03f92188e0e946409a3bd8a5b421d9a106746e82fb1309901d2893639b1a3447bda094c80a9f49f59bf43cf2b00402f82beea3fc