diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 47ff7564a..a8e227959 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -806,10 +806,16 @@ static bool bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) { struct nvme_bdev *nbdev = ctx; - struct spdk_nvme_ctrlr *ctrlr = nbdev->nvme_ns->ctrlr->ctrlr; - struct spdk_nvme_ns *ns = nbdev->nvme_ns->ns; + struct nvme_bdev_ns *nvme_ns; + struct spdk_nvme_ns *ns; + struct spdk_nvme_ctrlr *ctrlr; const struct spdk_nvme_ctrlr_data *cdata; + nvme_ns = nvme_bdev_to_bdev_ns(nbdev); + assert(nvme_ns != NULL); + ns = nvme_ns->ns; + ctrlr = spdk_nvme_ns_get_ctrlr(ns); + switch (io_type) { case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_WRITE: @@ -978,15 +984,20 @@ static int bdev_nvme_dump_info_json(void *ctx, struct spdk_json_write_ctx *w) { struct nvme_bdev *nvme_bdev = ctx; - struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = nvme_bdev->nvme_ns->ctrlr; - struct spdk_nvme_ctrlr *ctrlr = nvme_bdev_ctrlr->ctrlr; + struct nvme_bdev_ns *nvme_ns; + struct spdk_nvme_ns *ns; + struct spdk_nvme_ctrlr *ctrlr; const struct spdk_nvme_ctrlr_data *cdata; const struct spdk_nvme_transport_id *trid; - struct spdk_nvme_ns *ns = nvme_bdev->nvme_ns->ns; union spdk_nvme_vs_register vs; union spdk_nvme_csts_register csts; char buf[128]; + nvme_ns = nvme_bdev_to_bdev_ns(nvme_bdev); + assert(nvme_ns != NULL); + ns = nvme_ns->ns; + ctrlr = spdk_nvme_ns_get_ctrlr(ns); + cdata = spdk_nvme_ctrlr_get_data(ctrlr); trid = spdk_nvme_ctrlr_get_transport_id(ctrlr); vs = spdk_nvme_ctrlr_get_regs_vs(ctrlr); diff --git a/module/bdev/nvme/common.h b/module/bdev/nvme/common.h index 607f553c6..e3ce2701a 100644 --- a/module/bdev/nvme/common.h +++ b/module/bdev/nvme/common.h @@ -185,4 +185,10 @@ bdev_nvme_find_io_path(struct nvme_bdev *nbdev, struct nvme_io_channel *nvme_ch, return true; } +static inline struct nvme_bdev_ns * +nvme_bdev_to_bdev_ns(struct nvme_bdev *nbdev) +{ + return nbdev->nvme_ns; +} + #endif /* SPDK_COMMON_BDEV_NVME_H */