File 0023-fabrics-support-unique-discovery-subsystem-NQN.patch of Package nvme-cli.26590

From: Hannes Reinecke <hare@suse.de>
Date: Tue, 24 May 2022 10:30:07 +0200
Subject: fabrics: support unique discovery subsystem NQN
Git-commit: 479c60cb212f5d2978075c3c3bf40c98a14c30c7
References: bsc#1199865 bsc#1192761

With TP8013 each discovery subsystem can have a unique subsystem
NQN. So a check for the subsystem NQN is not sufficient anymore
to figure out if this is a discovery subsystem, one needs to check
the 'subsystype' sysfs attribute, too.

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
 fabrics.c |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

--- a/fabrics.c
+++ b/fabrics.c
@@ -99,6 +99,7 @@ struct connect_args {
 	char *trsvcid;
 	char *host_traddr;
 	char *host_iface;
+	char *subsystype;
 	struct connect_args *next;
 	struct connect_args *tail;
 };
@@ -312,6 +313,13 @@ static bool ctrl_matches_connectargs(cha
 	addr = nvme_get_ctrl_attr(path, "address");
 	cargs.subsysnqn = nvme_get_ctrl_attr(path, "subsysnqn");
 	cargs.transport = nvme_get_ctrl_attr(path, "transport");
+	cargs.subsystype = nvme_get_ctrl_attr(path, "subsystype");
+	if (!cargs.subsystype) {
+		if (!strcmp(cargs.subsysnqn, NVME_DISC_SUBSYS_NAME))
+			cargs.subsystype = strdup("discovery");
+		else
+			cargs.subsystype = strdup("nvm");
+	}
 
 	if (!addr || !cargs.subsysnqn || !cargs.transport) {
 		fprintf(stderr, "nvme_get_ctrl_attr failed\n");
@@ -323,7 +331,7 @@ static bool ctrl_matches_connectargs(cha
 	cargs.host_traddr = parse_conn_arg(addr, ' ', conarg_host_traddr);
 	cargs.host_iface = parse_conn_arg(addr, ' ', conarg_host_iface);
 
-	if (!strcmp(cargs.subsysnqn, NVME_DISC_SUBSYS_NAME)) {
+	if (!strcmp(cargs.subsystype, "discovery")) {
 		char *kato_str = nvme_get_ctrl_attr(path, "kato"), *p;
 		unsigned int kato = 0;
 
@@ -430,6 +438,7 @@ static void free_connect_args(struct con
 	free(cargs->trsvcid);
 	free(cargs->host_traddr);
 	free(cargs->host_iface);
+	free(cargs->subsystype);
 	free(cargs);
 }
 
openSUSE Build Service is sponsored by