From 5cf0c3707f7e8c4026dc4f3bd48a2d4bf6d6e75e Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 8 Sep 2020 01:56:48 +0900 Subject: [PATCH] lib/nvmf: Use macro constant for ANA descriptor to avoid variable length array In C language, we cannot use constant at compile time. Hence the local array _ana_desc[] is not a fixed size array but a variable length array. We can avoid using variable length array by changing const variable to macro constant. Signed-off-by: Shuhei Matsumoto Change-Id: I7333a8078d3102c4bd5088f56f6530846854c85f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4093 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Monica Kenguva Reviewed-by: Aleksey Marchuk --- lib/nvmf/ctrlr.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index e09e5665f..92a4a1c27 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -1655,15 +1655,15 @@ nvmf_get_firmware_slot_log_page(void *buffer, uint64_t offset, uint32_t length) } } +#define SPDK_NVMF_ANA_DESC_SIZE (sizeof(struct spdk_nvme_ana_group_descriptor) + \ + sizeof(uint32_t)) static void nvmf_get_ana_log_page(struct spdk_nvmf_ctrlr *ctrlr, void *data, uint64_t offset, uint32_t length) { char *buf = data; struct spdk_nvme_ana_page ana_hdr; - const size_t ana_desc_size = sizeof(struct spdk_nvme_ana_group_descriptor) + - sizeof(uint32_t); - char _ana_desc[ana_desc_size]; + char _ana_desc[SPDK_NVMF_ANA_DESC_SIZE]; struct spdk_nvme_ana_group_descriptor *ana_desc; size_t copy_len; uint32_t num_ns = 0; @@ -1702,12 +1702,12 @@ nvmf_get_ana_log_page(struct spdk_nvmf_ctrlr *ctrlr, void *data, for (ns = spdk_nvmf_subsystem_get_first_ns(ctrlr->subsys); ns != NULL; ns = spdk_nvmf_subsystem_get_next_ns(ctrlr->subsys, ns)) { - if (offset >= ana_desc_size) { - offset -= ana_desc_size; + if (offset >= SPDK_NVMF_ANA_DESC_SIZE) { + offset -= SPDK_NVMF_ANA_DESC_SIZE; continue; } - memset(ana_desc, 0, ana_desc_size); + memset(ana_desc, 0, SPDK_NVMF_ANA_DESC_SIZE); ana_desc->ana_group_id = ns->nsid; ana_desc->num_of_nsid = 1; @@ -1716,7 +1716,7 @@ nvmf_get_ana_log_page(struct spdk_nvmf_ctrlr *ctrlr, void *data, /* TODO: Support Change Count. */ ana_desc->change_count = 0; - copy_len = spdk_min(ana_desc_size - offset, length); + copy_len = spdk_min(SPDK_NVMF_ANA_DESC_SIZE - offset, length); memcpy(buf, (const char *)ana_desc + offset, copy_len); length -= copy_len; buf += copy_len;