]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme: nvme get and set features buffer length clean up
authorGollu Appalanaidu <anaidu.gollu@samsung.com>
Thu, 25 Mar 2021 19:07:23 +0000 (00:37 +0530)
committerKeith Busch <kbusch@kernel.org>
Fri, 2 Apr 2021 15:57:10 +0000 (09:57 -0600)
Signed-off-by: Gollu Appalanaidu <anaidu.gollu@samsung.com>
nvme.c

diff --git a/nvme.c b/nvme.c
index eb49131926b327f70d2f26135bf66b9d3fbd998f..926651f51d33f5c22ed439ecf42ebe6c2b59af42 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -84,6 +84,16 @@ static struct program nvme = {
        .extensions = &builtin,
 };
 
+static __u16 nvme_feat_buf_len[0x100] = {
+       [NVME_FEAT_LBA_RANGE]           = 4096,
+       [NVME_FEAT_AUTO_PST]            = 256,
+       [NVME_FEAT_HOST_MEM_BUF]        = 4096,
+       [NVME_FEAT_HOST_ID]             = 8,
+       [NVME_FEAT_PLM_CONFIG]          = 512,
+       [NVME_FEAT_TIMESTAMP]           = 8,
+       [NVME_FEAT_HOST_BEHAVIOR]       = 512
+};
+
 const char *output_format = "Output format: normal|json|binary";
 static const char *output_format_no_binary = "Output format: normal|json";
 
@@ -2711,32 +2721,11 @@ static int get_feature(int argc, char **argv, struct command *cmd, struct plugin
                goto close_fd;
        }
 
-       switch (cfg.feature_id) {
-       case NVME_FEAT_LBA_RANGE:
-               cfg.data_len = 4096;
-               break;
-       case NVME_FEAT_AUTO_PST:
-               cfg.data_len = 256;
-               break;
-       case NVME_FEAT_HOST_MEM_BUF:
-               cfg.data_len = 4096;
-               break;
-       case NVME_FEAT_HOST_ID:
-               cfg.data_len = 8;
-               /* check for Extended Host Identifier */
-               if (cfg.cdw11 & 0x1)
-                       cfg.data_len = 16;
-               break;
-       case NVME_FEAT_PLM_CONFIG:
-               cfg.data_len = 512;
-               break;
-       case NVME_FEAT_TIMESTAMP:
-               cfg.data_len = 8;
-               break;
-       case NVME_FEAT_HOST_BEHAVIOR:
-               cfg.data_len = 512;
-               break;
-       }
+       cfg.data_len = nvme_feat_buf_len[cfg.feature_id];
+
+       /* check for Extended Host Identifier */
+       if (cfg.feature_id == NVME_FEAT_HOST_ID && (cfg.cdw11 & 0x1))
+               cfg.data_len = 16;
 
        if (cfg.sel == 3)
                cfg.data_len = 0;
@@ -3548,8 +3537,6 @@ ret:
 }
 
 #define STRTOUL_AUTO_BASE              (0)
-#define NVME_FEAT_LBA_RANGE_LEN        (4096)
-#define NVME_FEAT_TIMESTAMP_STR_LEN    (13)
 #define NVME_FEAT_TIMESTAMP_DATA_SIZE  (6)
 
 static int set_feature(int argc, char **argv, struct command *cmd, struct plugin *plugin)
@@ -3629,11 +3616,7 @@ static int set_feature(int argc, char **argv, struct command *cmd, struct plugin
                goto close_fd;
        }
 
-    if (NVME_FEAT_LBA_RANGE == cfg.feature_id) {
-        cfg.data_len = NVME_FEAT_LBA_RANGE_LEN;
-    } else if (NVME_FEAT_TIMESTAMP == cfg.feature_id) {
-        cfg.data_len = NVME_FEAT_TIMESTAMP_STR_LEN;
-    }
+       cfg.data_len = nvme_feat_buf_len[cfg.feature_id];
 
        if (cfg.data_len) {
                if (posix_memalign(&buf, getpagesize(), cfg.data_len)) {