nvmf: Add wrappers for transport calls
Instead of scattering direct calls to the function callbacks throughout the code, add some wrappers. This will make some later refactoring marginally easier. Change-Id: If735089967e3ce828dcff68f2430e7810bf2f123 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/371749 Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
parent
31d033f944
commit
a4e28342a8
@ -163,7 +163,7 @@ nvmf_init_nvme_ctrlr_properties(struct spdk_nvmf_ctrlr *ctrlr)
|
||||
static void ctrlr_destruct(struct spdk_nvmf_ctrlr *ctrlr)
|
||||
{
|
||||
TAILQ_REMOVE(&ctrlr->subsys->ctrlrs, ctrlr, link);
|
||||
ctrlr->transport->ops->ctrlr_fini(ctrlr);
|
||||
spdk_nvmf_transport_ctrlr_fini(ctrlr);
|
||||
}
|
||||
|
||||
void
|
||||
@ -174,7 +174,7 @@ spdk_nvmf_ctrlr_destruct(struct spdk_nvmf_ctrlr *ctrlr)
|
||||
|
||||
TAILQ_REMOVE(&ctrlr->qpairs, qpair, link);
|
||||
ctrlr->num_qpairs--;
|
||||
qpair->transport->ops->qpair_fini(qpair);
|
||||
spdk_nvmf_transport_qpair_fini(qpair);
|
||||
}
|
||||
|
||||
ctrlr_destruct(ctrlr);
|
||||
@ -288,7 +288,7 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair,
|
||||
}
|
||||
|
||||
/* Establish a new ctrlr */
|
||||
ctrlr = qpair->transport->ops->ctrlr_init(qpair->transport);
|
||||
ctrlr = spdk_nvmf_transport_ctrlr_init(qpair->transport);
|
||||
if (ctrlr == NULL) {
|
||||
SPDK_ERRLOG("Memory allocation failure\n");
|
||||
rsp->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
||||
@ -313,9 +313,9 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair,
|
||||
|
||||
memcpy(ctrlr->hostid, data->hostid, sizeof(ctrlr->hostid));
|
||||
|
||||
if (qpair->transport->ops->ctrlr_add_qpair(ctrlr, qpair)) {
|
||||
if (spdk_nvmf_transport_ctrlr_add_qpair(ctrlr, qpair)) {
|
||||
rsp->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
||||
qpair->transport->ops->ctrlr_fini(ctrlr);
|
||||
spdk_nvmf_transport_ctrlr_fini(ctrlr);
|
||||
free(ctrlr);
|
||||
return;
|
||||
}
|
||||
@ -374,7 +374,7 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair,
|
||||
return;
|
||||
}
|
||||
|
||||
if (qpair->transport->ops->ctrlr_add_qpair(ctrlr, qpair)) {
|
||||
if (spdk_nvmf_transport_ctrlr_add_qpair(ctrlr, qpair)) {
|
||||
INVALID_CONNECT_CMD(qid);
|
||||
return;
|
||||
}
|
||||
@ -399,8 +399,8 @@ spdk_nvmf_ctrlr_disconnect(struct spdk_nvmf_qpair *qpair)
|
||||
ctrlr->num_qpairs--;
|
||||
TAILQ_REMOVE(&ctrlr->qpairs, qpair, link);
|
||||
|
||||
qpair->transport->ops->ctrlr_remove_qpair(ctrlr, qpair);
|
||||
qpair->transport->ops->qpair_fini(qpair);
|
||||
spdk_nvmf_transport_ctrlr_remove_qpair(ctrlr, qpair);
|
||||
spdk_nvmf_transport_qpair_fini(qpair);
|
||||
|
||||
if (ctrlr->num_qpairs == 0) {
|
||||
ctrlr_destruct(ctrlr);
|
||||
@ -654,7 +654,7 @@ spdk_nvmf_ctrlr_poll(struct spdk_nvmf_ctrlr *ctrlr)
|
||||
}
|
||||
|
||||
TAILQ_FOREACH_SAFE(qpair, &ctrlr->qpairs, link, tmp) {
|
||||
if (qpair->transport->ops->qpair_poll(qpair) < 0) {
|
||||
if (spdk_nvmf_transport_qpair_poll(qpair) < 0) {
|
||||
SPDK_ERRLOG("Transport poll failed for qpair %p; closing connection\n", qpair);
|
||||
spdk_nvmf_ctrlr_disconnect(qpair);
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ nvmf_update_discovery_log(void)
|
||||
transport = spdk_nvmf_tgt_get_transport(&g_nvmf_tgt, listen_addr->trid.trtype);
|
||||
assert(transport != NULL);
|
||||
|
||||
transport->ops->listen_addr_discover(transport, listen_addr, entry);
|
||||
spdk_nvmf_transport_listen_addr_discover(transport, listen_addr, entry);
|
||||
|
||||
numrec++;
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
|
||||
return;
|
||||
}
|
||||
|
||||
transport->ops->listen_addr_remove(transport, addr);
|
||||
spdk_nvmf_transport_listen_addr_remove(transport, addr);
|
||||
free(addr);
|
||||
}
|
||||
|
||||
@ -143,7 +143,7 @@ spdk_nvmf_tgt_poll(void)
|
||||
struct spdk_nvmf_transport *transport, *tmp;
|
||||
|
||||
TAILQ_FOREACH_SAFE(transport, &g_nvmf_tgt.transports, link, tmp) {
|
||||
transport->ops->acceptor_poll(transport);
|
||||
spdk_nvmf_transport_acceptor_poll(transport);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ spdk_nvmf_request_complete(struct spdk_nvmf_request *req)
|
||||
response->cid, response->cdw0, response->rsvd1,
|
||||
*(uint16_t *)&response->status);
|
||||
|
||||
if (req->qpair->transport->ops->req_complete(req)) {
|
||||
if (spdk_nvmf_transport_req_complete(req)) {
|
||||
SPDK_ERRLOG("Transport request completion error!\n");
|
||||
return -1;
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ nvmf_subsystem_removable(struct spdk_nvmf_subsystem *subsystem)
|
||||
if (subsystem->is_removed) {
|
||||
TAILQ_FOREACH(ctrlr, &subsystem->ctrlrs, link) {
|
||||
TAILQ_FOREACH(qpair, &ctrlr->qpairs, link) {
|
||||
if (!qpair->transport->ops->qpair_is_idle(qpair)) {
|
||||
if (!spdk_nvmf_transport_qpair_is_idle(qpair)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -287,7 +287,7 @@ spdk_nvmf_tgt_listen(struct spdk_nvme_transport_id *trid)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
rc = transport->ops->listen_addr_add(transport, listen_addr);
|
||||
rc = spdk_nvmf_transport_listen_addr_add(transport, listen_addr);
|
||||
if (rc < 0) {
|
||||
free(listen_addr);
|
||||
SPDK_ERRLOG("Unable to listen on address '%s'\n", trid->traddr);
|
||||
|
@ -40,7 +40,9 @@
|
||||
#include "spdk/queue.h"
|
||||
#include "spdk/util.h"
|
||||
|
||||
#include "ctrlr.h"
|
||||
#include "nvmf_internal.h"
|
||||
#include "request.h"
|
||||
|
||||
static const struct spdk_nvmf_transport_ops *const g_transport_ops[] = {
|
||||
#ifdef SPDK_CONFIG_RDMA
|
||||
@ -91,7 +93,93 @@ spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport)
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_transport_poll(struct spdk_nvmf_transport *transport)
|
||||
spdk_nvmf_transport_acceptor_poll(struct spdk_nvmf_transport *transport)
|
||||
{
|
||||
transport->ops->acceptor_poll(transport);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_listen_addr_add(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
{
|
||||
return transport->ops->listen_addr_add(transport, listen_addr);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_listen_addr_remove(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
{
|
||||
return transport->ops->listen_addr_remove(transport, listen_addr);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
transport->ops->listen_addr_discover(transport, listen_addr, entry);
|
||||
}
|
||||
|
||||
struct spdk_nvmf_ctrlr *
|
||||
spdk_nvmf_transport_ctrlr_init(struct spdk_nvmf_transport *transport)
|
||||
{
|
||||
struct spdk_nvmf_ctrlr *ctrlr;
|
||||
|
||||
ctrlr = transport->ops->ctrlr_init(transport);
|
||||
ctrlr->transport = transport;
|
||||
|
||||
return ctrlr;
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_transport_ctrlr_fini(struct spdk_nvmf_ctrlr *ctrlr)
|
||||
{
|
||||
ctrlr->transport->ops->ctrlr_fini(ctrlr);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_ctrlr_add_qpair(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
if (qpair->transport) {
|
||||
assert(qpair->transport == ctrlr->transport);
|
||||
if (qpair->transport != ctrlr->transport) {
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
qpair->transport = ctrlr->transport;
|
||||
}
|
||||
|
||||
return ctrlr->transport->ops->ctrlr_add_qpair(ctrlr, qpair);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_ctrlr_remove_qpair(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return ctrlr->transport->ops->ctrlr_remove_qpair(ctrlr, qpair);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_req_complete(struct spdk_nvmf_request *req)
|
||||
{
|
||||
return req->qpair->transport->ops->req_complete(req);
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_transport_qpair_fini(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
qpair->transport->ops->qpair_fini(qpair);
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_qpair_poll(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return qpair->transport->ops->qpair_poll(qpair);
|
||||
}
|
||||
|
||||
bool
|
||||
spdk_nvmf_transport_qpair_is_idle(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return qpair->transport->ops->qpair_is_idle(qpair);
|
||||
}
|
||||
|
@ -136,7 +136,35 @@ struct spdk_nvmf_transport *spdk_nvmf_transport_create(struct spdk_nvmf_tgt *tgt
|
||||
enum spdk_nvme_transport_type type);
|
||||
int spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport);
|
||||
|
||||
void spdk_nvmf_transport_poll(struct spdk_nvmf_transport *transport);
|
||||
void spdk_nvmf_transport_acceptor_poll(struct spdk_nvmf_transport *transport);
|
||||
|
||||
int spdk_nvmf_transport_listen_addr_add(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr);
|
||||
|
||||
int spdk_nvmf_transport_listen_addr_remove(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr);
|
||||
|
||||
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);
|
||||
|
||||
struct spdk_nvmf_ctrlr *spdk_nvmf_transport_ctrlr_init(struct spdk_nvmf_transport *transport);
|
||||
|
||||
void spdk_nvmf_transport_ctrlr_fini(struct spdk_nvmf_ctrlr *ctrlr);
|
||||
|
||||
int spdk_nvmf_transport_ctrlr_add_qpair(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
struct spdk_nvmf_qpair *qpair);
|
||||
|
||||
int spdk_nvmf_transport_ctrlr_remove_qpair(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
struct spdk_nvmf_qpair *qpair);
|
||||
|
||||
int spdk_nvmf_transport_req_complete(struct spdk_nvmf_request *req);
|
||||
|
||||
void spdk_nvmf_transport_qpair_fini(struct spdk_nvmf_qpair *qpair);
|
||||
|
||||
int spdk_nvmf_transport_qpair_poll(struct spdk_nvmf_qpair *qpair);
|
||||
|
||||
bool spdk_nvmf_transport_qpair_is_idle(struct spdk_nvmf_qpair *qpair);
|
||||
|
||||
extern const struct spdk_nvmf_transport_ops spdk_nvmf_transport_rdma;
|
||||
|
||||
|
@ -59,6 +59,42 @@ spdk_nvme_ctrlr_get_data(struct spdk_nvme_ctrlr *ctrlr)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct spdk_nvmf_ctrlr *
|
||||
spdk_nvmf_transport_ctrlr_init(struct spdk_nvmf_transport *transport)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_transport_ctrlr_fini(struct spdk_nvmf_ctrlr *ctrlr)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_transport_qpair_fini(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_ctrlr_add_qpair(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_ctrlr_remove_qpair(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_qpair_poll(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
test_foobar(void)
|
||||
{
|
||||
|
@ -79,37 +79,30 @@ spdk_bdev_get_name(const struct spdk_bdev *bdev)
|
||||
return "test";
|
||||
}
|
||||
|
||||
static int
|
||||
test_transport1_listen_addr_add(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
int
|
||||
spdk_nvmf_transport_listen_addr_add(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
test_transport1_listen_addr_discover(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr,
|
||||
struct spdk_nvmf_discovery_log_page_entry *entry)
|
||||
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)
|
||||
{
|
||||
entry->trtype = 42;
|
||||
}
|
||||
|
||||
static const struct spdk_nvmf_transport_ops test_transport1_ops = {
|
||||
.listen_addr_add = test_transport1_listen_addr_add,
|
||||
.listen_addr_discover = test_transport1_listen_addr_discover,
|
||||
};
|
||||
|
||||
static struct spdk_nvmf_transport test_transport1 = {
|
||||
.ops = &test_transport1_ops,
|
||||
};
|
||||
static struct spdk_nvmf_transport g_transport = {};
|
||||
|
||||
struct spdk_nvmf_transport *
|
||||
spdk_nvmf_transport_create(struct spdk_nvmf_tgt *tgt,
|
||||
enum spdk_nvme_transport_type type)
|
||||
{
|
||||
if (type == SPDK_NVME_TRANSPORT_RDMA) {
|
||||
test_transport1.tgt = tgt;
|
||||
return &test_transport1;
|
||||
g_transport.tgt = tgt;
|
||||
return &g_transport;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -118,12 +111,13 @@ spdk_nvmf_transport_create(struct spdk_nvmf_tgt *tgt,
|
||||
struct spdk_nvmf_transport *
|
||||
spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_type trtype)
|
||||
{
|
||||
if (trtype == SPDK_NVME_TRANSPORT_RDMA) {
|
||||
test_transport1.tgt = tgt;
|
||||
return &test_transport1;
|
||||
}
|
||||
return &g_transport;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
bool
|
||||
spdk_nvmf_transport_qpair_is_idle(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -44,6 +44,12 @@ void spdk_trace_record(uint16_t tpoint_id, uint16_t poller_id, uint32_t size,
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvmf_transport_req_complete(struct spdk_nvmf_request *req)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_ctrlr_connect(struct spdk_nvmf_qpair *qpair,
|
||||
struct spdk_nvmf_fabric_connect_cmd *cmd,
|
||||
|
@ -66,37 +66,36 @@ spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr)
|
||||
free(addr);
|
||||
}
|
||||
|
||||
static int
|
||||
test_transport1_listen_addr_add(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
int
|
||||
spdk_nvmf_transport_listen_addr_add(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
test_transport1_listen_addr_discover(struct spdk_nvmf_transport *transport,
|
||||
struct spdk_nvmf_listen_addr *listen_addr,
|
||||
struct spdk_nvmf_discovery_log_page_entry *entry)
|
||||
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)
|
||||
{
|
||||
entry->trtype = 42;
|
||||
}
|
||||
|
||||
static const struct spdk_nvmf_transport_ops test_transport1_ops = {
|
||||
.listen_addr_add = test_transport1_listen_addr_add,
|
||||
.listen_addr_discover = test_transport1_listen_addr_discover,
|
||||
};
|
||||
bool
|
||||
spdk_nvmf_transport_qpair_is_idle(struct spdk_nvmf_qpair *qpair)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static struct spdk_nvmf_transport test_transport1 = {
|
||||
.ops = &test_transport1_ops,
|
||||
};
|
||||
static struct spdk_nvmf_transport g_transport = {};
|
||||
|
||||
struct spdk_nvmf_transport *
|
||||
spdk_nvmf_transport_create(struct spdk_nvmf_tgt *tgt,
|
||||
enum spdk_nvme_transport_type type)
|
||||
{
|
||||
if (type == SPDK_NVME_TRANSPORT_RDMA) {
|
||||
test_transport1.tgt = tgt;
|
||||
return &test_transport1;
|
||||
g_transport.tgt = tgt;
|
||||
return &g_transport;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -106,8 +105,7 @@ struct spdk_nvmf_transport *
|
||||
spdk_nvmf_tgt_get_transport(struct spdk_nvmf_tgt *tgt, enum spdk_nvme_transport_type trtype)
|
||||
{
|
||||
if (trtype == SPDK_NVME_TRANSPORT_RDMA) {
|
||||
test_transport1.tgt = tgt;
|
||||
return &test_transport1;
|
||||
return &g_transport;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user