Commit d0733ff3 authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

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: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/389640


Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
parent d5268e6c
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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);
+1 −2
Original line number Diff line number Diff line
@@ -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;
+3 −1
Original line number Diff line number Diff line
@@ -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;
}
+5 −2
Original line number Diff line number Diff line
@@ -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 {