From a8beb79ea303f2574ac5960d2bab2c16a558bd04 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Sun, 21 Jun 2020 21:11:20 +0900 Subject: [PATCH] lib/nvmf: Add nvmf_ctrlr_abort_request() to call nvmf_bdev_ctrlr_abort_cmd() from transport If nvmf_ctrlr_abort_request() returns SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE, the caller is responsible to call spdk_nvmf_request_complete(). Signed-off-by: Shuhei Matsumoto Change-Id: I6ed5f8611bcacd20385dd925b9b2e29ed2200269 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3006 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: Michael Haeuptle --- lib/nvmf/ctrlr.c | 18 ++++++++++++++++++ lib/nvmf/nvmf_internal.h | 3 +++ 2 files changed, 21 insertions(+) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 5c0e48487..957c24cf5 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -2165,6 +2165,24 @@ nvmf_ctrlr_abort(struct spdk_nvmf_request *req) return SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS; } +int +nvmf_ctrlr_abort_request(struct spdk_nvmf_request *req, + struct spdk_nvmf_request *req_to_abort) +{ + struct spdk_bdev *bdev; + struct spdk_bdev_desc *desc; + struct spdk_io_channel *ch; + int rc; + + rc = spdk_nvmf_request_get_bdev(req_to_abort->cmd->nvme_cmd.nsid, req_to_abort, + &bdev, &desc, &ch); + if (rc != 0) { + return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; + } + + return nvmf_bdev_ctrlr_abort_cmd(bdev, desc, ch, req, req_to_abort); +} + static int get_features_generic(struct spdk_nvmf_request *req, uint32_t cdw0) { diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index c2fea0594..de7c20bbe 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -352,6 +352,9 @@ void nvmf_ctrlr_abort_aer(struct spdk_nvmf_ctrlr *ctrlr); */ void nvmf_qpair_free_aer(struct spdk_nvmf_qpair *qpair); +int nvmf_ctrlr_abort_request(struct spdk_nvmf_request *req, + struct spdk_nvmf_request *req_to_abort); + static inline struct spdk_nvmf_ns * _nvmf_subsystem_get_ns(struct spdk_nvmf_subsystem *subsystem, uint32_t nsid) {