Commit cfafcc3e authored by Ben Walker's avatar Ben Walker Committed by Daniel Verkamp
Browse files

nvmf: Init transport before adding listeners



Change-Id: I1fbaca75c6b95127ff2b6ac7c0ea0f0a918b9405
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 6a78645b
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ shutdown_subsystems(void)
static void
acceptor_poller_unregistered_event(struct spdk_event *event)
{
	spdk_nvmf_transport_fini();
	nvmf_tgt_fini();
	shutdown_subsystems();
}

@@ -327,12 +327,6 @@ spdk_nvmf_startup(spdk_event_t event)
		goto initialize_error;
	}

	rc = spdk_nvmf_transport_init();
	if (rc <= 0) {
		SPDK_ERRLOG("Transport initialization failed\n");
		goto initialize_error;
	}

	spdk_poller_register(&g_acceptor_poller, acceptor_poll, NULL,
			     g_spdk_nvmf_tgt_conf.acceptor_lcore, NULL,
			     g_spdk_nvmf_tgt_conf.acceptor_poll_rate);
+0 −2
Original line number Diff line number Diff line
@@ -192,8 +192,6 @@ spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bd

int spdk_nvmf_subsystem_set_sn(struct spdk_nvmf_subsystem *subsystem, const char *sn);

int spdk_nvmf_transport_init(void);
int spdk_nvmf_transport_fini(void);
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);

+14 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ int
nvmf_tgt_init(uint16_t max_queue_depth, uint16_t max_queues_per_sess,
	      uint32_t in_capsule_data_size, uint32_t max_io_size)
{
	int rc;

	g_nvmf_tgt.max_queues_per_session = max_queues_per_sess;
	g_nvmf_tgt.max_queue_depth = max_queue_depth;
	g_nvmf_tgt.in_capsule_data_size = in_capsule_data_size;
@@ -61,9 +63,21 @@ nvmf_tgt_init(uint16_t max_queue_depth, uint16_t max_queues_per_sess,
	SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max In Capsule Data: %d bytes\n", in_capsule_data_size);
	SPDK_TRACELOG(SPDK_TRACE_NVMF, "Max I/O Size: %d bytes\n", max_io_size);

	rc = spdk_nvmf_transport_init();
	if (rc <= 0) {
		SPDK_ERRLOG("Transport initialization failed\n");
		return -1;
	}

	return 0;
}

int
nvmf_tgt_fini(void)
{
	return spdk_nvmf_transport_fini();
}

SPDK_TRACE_REGISTER_FN(nvmf_trace)
{
	spdk_trace_register_object(OBJECT_NVMF_IO, 'r');
+18 −16
Original line number Diff line number Diff line
@@ -1038,14 +1038,30 @@ static int
spdk_nvmf_rdma_init(uint16_t max_queue_depth, uint32_t max_io_size,
		    uint32_t in_capsule_data_size)
{
	int rc;

	SPDK_NOTICELOG("*** RDMA Transport Init ***\n");

	pthread_mutex_lock(&g_rdma.lock);
	g_rdma.max_queue_depth = max_queue_depth;
	g_rdma.max_io_size = max_io_size;
	g_rdma.in_capsule_data_size = in_capsule_data_size;

	g_rdma.event_channel = rdma_create_event_channel();
	if (g_rdma.event_channel == NULL) {
		SPDK_ERRLOG("rdma_create_event_channel() failed\n");
		pthread_mutex_unlock(&g_rdma.lock);
		return -1;
	}

	rc = fcntl(g_rdma.event_channel->fd, F_SETFL, O_NONBLOCK);
	if (rc < 0) {
		SPDK_ERRLOG("fcntl to set fd to non-blocking failed\n");
		pthread_mutex_unlock(&g_rdma.lock);
		return -1;
	}

	pthread_mutex_unlock(&g_rdma.lock);
	return 0;
}

@@ -1287,6 +1303,7 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_listen_addr *listen_addr)
	int rc;

	pthread_mutex_lock(&g_rdma.lock);
	assert(g_rdma.event_channel != NULL);
	TAILQ_FOREACH(addr, &g_rdma.listen_addrs, link) {
		if ((!strcasecmp(addr->traddr, listen_addr->traddr)) &&
		    (!strcasecmp(addr->trsvcid, listen_addr->trsvcid))) {
@@ -1295,21 +1312,6 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_listen_addr *listen_addr)
			return 0;
		}
	}
	if (g_rdma.event_channel == NULL) {
		g_rdma.event_channel = rdma_create_event_channel();
		if (g_rdma.event_channel == NULL) {
			SPDK_ERRLOG("rdma_create_event_channel() failed\n");
			pthread_mutex_unlock(&g_rdma.lock);
			return -1;
		}

		rc = fcntl(g_rdma.event_channel->fd, F_SETFL, O_NONBLOCK);
		if (rc < 0) {
			SPDK_ERRLOG("fcntl to set fd to non-blocking failed\n");
			pthread_mutex_unlock(&g_rdma.lock);
			return -1;
		}
	}

	addr = calloc(1, sizeof(*addr));
	if (!addr) {
+3 −0
Original line number Diff line number Diff line
@@ -107,6 +107,9 @@ struct spdk_nvmf_transport {
	int (*conn_poll)(struct spdk_nvmf_conn *conn);
};

int spdk_nvmf_transport_init(void);
int spdk_nvmf_transport_fini(void);

extern const struct spdk_nvmf_transport spdk_nvmf_transport_rdma;

#endif /* SPDK_NVMF_TRANSPORT_H */