nvmf: spdk_nvmf_tgt_init is now spdk_nvmf_tgt_create
This new function returns a reference to the target object. This sets the library up to support multiple targets in the future. Change-Id: Id803dbcbb166eca33d8d5c381d9db97628606f3e Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/374877 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
02b640bfdf
commit
34d6e17598
@ -181,10 +181,10 @@ spdk_nvmf_parse_nvmf_tgt(void)
|
||||
}
|
||||
g_spdk_nvmf_tgt_conf.acceptor_poll_rate = acceptor_poll_rate;
|
||||
|
||||
rc = spdk_nvmf_tgt_init(&opts);
|
||||
if (rc != 0) {
|
||||
SPDK_ERRLOG("spdk_nvmf_tgt_init() failed\n");
|
||||
return rc;
|
||||
g_tgt = spdk_nvmf_tgt_create(&opts);
|
||||
if (!g_tgt) {
|
||||
SPDK_ERRLOG("spdk_nvmf_tgt_create() failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = spdk_add_nvmf_discovery_subsystem();
|
||||
|
@ -40,6 +40,8 @@
|
||||
#include "spdk/log.h"
|
||||
#include "spdk/nvme.h"
|
||||
|
||||
struct spdk_nvmf_tgt *g_tgt = NULL;
|
||||
|
||||
static struct spdk_poller *g_acceptor_poller = NULL;
|
||||
|
||||
static TAILQ_HEAD(, nvmf_tgt_subsystem) g_subsystems = TAILQ_HEAD_INITIALIZER(g_subsystems);
|
||||
@ -63,7 +65,7 @@ subsystem_delete_event(void *arg1, void *arg2)
|
||||
spdk_nvmf_delete_subsystem(subsystem);
|
||||
|
||||
if (g_subsystems_shutdown && TAILQ_EMPTY(&g_subsystems)) {
|
||||
spdk_nvmf_tgt_fini();
|
||||
spdk_nvmf_tgt_destroy(g_tgt);
|
||||
/* Finished shutting down all subsystems - continue the shutdown process. */
|
||||
shutdown_complete();
|
||||
}
|
||||
|
@ -63,6 +63,8 @@ struct nvmf_tgt_subsystem {
|
||||
|
||||
extern struct spdk_nvmf_tgt_conf g_spdk_nvmf_tgt_conf;
|
||||
|
||||
extern struct spdk_nvmf_tgt *g_tgt;
|
||||
|
||||
struct nvmf_tgt_subsystem *
|
||||
nvmf_tgt_subsystem_first(void);
|
||||
|
||||
|
@ -48,6 +48,8 @@
|
||||
#define MAX_VIRTUAL_NAMESPACE 16
|
||||
#define MAX_SN_LEN 20
|
||||
|
||||
struct spdk_nvmf_tgt;
|
||||
|
||||
struct spdk_nvmf_tgt_opts {
|
||||
uint16_t max_queue_depth;
|
||||
uint16_t max_qpairs_per_ctrlr;
|
||||
@ -57,9 +59,20 @@ struct spdk_nvmf_tgt_opts {
|
||||
|
||||
void spdk_nvmf_tgt_opts_init(struct spdk_nvmf_tgt_opts *opts);
|
||||
|
||||
int spdk_nvmf_tgt_init(struct spdk_nvmf_tgt_opts *opts);
|
||||
/**
|
||||
* Construct an NVMe-oF target
|
||||
*
|
||||
* \param opts Options
|
||||
* \return An spdk_nvmf_tgt on success, NULL on failure.
|
||||
*/
|
||||
struct spdk_nvmf_tgt *spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts);
|
||||
|
||||
int spdk_nvmf_tgt_fini(void);
|
||||
/**
|
||||
* Destroy an NVMe-oF target
|
||||
*
|
||||
* \param tgt The target to destroy. This releases all resources.
|
||||
*/
|
||||
void spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt);
|
||||
|
||||
int spdk_nvmf_check_pools(void);
|
||||
|
||||
|
@ -62,52 +62,54 @@ spdk_nvmf_tgt_opts_init(struct spdk_nvmf_tgt_opts *opts)
|
||||
opts->max_io_size = SPDK_NVMF_DEFAULT_MAX_IO_SIZE;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_tgt_init(struct spdk_nvmf_tgt_opts *opts)
|
||||
struct spdk_nvmf_tgt *
|
||||
spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts)
|
||||
{
|
||||
struct spdk_nvmf_tgt *tgt;
|
||||
|
||||
tgt = &g_nvmf_tgt;
|
||||
|
||||
if (!opts) {
|
||||
spdk_nvmf_tgt_opts_init(&g_nvmf_tgt.opts);
|
||||
spdk_nvmf_tgt_opts_init(&tgt->opts);
|
||||
} else {
|
||||
g_nvmf_tgt.opts = *opts;
|
||||
tgt->opts = *opts;
|
||||
}
|
||||
|
||||
g_nvmf_tgt.discovery_genctr = 0;
|
||||
g_nvmf_tgt.discovery_log_page = NULL;
|
||||
g_nvmf_tgt.discovery_log_page_size = 0;
|
||||
g_nvmf_tgt.current_subsystem_id = 0;
|
||||
TAILQ_INIT(&g_nvmf_tgt.subsystems);
|
||||
TAILQ_INIT(&g_nvmf_tgt.listen_addrs);
|
||||
TAILQ_INIT(&g_nvmf_tgt.transports);
|
||||
tgt->discovery_genctr = 0;
|
||||
tgt->discovery_log_page = NULL;
|
||||
tgt->discovery_log_page_size = 0;
|
||||
tgt->current_subsystem_id = 0;
|
||||
TAILQ_INIT(&tgt->subsystems);
|
||||
TAILQ_INIT(&tgt->listen_addrs);
|
||||
TAILQ_INIT(&tgt->transports);
|
||||
|
||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max Queue Pairs Per Controller: %d\n",
|
||||
g_nvmf_tgt.opts.max_qpairs_per_ctrlr);
|
||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max Queue Depth: %d\n", g_nvmf_tgt.opts.max_queue_depth);
|
||||
tgt->opts.max_qpairs_per_ctrlr);
|
||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max Queue Depth: %d\n", tgt->opts.max_queue_depth);
|
||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max In Capsule Data: %d bytes\n",
|
||||
g_nvmf_tgt.opts.in_capsule_data_size);
|
||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max I/O Size: %d bytes\n", g_nvmf_tgt.opts.max_io_size);
|
||||
tgt->opts.in_capsule_data_size);
|
||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max I/O Size: %d bytes\n", tgt->opts.max_io_size);
|
||||
|
||||
return 0;
|
||||
return tgt;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_tgt_fini(void)
|
||||
void
|
||||
spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt)
|
||||
{
|
||||
struct spdk_nvmf_listen_addr *listen_addr, *listen_addr_tmp;
|
||||
struct spdk_nvmf_transport *transport, *transport_tmp;
|
||||
|
||||
TAILQ_FOREACH_SAFE(listen_addr, &g_nvmf_tgt.listen_addrs, link, listen_addr_tmp) {
|
||||
TAILQ_REMOVE(&g_nvmf_tgt.listen_addrs, listen_addr, link);
|
||||
g_nvmf_tgt.discovery_genctr++;
|
||||
TAILQ_FOREACH_SAFE(listen_addr, &tgt->listen_addrs, link, listen_addr_tmp) {
|
||||
TAILQ_REMOVE(&tgt->listen_addrs, listen_addr, link);
|
||||
tgt->discovery_genctr++;
|
||||
|
||||
spdk_nvmf_listen_addr_destroy(listen_addr);
|
||||
}
|
||||
|
||||
TAILQ_FOREACH_SAFE(transport, &g_nvmf_tgt.transports, link, transport_tmp) {
|
||||
TAILQ_REMOVE(&g_nvmf_tgt.transports, transport, link);
|
||||
TAILQ_FOREACH_SAFE(transport, &tgt->transports, link, transport_tmp) {
|
||||
TAILQ_REMOVE(&tgt->transports, transport, link);
|
||||
spdk_nvmf_transport_destroy(transport);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct spdk_nvmf_transport *
|
||||
|
Loading…
Reference in New Issue
Block a user