From da30c629f0f48ece404e6f6c87173fc37144101d Mon Sep 17 00:00:00 2001 From: Brandon Paupore Date: Tue, 31 Aug 2021 10:01:05 -0500 Subject: [PATCH] Add function to get specific feature buffer lengths Signed-off-by: Brandon Paupore --- nvme.c | 4 ++++ nvme.h | 2 +- plugins/wdc/wdc-nvme.c | 17 +++-------------- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/nvme.c b/nvme.c index 2d30f398..0c9a201b 100644 --- a/nvme.c +++ b/nvme.c @@ -365,6 +365,10 @@ ret: return nvme_status_to_errno(err, false); } +__u16 get_feat_buf_len(unsigned short feature) { + return nvme_feat_buf_len[feature]; +} + static int get_telemetry_log(int argc, char **argv, struct command *cmd, struct plugin *plugin) { const char *desc = "Retrieve telemetry log and write to binary file"; diff --git a/nvme.h b/nvme.h index 16c493d6..e89be10b 100644 --- a/nvme.h +++ b/nvme.h @@ -152,5 +152,5 @@ static inline void nvme_strip_spaces(char *s, int l) while (l && (s[l] == '\0' || s[l] == ' ')) s[l--] = '\0'; } - +__u16 get_feat_buf_len(unsigned short feature); #endif /* _NVME_H */ diff --git a/plugins/wdc/wdc-nvme.c b/plugins/wdc/wdc-nvme.c index 3a6bcb37..9e92ba0d 100644 --- a/plugins/wdc/wdc-nvme.c +++ b/plugins/wdc/wdc-nvme.c @@ -524,17 +524,6 @@ typedef enum EOL_RRER = 108, /* Raw Read Error Rate */ } EOL_LOG_PAGE_C0_OFFSETS; -static __u16 nvme_wdc_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 -}; - - typedef struct __attribute__((__packed__)) _WDC_DE_VU_FILE_META_DATA { __u8 fileName[WDC_DE_FILE_NAME_SIZE]; @@ -2080,16 +2069,16 @@ static int wdc_do_cap_telemetry_log(int fd, char *file, __u32 bs, int type, int goto close_output; } - if (posix_memalign(&buf, getpagesize(), nvme_wdc_feat_buf_len[NVME_FEAT_HOST_BEHAVIOR])) { + if (posix_memalign(&buf, getpagesize(), get_feat_buf_len(NVME_FEAT_HOST_BEHAVIOR))) { fprintf(stderr, "can not allocate feature payload\n"); errno = ENOMEM; err = -1; goto close_output; } - memset(buf, 0, nvme_wdc_feat_buf_len[NVME_FEAT_HOST_BEHAVIOR]); + memset(buf, 0, get_feat_buf_len(NVME_FEAT_HOST_BEHAVIOR)); err = nvme_get_feature(fd, NVME_NSID_ALL, NVME_FEAT_HOST_BEHAVIOR, 0, 0, - 0, nvme_wdc_feat_buf_len[NVME_FEAT_HOST_BEHAVIOR], buf, &result); + 0, get_feat_buf_len(NVME_FEAT_HOST_BEHAVIOR), buf, &result); if (err > 0) { nvme_show_status(err); } else if (err < 0) { -- 2.51.0