bdev: Add a utility function to get the nvme bdev

Change-Id: I9408533fdfe8a4bd0c8f422555a85afc93e3a568
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Ben Walker 2017-02-28 10:56:57 -07:00 committed by Jim Harris
parent 686ca9f6c5
commit 4fa782363a

View File

@ -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++;
}