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 <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/389640
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Ben Walker 2017-11-29 13:59:10 -07:00 committed by Jim Harris
parent d5268e6c25
commit d0733ff3b7
5 changed files with 13 additions and 8 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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 {