From 5cbc1d5cae3f3bc2ba8c4ee42306ea1b5f9806ab Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 22 May 2020 07:13:18 +0900 Subject: [PATCH] lib/nvme: Factor out retry queued abort into a helper function To reuse the code for the upcoming new function spdk_nvme_ctrlr_cmd_abort_ext(), factor out the operation to retry queued abort into an new helper function nvme_ctrlr_retry_queued_abort(). Signed-off-by: Shuhei Matsumoto Change-Id: I56bdfefe2c54990c9fd0463303b3d65ccf6e8942 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2493 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Reviewed-by: Michael Haeuptle Reviewed-by: Jim Harris --- lib/nvme/nvme_ctrlr_cmd.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/nvme/nvme_ctrlr_cmd.c b/lib/nvme/nvme_ctrlr_cmd.c index e17937cd7..fe3144eb9 100644 --- a/lib/nvme/nvme_ctrlr_cmd.c +++ b/lib/nvme/nvme_ctrlr_cmd.c @@ -565,16 +565,11 @@ spdk_nvme_ctrlr_cmd_get_log_page(struct spdk_nvme_ctrlr *ctrlr, uint8_t log_page } static void -nvme_ctrlr_cmd_abort_cpl(void *ctx, const struct spdk_nvme_cpl *cpl) +nvme_ctrlr_retry_queued_abort(struct spdk_nvme_ctrlr *ctrlr) { - struct nvme_request *req, *next, *tmp; - struct spdk_nvme_ctrlr *ctrlr; - int rc; + struct nvme_request *next, *tmp; + int rc; - req = ctx; - ctrlr = (struct spdk_nvme_ctrlr *)req->user_buffer; - - ctrlr->outstanding_aborts--; STAILQ_FOREACH_SAFE(next, &ctrlr->queued_aborts, stailq, tmp) { STAILQ_REMOVE_HEAD(&ctrlr->queued_aborts, stailq); ctrlr->outstanding_aborts++; @@ -592,6 +587,19 @@ nvme_ctrlr_cmd_abort_cpl(void *ctx, const struct spdk_nvme_cpl *cpl) break; } } +} + +static void +nvme_ctrlr_cmd_abort_cpl(void *ctx, const struct spdk_nvme_cpl *cpl) +{ + struct nvme_request *req; + struct spdk_nvme_ctrlr *ctrlr; + + req = ctx; + ctrlr = (struct spdk_nvme_ctrlr *)req->user_buffer; + + ctrlr->outstanding_aborts--; + nvme_ctrlr_retry_queued_abort(ctrlr); req->user_cb_fn(req->user_cb_arg, cpl); }