bdev/ocssd: Pass range and geometry directly to translate_lba()

When the NVMe bdev module supports ANA multipath, struct nvme_bdev
will not have nvme_bdev_ns pointer directly and will get via
nvme_bdev_subsystem.

The patch series starting from this patch will change helper functions
to get both ocssd_bdev and ocssd_ns as parameters to make the
upcoming changes easier.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Iacec2eadc9e56ae7b84ee3c313c8986f55983a08
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5535
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-10 09:44:34 +09:00 committed by Tomasz Zawadzki
parent 4956435757
commit f4f3fe37ec

View File

@ -255,12 +255,10 @@ bdev_ocssd_num_parallel_units(const struct ocssd_bdev *ocssd_bdev)
}
static void
bdev_ocssd_translate_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba, uint64_t *grp,
uint64_t *pu, uint64_t *chk, uint64_t *lbk)
bdev_ocssd_translate_lba(const struct bdev_ocssd_range *range,
const struct spdk_ocssd_geometry_data *geo, uint64_t lba,
uint64_t *grp, uint64_t *pu, uint64_t *chk, uint64_t *lbk)
{
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev);
const struct spdk_ocssd_geometry_data *geo = &ocssd_ns->geometry;
const struct bdev_ocssd_range *range = &ocssd_bdev->range;
uint64_t addr_shift, punit;
/* To achieve best performance, we need to make sure that adjacent zones can be accessed
@ -323,7 +321,8 @@ bdev_ocssd_to_disk_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
const struct bdev_ocssd_lba_offsets *offsets = &ocssd_ns->lba_offsets;
uint64_t lbk, chk, pu, grp;
bdev_ocssd_translate_lba(ocssd_bdev, lba, &grp, &pu, &chk, &lbk);
bdev_ocssd_translate_lba(&ocssd_bdev->range, &ocssd_ns->geometry, lba,
&grp, &pu, &chk, &lbk);
return (lbk << offsets->lbk) |
(chk << offsets->chk) |
@ -338,7 +337,7 @@ bdev_ocssd_to_chunk_info_offset(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
const struct spdk_ocssd_geometry_data *geo = &ocssd_ns->geometry;
uint64_t grp, pu, chk, lbk;
bdev_ocssd_translate_lba(ocssd_bdev, lba, &grp, &pu, &chk, &lbk);
bdev_ocssd_translate_lba(&ocssd_bdev->range, geo, lba, &grp, &pu, &chk, &lbk);
return grp * geo->num_pu * geo->num_chk + pu * geo->num_chk + chk;
}