bdev/ocssd: Add nvme_bdev_ns to struct create_ctx and use it

Add nvme_bdev_ns pointer to struct bdev_ocssd_create_ctx and use it.
This will be helpful for the upcoming patches because nvme_bdev will
not hold nvme_bdev_ns directly and will have to be got via nvme_bdev_subsystem
instead.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I8417ecb049fe7a3f50793db1d570733227f4f6b1
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5556
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Shuhei Matsumoto 2020-12-11 06:32:02 +09:00 committed by Tomasz Zawadzki
parent 15f29bbe83
commit c885010fbf

View File

@ -1084,6 +1084,7 @@ static struct spdk_bdev_fn_table ocssdlib_fn_table = {
struct bdev_ocssd_create_ctx { struct bdev_ocssd_create_ctx {
struct ocssd_bdev *ocssd_bdev; struct ocssd_bdev *ocssd_bdev;
struct nvme_bdev_ns *nvme_ns;
bdev_ocssd_create_cb cb_fn; bdev_ocssd_create_cb cb_fn;
void *cb_arg; void *cb_arg;
const struct bdev_ocssd_range *range; const struct bdev_ocssd_range *range;
@ -1113,13 +1114,12 @@ static void
bdev_ocssd_register_bdev(void *ctx) bdev_ocssd_register_bdev(void *ctx)
{ {
struct bdev_ocssd_create_ctx *create_ctx = ctx; struct bdev_ocssd_create_ctx *create_ctx = ctx;
struct ocssd_bdev *ocssd_bdev = create_ctx->ocssd_bdev; struct nvme_bdev *nvme_bdev = &create_ctx->ocssd_bdev->nvme_bdev;
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
int rc; int rc;
rc = spdk_bdev_register(&nvme_bdev->disk); rc = spdk_bdev_register(&nvme_bdev->disk);
if (spdk_likely(rc == 0)) { if (spdk_likely(rc == 0)) {
nvme_bdev_attach_bdev_to_ns(nvme_bdev->nvme_ns, nvme_bdev); nvme_bdev_attach_bdev_to_ns(create_ctx->nvme_ns, nvme_bdev);
} else { } else {
SPDK_ERRLOG("Failed to register bdev %s\n", nvme_bdev->disk.name); SPDK_ERRLOG("Failed to register bdev %s\n", nvme_bdev->disk.name);
} }
@ -1133,7 +1133,7 @@ bdev_occsd_init_zone_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
struct bdev_ocssd_create_ctx *create_ctx = ctx; struct bdev_ocssd_create_ctx *create_ctx = ctx;
struct bdev_ocssd_zone *ocssd_zone; struct bdev_ocssd_zone *ocssd_zone;
struct ocssd_bdev *ocssd_bdev = create_ctx->ocssd_bdev; struct ocssd_bdev *ocssd_bdev = create_ctx->ocssd_bdev;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev); struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(create_ctx->nvme_ns);
struct spdk_bdev_zone_info zone_info = {}; struct spdk_bdev_zone_info zone_info = {};
uint64_t offset; uint64_t offset;
int rc = 0; int rc = 0;
@ -1188,16 +1188,13 @@ bdev_occsd_init_zone_cb(void *ctx, const struct spdk_nvme_cpl *cpl)
static int static int
bdev_ocssd_init_zone(struct bdev_ocssd_create_ctx *create_ctx) bdev_ocssd_init_zone(struct bdev_ocssd_create_ctx *create_ctx)
{ {
struct ocssd_bdev *ocssd_bdev = create_ctx->ocssd_bdev;
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
create_ctx->num_chunks = spdk_min(create_ctx->end_chunk_offset - create_ctx->chunk_offset, create_ctx->num_chunks = spdk_min(create_ctx->end_chunk_offset - create_ctx->chunk_offset,
OCSSD_BDEV_CHUNK_INFO_COUNT); OCSSD_BDEV_CHUNK_INFO_COUNT);
assert(create_ctx->num_chunks > 0); assert(create_ctx->num_chunks > 0);
return spdk_nvme_ctrlr_cmd_get_log_page(nvme_bdev->nvme_ns->ctrlr->ctrlr, return spdk_nvme_ctrlr_cmd_get_log_page(create_ctx->nvme_ns->ctrlr->ctrlr,
SPDK_OCSSD_LOG_CHUNK_INFO, SPDK_OCSSD_LOG_CHUNK_INFO,
spdk_nvme_ns_get_id(nvme_bdev->nvme_ns->ns), spdk_nvme_ns_get_id(create_ctx->nvme_ns->ns),
&create_ctx->chunk_info, &create_ctx->chunk_info,
sizeof(create_ctx->chunk_info[0]) * sizeof(create_ctx->chunk_info[0]) *
create_ctx->num_chunks, create_ctx->num_chunks,
@ -1210,7 +1207,7 @@ static int
bdev_ocssd_init_zones(struct bdev_ocssd_create_ctx *create_ctx) bdev_ocssd_init_zones(struct bdev_ocssd_create_ctx *create_ctx)
{ {
struct ocssd_bdev *ocssd_bdev = create_ctx->ocssd_bdev; struct ocssd_bdev *ocssd_bdev = create_ctx->ocssd_bdev;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev); struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(create_ctx->nvme_ns);
uint64_t offset, num_zones; uint64_t offset, num_zones;
num_zones = bdev_ocssd_num_zones(ocssd_bdev); num_zones = bdev_ocssd_num_zones(ocssd_bdev);
@ -1339,6 +1336,7 @@ bdev_ocssd_create_bdev(const char *ctrlr_name, const char *bdev_name, uint32_t n
} }
create_ctx->ocssd_bdev = ocssd_bdev; create_ctx->ocssd_bdev = ocssd_bdev;
create_ctx->nvme_ns = nvme_ns;
create_ctx->cb_fn = cb_fn; create_ctx->cb_fn = cb_fn;
create_ctx->cb_arg = cb_arg; create_ctx->cb_arg = cb_arg;
create_ctx->range = range; create_ctx->range = range;