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:
parent
686ca9f6c5
commit
4fa782363a
@ -549,27 +549,28 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static struct nvme_ctrlr *
|
||||||
nvme_ctrlr_exists(struct spdk_pci_addr *addr)
|
nvme_ctrlr_get(struct spdk_pci_addr *addr)
|
||||||
{
|
{
|
||||||
struct nvme_ctrlr *nvme_ctrlr;
|
struct nvme_ctrlr *nvme_ctrlr;
|
||||||
|
|
||||||
TAILQ_FOREACH(nvme_ctrlr, &g_nvme_ctrlrs, tailq) {
|
TAILQ_FOREACH(nvme_ctrlr, &g_nvme_ctrlrs, tailq) {
|
||||||
if (spdk_pci_addr_compare(&nvme_ctrlr->pci_addr, addr) == 0) {
|
if (spdk_pci_addr_compare(&nvme_ctrlr->pci_addr, addr) == 0) {
|
||||||
return true;
|
return nvme_ctrlr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
|
spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
|
||||||
const char **names, size_t *count)
|
const char **names, size_t *count)
|
||||||
{
|
{
|
||||||
struct nvme_probe_ctx probe_ctx;
|
struct nvme_probe_ctx probe_ctx;
|
||||||
int i;
|
struct nvme_ctrlr *nvme_ctrlr;
|
||||||
size_t j;
|
int i;
|
||||||
|
size_t j;
|
||||||
|
|
||||||
if (spdk_pci_addr_parse(&probe_ctx.whitelist[0], trid->traddr) < 0) {
|
if (spdk_pci_addr_parse(&probe_ctx.whitelist[0], trid->traddr) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -577,7 +578,7 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
|
|||||||
probe_ctx.num_whitelist_controllers = 1;
|
probe_ctx.num_whitelist_controllers = 1;
|
||||||
probe_ctx.controllers_remaining = 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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -585,13 +586,18 @@ spdk_bdev_nvme_create(struct spdk_nvme_transport_id *trid,
|
|||||||
return -1;
|
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.
|
* 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.
|
* 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++) {
|
for (j = 0, i = 0; i < NVME_MAX_BLOCKDEVS; i++) {
|
||||||
if (g_bdev[i].allocated) {
|
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;
|
names[j] = g_bdev[i].disk.name;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user