Commit ef14e9b9 authored by Abhineet Pandey's avatar Abhineet Pandey Committed by Konrad Sztyber
Browse files

lib/nvmf: Fix next_cntlid misnomer



Within a subsystem, we track 'next_cntlid' which helps
in choosing controller id when a new controller is added.
This is currently a misnomer, as we actually increment it
before using it. This patch fixes that.

Change-Id: I739bc16055d697a771c526adaa457054a6edca46
Signed-off-by: default avatarAbhineet Pandey <abhineet.pandey@nutanix.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25189


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 22957b87
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -262,7 +262,7 @@ spdk_nvmf_subsystem_create(struct spdk_nvmf_tgt *tgt,
	subsystem->id = sid;
	subsystem->subtype = type;
	subsystem->max_nsid = num_ns;
	subsystem->next_cntlid = 0;
	subsystem->next_cntlid = 1;
	subsystem->min_cntlid = NVMF_MIN_CNTLID;
	subsystem->max_cntlid = NVMF_MAX_CNTLID;
	snprintf(subsystem->subnqn, sizeof(subsystem->subnqn), "%s", nqn);
@@ -2514,8 +2514,8 @@ spdk_nvmf_subsystem_set_cntlid_range(struct spdk_nvmf_subsystem *subsystem,
	}
	subsystem->min_cntlid = min_cntlid;
	subsystem->max_cntlid = max_cntlid;
	if (subsystem->next_cntlid < min_cntlid || subsystem->next_cntlid > max_cntlid - 1) {
		subsystem->next_cntlid = min_cntlid - 1;
	if (subsystem->next_cntlid < min_cntlid || subsystem->next_cntlid > max_cntlid) {
		subsystem->next_cntlid = min_cntlid;
	}

	return 0;
@@ -2525,21 +2525,24 @@ uint16_t
nvmf_subsystem_gen_cntlid(struct spdk_nvmf_subsystem *subsystem)
{
	int count;
	uint16_t cntlid;

	/*
	 * In the worst case, we might have to try all CNTLID values between min_cntlid and max_cntlid
	 * before we find one that is unused (or find that all values are in use).
	 */
	for (count = 0; count < subsystem->max_cntlid - subsystem->min_cntlid + 1; count++) {
		cntlid = subsystem->next_cntlid;
		subsystem->next_cntlid++;

		if (subsystem->next_cntlid > subsystem->max_cntlid) {
			subsystem->next_cntlid = subsystem->min_cntlid;
		}

		/* Check if a controller with this cntlid currently exists. */
		if (nvmf_subsystem_get_ctrlr(subsystem, subsystem->next_cntlid) == NULL) {
		if (nvmf_subsystem_get_ctrlr(subsystem, cntlid) == NULL) {
			/* Found unused cntlid */
			return subsystem->next_cntlid;
			return cntlid;
		}
	}