From 5cf9b5c52d6a78f7f387b8c18e04f561fa0fb4a9 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Thu, 15 Apr 2021 21:11:09 +0800 Subject: [PATCH] nvmf/vfio-user: add request abort callback support Change-Id: I068e74f5b7d078ad37572eff47e772ad6967b827 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7436 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvmf/vfio_user.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/nvmf/vfio_user.c b/lib/nvmf/vfio_user.c index 8ff31628c..1dc9f0dd5 100644 --- a/lib/nvmf/vfio_user.c +++ b/lib/nvmf/vfio_user.c @@ -2395,6 +2395,34 @@ nvmf_vfio_user_qpair_get_listen_trid(struct spdk_nvmf_qpair *qpair, return 0; } +static void +nvmf_vfio_user_qpair_abort_request(struct spdk_nvmf_qpair *qpair, + struct spdk_nvmf_request *req) +{ + struct nvmf_vfio_user_qpair *vu_qpair; + struct nvmf_vfio_user_req *vu_req, *vu_req_to_abort = NULL; + uint16_t i, cid; + + vu_qpair = SPDK_CONTAINEROF(qpair, struct nvmf_vfio_user_qpair, qpair); + + cid = req->cmd->nvme_cmd.cdw10_bits.abort.cid; + for (i = 0; i < vu_qpair->qsize; i++) { + vu_req = &vu_qpair->reqs_internal[i]; + if (vu_req->state == VFIO_USER_REQUEST_STATE_EXECUTING && vu_req->cmd.cid == cid) { + vu_req_to_abort = vu_req; + break; + } + } + + if (vu_req_to_abort == NULL) { + spdk_nvmf_request_complete(req); + return; + } + + req->req_to_abort = &vu_req_to_abort->req; + nvmf_ctrlr_abort_request(req); +} + static void nvmf_vfio_user_opts_init(struct spdk_nvmf_transport_opts *opts) { @@ -2436,6 +2464,7 @@ const struct spdk_nvmf_transport_ops spdk_nvmf_transport_vfio_user = { .qpair_get_local_trid = nvmf_vfio_user_qpair_get_local_trid, .qpair_get_peer_trid = nvmf_vfio_user_qpair_get_peer_trid, .qpair_get_listen_trid = nvmf_vfio_user_qpair_get_listen_trid, + .qpair_abort_request = nvmf_vfio_user_qpair_abort_request, }; SPDK_NVMF_TRANSPORT_REGISTER(muser, &spdk_nvmf_transport_vfio_user);