From 7630daa2040b1dc1f8ffa5d4bea24ace34dd2786 Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Fri, 27 Sep 2019 13:52:21 -0700 Subject: [PATCH] nvme: move queueing requests to the generic layer The tailq and the requests all belong to the generic layer, might as well put the queueing code there for better encapsulation. Change-Id: Id5f08f798121b50a21044cfc61856999c50ca227 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469758 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvme/nvme_pcie.c | 8 ++------ lib/nvme/nvme_qpair.c | 5 +++++ lib/nvme/nvme_rdma.c | 8 ++------ lib/nvme/nvme_tcp.c | 8 ++------ 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/lib/nvme/nvme_pcie.c b/lib/nvme/nvme_pcie.c index 1f30702ec..d5ce00955 100644 --- a/lib/nvme/nvme_pcie.c +++ b/lib/nvme/nvme_pcie.c @@ -1984,12 +1984,8 @@ nvme_pcie_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_reques tr = TAILQ_FIRST(&pqpair->free_tr); if (tr == NULL) { - /* - * Put the request on the qpair's request queue to be - * processed when a tracker frees up via a command - * completion. - */ - STAILQ_INSERT_TAIL(&qpair->queued_req, req, stailq); + /* Inform the upper layer to try again later. */ + rc = -EAGAIN; goto exit; } diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 261e34153..1f3b19100 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -633,6 +633,11 @@ nvme_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_request *re return 0; } + if (rc == -EAGAIN) { + STAILQ_INSERT_TAIL(&qpair->queued_req, req, stailq); + return 0; + } + error: if (req->parent != NULL) { nvme_request_remove_child(req->parent, req); diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index c6d868a4a..65e5a5da2 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -1765,12 +1765,8 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair, rdma_req = nvme_rdma_req_get(rqpair); if (!rdma_req) { - /* - * No rdma_req is available, so queue the request to be - * processed later. - */ - STAILQ_INSERT_TAIL(&qpair->queued_req, req, stailq); - return 0; + /* Inform the upper layer to try again later. */ + return -EAGAIN; } if (nvme_rdma_req_init(rqpair, req, rdma_req)) { diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index e56b94ea1..d0f02d213 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -694,12 +694,8 @@ nvme_tcp_qpair_submit_request(struct spdk_nvme_qpair *qpair, tcp_req = nvme_tcp_req_get(tqpair); if (!tcp_req) { - /* - * No tcp_req is available, so queue the request to be - * processed later. - */ - STAILQ_INSERT_TAIL(&qpair->queued_req, req, stailq); - return 0; + /* Inform the upper layer to try again later. */ + return -EAGAIN; } if (nvme_tcp_req_init(tqpair, req, tcp_req)) {