From a0ea25239913a865b2449ea27909d2489fadb840 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Sun, 11 Apr 2021 17:56:02 +0900 Subject: [PATCH] bdev/nvme: Factor out reset_io completion into a helper function This will be helpful to simplify the following patches. Signed-off-by: Shuhei Matsumoto Change-Id: I66939f2953c66582bfcb79cfe187814280e89680 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7324 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk --- module/bdev/nvme/bdev_nvme.c | 38 ++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index e041759d1..31b18e989 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -481,18 +481,36 @@ bdev_nvme_abort_pending_resets(struct spdk_io_channel_iter *i) spdk_for_each_channel_continue(i, 0); } +static void +bdev_nvme_reset_io_complete(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, + struct nvme_bdev_io *bio, int rc) +{ + enum spdk_bdev_io_status io_status = SPDK_BDEV_IO_STATUS_SUCCESS; + + if (rc) { + io_status = SPDK_BDEV_IO_STATUS_FAILED; + } + + spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bio), io_status); + + /* Make sure we clear any pending resets before returning. */ + spdk_for_each_channel(nvme_bdev_ctrlr, + rc == 0 ? bdev_nvme_complete_pending_resets : + bdev_nvme_abort_pending_resets, + nvme_bdev_ctrlr, + _bdev_nvme_check_pending_destruct); +} + static void _bdev_nvme_reset_complete(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, int rc) { struct nvme_bdev_ctrlr_trid *curr_trid; struct nvme_bdev_io *bio = nvme_bdev_ctrlr->reset_bio; - enum spdk_bdev_io_status io_status = SPDK_BDEV_IO_STATUS_SUCCESS; nvme_bdev_ctrlr->reset_bio = NULL; if (rc) { SPDK_ERRLOG("Resetting controller failed.\n"); - io_status = SPDK_BDEV_IO_STATUS_FAILED; } else { SPDK_NOTICELOG("Resetting controller successful.\n"); } @@ -515,15 +533,15 @@ _bdev_nvme_reset_complete(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, int rc) pthread_mutex_unlock(&nvme_bdev_ctrlr->mutex); if (bio) { - spdk_bdev_io_complete(spdk_bdev_io_from_ctx(bio), io_status); + bdev_nvme_reset_io_complete(nvme_bdev_ctrlr, bio, rc); + } else { + /* Make sure we clear any pending resets before returning. */ + spdk_for_each_channel(nvme_bdev_ctrlr, + rc == 0 ? bdev_nvme_complete_pending_resets : + bdev_nvme_abort_pending_resets, + nvme_bdev_ctrlr, + _bdev_nvme_check_pending_destruct); } - - /* Make sure we clear any pending resets before returning. */ - spdk_for_each_channel(nvme_bdev_ctrlr, - rc == 0 ? bdev_nvme_complete_pending_resets : - bdev_nvme_abort_pending_resets, - nvme_bdev_ctrlr, - _bdev_nvme_check_pending_destruct); } static void