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 <shuhei.matsumoto.xt@hitachi.com>
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 <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2021-01-11 03:15:22 +09:00 committed by Tomasz Zawadzki
parent e995690fbc
commit d86477bff3
2 changed files with 22 additions and 5 deletions

View File

@ -806,10 +806,16 @@ static bool
bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type)
{ {
struct nvme_bdev *nbdev = ctx; struct nvme_bdev *nbdev = ctx;
struct spdk_nvme_ctrlr *ctrlr = nbdev->nvme_ns->ctrlr->ctrlr; struct nvme_bdev_ns *nvme_ns;
struct spdk_nvme_ns *ns = nbdev->nvme_ns->ns; struct spdk_nvme_ns *ns;
struct spdk_nvme_ctrlr *ctrlr;
const struct spdk_nvme_ctrlr_data *cdata; 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) { switch (io_type) {
case SPDK_BDEV_IO_TYPE_READ: case SPDK_BDEV_IO_TYPE_READ:
case SPDK_BDEV_IO_TYPE_WRITE: 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) bdev_nvme_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
{ {
struct nvme_bdev *nvme_bdev = ctx; struct nvme_bdev *nvme_bdev = ctx;
struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = nvme_bdev->nvme_ns->ctrlr; struct nvme_bdev_ns *nvme_ns;
struct spdk_nvme_ctrlr *ctrlr = nvme_bdev_ctrlr->ctrlr; struct spdk_nvme_ns *ns;
struct spdk_nvme_ctrlr *ctrlr;
const struct spdk_nvme_ctrlr_data *cdata; const struct spdk_nvme_ctrlr_data *cdata;
const struct spdk_nvme_transport_id *trid; 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_vs_register vs;
union spdk_nvme_csts_register csts; union spdk_nvme_csts_register csts;
char buf[128]; 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); cdata = spdk_nvme_ctrlr_get_data(ctrlr);
trid = spdk_nvme_ctrlr_get_transport_id(ctrlr); trid = spdk_nvme_ctrlr_get_transport_id(ctrlr);
vs = spdk_nvme_ctrlr_get_regs_vs(ctrlr); vs = spdk_nvme_ctrlr_get_regs_vs(ctrlr);

View File

@ -185,4 +185,10 @@ bdev_nvme_find_io_path(struct nvme_bdev *nbdev, struct nvme_io_channel *nvme_ch,
return true; 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 */ #endif /* SPDK_COMMON_BDEV_NVME_H */