From 99aac708c1fc6126412fb2e0e1cdb65e415a375b Mon Sep 17 00:00:00 2001 From: Tokunori Ikegami Date: Wed, 27 Oct 2021 01:55:41 +0900 Subject: [PATCH] nvme: change get_feature to get multiple feature ids Signed-off-by: Tokunori Ikegami --- nvme.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/nvme.c b/nvme.c index dae44ad7..3f061184 100644 --- a/nvme.c +++ b/nvme.c @@ -2758,7 +2758,8 @@ static int get_feature_id(int fd, struct feat_cfg cfg) } else if (buf) d_raw(buf, cfg.data_len); } else if (err > 0) { - nvme_show_status(err); + if (err != NVME_SC_INVALID_FIELD) + nvme_show_status(err); } else { perror("get-feature"); } @@ -2789,6 +2790,9 @@ static int get_feature(int argc, char **argv, struct command *cmd, struct plugin const char *uuid_index = "specify uuid index"; int err; int fd; + int i; + int feat_max = 0x100; + int feat_num = 0; struct feat_cfg cfg = { .feature_id = 0, @@ -2833,11 +2837,8 @@ static int get_feature(int argc, char **argv, struct command *cmd, struct plugin goto close_fd; } - if (!cfg.feature_id) { - fprintf(stderr, "feature-id required param\n"); - err = -EINVAL; - goto close_fd; - } + if (cfg.feature_id) + feat_max = cfg.feature_id + 1; if (cfg.uuid_index > 128) { fprintf(stderr, "invalid uuid index param: %u\n", cfg.uuid_index); @@ -2846,7 +2847,15 @@ static int get_feature(int argc, char **argv, struct command *cmd, struct plugin goto close_fd; } - err = get_feature_id(fd, cfg); + for (i = cfg.feature_id; i < feat_max; i++, feat_num++) { + cfg.feature_id = i; + err = get_feature_id(fd, cfg); + if (err && err != NVME_SC_INVALID_FIELD) + break; + } + + if (err == NVME_SC_INVALID_FIELD && feat_num == 1) + nvme_show_status(err); close_fd: close(fd); -- 2.50.1