Commit 4b8f8e91 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

nvme: simplify nvme_ctrlr_clear_changed_ns_log



There is no need to use the SPDK allocator, since the user buffer is
copied into another buffer allocated internally in
nvme_allocate_request_user_copy().

While here, replace 0xff... with UINT32_MAX for readability.

Change-Id: If02e62d29de2712cc6397cc78dc455ad84f71f7e
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26518


Reviewed-by: default avatarTomasz Zawadzki <tomasz@tzawadzki.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Community-CI: Mellanox Build Bot
parent 403ebd3d
Loading
Loading
Loading
Loading
+15 −21
Original line number Diff line number Diff line
@@ -3243,7 +3243,7 @@ nvme_ctrlr_update_namespaces(struct spdk_nvme_ctrlr_aer_completion *async_event)
		nvme_ns_construct(ns, nsid, ctrlr);
	}

	spdk_dma_free(async_event->log_page.changed_ns_list);
	free(async_event->log_page.changed_ns_list);
}

static int
@@ -3252,27 +3252,23 @@ nvme_ctrlr_clear_changed_ns_log(struct spdk_nvme_ctrlr_aer_completion *async_eve
	struct spdk_nvme_ctrlr			*ctrlr = async_event->ctrlr;
	struct nvme_completion_poll_status	*status;
	int		rc = -ENOMEM;
	uint32_t	*changed_ns_list = NULL;
	uint32_t	nsid;
	size_t		changed_ns_list_length = (SPDK_NVME_MAX_CHANGED_NAMESPACES * sizeof(uint32_t));
	uint32_t	*changed_ns_list;
	size_t		changed_ns_list_length = SPDK_NVME_MAX_CHANGED_NAMESPACES * sizeof(uint32_t);

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

	changed_ns_list = spdk_dma_zmalloc(changed_ns_list_length, 4096, NULL);
	changed_ns_list = calloc(1, changed_ns_list_length);
	if (!changed_ns_list) {
		NVME_CTRLR_ERRLOG(ctrlr, "Failed to allocate buffer for getting "
				  "changed ns log.\n");
		return rc;
		NVME_CTRLR_ERRLOG(ctrlr, "Failed to allocate buffer for getting changed ns log.\n");
		goto out;
	}

	async_event->log_page.changed_ns_list = changed_ns_list;

	status = calloc(1, sizeof(*status));
	if (!status) {
		NVME_CTRLR_ERRLOG(ctrlr, "Failed to allocate status tracker\n");
		goto free_buffer;
		goto out;
	}

	rc = spdk_nvme_ctrlr_cmd_get_log_page(ctrlr,
@@ -3280,11 +3276,10 @@ nvme_ctrlr_clear_changed_ns_log(struct spdk_nvme_ctrlr_aer_completion *async_eve
					      SPDK_NVME_GLOBAL_NS_TAG,
					      changed_ns_list, changed_ns_list_length, 0,
					      nvme_completion_poll_cb, status);

	if (rc) {
		NVME_CTRLR_ERRLOG(ctrlr, "spdk_nvme_ctrlr_cmd_get_log_page() failed: rc=%d\n", rc);
		free(status);
		goto free_buffer;
		goto out;
	}

	rc = nvme_wait_for_adminq_completion(ctrlr, status);
@@ -3294,21 +3289,20 @@ nvme_ctrlr_clear_changed_ns_log(struct spdk_nvme_ctrlr_aer_completion *async_eve

	if (rc) {
		NVME_CTRLR_ERRLOG(ctrlr, "wait for spdk_nvme_ctrlr_cmd_get_log_page failed: rc=%d\n", rc);
		goto free_buffer;
		goto out;
	}

	/* only check the case of overflow. */
	nsid = from_le32(changed_ns_list);
	if (nsid == 0xffffffffu) {
	if (changed_ns_list[0] == UINT32_MAX) {
		NVME_CTRLR_WARNLOG(ctrlr, "changed ns log overflowed.\n");
		goto free_buffer;
		goto out;
	}

	return rc;
	async_event->log_page.changed_ns_list = changed_ns_list;
	return 0;

free_buffer:
	spdk_dma_free(changed_ns_list);
	async_event->log_page.changed_ns_list = NULL;
out:
	free(changed_ns_list);
	return rc;
}