char *hostnqn, *hostid;
hostnqn = nvmf_hostnqn_from_file();
+ if (!hostnqn)
+ hostnqn = nvmf_hostnqn_generate();
hostid = nvmf_hostid_from_file();
h = nvme_lookup_host(r, hostnqn, hostid);
default_host = h;
free(hostnqn);
- free(hostid);
+ if (hostid)
+ free(hostid);
return h;
}
{
struct nvme_host *h;
+ if (!hostnqn)
+ return NULL;
nvme_for_each_host(r, h) {
if (strcmp(h->hostnqn, hostnqn))
continue;
/* Parse 'address' string into components */
addr = nvme_get_attr(path, "address");
address = strdup(addr);
- a = strtok_r(addr, ",", &e);
- while (a && strlen(a)) {
- if (!strncmp(a, "traddr=", 7))
- traddr = a + 7;
- else if (!strncmp(a, "trsvcid=", 8))
- trsvcid = a + 8;
- else if (!strncmp(a, "host_traddr=", 12))
- host_traddr = a + 12;
- else if (!strncmp(a, "host_iface=", 11))
- host_iface = a + 12;
- a = strtok_r(NULL, ",", &e);
+ if (!strcmp(transport, "pcie")) {
+ /* The 'address' string is the transport address */
+ traddr = address;
+ } else {
+ a = strtok_r(addr, ",", &e);
+ while (a && strlen(a)) {
+ if (!strncmp(a, "traddr=", 7))
+ traddr = a + 7;
+ else if (!strncmp(a, "trsvcid=", 8))
+ trsvcid = a + 8;
+ else if (!strncmp(a, "host_traddr=", 12))
+ host_traddr = a + 12;
+ else if (!strncmp(a, "host_iface=", 11))
+ host_iface = a + 12;
+ a = strtok_r(NULL, ",", &e);
+ }
}
-
c = nvme_lookup_ctrl(s, transport, traddr,
host_traddr, host_iface, trsvcid);
free(addr);
}
hostnqn = nvme_get_attr(path, "hostnqn");
- if (!hostnqn) {
- free(path);
- errno = ENODEV;
- return NULL;
- }
hostid = nvme_get_attr(path, "hostid");
h = nvme_lookup_host(r, hostnqn, hostid);
- free(hostnqn);
+ if (hostnqn)
+ free(hostnqn);
if (hostid)
free(hostid);
if (!h) {
fd = open(path, O_WRONLY);
if (fd < 0) {
- nvme_msg(LOG_ERR, "Failed to open %s: %s\n", path,
+ nvme_msg(LOG_DEBUG, "Failed to open %s: %s\n", path,
strerror(errno));
return -1;
}
fd = open(path, O_RDONLY);
if (fd < 0) {
- nvme_msg(LOG_ERR, "Failed to open %s: %s\n", path,
+ nvme_msg(LOG_DEBUG, "Failed to open %s: %s\n", path,
strerror(errno));
return NULL;
}
ret = read(fd, value, sizeof(value) - 1);
- if (ret < 0) {
- close(fd);
+ close(fd);
+ if (ret < 0 || !strlen(value)) {
return NULL;
}
while (strlen(value) > 0 && value[strlen(value) - 1] == ' ')
value[strlen(value) - 1] = '\0';
- close(fd);
- return strdup(value);
+ return strlen(value) ? strdup(value) : NULL;
}
char *nvme_get_attr(const char *dir, const char *attr)