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 <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/479601
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Seth Howell 2020-01-07 10:36:40 -07:00 committed by Tomasz Zawadzki
parent 5b3e6cd137
commit b397546e9d
10 changed files with 16 additions and 21 deletions

View File

@ -1009,12 +1009,12 @@ int spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport);
* Get an existing transport from the target * Get an existing transport from the target
* *
* \param tgt The NVMe-oF 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 * \return the transport or NULL if not found
*/ */
struct spdk_nvmf_transport *spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, 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 * Get the first transport registered with the given target

View File

@ -951,7 +951,7 @@ nvmf_fc_ls_process_cass(uint32_t s_id,
uint8_t rc = FCNVME_RJT_RC_NONE; uint8_t rc = FCNVME_RJT_RC_NONE;
uint8_t ec = FCNVME_RJT_EXP_NONE; uint8_t ec = FCNVME_RJT_EXP_NONE;
struct spdk_nvmf_transport *transport = spdk_nvmf_tgt_get_transport(ls_rqst->nvmf_tgt, 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, SPDK_DEBUGLOG(SPDK_LOG_NVMF_FC_LS,
"LS_CASS: ls_rqst_len=%d, desc_list_len=%d, cmd_len=%d, sq_size=%d, " "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 rc = FCNVME_RJT_RC_NONE;
uint8_t ec = FCNVME_RJT_EXP_NONE; uint8_t ec = FCNVME_RJT_EXP_NONE;
struct spdk_nvmf_transport *transport = spdk_nvmf_tgt_get_transport(ls_rqst->nvmf_tgt, 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, SPDK_DEBUGLOG(SPDK_LOG_NVMF_FC_LS,
"LS_CIOC: ls_rqst_len=%d, desc_list_len=%d, cmd_len=%d, " "LS_CIOC: ls_rqst_len=%d, desc_list_len=%d, cmd_len=%d, "

View File

@ -550,7 +550,7 @@ spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
const char *trtype; const char *trtype;
int rc; int rc;
transport = spdk_nvmf_tgt_get_transport(tgt, trid->trtype); transport = spdk_nvmf_tgt_get_transport(tgt, trid->trstring);
if (!transport) { if (!transport) {
trtype = spdk_nvme_transport_id_trtype_str(trid->trtype); trtype = spdk_nvme_transport_id_trtype_str(trid->trtype);
if (trtype != NULL) { 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; 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); cb_fn(cb_arg, -EEXIST);
return; /* transport already created */ 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 * 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; struct spdk_nvmf_transport *transport;
TAILQ_FOREACH(transport, &tgt->transports, link) { 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 transport;
} }
} }
return NULL; return NULL;
} }

View File

@ -367,10 +367,6 @@ struct spdk_nvmf_subsystem {
TAILQ_ENTRY(spdk_nvmf_subsystem) entries; 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, int spdk_nvmf_poll_group_add_transport(struct spdk_nvmf_poll_group *group,
struct spdk_nvmf_transport *transport); struct spdk_nvmf_transport *transport);
int spdk_nvmf_poll_group_update_subsystem(struct spdk_nvmf_poll_group *group, int spdk_nvmf_poll_group_update_subsystem(struct spdk_nvmf_poll_group *group,

View File

@ -1694,7 +1694,7 @@ spdk_rpc_nvmf_create_transport(struct spdk_jsonrpc_request *request,
return; 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_ERRLOG("Transport type '%s' already exists\n", ctx->trtype);
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
"Transport type '%s' already exists\n", ctx->trtype); "Transport type '%s' already exists\n", ctx->trtype);

View File

@ -318,7 +318,7 @@ _nvmf_subsystem_remove_listener(struct spdk_nvmf_subsystem *subsystem,
{ {
struct spdk_nvmf_transport *transport; 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) { if (transport != NULL) {
spdk_nvmf_transport_stop_listen(transport, &listener->trid); spdk_nvmf_transport_stop_listen(transport, &listener->trid);
} }
@ -764,7 +764,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
return 0; 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) { if (transport == NULL) {
SPDK_ERRLOG("Unknown transport type %d\n", trid->trtype); SPDK_ERRLOG("Unknown transport type %d\n", trid->trtype);
return -EINVAL; return -EINVAL;

View File

@ -585,7 +585,7 @@ spdk_nvmf_parse_transport(struct spdk_nvmf_parse_transport_ctx *ctx)
return; 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); SPDK_ERRLOG("Duplicate transport type '%s'\n", type);
ctx->cb_fn(-1); ctx->cb_fn(-1);
free(ctx); free(ctx);

View File

@ -112,7 +112,7 @@ spdk_nvmf_tgt_find_subsystem(struct spdk_nvmf_tgt *tgt, const char *subnqn)
} }
struct spdk_nvmf_transport * 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; return &g_transport;
} }

View File

@ -130,7 +130,7 @@ struct spdk_nvmf_transport g_nvmf_transport = {
}; };
struct spdk_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; return &g_nvmf_transport;
} }

View File

@ -99,9 +99,9 @@ spdk_nvmf_tgt_find_subsystem(struct spdk_nvmf_tgt *tgt, const char *subnqn)
} }
struct spdk_nvmf_transport * 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; return &g_transport;
} }