Re: [bug report] most of blktests nvme/ failed on the latest linux tree
From: Daniel Wagner <hidden>
Date: 2023-06-29 07:41:33
Also in:
linux-nvme
On Wed, Jun 28, 2023 at 08:25:24AM +0000, Shinichiro Kawasaki wrote:
quoted hunk ↗ jump to hunk
I looked in nvme-cli code. When it generates hostnqn, it does not set hostid. A quick dirty patch below for nvme-cli avoided the failures for nvme_trtype=loop condition. If this is the fix approach, the kernel commit will need corresponding change in the nvme-cli side.diff --git a/fabrics.c b/fabrics.c index ac240cad..f1981206 100644 --- a/fabrics.c +++ b/fabrics.c@@ -753,8 +753,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) { + char *uuid; hostnqn = hnqn = nvmf_hostnqn_generate(); + uuid = strstr(hostnqn, "uuid:"); + if (uuid) + hostid = hid = strdup(uuid + strlen("uuid:")); + } if (!hostid) hostid = hid = nvmf_hostid_from_file(); h = nvme_lookup_host(r, hostnqn, hostid);@@ -966,8 +971,13 @@ int nvmf_connect(const char *desc, int argc, char **argv) if (!hostnqn) hostnqn = hnqn = nvmf_hostnqn_from_file(); - if (!hostnqn) + if (!hostnqn) { + char *uuid; hostnqn = hnqn = nvmf_hostnqn_generate(); + uuid = strstr(hostnqn, "uuid:"); + if (uuid) + hostid = hid = strdup(uuid + strlen("uuid:")); + } if (!hostid) hostid = hid = nvmf_hostid_from_file(); h = nvme_lookup_host(r, hostnqn, hostid);
Looks reasonable. Though I would propably also add a warning iff nvmf_hostid_from_file() does return a not matching hostid.