bdev/ocssd: Change from_disk_lba() to take ocssd_ns as additional parameter

As same as the last patch, change bdev_ocssd_from_disk_lba() to take
ocssd_ns as an additional parameter.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I2612df739137f687cf9aa8699c54885836742b88
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5537
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 11:16:03 +09:00 committed by Tomasz Zawadzki
parent dad1be9761
commit 62ac42cc13
2 changed files with 28 additions and 24 deletions

View File

@ -296,9 +296,9 @@ bdev_ocssd_to_parallel_unit(const struct spdk_ocssd_geometry_data *geometry,
}
static uint64_t
bdev_ocssd_from_disk_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
bdev_ocssd_from_disk_lba(struct ocssd_bdev *ocssd_bdev,
struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
{
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev);
const struct spdk_ocssd_geometry_data *geometry = &ocssd_ns->geometry;
const struct bdev_ocssd_lba_offsets *offsets = &ocssd_ns->lba_offsets;
const struct bdev_ocssd_range *range = &ocssd_bdev->range;
@ -640,8 +640,9 @@ bdev_ocssd_fill_zone_info(struct ocssd_bdev *ocssd_bdev, struct spdk_bdev_zone_i
const struct spdk_ocssd_chunk_information_entry *chunk_info)
{
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_bdev(ocssd_bdev);
zone_info->zone_id = bdev_ocssd_from_disk_lba(ocssd_bdev, chunk_info->slba);
zone_info->zone_id = bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, chunk_info->slba);
zone_info->write_pointer = zone_info->zone_id;
if (chunk_info->cs.free) {
@ -939,7 +940,7 @@ bdev_ocssd_push_media_events(struct nvme_bdev_ns *nvme_ns,
return;
}
lba = bdev_ocssd_from_disk_lba(ocssd_bdev, chunk_entry->lba);
lba = bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, chunk_entry->lba);
while (num_blocks > 0 && lba < nvme_bdev->disk.blockcnt) {
event.offset = lba;
event.num_blocks = spdk_min(num_blocks, ocssd_ns->geometry.clba);

View File

@ -769,27 +769,29 @@ test_lba_translation(void)
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, 0);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), 0);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), 0);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size - 1);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, bdev->zone_size - 1, 0, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size - 1);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size - 1);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 1, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size * geometry.num_pu);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 1));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size * geometry.num_pu);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
bdev->zone_size * geometry.num_pu);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size * geometry.num_pu + 68);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, 0, 1));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size * geometry.num_pu + 68);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
bdev->zone_size * geometry.num_pu + 68);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size + 68);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, 1, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size + 68);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size + 68);
delete_nvme_bdev_controller(nvme_bdev_ctrlr);
free_controller(ctrlr);
@ -823,30 +825,31 @@ test_lba_translation(void)
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, 0);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), 0);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), 0);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size - 1);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, bdev->zone_size - 1, 0, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size - 1);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size - 1);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 1, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size * (geometry.num_pu - 1));
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, geometry.num_pu - 1, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba), bdev->zone_size * (geometry.num_pu - 1));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
bdev->zone_size * (geometry.num_pu - 1));
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns,
bdev->zone_size * geometry.num_pu * geometry.num_grp);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 1, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba),
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
bdev->zone_size * geometry.num_pu * geometry.num_grp);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns,
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 1, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, lba),
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
delete_nvme_bdev_controller(nvme_bdev_ctrlr);
@ -918,28 +921,28 @@ test_parallel_unit_range(void)
/* Verify the first addresses are correct */
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[0], ocssd_ns, 0);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[0], lba), 0);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[0], ocssd_ns, lba), 0);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[1], ocssd_ns, 0);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 6, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[1], lba), 0);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[1], ocssd_ns, lba), 0);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[2], ocssd_ns, 0);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 3, 2));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[2], lba), 0);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[2], ocssd_ns, lba), 0);
/* Verify last address correctness */
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[0], ocssd_ns, bdev[0]->blockcnt - 1);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, geometry.clba - 1, geometry.num_chk - 1, 5, 0));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[0], lba), bdev[0]->blockcnt - 1);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[0], ocssd_ns, lba), bdev[0]->blockcnt - 1);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[1], ocssd_ns, bdev[1]->blockcnt - 1);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, geometry.clba - 1, geometry.num_chk - 1, 2, 2));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[1], lba), bdev[1]->blockcnt - 1);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[1], ocssd_ns, lba), bdev[1]->blockcnt - 1);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[2], ocssd_ns, bdev[2]->blockcnt - 1);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, geometry.clba - 1, geometry.num_chk - 1, 7, 2));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[2], lba), bdev[2]->blockcnt - 1);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[2], ocssd_ns, lba), bdev[2]->blockcnt - 1);
/* Verify correct jumps across parallel units / groups */
for (i = 0; i < SPDK_COUNTOF(range); ++i) {
@ -947,7 +950,7 @@ test_parallel_unit_range(void)
punit_range_to_addr(ctrlr, range[i].begin + offset, &grp, &pu);
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[i], ocssd_ns, offset * zone_size + 68);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, pu, grp));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[i], lba),
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[i], ocssd_ns, lba),
offset * zone_size + 68);
}
}
@ -960,7 +963,7 @@ test_parallel_unit_range(void)
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[i], ocssd_ns, offset);
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 1, pu, grp));
assert(lba == generate_lba(&geometry, 68, 1, pu, grp));
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[i], lba), offset);
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev[i], ocssd_ns, lba), offset);
}
delete_nvme_bdev_controller(nvme_bdev_ctrlr);