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:
parent
d5268e6c25
commit
d0733ff3b7
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user