nvmf: Init transport before adding listeners
Change-Id: I1fbaca75c6b95127ff2b6ac7c0ea0f0a918b9405 Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
6a78645bae
commit
cfafcc3edd
@ -118,7 +118,7 @@ shutdown_subsystems(void)
|
|||||||
static void
|
static void
|
||||||
acceptor_poller_unregistered_event(struct spdk_event *event)
|
acceptor_poller_unregistered_event(struct spdk_event *event)
|
||||||
{
|
{
|
||||||
spdk_nvmf_transport_fini();
|
nvmf_tgt_fini();
|
||||||
shutdown_subsystems();
|
shutdown_subsystems();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,12 +327,6 @@ spdk_nvmf_startup(spdk_event_t event)
|
|||||||
goto initialize_error;
|
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,
|
spdk_poller_register(&g_acceptor_poller, acceptor_poll, NULL,
|
||||||
g_spdk_nvmf_tgt_conf.acceptor_lcore, NULL,
|
g_spdk_nvmf_tgt_conf.acceptor_lcore, NULL,
|
||||||
g_spdk_nvmf_tgt_conf.acceptor_poll_rate);
|
g_spdk_nvmf_tgt_conf.acceptor_poll_rate);
|
||||||
|
@ -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_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 struct spdk_nvmf_transport *spdk_nvmf_transport_get(const char *name);
|
||||||
const char *spdk_nvmf_transport_get_name(const struct spdk_nvmf_transport *transport);
|
const char *spdk_nvmf_transport_get_name(const struct spdk_nvmf_transport *transport);
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ int
|
|||||||
nvmf_tgt_init(uint16_t max_queue_depth, uint16_t max_queues_per_sess,
|
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)
|
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_queues_per_session = max_queues_per_sess;
|
||||||
g_nvmf_tgt.max_queue_depth = max_queue_depth;
|
g_nvmf_tgt.max_queue_depth = max_queue_depth;
|
||||||
g_nvmf_tgt.in_capsule_data_size = in_capsule_data_size;
|
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 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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
nvmf_tgt_fini(void)
|
||||||
|
{
|
||||||
|
return spdk_nvmf_transport_fini();
|
||||||
|
}
|
||||||
|
|
||||||
SPDK_TRACE_REGISTER_FN(nvmf_trace)
|
SPDK_TRACE_REGISTER_FN(nvmf_trace)
|
||||||
{
|
{
|
||||||
spdk_trace_register_object(OBJECT_NVMF_IO, 'r');
|
spdk_trace_register_object(OBJECT_NVMF_IO, 'r');
|
||||||
|
@ -1038,14 +1038,30 @@ static int
|
|||||||
spdk_nvmf_rdma_init(uint16_t max_queue_depth, uint32_t max_io_size,
|
spdk_nvmf_rdma_init(uint16_t max_queue_depth, uint32_t max_io_size,
|
||||||
uint32_t in_capsule_data_size)
|
uint32_t in_capsule_data_size)
|
||||||
{
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
SPDK_NOTICELOG("*** RDMA Transport Init ***\n");
|
SPDK_NOTICELOG("*** RDMA Transport Init ***\n");
|
||||||
|
|
||||||
pthread_mutex_lock(&g_rdma.lock);
|
pthread_mutex_lock(&g_rdma.lock);
|
||||||
g_rdma.max_queue_depth = max_queue_depth;
|
g_rdma.max_queue_depth = max_queue_depth;
|
||||||
g_rdma.max_io_size = max_io_size;
|
g_rdma.max_io_size = max_io_size;
|
||||||
g_rdma.in_capsule_data_size = in_capsule_data_size;
|
g_rdma.in_capsule_data_size = in_capsule_data_size;
|
||||||
pthread_mutex_unlock(&g_rdma.lock);
|
|
||||||
|
|
||||||
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1287,6 +1303,7 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_listen_addr *listen_addr)
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
pthread_mutex_lock(&g_rdma.lock);
|
pthread_mutex_lock(&g_rdma.lock);
|
||||||
|
assert(g_rdma.event_channel != NULL);
|
||||||
TAILQ_FOREACH(addr, &g_rdma.listen_addrs, link) {
|
TAILQ_FOREACH(addr, &g_rdma.listen_addrs, link) {
|
||||||
if ((!strcasecmp(addr->traddr, listen_addr->traddr)) &&
|
if ((!strcasecmp(addr->traddr, listen_addr->traddr)) &&
|
||||||
(!strcasecmp(addr->trsvcid, listen_addr->trsvcid))) {
|
(!strcasecmp(addr->trsvcid, listen_addr->trsvcid))) {
|
||||||
@ -1295,21 +1312,6 @@ spdk_nvmf_rdma_listen(struct spdk_nvmf_listen_addr *listen_addr)
|
|||||||
return 0;
|
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));
|
addr = calloc(1, sizeof(*addr));
|
||||||
if (!addr) {
|
if (!addr) {
|
||||||
|
@ -107,6 +107,9 @@ struct spdk_nvmf_transport {
|
|||||||
int (*conn_poll)(struct spdk_nvmf_conn *conn);
|
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;
|
extern const struct spdk_nvmf_transport spdk_nvmf_transport_rdma;
|
||||||
|
|
||||||
#endif /* SPDK_NVMF_TRANSPORT_H */
|
#endif /* SPDK_NVMF_TRANSPORT_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user