From 21bff991976e549438de724ed64ac1c07ffd80e4 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 10 Mar 2021 19:44:52 +0900 Subject: [PATCH] bdev/ocssd: Get spdk_nvme_ctrlr from not nvme_bdev_ctrlr but spdk_nvme_ns in I/O paths The following patches will cache and use spdk_nvme_ns pointer rather than nvme_bdev_ns pointer in I/O paths. As a preparation, change a few cases to get spdk_nvme_ctrlr pointer from spdk_nvme_ns. Signed-off-by: Shuhei Matsumoto Change-Id: Ief5f01f85f46e2ad822af5b5abb13a14f28a0c6a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6834 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris Reviewed-by: Changpeng Liu Reviewed-by: Aleksey Marchuk Tested-by: SPDK CI Jenkins --- module/bdev/nvme/bdev_ocssd.c | 8 +++++--- test/unit/lib/bdev/nvme/bdev_ocssd.c/bdev_ocssd_ut.c | 8 ++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index bea5dabdd..38dfd96e5 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -680,7 +680,7 @@ _bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nv lba = zone_id + ocdev_io->zone_info.chunk_offset * zone_size; offset = bdev_ocssd_to_chunk_info_offset(ocssd_ns, lba); - return spdk_nvme_ctrlr_cmd_get_log_page(nvme_ns->ctrlr->ctrlr, + return spdk_nvme_ctrlr_cmd_get_log_page(spdk_nvme_ns_get_ctrlr(nvme_ns->ns), SPDK_OCSSD_LOG_CHUNK_INFO, spdk_nvme_ns_get_id(nvme_ns->ns), &ocdev_io->zone_info.chunk_info, @@ -1173,13 +1173,15 @@ bdev_occsd_init_zone_cb(void *ctx, const struct spdk_nvme_cpl *cpl) static int bdev_ocssd_init_zone(struct bdev_ocssd_create_ctx *create_ctx) { + struct spdk_nvme_ns *ns = create_ctx->nvme_ns->ns; + create_ctx->num_chunks = spdk_min(create_ctx->end_chunk_offset - create_ctx->chunk_offset, OCSSD_BDEV_CHUNK_INFO_COUNT); assert(create_ctx->num_chunks > 0); - return spdk_nvme_ctrlr_cmd_get_log_page(create_ctx->nvme_ns->ctrlr->ctrlr, + return spdk_nvme_ctrlr_cmd_get_log_page(spdk_nvme_ns_get_ctrlr(ns), SPDK_OCSSD_LOG_CHUNK_INFO, - spdk_nvme_ns_get_id(create_ctx->nvme_ns->ns), + spdk_nvme_ns_get_id(ns), &create_ctx->chunk_info, sizeof(create_ctx->chunk_info[0]) * create_ctx->num_chunks, diff --git a/test/unit/lib/bdev/nvme/bdev_ocssd.c/bdev_ocssd_ut.c b/test/unit/lib/bdev/nvme/bdev_ocssd.c/bdev_ocssd_ut.c index 24c85a31d..b547b49e0 100644 --- a/test/unit/lib/bdev/nvme/bdev_ocssd.c/bdev_ocssd_ut.c +++ b/test/unit/lib/bdev/nvme/bdev_ocssd.c/bdev_ocssd_ut.c @@ -73,6 +73,7 @@ struct spdk_nvme_qpair { struct spdk_nvme_ns { uint32_t nsid; + struct spdk_nvme_ctrlr *ctrlr; }; struct spdk_nvme_ctrlr { @@ -156,6 +157,7 @@ create_controller(const struct spdk_nvme_transport_id *trid, uint32_t ns_count, for (nsid = 0; nsid < ns_count; ++nsid) { ctrlr->ns[nsid].nsid = nsid + 1; + ctrlr->ns[nsid].ctrlr = ctrlr; } ctrlr->geometry = *geo; @@ -282,6 +284,12 @@ spdk_nvme_ns_get_id(struct spdk_nvme_ns *ns) return ns->nsid; } +struct spdk_nvme_ctrlr * +spdk_nvme_ns_get_ctrlr(struct spdk_nvme_ns *ns) +{ + return ns->ctrlr; +} + struct spdk_nvme_ns * spdk_nvme_ctrlr_get_ns(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid) {