Commit b801af09 authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

nvme: add disable_read_changed_ns_list_log_page



Similar to the disable_read_ana_log_page ctrlr_opt,
this enables the application to tell the NVMe
driver to *not* read the CHANGED_NS_LIST log
page in response to a NS_ATTR_CHANGED AEN, and
will do the read itself.

Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Ie447734187d4a4cb95ceef6e0131b640b8ba5984
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14088


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
parent 57e90e43
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -258,8 +258,16 @@ struct spdk_nvme_ctrlr_opts {

	/* Hole at bytes 610-616. */
	uint8_t reserved610[7];

	/**
	 * Disable reading CHANGED_NS_LIST log page in response to an NS_ATTR_CHANGED AEN
	 * The upper layer should reading CHANGED_NS_LIST log page instead if set to true.
	 *
	 * Default is `false` (CHANGED_NS_LIST log page is read).
	 */
	uint8_t disable_read_changed_ns_list_log_page;
} __attribute__((packed));
SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_ctrlr_opts) == 616, "Incorrect size");
SPDK_STATIC_ASSERT(sizeof(struct spdk_nvme_ctrlr_opts) == 617, "Incorrect size");

/**
 * NVMe acceleration operation callback.
+1 −0
Original line number Diff line number Diff line
@@ -961,6 +961,7 @@ nvme_ctrlr_opts_init(struct spdk_nvme_ctrlr_opts *opts,
	SET_FIELD(admin_queue_size);
	SET_FIELD(fabrics_connect_timeout_us);
	SET_FIELD(disable_read_ana_log_page);
	SET_FIELD(disable_read_changed_ns_list_log_page);

#undef FIELD_OK
#undef SET_FIELD
+5 −0
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ spdk_nvme_ctrlr_get_default_ctrlr_opts(struct spdk_nvme_ctrlr_opts *opts, size_t
	SET_FIELD(admin_queue_size, DEFAULT_ADMIN_QUEUE_SIZE);
	SET_FIELD(fabrics_connect_timeout_us, NVME_FABRIC_CONNECT_COMMAND_TIMEOUT);
	SET_FIELD(disable_read_ana_log_page, false);
	SET_FIELD(disable_read_changed_ns_list_log_page, false);

#undef FIELD_OK
#undef SET_FIELD
@@ -2980,6 +2981,10 @@ nvme_ctrlr_clear_changed_ns_log(struct spdk_nvme_ctrlr *ctrlr)
	uint32_t	nsid;
	size_t		buf_size = (SPDK_NVME_MAX_CHANGED_NAMESPACES * sizeof(uint32_t));

	if (ctrlr->opts.disable_read_changed_ns_list_log_page) {
		return 0;
	}

	buffer = spdk_dma_zmalloc(buf_size, 4096, NULL);
	if (!buffer) {
		NVME_CTRLR_ERRLOG(ctrlr, "Failed to allocate buffer for getting "