From 37184dd4716093e27c5a9e17e6303ba288b0d080 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Tue, 21 May 2019 03:12:31 -0700 Subject: [PATCH] nvme: add nvme_free_request() variant that takes qpair This avoids dereferencing the request to get the qpair in cases where we already know the qpair. Adding a new variant instead of just modifying nvme_free_request() since there are 72 calls to this function and I don't want to change all of them. Signed-off-by: Jim Harris Change-Id: Ifd6fd964e546bcd71ff180fd71d5bf5cbab79d4f Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/455287 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Shuhei Matsumoto --- lib/nvme/nvme_internal.h | 9 +++++++++ lib/nvme/nvme_pcie.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 267764983..9262dcd1b 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -960,6 +960,15 @@ nvme_free_request(struct nvme_request *req) STAILQ_INSERT_HEAD(&req->qpair->free_req, req, stailq); } +static inline void +nvme_qpair_free_request(struct spdk_nvme_qpair *qpair, struct nvme_request *req) +{ + assert(req != NULL); + assert(req->num_children == 0); + + STAILQ_INSERT_HEAD(&qpair->free_req, req, stailq); +} + void nvme_request_remove_child(struct nvme_request *parent, struct nvme_request *child); int nvme_request_check_timeout(struct nvme_request *req, uint16_t cid, struct spdk_nvme_ctrlr_process *active_proc, uint64_t now_tick); diff --git a/lib/nvme/nvme_pcie.c b/lib/nvme/nvme_pcie.c index d6c16ba71..1d89cbb95 100644 --- a/lib/nvme/nvme_pcie.c +++ b/lib/nvme/nvme_pcie.c @@ -1316,7 +1316,7 @@ nvme_pcie_qpair_complete_tracker(struct spdk_nvme_qpair *qpair, struct nvme_trac } if (req_from_current_proc == true) { - nvme_free_request(req); + nvme_qpair_free_request(qpair, req); } tr->req = NULL;