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

ut/nvme: modify the same namespace in one AER after another



Build up on prior scenario, attempting to catch scenario
where modify the same NSID in AERs following each other.

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


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
parent cf1508f8
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -3069,6 +3069,10 @@ test_nvme_ctrlr_ns_attr_changed(void)
	uint32_t changed_ns_list5_aer1[] = { 103 };
	uint32_t active_ns_list5_aer2[] = { 1, 2, 103, 1024 };
	uint32_t changed_ns_list5_aer2[] = { 102 };
	uint32_t active_ns_list6_aer1[] = { 1, 2, 104, 1024 };
	uint32_t changed_ns_list6_aer1[] = { 103, 104 };
	uint32_t active_ns_list6_aer2[] = { 1, 2, 105, 1024 };
	uint32_t changed_ns_list6_aer2[] = { 104, 105 };
	union spdk_nvme_async_event_completion	aer_event = {
		.bits.async_event_type = SPDK_NVME_ASYNC_EVENT_TYPE_NOTICE,
		.bits.async_event_info = SPDK_NVME_ASYNC_EVENT_NS_ATTR_CHANGED
@@ -3158,6 +3162,32 @@ test_nvme_ctrlr_ns_attr_changed(void)
	check_active_ns(&ctrlr, active_ns_list5_aer2, SPDK_COUNTOF(active_ns_list5_aer2));
	CU_ASSERT(!spdk_nvme_ctrlr_is_active_ns(&ctrlr, 102));

	/* Send first AER due to adding NS 104 and removing NS 103. Right after reading
	 * the namespace log remove NS 104 and add NS 105, which generates the second AER.
	 */
	g_aer_cb_counter = 0;
	g_nvme_ns_constructed = 0;
	setup_aer_for_ns_change(active_ns_list6_aer1, SPDK_COUNTOF(active_ns_list6_aer1),
				changed_ns_list6_aer1, SPDK_COUNTOF(changed_ns_list6_aer1));
	/* Next setup_aer_for_ns_change() will be called after log page was read. */
	g_needs_setup_aer_for_ns_change = true;
	g_aer_ns_change.active_ns_list = active_ns_list6_aer2;
	g_aer_ns_change.active_ns_list_length = SPDK_COUNTOF(active_ns_list6_aer2);
	g_aer_ns_change.changed_ns_list = changed_ns_list6_aer2;
	g_aer_ns_change.changed_ns_list_length = SPDK_COUNTOF(changed_ns_list6_aer2);
	/* List of AERs is processed once in every loop, do it once for each AER */
	nvme_ctrlr_complete_queued_async_events(&ctrlr);
	nvme_ctrlr_complete_queued_async_events(&ctrlr);
	CU_ASSERT(g_aer_cb_counter == 2);
	/*
	 * Note: Identify sent to the controller after reading the log
	 * page will already get the current list of namespaces.
	 */
	CU_ASSERT(g_nvme_ns_constructed == (SPDK_COUNTOF(active_ns_list6_aer2) * 2));
	check_active_ns(&ctrlr, active_ns_list6_aer2, SPDK_COUNTOF(active_ns_list6_aer2));
	CU_ASSERT(!spdk_nvme_ctrlr_is_active_ns(&ctrlr, 103));
	CU_ASSERT(!spdk_nvme_ctrlr_is_active_ns(&ctrlr, 104));

	g_active_ns_list = NULL;
	g_active_ns_list_length = 0;
	g_changed_ns_list = NULL;