Commit 582d8f86 authored by Ziye Yang's avatar Ziye Yang Committed by Ben Walker
Browse files

nvmf: move outstandling req list in spdk_nvmf_qpair



Purpose: To make the reqs recycle more flexible.

Change-Id: Ied37397a10dada22a7aee6bb5a316da6a0583073
Signed-off-by: default avatarZiye Yang <optimistyzy@gmail.com>
Reviewed-on: https://review.gerrithub.io/410866


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 943c7c69
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -383,6 +383,7 @@ spdk_nvmf_poll_group_add(struct spdk_nvmf_poll_group *group,
	int rc = -1;
	struct spdk_nvmf_transport_poll_group *tgroup;

	TAILQ_INIT(&qpair->outstanding);
	qpair->group = group;

	TAILQ_FOREACH(tgroup, &group->tgroups, link) {
@@ -549,7 +550,6 @@ spdk_nvmf_poll_group_add_subsystem(struct spdk_nvmf_poll_group *group,
	sgroup = &group->sgroups[subsystem->id];
	sgroup->state = SPDK_NVMF_SUBSYSTEM_ACTIVE;
	TAILQ_INIT(&sgroup->queued);
	TAILQ_INIT(&sgroup->outstanding);

	return 0;
}
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,6 @@ struct spdk_nvmf_subsystem_poll_group {
	enum spdk_nvmf_subsystem_state state;

	TAILQ_HEAD(, spdk_nvmf_request)	queued;
	TAILQ_HEAD(, spdk_nvmf_request)	outstanding;
};

struct spdk_nvmf_poll_group {
@@ -154,6 +153,7 @@ struct spdk_nvmf_qpair {
	uint16_t				sq_head;
	uint16_t				sq_head_max;

	TAILQ_HEAD(, spdk_nvmf_request)		outstanding;
	TAILQ_ENTRY(spdk_nvmf_qpair)		link;
};

+4 −15
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ int
spdk_nvmf_request_complete(struct spdk_nvmf_request *req)
{
	struct spdk_nvme_cpl *rsp = &req->rsp->nvme_cpl;
	struct spdk_nvmf_capsule_cmd *cap_hdr;

	rsp->sqid = 0;
	rsp->status.p = 0;
@@ -60,18 +59,7 @@ spdk_nvmf_request_complete(struct spdk_nvmf_request *req)
		      rsp->cid, rsp->cdw0, rsp->rsvd1,
		      *(uint16_t *)&rsp->status);

	cap_hdr = &req->cmd->nvmf_cmd;

	if (spdk_unlikely(req->cmd->nvmf_cmd.opcode == SPDK_NVME_OPC_FABRIC &&
			  cap_hdr->fctype == SPDK_NVMF_FABRIC_COMMAND_CONNECT)) {
		/* CONNECT commands don't actually get placed on the outstanding list. */
	} else {
		struct spdk_nvmf_subsystem_poll_group *sgroup;

		sgroup = &req->qpair->group->sgroups[req->qpair->ctrlr->subsys->id];
		TAILQ_REMOVE(&sgroup->outstanding, req, link);
	}

	TAILQ_REMOVE(&req->qpair->outstanding, req, link);
	if (spdk_nvmf_transport_req_complete(req)) {
		SPDK_ERRLOG("Transport request completion error!\n");
	}
@@ -140,10 +128,11 @@ spdk_nvmf_request_exec(struct spdk_nvmf_request *req)
			return;
		}

		/* Place the request on the outstanding list so we can keep track of it */
		TAILQ_INSERT_TAIL(&sgroup->outstanding, req, link);
	}

	/* Place the request on the outstanding list so we can keep track of it */
	TAILQ_INSERT_TAIL(&qpair->outstanding, req, link);

	if (spdk_unlikely(req->cmd->nvmf_cmd.opcode == SPDK_NVME_OPC_FABRIC)) {
		status = spdk_nvmf_ctrlr_process_fabrics_cmd(req);
	} else if (spdk_unlikely(spdk_nvmf_qpair_is_admin_queue(qpair))) {