bdev/ocssd: Factor out getting chunk info. offset from _get_zone_info()
Factor out getting chunk info. offset into a helper function bdev_ocssd_to_chunk_info_offset() and locate it next to bdev_ocssd_to_disk_lba(). This will improve readability a little. Besides, cache addr_shift first in bdev_ocssd_translate_lba() for clarification. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I4c078e2002638d90b000b97f9f7cda90938d02ca Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5132 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
74438fc588
commit
ae3b179a53
@ -264,8 +264,8 @@ bdev_ocssd_translate_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba, uint64_t *
|
|||||||
*
|
*
|
||||||
* which means that neighbouring zones are placed in a different group and parallel unit.
|
* which means that neighbouring zones are placed in a different group and parallel unit.
|
||||||
*/
|
*/
|
||||||
*lbk = lba % geo->clba;
|
|
||||||
addr_shift = geo->clba;
|
addr_shift = geo->clba;
|
||||||
|
*lbk = lba % addr_shift;
|
||||||
|
|
||||||
punit = range->begin + (lba / addr_shift) % ocssd_range_num_parallel_units(range);
|
punit = range->begin + (lba / addr_shift) % ocssd_range_num_parallel_units(range);
|
||||||
|
|
||||||
@ -324,6 +324,18 @@ bdev_ocssd_to_disk_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
|
|||||||
(grp << offsets->grp);
|
(grp << offsets->grp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint64_t
|
||||||
|
bdev_ocssd_to_chunk_info_offset(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
|
||||||
|
{
|
||||||
|
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev);
|
||||||
|
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);
|
||||||
|
|
||||||
|
return grp * geo->num_pu * geo->num_chk + pu * geo->num_chk + chk;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
bdev_ocssd_lba_in_range(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
|
bdev_ocssd_lba_in_range(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
|
||||||
{
|
{
|
||||||
@ -659,15 +671,12 @@ _bdev_ocssd_get_zone_info(struct spdk_bdev_io *bdev_io)
|
|||||||
{
|
{
|
||||||
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
|
struct ocssd_bdev *ocssd_bdev = bdev_io->bdev->ctxt;
|
||||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||||
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev);
|
|
||||||
const struct spdk_ocssd_geometry_data *geo = &ocssd_ns->geometry;
|
|
||||||
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
|
struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx;
|
||||||
uint64_t lba, grp, pu, chk, lbk, offset;
|
uint64_t lba, offset;
|
||||||
|
|
||||||
lba = bdev_io->u.zone_mgmt.zone_id + ocdev_io->zone_info.chunk_offset *
|
lba = bdev_io->u.zone_mgmt.zone_id + ocdev_io->zone_info.chunk_offset *
|
||||||
nvme_bdev->disk.zone_size;
|
nvme_bdev->disk.zone_size;
|
||||||
bdev_ocssd_translate_lba(ocssd_bdev, lba, &grp, &pu, &chk, &lbk);
|
offset = bdev_ocssd_to_chunk_info_offset(ocssd_bdev, lba);
|
||||||
offset = grp * geo->num_pu * geo->num_chk + pu * geo->num_chk + chk;
|
|
||||||
|
|
||||||
return spdk_nvme_ctrlr_cmd_get_log_page(nvme_bdev->nvme_ns->ctrlr->ctrlr,
|
return spdk_nvme_ctrlr_cmd_get_log_page(nvme_bdev->nvme_ns->ctrlr->ctrlr,
|
||||||
SPDK_OCSSD_LOG_CHUNK_INFO,
|
SPDK_OCSSD_LOG_CHUNK_INFO,
|
||||||
|
Loading…
Reference in New Issue
Block a user