Commit 34d6e175 authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

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: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/374877


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 02b640bf
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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();
+3 −1
Original line number Diff line number Diff line
@@ -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();
	}
+2 −0
Original line number Diff line number Diff line
@@ -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);

+15 −2
Original line number Diff line number Diff line
@@ -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);

+27 −25
Original line number Diff line number Diff line
@@ -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 *