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 <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I7333a8078d3102c4bd5088f56f6530846854c85f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4093
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Monica Kenguva <monica.kenguva@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Shuhei Matsumoto 2020-09-08 01:56:48 +09:00 committed by Tomasz Zawadzki
parent c8cb51d4bc
commit 5cf0c3707f

View File

@ -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;