diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index a20101db2..095c4b436 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -1117,6 +1117,8 @@ bool nvme_completion_is_retry(const struct spdk_nvme_cpl *cpl); struct spdk_nvme_ctrlr *spdk_nvme_get_ctrlr_by_trid_unsafe( const struct spdk_nvme_transport_id *trid); +const struct nvme_transport *nvme_get_transport(const char *transport_name); + /* Transport specific functions */ #define DECLARE_TRANSPORT(name) \ struct spdk_nvme_ctrlr *nvme_ ## name ## _ctrlr_construct(const struct spdk_nvme_transport_id *trid, const struct spdk_nvme_ctrlr_opts *opts, \ diff --git a/lib/nvme/nvme_transport.c b/lib/nvme/nvme_transport.c index 161fd04a4..04a1eedad 100644 --- a/lib/nvme/nvme_transport.c +++ b/lib/nvme/nvme_transport.c @@ -109,17 +109,28 @@ spdk_nvme_transport_available_by_name(const char *transport_name) return spdk_nvme_transport_available(trtype); } +const struct nvme_transport * +nvme_get_transport(const char *transport_name) +{ + struct nvme_transport *registered_transport; + + TAILQ_FOREACH(registered_transport, &g_spdk_nvme_transports, link) { + if (strcasecmp(transport_name, registered_transport->ops.name) == 0) { + return registered_transport; + } + } + + return NULL; +} + void spdk_nvme_transport_register(const struct spdk_nvme_transport_ops *ops) { - struct nvme_transport *registered_transport, *new_transport; + struct nvme_transport *new_transport; - TAILQ_FOREACH(registered_transport, &g_spdk_nvme_transports, link) { - if (strcasecmp(ops->name, registered_transport->ops.name) == 0) { - SPDK_ERRLOG("Double registering NVMe transport %s is prohibited.\n", ops->name); - assert(false); - return; - } + if (nvme_get_transport(ops->name)) { + SPDK_ERRLOG("Double registering NVMe transport %s is prohibited.\n", ops->name); + assert(false); } new_transport = calloc(1, sizeof(*new_transport));