From b397546e9df124c36d30710a1aef7191e9e3881d Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Tue, 7 Jan 2020 10:36:40 -0700 Subject: [PATCH] lib/nvmf: get_transport now takes a string. This function previously accepted a trtype enum, but needs to be able to accept a string to support custom transports. Change-Id: I931aed30ca3be65468552ffa1bb1ef3f91275fda Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/479601 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris --- include/spdk/nvmf.h | 4 ++-- lib/nvmf/fc_ls.c | 4 ++-- lib/nvmf/nvmf.c | 9 ++++----- lib/nvmf/nvmf_internal.h | 4 ---- lib/nvmf/nvmf_rpc.c | 2 +- lib/nvmf/subsystem.c | 4 ++-- module/event/subsystems/nvmf/conf.c | 2 +- .../unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c | 2 +- test/unit/lib/nvmf/fc_ls.c/fc_ls_ut.c | 2 +- test/unit/lib/nvmf/subsystem.c/subsystem_ut.c | 4 ++-- 10 files changed, 16 insertions(+), 21 deletions(-) diff --git a/include/spdk/nvmf.h b/include/spdk/nvmf.h index b0ed5fe81..fd00bb5e0 100644 --- a/include/spdk/nvmf.h +++ b/include/spdk/nvmf.h @@ -1009,12 +1009,12 @@ int spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport); * Get an existing transport from the target * * \param tgt The NVMe-oF target - * \param type The transport type to get + * \param transport_name The name of the transport type to get. * * \return the transport or NULL if not found */ struct spdk_nvmf_transport *spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, - enum spdk_nvme_transport_type type); + const char *transport_name); /** * Get the first transport registered with the given target diff --git a/lib/nvmf/fc_ls.c b/lib/nvmf/fc_ls.c index efa151a07..45f1d0618 100644 --- a/lib/nvmf/fc_ls.c +++ b/lib/nvmf/fc_ls.c @@ -951,7 +951,7 @@ nvmf_fc_ls_process_cass(uint32_t s_id, uint8_t rc = FCNVME_RJT_RC_NONE; uint8_t ec = FCNVME_RJT_EXP_NONE; struct spdk_nvmf_transport *transport = spdk_nvmf_tgt_get_transport(ls_rqst->nvmf_tgt, - (enum spdk_nvme_transport_type) SPDK_NVMF_TRTYPE_FC); + SPDK_NVME_TRANSPORT_NAME_FC); SPDK_DEBUGLOG(SPDK_LOG_NVMF_FC_LS, "LS_CASS: ls_rqst_len=%d, desc_list_len=%d, cmd_len=%d, sq_size=%d, " @@ -1086,7 +1086,7 @@ nvmf_fc_ls_process_cioc(struct spdk_nvmf_fc_nport *tgtport, uint8_t rc = FCNVME_RJT_RC_NONE; uint8_t ec = FCNVME_RJT_EXP_NONE; struct spdk_nvmf_transport *transport = spdk_nvmf_tgt_get_transport(ls_rqst->nvmf_tgt, - (enum spdk_nvme_transport_type) SPDK_NVMF_TRTYPE_FC); + SPDK_NVME_TRANSPORT_NAME_FC); SPDK_DEBUGLOG(SPDK_LOG_NVMF_FC_LS, "LS_CIOC: ls_rqst_len=%d, desc_list_len=%d, cmd_len=%d, " diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 36ea9daec..33bb75cd6 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -550,7 +550,7 @@ spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt, const char *trtype; int rc; - transport = spdk_nvmf_tgt_get_transport(tgt, trid->trtype); + transport = spdk_nvmf_tgt_get_transport(tgt, trid->trstring); if (!transport) { trtype = spdk_nvme_transport_id_trtype_str(trid->trtype); if (trtype != NULL) { @@ -611,7 +611,7 @@ void spdk_nvmf_tgt_add_transport(struct spdk_nvmf_tgt *tgt, { struct spdk_nvmf_tgt_add_transport_ctx *ctx; - if (spdk_nvmf_tgt_get_transport(tgt, transport->ops->type)) { + if (spdk_nvmf_tgt_get_transport(tgt, transport->ops->name)) { cb_fn(cb_arg, -EEXIST); return; /* transport already created */ } @@ -661,16 +661,15 @@ spdk_nvmf_tgt_find_subsystem(struct spdk_nvmf_tgt *tgt, const char *subnqn) } struct spdk_nvmf_transport * -spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_type type) +spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, const char *transport_name) { struct spdk_nvmf_transport *transport; TAILQ_FOREACH(transport, &tgt->transports, link) { - if (transport->ops->type == type) { + if (!strncasecmp(transport->ops->name, transport_name, SPDK_NVMF_TRSTRING_MAX_LEN)) { return transport; } } - return NULL; } diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index 9adcceee8..c5538836b 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -367,10 +367,6 @@ struct spdk_nvmf_subsystem { TAILQ_ENTRY(spdk_nvmf_subsystem) entries; }; - -struct spdk_nvmf_transport *spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, - enum spdk_nvme_transport_type); - int spdk_nvmf_poll_group_add_transport(struct spdk_nvmf_poll_group *group, struct spdk_nvmf_transport *transport); int spdk_nvmf_poll_group_update_subsystem(struct spdk_nvmf_poll_group *group, diff --git a/lib/nvmf/nvmf_rpc.c b/lib/nvmf/nvmf_rpc.c index 41bb226b5..373509752 100644 --- a/lib/nvmf/nvmf_rpc.c +++ b/lib/nvmf/nvmf_rpc.c @@ -1694,7 +1694,7 @@ spdk_rpc_nvmf_create_transport(struct spdk_jsonrpc_request *request, return; } - if (spdk_nvmf_tgt_get_transport(tgt, trtype)) { + if (spdk_nvmf_tgt_get_transport(tgt, ctx->trtype)) { SPDK_ERRLOG("Transport type '%s' already exists\n", ctx->trtype); spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, "Transport type '%s' already exists\n", ctx->trtype); diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index a47d79285..461d52801 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -318,7 +318,7 @@ _nvmf_subsystem_remove_listener(struct spdk_nvmf_subsystem *subsystem, { struct spdk_nvmf_transport *transport; - transport = spdk_nvmf_tgt_get_transport(subsystem->tgt, listener->trid.trtype); + transport = spdk_nvmf_tgt_get_transport(subsystem->tgt, listener->trid.trstring); if (transport != NULL) { spdk_nvmf_transport_stop_listen(transport, &listener->trid); } @@ -764,7 +764,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem, return 0; } - transport = spdk_nvmf_tgt_get_transport(subsystem->tgt, trid->trtype); + transport = spdk_nvmf_tgt_get_transport(subsystem->tgt, trid->trstring); if (transport == NULL) { SPDK_ERRLOG("Unknown transport type %d\n", trid->trtype); return -EINVAL; diff --git a/module/event/subsystems/nvmf/conf.c b/module/event/subsystems/nvmf/conf.c index bac9a1401..d71302395 100644 --- a/module/event/subsystems/nvmf/conf.c +++ b/module/event/subsystems/nvmf/conf.c @@ -585,7 +585,7 @@ spdk_nvmf_parse_transport(struct spdk_nvmf_parse_transport_ctx *ctx) return; } - if (spdk_nvmf_tgt_get_transport(g_spdk_nvmf_tgt, trtype)) { + if (spdk_nvmf_tgt_get_transport(g_spdk_nvmf_tgt, type)) { SPDK_ERRLOG("Duplicate transport type '%s'\n", type); ctx->cb_fn(-1); free(ctx); diff --git a/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c b/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c index 838d61f22..662903479 100644 --- a/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c +++ b/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c @@ -112,7 +112,7 @@ spdk_nvmf_tgt_find_subsystem(struct spdk_nvmf_tgt *tgt, const char *subnqn) } struct spdk_nvmf_transport * -spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_type trtype) +spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, const char *transport_name) { return &g_transport; } diff --git a/test/unit/lib/nvmf/fc_ls.c/fc_ls_ut.c b/test/unit/lib/nvmf/fc_ls.c/fc_ls_ut.c index 60b40e860..46aecccfc 100644 --- a/test/unit/lib/nvmf/fc_ls.c/fc_ls_ut.c +++ b/test/unit/lib/nvmf/fc_ls.c/fc_ls_ut.c @@ -130,7 +130,7 @@ struct spdk_nvmf_transport g_nvmf_transport = { }; struct spdk_nvmf_transport * -spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_type type) +spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, const char *transport_name) { return &g_nvmf_transport; } diff --git a/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c b/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c index 4b8fabb2e..38f3f46fb 100644 --- a/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c +++ b/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c @@ -99,9 +99,9 @@ spdk_nvmf_tgt_find_subsystem(struct spdk_nvmf_tgt *tgt, const char *subnqn) } struct spdk_nvmf_transport * -spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_type trtype) +spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, const char *transport_name) { - if (trtype == SPDK_NVME_TRANSPORT_RDMA) { + if (strncmp(transport_name, SPDK_NVME_TRANSPORT_NAME_RDMA, SPDK_NVMF_TRSTRING_MAX_LEN)) { return &g_transport; }