Skip to content

Commit

Permalink
Merge pull request #1346 from igaw/update-logging
Browse files Browse the repository at this point in the history
nvme: Adapt to logging changes in libnvme
  • Loading branch information
igaw authored Feb 1, 2022
2 parents 0f87fa5 + 4057104 commit e290046
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 92 deletions.
131 changes: 57 additions & 74 deletions fabrics.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,9 @@ static int __discover(nvme_ctrl_t c, const struct nvme_fabrics_config *defcfg,
return 0;
}

static int discover_from_conf_file(nvme_host_t h, const char *desc,
bool connect, const struct nvme_fabrics_config *defcfg)
static int discover_from_conf_file(nvme_root_t r, nvme_host_t h,
const char *desc, bool connect,
const struct nvme_fabrics_config *defcfg)
{
char *transport = NULL, *traddr = NULL, *trsvcid = NULL;
char *hostnqn = NULL, *hostid = NULL, *hostkey = NULL, *ctrlkey = NULL;
Expand Down Expand Up @@ -388,7 +389,7 @@ static int discover_from_conf_file(nvme_host_t h, const char *desc,
if (!transport && !traddr)
goto next;

c = nvme_create_ctrl(subsysnqn, transport, traddr,
c = nvme_create_ctrl(r, subsysnqn, transport, traddr,
cfg.host_traddr, cfg.host_iface, trsvcid);
if (!c)
goto next;
Expand Down Expand Up @@ -451,27 +452,22 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
if (ret < 0)
return ret;

switch (verbose) {
case 0:
nvme_log_level = LOG_WARNING;
break;
case 1:
nvme_log_level = LOG_NOTICE;
break;
case 2:
nvme_log_level = LOG_INFO;
break;
default:
nvme_log_level = LOG_DEBUG;
break;
}
if (quiet)
nvme_log_level = LOG_ERR;

if (!strcmp(config_file, "none"))
config_file = NULL;

r = nvme_scan(config_file);
r = nvme_create_root(stderr, map_log_level(verbose, quiet));
if (!r) {
fprintf(stderr, "Failed to create topology root: %s\n",
nvme_strerror(errno));
return -errno;
}
ret = nvme_scan_topology(r, NULL);
if (ret < 0) {
fprintf(stderr, "Failed to scan topoplogy: %s\n",
nvme_strerror(errno));
return ret;
}

if (persistent && !cfg.keep_alive_tmo)
cfg.keep_alive_tmo = 30;
if (!hostnqn)
Expand All @@ -493,7 +489,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
nvme_host_set_dhchap_key(h, hostkey);

if (!device && !transport && !traddr) {
ret = discover_from_conf_file(h, desc, connect, &cfg);
ret = discover_from_conf_file(r, h, desc, connect, &cfg);
goto out_free;
}

Expand Down Expand Up @@ -539,7 +535,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect)
}
if (!c) {
/* No device or non-matching device, create a new controller */
c = nvme_create_ctrl(subsysnqn, transport, traddr,
c = nvme_create_ctrl(r, subsysnqn, transport, traddr,
cfg.host_traddr, cfg.host_iface, trsvcid);
if (!c) {
ret = errno;
Expand Down Expand Up @@ -616,21 +612,6 @@ int nvmf_connect(const char *desc, int argc, char **argv)
else
return EINVAL;

switch (verbose) {
case 0:
nvme_log_level = LOG_WARNING;
break;
case 1:
nvme_log_level = LOG_NOTICE;
break;
case 2:
nvme_log_level = LOG_INFO;
break;
default:
nvme_log_level = LOG_DEBUG;
break;
}

if (!subsysnqn) {
fprintf(stderr,
"required argument [--nqn | -n] not specified\n");
Expand All @@ -655,7 +636,20 @@ int nvmf_connect(const char *desc, int argc, char **argv)
if (!strcmp(config_file, "none"))
config_file = NULL;

r = nvme_scan(config_file);
r = nvme_create_root(stderr, map_log_level(verbose, quiet));
if (!r) {
fprintf(stderr, "Failed to create topology root: %s\n",
nvme_strerror(errno));
return -errno;
}
ret = nvme_scan_topology(r, NULL);
if (ret < 0) {
fprintf(stderr, "Failed to scan topoplogy: %s\n",
nvme_strerror(errno));
return ret;
}
nvme_read_config(r, config_file);

if (!hostnqn)
hostnqn = hnqn = nvmf_hostnqn_from_file();
if (!hostid)
Expand All @@ -667,7 +661,7 @@ int nvmf_connect(const char *desc, int argc, char **argv)
}
if (hostkey)
nvme_host_set_dhchap_key(h, hostkey);
c = nvme_create_ctrl(subsysnqn, transport, traddr,
c = nvme_create_ctrl(r, subsysnqn, transport, traddr,
cfg.host_traddr, cfg.host_iface, trsvcid);
if (!c) {
errno = ENOMEM;
Expand Down Expand Up @@ -728,27 +722,25 @@ int nvmf_disconnect(const char *desc, int argc, char **argv)
if (ret)
return ret;

switch (cfg.verbose) {
case 0:
nvme_log_level = LOG_WARNING;
break;
case 1:
nvme_log_level = LOG_NOTICE;
break;
case 2:
nvme_log_level = LOG_INFO;
break;
default:
nvme_log_level = LOG_DEBUG;
break;
}

if (!cfg.nqn && !cfg.device) {
fprintf(stderr,
"Neither device name [--device | -d] nor NQN [--nqn | -n] provided\n");
return EINVAL;
}
r = nvme_scan(NULL);

r = nvme_create_root(stderr, map_log_level(cfg.verbose, false));
if (!r) {
fprintf(stderr, "Failed to create topology root: %s\n",
nvme_strerror(errno));
return -errno;
}
ret = nvme_scan_topology(r, NULL);
if (ret < 0) {
fprintf(stderr, "Failed to scan topoplogy: %s\n",
nvme_strerror(errno));
return ret;
}

if (cfg.nqn) {
int i = 0;
char *n = cfg.nqn;
Expand Down Expand Up @@ -824,26 +816,17 @@ int nvmf_disconnect_all(const char *desc, int argc, char **argv)
if (ret)
return ret;

switch (cfg.verbose) {
case 0:
nvme_log_level = LOG_WARNING;
break;
case 1:
nvme_log_level = LOG_NOTICE;
break;
case 2:
nvme_log_level = LOG_INFO;
break;
default:
nvme_log_level = LOG_DEBUG;
break;
}

r = nvme_scan(NULL);
r = nvme_create_root(stderr, map_log_level(cfg.verbose, false));
if (!r) {
fprintf(stderr, "Failed to scan nvme subsystem: %s\n",
fprintf(stderr, "Failed to create topology root: %s\n",
nvme_strerror(errno));
return -errno;
}
ret = nvme_scan_topology(r, NULL);
if (ret < 0) {
fprintf(stderr, "Failed to scan topoplogy: %s\n",
nvme_strerror(errno));
return errno;
return ret;
}

nvme_for_each_host(r, h) {
Expand Down
76 changes: 59 additions & 17 deletions nvme.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,30 @@ const char *nvme_strerror(int errnum)
return strerror(errnum);
}

int map_log_level(int verbose, bool quiet)
{
int log_level;

switch (verbose) {
case 0:
log_level = LOG_WARNING;
break;
case 1:
log_level = LOG_NOTICE;
break;
case 2:
log_level = LOG_INFO;
break;
default:
log_level = LOG_DEBUG;
break;
}
if (quiet)
log_level = LOG_ERR;

return log_level;
}

static ssize_t getrandom_bytes(void *buf, size_t buflen)
{
#if HAVE_SYS_RANDOM
Expand Down Expand Up @@ -2338,6 +2362,7 @@ static int list_subsys(int argc, char **argv, struct command *cmd,
enum nvme_print_flags flags;
const char *desc = "Retrieve information for subsystems";
const char *verbose = "Increase output verbosity";
nvme_scan_filter_t filter = NULL;
int err;

struct config {
Expand Down Expand Up @@ -2374,21 +2399,31 @@ static int list_subsys(int argc, char **argv, struct command *cmd,
if (cfg.verbose)
flags |= VERBOSE;

if (devicename)
r = nvme_scan_filter(nvme_match_device_filter);
else
r = nvme_scan(NULL);

if (r) {
nvme_show_subsystem_list(r, flags);
nvme_free_tree(r);
} else {
r = nvme_create_root(stderr, map_log_level(cfg.verbose, false));
if (!r) {
if (devicename)
fprintf(stderr, "Failed to scan nvme subsystem for %s\n", devicename);
fprintf(stderr,
"Failed to scan nvme subsystem for %s\n",
devicename);
else
fprintf(stderr, "Failed to scan nvme subsystem\n");
err = -errno;
goto ret;
}

if (devicename)
filter = nvme_match_device_filter;

err = nvme_scan_topology(r, filter);
if (err) {
fprintf(stderr, "Failed to scan topology: %s\n",
nvme_strerror(errno));
goto ret;
}

nvme_show_subsystem_list(r, flags);
nvme_free_tree(r);

ret:
return err;
}
Expand Down Expand Up @@ -2431,14 +2466,21 @@ static int list(int argc, char **argv, struct command *cmd, struct plugin *plugi
if (cfg.verbose)
flags |= VERBOSE;

r = nvme_scan(NULL);
if (r) {
nvme_show_list_items(r, flags);
nvme_free_tree(r);
} else {
fprintf(stderr, "Failed to scan nvme subsystems\n");
err = -errno;
r = nvme_create_root(stderr, map_log_level(cfg.verbose, false));
if (!r) {
fprintf(stderr, "Failed to create topology root: %s\n",
nvme_strerror(errno));
return -errno;
}
err = nvme_scan_topology(r, NULL);
if (err < 0) {
fprintf(stderr, "Failed to scan topoplogy: %s\n",
nvme_strerror(errno));
return err;
}

nvme_show_list_items(r, flags);
nvme_free_tree(r);

return err;
}
Expand Down
1 change: 1 addition & 0 deletions nvme.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,4 +105,5 @@ void d(unsigned char *buf, int len, int width, int group);
void d_raw(unsigned char *buf, unsigned len);
uint64_t int48_to_long(uint8_t *data);

int map_log_level(int verbose, bool quiet);
#endif /* _NVME_H */
2 changes: 1 addition & 1 deletion subprojects/libnvme.wrap
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[wrap-git]
url = https://github.com/linux-nvme/libnvme.git
revision = fcf7edfe4daf298ef4a2790666a9ba7b579f34e1
revision = 5b397aa3a2a70331373d321cf357055d3b1e7e4c

[provide]
libnvme = libnvme_dep

0 comments on commit e290046

Please sign in to comment.