nvmf: Remove spdk_nvmf_listen_addr

Everywhere this is used, we can just use
spdk_nvme_transport_id instead.

Change-Id: I407c812cd6a1ca3afcb3d1fe87c7e22183b09d7a
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/375461
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:
Ben Walker 2017-08-23 10:23:44 -07:00 committed by Jim Harris
parent ff4f68a55f
commit 6428de9e34
11 changed files with 60 additions and 159 deletions

View File

@ -362,8 +362,7 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
{
struct spdk_nvmf_subsystem *subsystem;
struct nvmf_tgt_subsystem *app_subsys;
struct spdk_nvmf_listen_addr *listen_addr;
int i;
int i, rc;
uint64_t mask;
struct spdk_bdev *bdev;
const char *namespace;
@ -429,8 +428,8 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
snprintf(trid.traddr, sizeof(trid.traddr), "%s", addresses[i].traddr);
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "%s", addresses[i].trsvcid);
listen_addr = spdk_nvmf_tgt_listen(g_tgt, &trid);
if (listen_addr == NULL) {
rc = spdk_nvmf_tgt_listen(g_tgt, &trid);
if (rc) {
SPDK_ERRLOG("Failed to listen on transport %s, adrfam %s, traddr %s, trsvcid %s\n",
addresses[i].transport,
addresses[i].adrfam,
@ -438,7 +437,7 @@ spdk_nvmf_construct_subsystem(const char *name, int32_t lcore,
addresses[i].trsvcid);
goto error;
}
spdk_nvmf_subsystem_add_listener(subsystem, listen_addr);
spdk_nvmf_subsystem_add_listener(subsystem, &trid);
}
/* Parse Host sections */

View File

@ -77,9 +77,14 @@ void spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt);
* The connections will be matched with a subsystem, which may or may not allow
* the connection based on a subsystem-specific whitelist. See
* spdk_nvmf_subsystem_add_host() and spdk_nvmf_subsystem_add_listener()
*
* \param tgt The target associated with this listen address
* \param trid The address to listen at
*
* \return 0 on success. Negated errno on failure.
*/
struct spdk_nvmf_listen_addr *spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
struct spdk_nvme_transport_id *trid);
int spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
struct spdk_nvme_transport_id *trid);
/**
* Poll the target for incoming connections.
@ -98,11 +103,6 @@ struct spdk_nvmf_listener;
typedef void (*spdk_nvmf_subsystem_connect_fn)(void *cb_ctx, struct spdk_nvmf_request *req);
typedef void (*spdk_nvmf_subsystem_disconnect_fn)(void *cb_ctx, struct spdk_nvmf_qpair *qpair);
struct spdk_nvmf_listen_addr {
struct spdk_nvme_transport_id trid;
TAILQ_ENTRY(spdk_nvmf_listen_addr) link;
};
/*
* The NVMf subsystem, as indicated in the specification, is a collection
* of controllers. Any individual controller has
@ -180,21 +180,21 @@ const char *spdk_nvmf_host_get_nqn(struct spdk_nvmf_host *host);
* Accept new connections on the address provided
*
* \param subsystem Subsystem to add listener to
* \param listen_addr The address to listen on.
* \param trid The address to accept connections from
* \return 0 on success. Negated errno value on failure.
*/
int spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
struct spdk_nvmf_listen_addr *listen_addr);
struct spdk_nvme_transport_id *trid);
/**
* Check if connections originated from the given address are allowed to connect to the subsystem.
*
* \param subsystem The subsystem to query
* \param listen_addr The listen address
* \param trid The listen address
* \return true if allowed, false if not.
*/
bool spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
struct spdk_nvmf_listen_addr *listen_addr);
struct spdk_nvme_transport_id *trid);
/**
* Return the first allowed listen address in the subsystem.

View File

@ -56,7 +56,6 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
uint64_t numrec = 0;
struct spdk_nvmf_subsystem *subsystem;
struct spdk_nvmf_listener *listener;
struct spdk_nvmf_listen_addr *listen_addr;
struct spdk_nvmf_discovery_log_page_entry *entry;
struct spdk_nvmf_transport *transport;
struct spdk_nvmf_discovery_log_page *disc_log;
@ -87,8 +86,6 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
break;
}
listen_addr = listener->listen_addr;
disc_log = new_log_page;
cur_size = new_size;
@ -100,10 +97,10 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
entry->subtype = subsystem->subtype;
snprintf(entry->subnqn, sizeof(entry->subnqn), "%s", subsystem->subnqn);
transport = spdk_nvmf_tgt_get_transport(tgt, listen_addr->trid.trtype);
transport = spdk_nvmf_tgt_get_transport(tgt, listener->trid.trtype);
assert(transport != NULL);
spdk_nvmf_transport_listen_addr_discover(transport, listen_addr, entry);
spdk_nvmf_transport_listener_discover(transport, &listener->trid, entry);
numrec++;
}

View File

@ -81,7 +81,6 @@ spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts)
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_DEBUGLOG(SPDK_TRACE_NVMF, "Max Queue Pairs Per Controller: %d\n",
@ -97,63 +96,41 @@ spdk_nvmf_tgt_create(struct spdk_nvmf_tgt_opts *opts)
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, &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, &tgt->transports, link, transport_tmp) {
TAILQ_REMOVE(&tgt->transports, transport, link);
spdk_nvmf_transport_destroy(transport);
}
}
struct spdk_nvmf_listen_addr *
int
spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
struct spdk_nvme_transport_id *trid)
{
struct spdk_nvmf_listen_addr *listen_addr;
struct spdk_nvmf_transport *transport;
int rc;
TAILQ_FOREACH(listen_addr, &tgt->listen_addrs, link) {
if (spdk_nvme_transport_id_compare(&listen_addr->trid, trid) == 0) {
return listen_addr;
}
}
transport = spdk_nvmf_tgt_get_transport(tgt, trid->trtype);
if (!transport) {
transport = spdk_nvmf_transport_create(tgt, trid->trtype);
if (!transport) {
SPDK_ERRLOG("Transport initialization failed\n");
return NULL;
return -EINVAL;
}
TAILQ_INSERT_TAIL(&tgt->transports, transport, link);
}
listen_addr = spdk_nvmf_listen_addr_create(trid);
if (!listen_addr) {
return NULL;
}
rc = spdk_nvmf_transport_listen(transport, trid);
if (rc < 0) {
free(listen_addr);
SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
return NULL;
return -EINVAL;
}
TAILQ_INSERT_HEAD(&tgt->listen_addrs, listen_addr, link);
tgt->discovery_genctr++;
return listen_addr;
return 0;
}
struct spdk_nvmf_subsystem *
@ -232,36 +209,6 @@ spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_
return NULL;
}
struct spdk_nvmf_listen_addr *
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
{
struct spdk_nvmf_listen_addr *listen_addr;
listen_addr = calloc(1, sizeof(*listen_addr));
if (!listen_addr) {
return NULL;
}
listen_addr->trid = *trid;
return listen_addr;
}
void
spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
{
struct spdk_nvmf_transport *transport;
transport = spdk_nvmf_tgt_get_transport(&g_nvmf_tgt, addr->trid.trtype);
if (!transport) {
SPDK_ERRLOG("Attempted to destroy listener without a valid transport\n");
return;
}
spdk_nvmf_transport_stop_listen(transport, &addr->trid);
free(addr);
}
void
spdk_nvmf_tgt_accept(struct spdk_nvmf_tgt *tgt)
{

View File

@ -53,7 +53,6 @@ struct spdk_nvmf_tgt {
TAILQ_HEAD(, spdk_nvmf_subsystem) subsystems;
struct spdk_nvmf_discovery_log_page *discovery_log_page;
size_t discovery_log_page_size;
TAILQ_HEAD(, spdk_nvmf_listen_addr) listen_addrs;
uint32_t current_subsystem_id;
TAILQ_HEAD(, spdk_nvmf_transport) transports;
};
@ -64,7 +63,7 @@ struct spdk_nvmf_host {
};
struct spdk_nvmf_listener {
struct spdk_nvmf_listen_addr *listen_addr;
struct spdk_nvme_transport_id trid;
TAILQ_ENTRY(spdk_nvmf_listener) link;
};
@ -111,9 +110,6 @@ struct spdk_nvmf_subsystem {
extern struct spdk_nvmf_tgt g_nvmf_tgt;
struct spdk_nvmf_listen_addr *spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid);
void spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr);
uint16_t spdk_nvmf_tgt_gen_cntlid(struct spdk_nvmf_tgt *tgt);
struct spdk_nvmf_transport *spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt,

View File

@ -1176,11 +1176,17 @@ static int
spdk_nvmf_rdma_destroy(struct spdk_nvmf_transport *transport)
{
struct spdk_nvmf_rdma_transport *rtransport;
struct spdk_nvmf_rdma_port *port, *port_tmp;
struct spdk_nvmf_rdma_device *device, *device_tmp;
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
assert(TAILQ_EMPTY(&rtransport->ports));
TAILQ_FOREACH_SAFE(port, &rtransport->ports, link, port_tmp) {
TAILQ_REMOVE(&rtransport->ports, port, link);
rdma_destroy_id(port->id);
free(port);
}
if (rtransport->event_channel != NULL) {
rdma_destroy_event_channel(rtransport->event_channel);
}
@ -1414,15 +1420,15 @@ spdk_nvmf_rdma_accept(struct spdk_nvmf_transport *transport)
static void
spdk_nvmf_rdma_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvmf_listen_addr *port,
struct spdk_nvme_transport_id *trid,
struct spdk_nvmf_discovery_log_page_entry *entry)
{
entry->trtype = SPDK_NVMF_TRTYPE_RDMA;
entry->adrfam = port->trid.adrfam;
entry->adrfam = trid->adrfam;
entry->treq.secure_channel = SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_SPECIFIED;
spdk_strcpy_pad(entry->trsvcid, port->trid.trsvcid, sizeof(entry->trsvcid), ' ');
spdk_strcpy_pad(entry->traddr, port->trid.traddr, sizeof(entry->traddr), ' ');
spdk_strcpy_pad(entry->trsvcid, trid->trsvcid, sizeof(entry->trsvcid), ' ');
spdk_strcpy_pad(entry->traddr, trid->traddr, sizeof(entry->traddr), ' ');
entry->tsas.rdma.rdma_qptype = SPDK_NVMF_RDMA_QPTYPE_RELIABLE_CONNECTED;
entry->tsas.rdma.rdma_prtype = SPDK_NVMF_RDMA_PRTYPE_NONE;
@ -1703,7 +1709,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_rdma = {
.stop_listen = spdk_nvmf_rdma_stop_listen,
.accept = spdk_nvmf_rdma_accept,
.listen_addr_discover = spdk_nvmf_rdma_discover,
.listener_discover = spdk_nvmf_rdma_discover,
.poll_group_create = spdk_nvmf_rdma_poll_group_create,
.poll_group_destroy = spdk_nvmf_rdma_poll_group_destroy,

View File

@ -277,7 +277,7 @@ spdk_nvmf_host_get_nqn(struct spdk_nvmf_host *host)
int
spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
struct spdk_nvmf_listen_addr *listen_addr)
struct spdk_nvme_transport_id *trid)
{
struct spdk_nvmf_listener *listener;
@ -286,7 +286,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
return -1;
}
listener->listen_addr = listen_addr;
listener->trid = *trid;
TAILQ_INSERT_HEAD(&subsystem->listeners, listener, link);
@ -298,7 +298,7 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem,
*/
bool
spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
struct spdk_nvmf_listen_addr *listen_addr)
struct spdk_nvme_transport_id *trid)
{
struct spdk_nvmf_listener *listener;
@ -307,7 +307,7 @@ spdk_nvmf_subsystem_listener_allowed(struct spdk_nvmf_subsystem *subsystem,
}
TAILQ_FOREACH(listener, &subsystem->listeners, link) {
if (listener->listen_addr == listen_addr) {
if (spdk_nvme_transport_id_compare(&listener->trid, trid) == 0) {
return true;
}
}
@ -332,7 +332,7 @@ spdk_nvmf_subsystem_get_next_listener(struct spdk_nvmf_subsystem *subsystem,
const struct spdk_nvme_transport_id *
spdk_nvmf_listener_get_trid(struct spdk_nvmf_listener *listener)
{
return &listener->listen_addr->trid;
return &listener->trid;
}
static void spdk_nvmf_ctrlr_hot_remove(void *remove_ctx)

View File

@ -113,11 +113,11 @@ spdk_nvmf_transport_accept(struct spdk_nvmf_transport *transport)
}
void
spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvmf_listen_addr *listen_addr,
struct spdk_nvmf_discovery_log_page_entry *entry)
spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvme_transport_id *trid,
struct spdk_nvmf_discovery_log_page_entry *entry)
{
transport->ops->listen_addr_discover(transport, listen_addr, entry);
transport->ops->listener_discover(transport, trid, entry);
}
struct spdk_nvmf_poll_group *

View File

@ -39,8 +39,6 @@
#include "spdk/nvme.h"
#include "spdk/nvmf.h"
struct spdk_nvmf_listen_addr;
struct spdk_nvmf_transport {
struct spdk_nvmf_tgt *tgt;
const struct spdk_nvmf_transport_ops *ops;
@ -85,9 +83,9 @@ struct spdk_nvmf_transport_ops {
/**
* Fill out a discovery log entry for a specific listen address.
*/
void (*listen_addr_discover)(struct spdk_nvmf_transport *transport,
struct spdk_nvmf_listen_addr *listen_addr,
struct spdk_nvmf_discovery_log_page_entry *entry);
void (*listener_discover)(struct spdk_nvmf_transport *transport,
struct spdk_nvme_transport_id *trid,
struct spdk_nvmf_discovery_log_page_entry *entry);
/**
* Create a new poll group
@ -145,8 +143,8 @@ int spdk_nvmf_transport_stop_listen(struct spdk_nvmf_transport *transport,
void spdk_nvmf_transport_accept(struct spdk_nvmf_transport *transport);
void spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvmf_listen_addr *listen_addr,
void spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvme_transport_id *trid,
struct spdk_nvmf_discovery_log_page_entry *entry);
struct spdk_nvmf_poll_group *spdk_nvmf_transport_poll_group_create(struct spdk_nvmf_transport

View File

@ -43,27 +43,6 @@ struct spdk_nvmf_tgt g_nvmf_tgt = {
.subsystems = TAILQ_HEAD_INITIALIZER(g_nvmf_tgt.subsystems)
};
struct spdk_nvmf_listen_addr *
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
{
struct spdk_nvmf_listen_addr *listen_addr;
listen_addr = calloc(1, sizeof(*listen_addr));
if (!listen_addr) {
return NULL;
}
listen_addr->trid = *trid;
return listen_addr;
}
void
spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
{
free(addr);
}
int
spdk_bdev_open(struct spdk_bdev *bdev, bool write, spdk_bdev_remove_cb_t remove_cb,
void *remove_ctx, struct spdk_bdev_desc **desc)
@ -85,9 +64,9 @@ spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
}
void
spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvmf_listen_addr *listen_addr,
struct spdk_nvmf_discovery_log_page_entry *entry)
spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvme_transport_id *trid,
struct spdk_nvmf_discovery_log_page_entry *entry)
{
entry->trtype = 42;
}
@ -186,7 +165,7 @@ test_discovery_log(void)
uint8_t buffer[8192];
struct spdk_nvmf_discovery_log_page *disc_log;
struct spdk_nvmf_discovery_log_page_entry *entry;
struct spdk_nvmf_listen_addr listen_addr = {};
struct spdk_nvme_transport_id trid = {};
/* Reset discovery-related globals */
g_nvmf_tgt.discovery_genctr = 0;
@ -200,11 +179,11 @@ test_discovery_log(void)
NULL, NULL, NULL);
SPDK_CU_ASSERT_FATAL(subsystem != NULL);
listen_addr.trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
listen_addr.trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
snprintf(listen_addr.trid.traddr, sizeof(listen_addr.trid.traddr), "1234");
snprintf(listen_addr.trid.trsvcid, sizeof(listen_addr.trid.trsvcid), "5678");
SPDK_CU_ASSERT_FATAL(spdk_nvmf_subsystem_add_listener(subsystem, &listen_addr) == 0);
trid.trtype = SPDK_NVME_TRANSPORT_RDMA;
trid.adrfam = SPDK_NVMF_ADRFAM_IPV4;
snprintf(trid.traddr, sizeof(trid.traddr), "1234");
snprintf(trid.trsvcid, sizeof(trid.trsvcid), "5678");
SPDK_CU_ASSERT_FATAL(spdk_nvmf_subsystem_add_listener(subsystem, &trid) == 0);
/* Get only genctr (first field in the header) */
memset(buffer, 0xCC, sizeof(buffer));

View File

@ -53,27 +53,6 @@ spdk_nvmf_subsystem_bdev_detach(struct spdk_nvmf_subsystem *subsystem)
{
}
struct spdk_nvmf_listen_addr *
spdk_nvmf_listen_addr_create(struct spdk_nvme_transport_id *trid)
{
struct spdk_nvmf_listen_addr *listen_addr;
listen_addr = calloc(1, sizeof(*listen_addr));
if (!listen_addr) {
return NULL;
}
listen_addr->trid = *trid;
return listen_addr;
}
void
spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
{
free(addr);
}
int
spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
const struct spdk_nvme_transport_id *trid)
@ -82,9 +61,9 @@ spdk_nvmf_transport_listen(struct spdk_nvmf_transport *transport,
}
void
spdk_nvmf_transport_listen_addr_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvmf_listen_addr *listen_addr,
struct spdk_nvmf_discovery_log_page_entry *entry)
spdk_nvmf_transport_listener_discover(struct spdk_nvmf_transport *transport,
struct spdk_nvme_transport_id *trid,
struct spdk_nvmf_discovery_log_page_entry *entry)
{
entry->trtype = 42;
}