From b43db69a44d6590709510599b3cd1cd5f0c6f59d Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 10 Oct 2016 15:18:41 -0700 Subject: [PATCH] nvmf: Remove spdk_nvmf_transport from public API The details of the structure were removed earlier, but now remove all references even to a pointer to the structure. The user can refer to transports by their string name. Change-Id: I273356f46329ea5372dcd951eda6f14767477d69 Signed-off-by: Ben Walker --- app/nvmf_tgt/conf.c | 20 +++----------------- app/nvmf_tgt/nvmf_rpc.c | 2 +- include/spdk/nvmf.h | 9 ++------- lib/nvmf/subsystem.c | 24 ++++++++++++++++++++---- lib/nvmf/transport.c | 6 ------ lib/nvmf/transport.h | 2 ++ test/lib/nvmf/subsystem/subsystem_ut.c | 6 ++++++ 7 files changed, 34 insertions(+), 35 deletions(-) diff --git a/app/nvmf_tgt/conf.c b/app/nvmf_tgt/conf.c index 9e5c274e7..e5286f0b9 100644 --- a/app/nvmf_tgt/conf.c +++ b/app/nvmf_tgt/conf.c @@ -482,7 +482,6 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp) for (i = 0; i < MAX_LISTEN_ADDRESSES; i++) { char *transport_name, *listen_addr; char *traddr, *trsvcid; - const struct spdk_nvmf_transport *transport; int numa_node = -1; transport_name = spdk_conf_section_get_nmval(sp, "Listen", i, 0); @@ -492,12 +491,6 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp) break; } - transport = spdk_nvmf_transport_get(transport_name); - if (transport == NULL) { - SPDK_ERRLOG("Unknown transport type '%s'\n", transport_name); - continue; - } - ret = spdk_nvmf_parse_addr(listen_addr, &traddr, &trsvcid); if (ret < 0) { SPDK_ERRLOG("Unable to parse transport address '%s'\n", listen_addr); @@ -513,7 +506,7 @@ spdk_nvmf_parse_subsystem(struct spdk_conf_section *sp) spdk_nvmf_subsystem_get_nqn(app_subsys->subsystem)); } } - spdk_nvmf_subsystem_add_listener(subsystem, transport, traddr, trsvcid); + spdk_nvmf_subsystem_add_listener(subsystem, transport_name, traddr, trsvcid); free(traddr); free(trsvcid); @@ -711,15 +704,8 @@ spdk_nvmf_parse_subsystem_for_rpc(const char *name, /* Parse Listen sections */ for (i = 0; i < num_listen_addresses; i++) { - const struct spdk_nvmf_transport *transport; - - transport = spdk_nvmf_transport_get(addresses[i].transport); - if (transport == NULL) { - SPDK_ERRLOG("Unknown transport type '%s'\n", addresses[i].transport); - return -1; - } - - spdk_nvmf_subsystem_add_listener(subsystem, transport, addresses[i].traddr, addresses[i].trsvcid); + spdk_nvmf_subsystem_add_listener(subsystem, addresses[i].transport, addresses[i].traddr, + addresses[i].trsvcid); } /* Parse Host sections */ diff --git a/app/nvmf_tgt/nvmf_rpc.c b/app/nvmf_tgt/nvmf_rpc.c index 13b28f5fc..9e8abf9e1 100644 --- a/app/nvmf_tgt/nvmf_rpc.c +++ b/app/nvmf_tgt/nvmf_rpc.c @@ -78,7 +78,7 @@ dump_nvmf_subsystem(struct spdk_json_write_ctx *w, struct nvmf_tgt_subsystem *tg TAILQ_FOREACH(listen_addr, &subsystem->listen_addrs, link) { spdk_json_write_object_begin(w); spdk_json_write_name(w, "transport"); - spdk_json_write_string(w, spdk_nvmf_transport_get_name(listen_addr->transport)); + spdk_json_write_string(w, listen_addr->trname); spdk_json_write_name(w, "traddr"); spdk_json_write_string(w, listen_addr->traddr); spdk_json_write_name(w, "trsvcid"); diff --git a/include/spdk/nvmf.h b/include/spdk/nvmf.h index 77513a939..0fea9b7d5 100644 --- a/include/spdk/nvmf.h +++ b/include/spdk/nvmf.h @@ -63,7 +63,6 @@ struct spdk_nvmf_conn; struct spdk_nvmf_request; struct spdk_bdev; struct spdk_nvme_ctrlr; -struct spdk_nvmf_transport; struct spdk_nvmf_request; struct spdk_nvmf_conn; @@ -78,7 +77,7 @@ enum spdk_nvmf_subsystem_mode { struct spdk_nvmf_listen_addr { char *traddr; char *trsvcid; - const struct spdk_nvmf_transport *transport; + char *trname; TAILQ_ENTRY(spdk_nvmf_listen_addr) link; }; @@ -172,8 +171,7 @@ nvmf_find_subsystem(const char *subnqn, const char *hostnqn); int spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem, - const struct spdk_nvmf_transport *transport, - char *traddr, char *trsvcid); + char *trname, char *traddr, char *trsvcid); int spdk_nvmf_subsystem_add_host(struct spdk_nvmf_subsystem *subsystem, @@ -194,9 +192,6 @@ const char *spdk_nvmf_subsystem_get_nqn(struct spdk_nvmf_subsystem *subsystem); enum spdk_nvmf_subtype spdk_nvmf_subsystem_get_type(struct spdk_nvmf_subsystem *subsystem); enum spdk_nvmf_subsystem_mode spdk_nvmf_subsystem_get_mode(struct spdk_nvmf_subsystem *subsystem); -const struct spdk_nvmf_transport *spdk_nvmf_transport_get(const char *name); -const char *spdk_nvmf_transport_get_name(const struct spdk_nvmf_transport *transport); - void spdk_nvmf_acceptor_poll(void); void spdk_nvmf_handle_connect(struct spdk_nvmf_request *req); diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 48e794a85..063ed4221 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -173,6 +173,7 @@ spdk_nvmf_delete_subsystem(struct spdk_nvmf_subsystem *subsystem) TAILQ_REMOVE(&subsystem->listen_addrs, listen_addr, link); free(listen_addr->traddr); free(listen_addr->trsvcid); + free(listen_addr->trname); free(listen_addr); subsystem->num_listen_addrs--; } @@ -199,12 +200,17 @@ spdk_nvmf_delete_subsystem(struct spdk_nvmf_subsystem *subsystem) int spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem, - const struct spdk_nvmf_transport *transport, - char *traddr, char *trsvcid) + char *trname, char *traddr, char *trsvcid) { struct spdk_nvmf_listen_addr *listen_addr; + const struct spdk_nvmf_transport *transport; int rc; + transport = spdk_nvmf_transport_get(trname); + if (!transport) { + return -1; + } + listen_addr = calloc(1, sizeof(*listen_addr)); if (!listen_addr) { return -1; @@ -223,7 +229,13 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem, return -1; } - listen_addr->transport = transport; + listen_addr->trname = strdup(trname); + if (!listen_addr->trname) { + free(listen_addr->traddr); + free(listen_addr->trsvcid); + free(listen_addr); + return -1; + } TAILQ_INSERT_HEAD(&subsystem->listen_addrs, listen_addr, link); subsystem->num_listen_addrs++; @@ -280,6 +292,7 @@ spdk_format_discovery_log(struct spdk_nvmf_discovery_log_page *disc_log, uint32_ struct spdk_nvmf_subsystem *subsystem; struct spdk_nvmf_listen_addr *listen_addr; struct spdk_nvmf_discovery_log_page_entry *entry; + const struct spdk_nvmf_transport *transport; TAILQ_FOREACH(subsystem, &g_subsystems, entries) { if (subsystem->subtype == SPDK_NVMF_SUBTYPE_DISCOVERY) { @@ -300,7 +313,10 @@ spdk_format_discovery_log(struct spdk_nvmf_discovery_log_page *disc_log, uint32_ entry->subtype = subsystem->subtype; snprintf(entry->subnqn, sizeof(entry->subnqn), "%s", subsystem->subnqn); - listen_addr->transport->listen_addr_discover(listen_addr, entry); + transport = spdk_nvmf_transport_get(listen_addr->trname); + assert(transport != NULL); + + transport->listen_addr_discover(listen_addr, entry); } numrec++; } diff --git a/lib/nvmf/transport.c b/lib/nvmf/transport.c index fa99b70c3..cfef6b84e 100644 --- a/lib/nvmf/transport.c +++ b/lib/nvmf/transport.c @@ -108,9 +108,3 @@ spdk_nvmf_transport_get(const char *name) return NULL; } - -const char * -spdk_nvmf_transport_get_name(const struct spdk_nvmf_transport *transport) -{ - return transport->name; -} diff --git a/lib/nvmf/transport.h b/lib/nvmf/transport.h index cd4661ba0..f815ec06f 100644 --- a/lib/nvmf/transport.h +++ b/lib/nvmf/transport.h @@ -122,6 +122,8 @@ struct spdk_nvmf_transport { int spdk_nvmf_transport_init(void); int spdk_nvmf_transport_fini(void); +const struct spdk_nvmf_transport *spdk_nvmf_transport_get(const char *name); + extern const struct spdk_nvmf_transport spdk_nvmf_transport_rdma; #endif /* SPDK_NVMF_TRANSPORT_H */ diff --git a/test/lib/nvmf/subsystem/subsystem_ut.c b/test/lib/nvmf/subsystem/subsystem_ut.c index 371829c13..e7af5d7d7 100644 --- a/test/lib/nvmf/subsystem/subsystem_ut.c +++ b/test/lib/nvmf/subsystem/subsystem_ut.c @@ -48,6 +48,12 @@ SPDK_LOG_REGISTER_TRACE_FLAG("nvmf", SPDK_TRACE_NVMF) struct spdk_nvmf_globals g_nvmf_tgt; +const struct spdk_nvmf_transport * +spdk_nvmf_transport_get(const char *trname) +{ + return NULL; +} + int32_t spdk_nvme_ctrlr_process_admin_completions(struct spdk_nvme_ctrlr *ctrlr) {