Commit bfd014b5 authored by Konrad Sztyber's avatar Konrad Sztyber
Browse files

nvmf: add function for setting ns visibility



Also, while here, added an assert that the nsid is within the valid
range in nvmf_ctrlr_ns_is_visible() and replaced all direct accesses to
the bit_array with that function.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Ife925688f2261d1110be2cf2ff69be71626b784b
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25243


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Community-CI: Community CI Samsung <spdk.community.ci.samsung@gmail.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent ffd9f746
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -424,7 +424,7 @@ nvmf_ctrlr_init_visible_ns(struct spdk_nvmf_ctrlr *ctrlr)
	for (ns = spdk_nvmf_subsystem_get_first_ns(subsystem); ns != NULL;
	     ns = spdk_nvmf_subsystem_get_next_ns(subsystem, ns)) {
		if (ns->always_visible || nvmf_ns_find_host(ns, ctrlr->hostnqn) != NULL) {
			spdk_bit_array_set(ctrlr->visible_ns, ns->nsid - 1);
			nvmf_ctrlr_ns_set_visible(ctrlr, ns->nsid, true);
		}
	}
}
+12 −0
Original line number Diff line number Diff line
@@ -491,9 +491,21 @@ void nvmf_ctrlr_set_fatal_status(struct spdk_nvmf_ctrlr *ctrlr);
static inline bool
nvmf_ctrlr_ns_is_visible(struct spdk_nvmf_ctrlr *ctrlr, uint32_t nsid)
{
	assert(nsid > 0 && nsid <= ctrlr->subsys->max_nsid);
	return spdk_bit_array_get(ctrlr->visible_ns, nsid - 1);
}

static inline void
nvmf_ctrlr_ns_set_visible(struct spdk_nvmf_ctrlr *ctrlr, uint32_t nsid, bool visible)
{
	assert(nsid > 0 && nsid <= ctrlr->subsys->max_nsid);
	if (visible) {
		spdk_bit_array_set(ctrlr->visible_ns, nsid - 1);
	} else {
		spdk_bit_array_clear(ctrlr->visible_ns, nsid - 1);
	}
}

static inline struct spdk_nvmf_ns *
_nvmf_subsystem_get_ns(struct spdk_nvmf_subsystem *subsystem, uint32_t nsid)
{
+4 −8
Original line number Diff line number Diff line
@@ -921,14 +921,10 @@ nvmf_ns_visible(struct spdk_nvmf_subsystem *subsystem,
	/* Also apply to existing controllers. */
	TAILQ_FOREACH(ctrlr, &subsystem->ctrlrs, link) {
		if (strcmp(hostnqn, ctrlr->hostnqn) ||
		    spdk_bit_array_get(ctrlr->visible_ns, nsid - 1) == visible) {
		    nvmf_ctrlr_ns_is_visible(ctrlr, nsid) == visible) {
			continue;
		}
		if (visible) {
			spdk_bit_array_set(ctrlr->visible_ns, nsid - 1);
		} else {
			spdk_bit_array_clear(ctrlr->visible_ns, nsid - 1);
		}
		nvmf_ctrlr_ns_set_visible(ctrlr, nsid, visible);
		send_async_event_ns_notice(ctrlr);
		nvmf_ctrlr_ns_changed(ctrlr, nsid);
	}
@@ -1807,7 +1803,7 @@ spdk_nvmf_subsystem_remove_ns(struct spdk_nvmf_subsystem *subsystem, uint32_t ns
	nvmf_subsystem_ns_changed(subsystem, nsid);

	TAILQ_FOREACH(ctrlr, &subsystem->ctrlrs, link) {
		spdk_bit_array_clear(ctrlr->visible_ns, nsid - 1);
		nvmf_ctrlr_ns_set_visible(ctrlr, nsid, false);
	}

	return 0;
@@ -2148,7 +2144,7 @@ spdk_nvmf_subsystem_add_ns_ext(struct spdk_nvmf_subsystem *subsystem, const char
	ns->always_visible = !opts.no_auto_visible;
	if (ns->always_visible) {
		TAILQ_FOREACH(ctrlr, &subsystem->ctrlrs, link) {
			spdk_bit_array_set(ctrlr->visible_ns, opts.nsid - 1);
			nvmf_ctrlr_ns_set_visible(ctrlr, opts.nsid, true);
		}
	}

+20 −20
Original line number Diff line number Diff line
@@ -616,10 +616,10 @@ test_spdk_nvmf_ns_visible(void)
	CU_ASSERT(nvmf_ns_find_host(&ns1, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrA.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(spdk_bit_array_get(ctrlrA.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid));
	CU_ASSERT(nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid + 1));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid + 1));
	/* check last ns_changed */
	CU_ASSERT(g_ns_changed_ctrlr == &ctrlrA);
	CU_ASSERT(g_ns_changed_nsid == nsid);
@@ -637,10 +637,10 @@ test_spdk_nvmf_ns_visible(void)
	CU_ASSERT(nvmf_ns_find_host(&ns1, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrA.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(spdk_bit_array_get(ctrlrA.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid));
	CU_ASSERT(nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid + 1));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid + 1));
	/* check last ns_changed */
	CU_ASSERT(g_ns_changed_ctrlr == NULL);
	CU_ASSERT(g_ns_changed_nsid == 0);
@@ -658,10 +658,10 @@ test_spdk_nvmf_ns_visible(void)
	CU_ASSERT(nvmf_ns_find_host(&ns1, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrA.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid + 1));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid + 1));
	/* check last ns_changed */
	CU_ASSERT(g_ns_changed_ctrlr == &ctrlrA);
	CU_ASSERT(g_ns_changed_nsid == nsid);
@@ -679,10 +679,10 @@ test_spdk_nvmf_ns_visible(void)
	CU_ASSERT(nvmf_ns_find_host(&ns1, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrA.hostnqn) == NULL);
	CU_ASSERT(nvmf_ns_find_host(&ns2, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid + 1));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid + 1));
	/* check last ns_changed */
	CU_ASSERT(g_ns_changed_ctrlr == NULL);
	CU_ASSERT(g_ns_changed_nsid == 0);
@@ -699,8 +699,8 @@ test_spdk_nvmf_ns_visible(void)
	CU_ASSERT(rc == 0);
	CU_ASSERT(nvmf_ns_find_host(ns3, ctrlrA.hostnqn) != NULL);
	CU_ASSERT(nvmf_ns_find_host(ns3, ctrlrB.hostnqn) == NULL);
	CU_ASSERT(spdk_bit_array_get(ctrlrA.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid - 1));
	CU_ASSERT(nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid));
	/* check last ns_changed */
	CU_ASSERT(g_ns_changed_ctrlr == &ctrlrA);
	CU_ASSERT(g_ns_changed_nsid == nsid);
@@ -713,8 +713,8 @@ test_spdk_nvmf_ns_visible(void)
	g_ns_changed_nsid = 0;
	rc = spdk_nvmf_subsystem_remove_ns(&subsystem, nsid);
	CU_ASSERT(rc == 0);
	CU_ASSERT(!spdk_bit_array_get(ctrlrA.visible_ns, nsid - 1));
	CU_ASSERT(!spdk_bit_array_get(ctrlrB.visible_ns, nsid - 1));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrA, nsid));
	CU_ASSERT(!nvmf_ctrlr_ns_is_visible(&ctrlrB, nsid));
	/* check last ns_changed */
	CU_ASSERT(g_ns_changed_ctrlr == &ctrlrA);
	CU_ASSERT(g_ns_changed_nsid == nsid);