Commit f4f3fe37 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

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: default avatarShuhei 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: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 49564357
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -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;
}