From d86477bff3d18fca5a12770ed13edaa3cf8beecc Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 11 Jan 2021 03:15:22 +0900 Subject: [PATCH] bdev/nvme: Get nvme_ns from nvme_bdev via helper function for configuration When multipath is supported, nvme_bdev_ns will be got via bdev_subsystem. To make such change invisible, add a helper function nvme_bdev_to_bdev_ns() and use it in bdev_nvme_io_type_supported() and bdev_nvme_dump_info_json(). Inline the function and locate it in common.h to use for ocssd_bdev too. ctrlr can be got from ns using spdk_nvme_ns_get_ctrlr(). Signed-off-by: Shuhei Matsumoto Change-Id: If85c86737e8194b8e34ed62df04a3968443f23bb Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5795 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- module/bdev/nvme/bdev_nvme.c | 21 ++++++++++++++++----- module/bdev/nvme/common.h | 6 ++++++ 2 files changed, 22 insertions(+), 5 deletions(-) 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 */