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) {