From 43c1ac652b74182e483f2e8033a5f5fe417fb429 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Mon, 11 Jul 2022 13:39:39 +0200 Subject: [PATCH] nvme: Return status/error code for effects-log command collect_effects_log eats up the return code from nvme_get_log_cmd_effects. Forward it to the shell.. Fixes: 155fbebfe7b7 ("Update effects-log to handle multiple command sets") Signed-off-by: Daniel Wagner --- nvme.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/nvme.c b/nvme.c index a2a9996a..6df08d7e 100644 --- a/nvme.c +++ b/nvme.c @@ -587,18 +587,22 @@ ret: return err; } -void collect_effects_log(int fd, enum nvme_csi csi, struct list_head *list, int flags) +static int collect_effects_log(int fd, enum nvme_csi csi, + struct list_head *list, int flags) { + nvme_effects_log_node_t *node; int err; - nvme_effects_log_node_t *node = malloc(sizeof(nvme_effects_log_node_t)); + + node = malloc(sizeof(nvme_effects_log_node_t)); if (!node) - return; + return -ENOMEM; + node->csi = csi; err = nvme_get_log_cmd_effects(fd, csi, &node->effects); if (!err) { list_add(list, &node->node); - return; + return err; } else if (err > 0) nvme_show_status(err); @@ -606,6 +610,7 @@ void collect_effects_log(int fd, enum nvme_csi csi, struct list_head *list, int fprintf(stderr, "effects log page: %s\n", nvme_strerror(errno)); free(node); + return err; } static int get_effects_log(int argc, char **argv, struct command *cmd, struct plugin *plugin) @@ -676,29 +681,28 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl nvme_command_set_supported = NVME_CAP_CSS(cap) & NVME_CAP_CSS_NVM; other_command_sets_supported = NVME_CAP_CSS(cap) & NVME_CAP_CSS_CSI; + if (nvme_command_set_supported) + err = collect_effects_log(fd, NVME_CSI_NVM, + &log_pages, flags); - if (nvme_command_set_supported) { - collect_effects_log(fd, NVME_CSI_NVM, &log_pages, flags); - } - - if (other_command_sets_supported) { - collect_effects_log(fd, NVME_CSI_ZNS, &log_pages, flags); - } - - nvme_print_effects_log_pages(&log_pages, flags); + if (!err && other_command_sets_supported) + err = collect_effects_log(fd, NVME_CSI_ZNS, + &log_pages, flags); - } - else { - collect_effects_log(fd, cfg.csi, &log_pages, flags); - nvme_print_effects_log_pages(&log_pages, flags); + } else { + err = collect_effects_log(fd, cfg.csi, &log_pages, flags); } + if (!err) + nvme_print_effects_log_pages(&log_pages, flags); + else if (err > 0) + nvme_show_status(err); + else + perror("effects log page"); close_fd: - while ((node = list_pop(&log_pages, nvme_effects_log_node_t, node))) { + while ((node = list_pop(&log_pages, nvme_effects_log_node_t, node))) free(node); - } - close(fd); ret: return err; -- 2.31.1