Commit 4fa78236 authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

bdev: Add a utility function to get the nvme bdev



Change-Id: I9408533fdfe8a4bd0c8f422555a85afc93e3a568
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 686ca9f6
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -549,18 +549,18 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
	}
}

static bool
nvme_ctrlr_exists(struct spdk_pci_addr *addr)
static struct nvme_ctrlr *
nvme_ctrlr_get(struct spdk_pci_addr *addr)
{
	struct nvme_ctrlr *nvme_ctrlr;

	TAILQ_FOREACH(nvme_ctrlr, &g_nvme_ctrlrs, tailq) {
		if (spdk_pci_addr_compare(&nvme_ctrlr->pci_addr, addr) == 0) {
			return true;
			return nvme_ctrlr;
		}
	}

	return false;
	return NULL;
}

int
@@ -568,6 +568,7 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
		      const char **names, size_t *count)
{
	struct nvme_probe_ctx	probe_ctx;
	struct nvme_ctrlr	*nvme_ctrlr;
	int			i;
	size_t			j;

@@ -577,7 +578,7 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
	probe_ctx.num_whitelist_controllers = 1;
	probe_ctx.controllers_remaining = 1;

	if (nvme_ctrlr_exists(&probe_ctx.whitelist[0])) {
	if (nvme_ctrlr_get(&probe_ctx.whitelist[0]) != NULL) {
		return -1;
	}

@@ -585,13 +586,18 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
		return -1;
	}

	nvme_ctrlr = nvme_ctrlr_get(&probe_ctx.whitelist[0]);
	if (!nvme_ctrlr) {
		return -1;
	}

	/*
	 * Report the new bdevs that were created in this call.
	 * There can be more than one bdev per NVMe controller since one bdev is created per namespace.
	 */
	for (j = 0, i = 0; i < NVME_MAX_BLOCKDEVS; i++) {
		if (g_bdev[i].allocated) {
			if (spdk_pci_addr_compare(&probe_ctx.whitelist[0], &g_bdev[i].nvme_ctrlr->pci_addr) == 0) {
			if (g_bdev[i].nvme_ctrlr == nvme_ctrlr) {
				names[j] = g_bdev[i].disk.name;
				j++;
			}