From 6dba57eb2666f54653573b69d99d61e582443550 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Thu, 7 Oct 2021 00:49:49 +0900 Subject: [PATCH] bdev/nvme: Use cb_arg of for_each_channel() to pass result of reset Restore the previous nice idea and unify canceling pending resets into bdev_nvme_complete_pending_resets(). cb_arg of spdk_for_each_channel() was reserved for a different purpose but it was gone. Signed-off-by: Shuhei Matsumoto Change-Id: I1c01051ae9d8eccc7fc3ec485dd344ff9f55087b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9815 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Tomasz Zawadzki --- module/bdev/nvme/bdev_nvme.c | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 42ea745d4..4df0e6b66 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -907,36 +907,22 @@ bdev_nvme_check_pending_destruct(struct spdk_io_channel_iter *i, int status) } static void -_bdev_nvme_complete_pending_resets(struct nvme_ctrlr_channel *ctrlr_ch, - enum spdk_bdev_io_status status) +bdev_nvme_complete_pending_resets(struct spdk_io_channel_iter *i) { + struct spdk_io_channel *_ch = spdk_io_channel_iter_get_channel(i); + struct nvme_ctrlr_channel *ctrlr_ch = spdk_io_channel_get_ctx(_ch); + enum spdk_bdev_io_status status = SPDK_BDEV_IO_STATUS_SUCCESS; struct spdk_bdev_io *bdev_io; + if (spdk_io_channel_iter_get_ctx(i) != NULL) { + status = SPDK_BDEV_IO_STATUS_FAILED; + } + while (!TAILQ_EMPTY(&ctrlr_ch->pending_resets)) { bdev_io = TAILQ_FIRST(&ctrlr_ch->pending_resets); TAILQ_REMOVE(&ctrlr_ch->pending_resets, bdev_io, module_link); spdk_bdev_io_complete(bdev_io, status); } -} - -static void -bdev_nvme_complete_pending_resets(struct spdk_io_channel_iter *i) -{ - struct spdk_io_channel *_ch = spdk_io_channel_iter_get_channel(i); - struct nvme_ctrlr_channel *ctrlr_ch = spdk_io_channel_get_ctx(_ch); - - _bdev_nvme_complete_pending_resets(ctrlr_ch, SPDK_BDEV_IO_STATUS_SUCCESS); - - spdk_for_each_channel_continue(i, 0); -} - -static void -bdev_nvme_abort_pending_resets(struct spdk_io_channel_iter *i) -{ - struct spdk_io_channel *_ch = spdk_io_channel_iter_get_channel(i); - struct nvme_ctrlr_channel *ctrlr_ch = spdk_io_channel_get_ctx(_ch); - - _bdev_nvme_complete_pending_resets(ctrlr_ch, SPDK_BDEV_IO_STATUS_FAILED); spdk_for_each_channel_continue(i, 0); } @@ -980,9 +966,8 @@ bdev_nvme_reset_complete(struct nvme_ctrlr *nvme_ctrlr, bool success) /* Make sure we clear any pending resets before returning. */ spdk_for_each_channel(nvme_ctrlr, - success ? bdev_nvme_complete_pending_resets : - bdev_nvme_abort_pending_resets, - NULL, + bdev_nvme_complete_pending_resets, + success ? NULL : (void *)0x1, bdev_nvme_check_pending_destruct); }