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

ut/nvme: count namespaces constructed during ns_attr_changed



This is begining of the series intended to improve testing
around AER handling for namespace atrtribute changes.
First UT, then functional tests that will help to narrow
down any potential issues around asynchronous handling and
interpreting the Changed Attached Namespace List log page.

During namespace attribute change, we send identify
to the controller to update active namespaces list.
Later on nvme_ns_construct() sends identify to each
active namespace to update its properties.

This patch adds accounting to the number of namespaces
being updated.
Please note that inactive namespaces do not get called
by nvme_ns_construct().

Change-Id: Ia391969e22bf8f7b35da0fa13aec79d368ecc4e3
Signed-off-by: default avatarTomasz Zawadzki <tomasz.zawadzki@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26189


Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
parent 2a8a3ad2
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -690,12 +690,24 @@ nvme_ns_destruct(struct spdk_nvme_ns *ns)
{
}

uint32_t g_nvme_ns_constructed;

int
nvme_ns_construct(struct spdk_nvme_ns *ns, uint32_t id,
		  struct spdk_nvme_ctrlr *ctrlr)
{
	uint32_t i;

	for (i = 0; i < g_active_ns_list_length; i++) {
		if (id == g_active_ns_list[i]) {
			g_nvme_ns_constructed++;
			return 0;
		}
	}

	SPDK_CU_ASSERT_FATAL(false);
	return -1;
}

void
spdk_pci_device_detach(struct spdk_pci_device *device)
@@ -3031,17 +3043,21 @@ test_nvme_ctrlr_ns_attr_changed(void)
	g_aer_cb_counter = 0;
	g_active_ns_list = active_ns_list2;
	g_active_ns_list_length = SPDK_COUNTOF(active_ns_list2);
	g_nvme_ns_constructed = 0;
	nvme_ctrlr_async_event_cb(&ctrlr.aer[0], &aer_cpl);
	nvme_ctrlr_complete_queued_async_events(&ctrlr);
	CU_ASSERT(g_aer_cb_counter == 1);
	CU_ASSERT(g_nvme_ns_constructed == g_active_ns_list_length);
	CU_ASSERT(!spdk_nvme_ctrlr_is_active_ns(&ctrlr, 100));

	/* Add NS 101 */
	g_active_ns_list = active_ns_list3;
	g_active_ns_list_length = SPDK_COUNTOF(active_ns_list3);
	g_nvme_ns_constructed = 0;
	nvme_ctrlr_async_event_cb(&ctrlr.aer[0], &aer_cpl);
	nvme_ctrlr_complete_queued_async_events(&ctrlr);
	CU_ASSERT(g_aer_cb_counter == 2);
	CU_ASSERT(g_nvme_ns_constructed == g_active_ns_list_length);
	CU_ASSERT(spdk_nvme_ctrlr_is_active_ns(&ctrlr, 101));

	g_active_ns_list = NULL;