From 6fa7cf97d0992a3253b85e56a4af95b0ca34491e Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 10 Jan 2023 15:42:29 +0900 Subject: [PATCH] bdev/nvme: io_complete_nvme_status() caches bio->io_path in local variable The following patches will clear bio->io_path when the error is a network path error. As a preparation, cache bio->io_path to a local variable io_path. Signed-off-by: Shuhei Matsumoto Change-Id: I0a25f4a70dd1064702b2037283bddd6e789dfae1 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16014 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- module/bdev/nvme/bdev_nvme.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index cd529997f..d0252b9d8 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1079,6 +1079,7 @@ bdev_nvme_io_complete_nvme_status(struct nvme_bdev_io *bio, { struct spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(bio); struct nvme_bdev_channel *nbdev_ch; + struct nvme_io_path *io_path; struct nvme_ctrlr *nvme_ctrlr; const struct spdk_nvme_ctrlr_data *cdata; uint64_t delay_ms; @@ -1102,16 +1103,18 @@ bdev_nvme_io_complete_nvme_status(struct nvme_bdev_io *bio, nbdev_ch = spdk_io_channel_get_ctx(spdk_bdev_io_get_io_channel(bdev_io)); assert(bio->io_path != NULL); - nvme_ctrlr = bio->io_path->qpair->ctrlr; + io_path = bio->io_path; + + nvme_ctrlr = io_path->qpair->ctrlr; if (spdk_nvme_cpl_is_path_error(cpl) || spdk_nvme_cpl_is_aborted_sq_deletion(cpl) || - !nvme_io_path_is_available(bio->io_path) || + !nvme_io_path_is_available(io_path) || !nvme_ctrlr_is_available(nvme_ctrlr)) { nbdev_ch->current_io_path = NULL; if (spdk_nvme_cpl_is_ana_error(cpl)) { if (nvme_ctrlr_read_ana_log_page(nvme_ctrlr) == 0) { - bio->io_path->nvme_ns->ana_state_updating = true; + io_path->nvme_ns->ana_state_updating = true; } } delay_ms = 0;