]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Revert "nvme-print: Use array array instead of ccan/list"
authorDaniel Wagner <dwagner@suse.de>
Thu, 21 Oct 2021 11:06:40 +0000 (13:06 +0200)
committerDaniel Wagner <dwagner@suse.de>
Fri, 22 Oct 2021 07:56:23 +0000 (09:56 +0200)
This reverts commit cf2ab19f1881a8945bb07fa42dbbc018fc55f797.

nvme-print.c
nvme-print.h
nvme.c

index a2ecc0ffc461b5439ce9558ec5ce343851dd111e..f7cc90905ac91711f1b886156a1b58f56814f30e 100644 (file)
@@ -846,18 +846,16 @@ struct json_object* json_effects_log(enum nvme_csi csi,
        return root;
 }
 
-void json_effects_log_list(nvme_effects_log_node_t *nodes[]) {
+void json_effects_log_list(struct list_head *list) {
        struct json_object *json_list;
        nvme_effects_log_node_t *node;
-       int idx = 0;
 
        json_list = json_create_array();
 
-       while ((node = nodes[idx])) {
+       list_for_each(list, node, node) {
                struct json_object *json_page =
                        json_effects_log(node->csi, &node->effects);
                json_array_add_value_object(json_list, json_page);
-               idx++;
        }
 
        json_print_object(json_list, NULL);
@@ -4796,23 +4794,20 @@ void nvme_print_effects_log_page(enum nvme_csi csi, struct nvme_cmd_effects_log
        nvme_print_effects_log_segment(0, 0x80, 0x100, effects, "Vendor Specific I/O Commands", human);
 }
 
-void nvme_print_effects_log_pages(nvme_effects_log_node_t *nodes[],
+void nvme_print_effects_log_pages(struct list_head *list,
                           int flags)
 {
-       int idx = 0;
-
        if (flags & JSON)
-               return json_effects_log_list(nodes);
+               return json_effects_log_list(list);
 
        nvme_effects_log_node_t *node;
-       while ((node = nodes[idx])) {
+       list_for_each(list, node, node) {
                if (flags & BINARY) {
                        d_raw((unsigned char *)&node->effects, sizeof(node->effects));
                }
                else {
                        nvme_print_effects_log_page(node->csi, &node->effects, flags);
                }
-               idx++;
        }
 }
 
index 33ab3f97f7dfea3a7c77f0261bbc55d2104c23b8..905c1e2f24ec6d0e0ae442c085f9d6f5ebd77c71 100644 (file)
@@ -4,9 +4,12 @@
 #include "nvme.h"
 #include <inttypes.h>
 
+#include <ccan/list/list.h>
+
 typedef struct nvme_effects_log_node {
        enum nvme_csi csi;
        struct nvme_cmd_effects_log effects;
+       struct list_node node;
 } nvme_effects_log_node_t;
 
 void d(unsigned char *buf, int len, int width, int group);
@@ -36,7 +39,7 @@ void nvme_show_self_test_log(struct nvme_self_test_log *self_test, __u8 dst_entr
        __u32 size, const char *devname, enum nvme_print_flags flags);
 void nvme_show_fw_log(struct nvme_firmware_slot *fw_log, const char *devname,
        enum nvme_print_flags flags);
-void nvme_print_effects_log_pages(nvme_effects_log_node_t *nodes[], int flags);
+void nvme_print_effects_log_pages(struct list_head *list, int flags);
 void nvme_show_changed_ns_list_log(struct nvme_ns_list *log,
        const char *devname, enum nvme_print_flags flags);
 void nvme_show_endurance_log(struct nvme_endurance_group_log *endurance_log,
diff --git a/nvme.c b/nvme.c
index f40b47e69438b48179fef7ad9227abc0bb12c7b8..1b03555ebbc3f37ebf277e0d69b11d42c1378ea3 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -504,29 +504,27 @@ ret:
        return nvme_status_to_errno(err, false);
 }
 
-static int collect_effects_log(int fd, enum nvme_csi csi, nvme_effects_log_node_t **node, int flags)
+void collect_effects_log(int fd, enum nvme_csi csi, struct list_head *list, int flags)
 {
        int err;
-       nvme_effects_log_node_t *n;
-
-       n = malloc(sizeof(nvme_effects_log_node_t));
-       if (!n) {
+       nvme_effects_log_node_t *node = malloc(sizeof(nvme_effects_log_node_t));
+       if (!node) {
                perror("Failed to allocate memory");
-               return -1;
+               return;
        }
-       n->csi = csi;
+       node->csi = csi;
 
-       err = nvme_get_log_cmd_effects(fd, csi, &n->effects);
+       err = nvme_get_log_cmd_effects(fd, csi, &node->effects);
        if (!err) {
-               *node = n;
-               return 0;
-       } else if (err > 0)
+               list_add(list, &node->node);
+               return;
+       }
+       else if (err > 0)
                nvme_show_status(err);
        else
                perror("effects log page");
 
-       free(n);
-       return -1;
+       free(node);
 }
 
 static int get_effects_log(int argc, char **argv, struct command *cmd, struct plugin *plugin)
@@ -535,8 +533,8 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl
        const char *raw = "show log in binary format";
        const char *human_readable = "show log in readable format";
        const char *csi = "";
-       nvme_effects_log_node_t *nodes[3] = { NULL };
-       int idx = 0;
+       struct list_head log_pages;
+       nvme_effects_log_node_t *node;
 
        void *bar = NULL;
 
@@ -575,6 +573,8 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl
        if (cfg.human_readable)
                flags |= VERBOSE;
 
+       list_head_init(&log_pages);
+
        if (cfg.csi < 0) {
                nvme_root_t nvme_root;
                uint64_t cap_value;
@@ -593,26 +593,29 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl
                nvme_command_set_supported = (cap_value & (1UL << 37)) != 0;
                other_command_sets_supported = (cap_value & (1UL << (37+6))) != 0;
 
+
                if (nvme_command_set_supported) {
-                       if (collect_effects_log(fd, NVME_CSI_NVM, &nodes[idx], flags) == 0)
-                               idx++;
+                       collect_effects_log(fd, NVME_CSI_NVM, &log_pages, flags);
                }
 
                if (other_command_sets_supported) {
-                       collect_effects_log(fd, NVME_CSI_ZNS, &nodes[idx], flags);
+                       collect_effects_log(fd, NVME_CSI_ZNS, &log_pages, flags);
                }
 
-               nvme_print_effects_log_pages(nodes, flags);
+               nvme_print_effects_log_pages(&log_pages, flags);
+
        }
        else {
-               collect_effects_log(fd, cfg.csi, &nodes[0], flags);
-               nvme_print_effects_log_pages(nodes, flags);
+               collect_effects_log(fd, cfg.csi, &log_pages, flags);
+               nvme_print_effects_log_pages(&log_pages, flags);
        }
 
-       for (idx = 0; nodes[idx]; idx++)
-               free(nodes[idx]);
 
 close_fd:
+       while ((node = list_pop(&log_pages, nvme_effects_log_node_t, node))) {
+               free(node);
+       }
+
        close(fd);
 ret:
        return nvme_status_to_errno(err, false);