Commit 5cf0c370 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

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: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I7333a8078d3102c4bd5088f56f6530846854c85f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4093


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarMonica Kenguva <monica.kenguva@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent c8cb51d4
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -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;