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
*
* \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

View File

@ -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, "

View File

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

View File

@ -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,

View File

@ -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);

View File

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

View File

@ -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);

View File

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

View File

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

View File

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