From d0733ff3b7ddb1fd7a538887028cc98f763fdf07 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 29 Nov 2017 13:59:10 -0700 Subject: [PATCH] nvmf: qpairs now point to their poll group instead of thread There is a 1:1 correspondence between the two, but it is much more useful to have a pointer to the poll group. Change-Id: I8494b0573a9b2cce5819545548d0c65a18bdbe86 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/389640 Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris Tested-by: SPDK Automated Test System --- lib/nvmf/ctrlr.c | 3 --- lib/nvmf/nvmf.c | 4 ++++ lib/nvmf/nvmf_internal.h | 3 +-- lib/nvmf/rdma.c | 4 +++- lib/nvmf/request.c | 7 +++++-- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 18675e75c..7a3b5aab6 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -324,9 +324,6 @@ spdk_nvmf_ctrlr_connect(struct spdk_nvmf_request *req) } } - assert(qpair->thread == NULL); - qpair->thread = spdk_get_thread(); - ctrlr->num_qpairs++; TAILQ_INSERT_HEAD(&ctrlr->qpairs, qpair, link); qpair->ctrlr = ctrlr; diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 30c3d9dca..bfc1638be 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -361,6 +361,8 @@ spdk_nvmf_poll_group_add(struct spdk_nvmf_poll_group *group, int rc = -1; struct spdk_nvmf_transport_poll_group *tgroup; + qpair->group = group; + TAILQ_FOREACH(tgroup, &group->tgroups, link) { if (tgroup->transport == qpair->transport) { rc = spdk_nvmf_transport_poll_group_add(tgroup, qpair); @@ -378,6 +380,8 @@ spdk_nvmf_poll_group_remove(struct spdk_nvmf_poll_group *group, int rc = -1; struct spdk_nvmf_transport_poll_group *tgroup; + qpair->group = NULL; + TAILQ_FOREACH(tgroup, &group->tgroups, link) { if (tgroup->transport == qpair->transport) { rc = spdk_nvmf_transport_poll_group_remove(tgroup, qpair); diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index c612e53c0..8abdcc5c5 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -140,10 +140,9 @@ enum spdk_nvmf_qpair_type { struct spdk_nvmf_qpair { struct spdk_nvmf_transport *transport; struct spdk_nvmf_ctrlr *ctrlr; + struct spdk_nvmf_poll_group *group; enum spdk_nvmf_qpair_type type; - struct spdk_thread *thread; - uint16_t qid; uint16_t sq_head; uint16_t sq_head_max; diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 700b55d32..cd8773415 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -744,6 +744,7 @@ nvmf_rdma_disconnect(struct rdma_cm_event *evt) struct spdk_nvmf_ctrlr *ctrlr; struct spdk_nvmf_rdma_qpair *rdma_qpair; struct spdk_nvmf_rdma_qpair *r, *t; + struct spdk_io_channel *ch; if (evt->id == NULL) { SPDK_ERRLOG("disconnect request: missing cm_id\n"); @@ -781,7 +782,8 @@ nvmf_rdma_disconnect(struct rdma_cm_event *evt) return 0; } - spdk_thread_send_msg(qpair->thread, nvmf_rdma_handle_disconnect, qpair); + ch = spdk_io_channel_from_ctx(qpair->group); + spdk_thread_send_msg(spdk_io_channel_get_thread(ch), nvmf_rdma_handle_disconnect, qpair); return 0; } diff --git a/lib/nvmf/request.c b/lib/nvmf/request.c index 36821f2f0..e4ec44937 100644 --- a/lib/nvmf/request.c +++ b/lib/nvmf/request.c @@ -71,9 +71,12 @@ spdk_nvmf_request_complete(struct spdk_nvmf_request *req) if ((cmd->opc == SPDK_NVME_OPC_FABRIC || req->qpair->type == QPAIR_TYPE_AQ) && - req->qpair->thread) { + req->qpair->group) { + struct spdk_io_channel *ch; + + ch = spdk_io_channel_from_ctx(req->qpair->group); /* Pass a message back to the originating thread. */ - spdk_thread_send_msg(req->qpair->thread, + spdk_thread_send_msg(spdk_io_channel_get_thread(ch), spdk_nvmf_request_complete_on_qpair, req); } else {