]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme: Adapt to logging changes in libnvme
authorDaniel Wagner <dwagner@suse.de>
Mon, 31 Jan 2022 13:34:33 +0000 (14:34 +0100)
committerDaniel Wagner <dwagner@suse.de>
Tue, 1 Feb 2022 10:55:26 +0000 (11:55 +0100)
libnvme allows to define which file descriptor should be used for
logging. This is only for the fabric related interface relevant hence
this is attached to the nvme_root_r object.

Use common code for this into a helper which maps the verbose command
line levels to the correct log levels.

Signed-off-by: Daniel Wagner <dwagner@suse.de>
fabrics.c
nvme.c
nvme.h

index 1993d844a11ec2f8381b71a390f9a466568f18aa..40f82f870c72384abc49163f64e17fe032047dfa 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -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;
@@ -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;
@@ -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)
@@ -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;
        }
 
@@ -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;
@@ -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");
@@ -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)
@@ -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;
@@ -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;
@@ -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) {
diff --git a/nvme.c b/nvme.c
index 35047e33d01891bf1465c58f27655e7c9007c143..d4de5d7fb085b9013305a2798f5f11ef27e18e1e 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -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
@@ -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 {
@@ -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;
 }
@@ -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;
 }
diff --git a/nvme.h b/nvme.h
index 006d7f224408b4229586de6ac7a4ab8f4dd9a4b9..8aee4dc3eefbffc5b6a08753c38767a732ee3978 100644 (file)
--- a/nvme.h
+++ b/nvme.h
@@ -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 */