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 <smatsumoto@nvidia.com>
Change-Id: I0a25f4a70dd1064702b2037283bddd6e789dfae1
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16014
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2023-01-10 15:42:29 +09:00 committed by Jim Harris
parent 02acec4e26
commit 6fa7cf97d0

View File

@ -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 spdk_bdev_io *bdev_io = spdk_bdev_io_from_ctx(bio);
struct nvme_bdev_channel *nbdev_ch; struct nvme_bdev_channel *nbdev_ch;
struct nvme_io_path *io_path;
struct nvme_ctrlr *nvme_ctrlr; struct nvme_ctrlr *nvme_ctrlr;
const struct spdk_nvme_ctrlr_data *cdata; const struct spdk_nvme_ctrlr_data *cdata;
uint64_t delay_ms; 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)); nbdev_ch = spdk_io_channel_get_ctx(spdk_bdev_io_get_io_channel(bdev_io));
assert(bio->io_path != NULL); 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) || if (spdk_nvme_cpl_is_path_error(cpl) ||
spdk_nvme_cpl_is_aborted_sq_deletion(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)) { !nvme_ctrlr_is_available(nvme_ctrlr)) {
nbdev_ch->current_io_path = NULL; nbdev_ch->current_io_path = NULL;
if (spdk_nvme_cpl_is_ana_error(cpl)) { if (spdk_nvme_cpl_is_ana_error(cpl)) {
if (nvme_ctrlr_read_ana_log_page(nvme_ctrlr) == 0) { 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; delay_ms = 0;