bdev/ocssd: Remove ocssd_bdev parameter from from/to_disk_lba() and to_chunk_info_offset()
Remove ocssd_bdev_parameter from bdev_ocssd_from_disk_lba(), bdev_ocssd_to_disk_lba(), and bdev_ocssd_to_chunk_info_offset() including unit tests. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: Iaf52e3e33609e9f1fe13050e95020bad688dc6ae Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6223 Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
49a7346e0a
commit
894ef450a5
@ -280,27 +280,23 @@ bdev_ocssd_to_parallel_unit(const struct spdk_ocssd_geometry_data *geometry,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
bdev_ocssd_from_disk_lba(struct ocssd_bdev *ocssd_bdev,
|
bdev_ocssd_from_disk_lba(struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
|
||||||
struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
|
|
||||||
{
|
{
|
||||||
const struct spdk_ocssd_geometry_data *geometry = &ocssd_ns->geometry;
|
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_lba_offsets *offsets = &ocssd_ns->lba_offsets;
|
||||||
const struct bdev_ocssd_range *range = &ocssd_bdev->range;
|
|
||||||
uint64_t lbk, chk, punit;
|
uint64_t lbk, chk, punit;
|
||||||
|
|
||||||
lbk = (lba >> offsets->lbk) & ((1 << geometry->lbaf.lbk_len) - 1);
|
lbk = (lba >> offsets->lbk) & ((1 << geometry->lbaf.lbk_len) - 1);
|
||||||
chk = (lba >> offsets->chk) & ((1 << geometry->lbaf.chk_len) - 1);
|
chk = (lba >> offsets->chk) & ((1 << geometry->lbaf.chk_len) - 1);
|
||||||
|
|
||||||
punit = bdev_ocssd_to_parallel_unit(geometry, offsets, lba);
|
punit = bdev_ocssd_to_parallel_unit(geometry, offsets, lba);
|
||||||
punit -= range->begin;
|
|
||||||
|
|
||||||
return lbk + punit * geometry->clba + chk * geometry->clba *
|
return lbk + punit * geometry->clba + chk * geometry->clba *
|
||||||
(geometry->num_grp * geometry->num_pu);
|
(geometry->num_grp * geometry->num_pu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
bdev_ocssd_to_disk_lba(struct ocssd_bdev *ocssd_bdev,
|
bdev_ocssd_to_disk_lba(struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
|
||||||
struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
|
|
||||||
{
|
{
|
||||||
const struct bdev_ocssd_lba_offsets *offsets = &ocssd_ns->lba_offsets;
|
const struct bdev_ocssd_lba_offsets *offsets = &ocssd_ns->lba_offsets;
|
||||||
uint64_t lbk, chk, pu, grp;
|
uint64_t lbk, chk, pu, grp;
|
||||||
@ -314,8 +310,7 @@ bdev_ocssd_to_disk_lba(struct ocssd_bdev *ocssd_bdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
bdev_ocssd_to_chunk_info_offset(struct ocssd_bdev *ocssd_bdev,
|
bdev_ocssd_to_chunk_info_offset(struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
|
||||||
struct bdev_ocssd_ns *ocssd_ns, uint64_t lba)
|
|
||||||
{
|
{
|
||||||
const struct spdk_ocssd_geometry_data *geo = &ocssd_ns->geometry;
|
const struct spdk_ocssd_geometry_data *geo = &ocssd_ns->geometry;
|
||||||
uint64_t grp, pu, chk, lbk;
|
uint64_t grp, pu, chk, lbk;
|
||||||
@ -412,7 +407,7 @@ bdev_ocssd_read(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
|
|||||||
ocdev_io->io.iovpos = 0;
|
ocdev_io->io.iovpos = 0;
|
||||||
ocdev_io->io.iov_offset = 0;
|
ocdev_io->io.iov_offset = 0;
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, lba);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, lba);
|
||||||
|
|
||||||
return spdk_nvme_ns_cmd_readv_with_md(nvme_ns->ns, qpair, lba,
|
return spdk_nvme_ns_cmd_readv_with_md(nvme_ns->ns, qpair, lba,
|
||||||
lba_count, bdev_ocssd_read_cb,
|
lba_count, bdev_ocssd_read_cb,
|
||||||
@ -461,7 +456,7 @@ bdev_ocssd_write(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_ns,
|
|||||||
ocdev_io->io.iovpos = 0;
|
ocdev_io->io.iovpos = 0;
|
||||||
ocdev_io->io.iov_offset = 0;
|
ocdev_io->io.iov_offset = 0;
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, lba);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, lba);
|
||||||
|
|
||||||
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_ns->ns, qpair, lba,
|
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_ns->ns, qpair, lba,
|
||||||
lba_count, bdev_ocssd_write_cb,
|
lba_count, bdev_ocssd_write_cb,
|
||||||
@ -520,7 +515,7 @@ bdev_ocssd_zone_append(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_
|
|||||||
ocdev_io->io.iovpos = 0;
|
ocdev_io->io.iovpos = 0;
|
||||||
ocdev_io->io.iov_offset = 0;
|
ocdev_io->io.iov_offset = 0;
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, zone->write_pointer);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, zone->write_pointer);
|
||||||
|
|
||||||
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_ns->ns, qpair, lba,
|
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_ns->ns, qpair, lba,
|
||||||
lba_count, bdev_ocssd_append_cb,
|
lba_count, bdev_ocssd_append_cb,
|
||||||
@ -605,8 +600,8 @@ bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nvme_n
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (offset = 0; offset < num_zones; ++offset) {
|
for (offset = 0; offset < num_zones; ++offset) {
|
||||||
ocdev_io->io.lba[offset] = bdev_ocssd_to_disk_lba(ocssd_bdev,
|
ocdev_io->io.lba[offset] = bdev_ocssd_to_disk_lba(ocssd_ns,
|
||||||
ocssd_ns, slba + offset * zone_size);
|
slba + offset * zone_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
ocdev_io->io.zone = zone;
|
ocdev_io->io.zone = zone;
|
||||||
@ -632,7 +627,7 @@ bdev_ocssd_fill_zone_info(struct ocssd_bdev *ocssd_bdev, struct bdev_ocssd_ns *o
|
|||||||
{
|
{
|
||||||
uint64_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
uint64_t zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||||
|
|
||||||
zone_info->zone_id = bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, chunk_info->slba);
|
zone_info->zone_id = bdev_ocssd_from_disk_lba(ocssd_ns, chunk_info->slba);
|
||||||
zone_info->write_pointer = zone_info->zone_id;
|
zone_info->write_pointer = zone_info->zone_id;
|
||||||
|
|
||||||
if (chunk_info->cs.free) {
|
if (chunk_info->cs.free) {
|
||||||
@ -700,7 +695,7 @@ _bdev_ocssd_get_zone_info(struct ocssd_bdev *ocssd_bdev, struct nvme_bdev_ns *nv
|
|||||||
uint64_t lba, offset, zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
uint64_t lba, offset, zone_size = bdev_ocssd_get_zone_size(ocssd_bdev);
|
||||||
|
|
||||||
lba = zone_id + ocdev_io->zone_info.chunk_offset * zone_size;
|
lba = zone_id + ocdev_io->zone_info.chunk_offset * zone_size;
|
||||||
offset = bdev_ocssd_to_chunk_info_offset(ocssd_bdev, ocssd_ns, lba);
|
offset = bdev_ocssd_to_chunk_info_offset(ocssd_ns, lba);
|
||||||
|
|
||||||
return spdk_nvme_ctrlr_cmd_get_log_page(nvme_ns->ctrlr->ctrlr,
|
return spdk_nvme_ctrlr_cmd_get_log_page(nvme_ns->ctrlr->ctrlr,
|
||||||
SPDK_OCSSD_LOG_CHUNK_INFO,
|
SPDK_OCSSD_LOG_CHUNK_INFO,
|
||||||
@ -952,7 +947,7 @@ bdev_ocssd_push_media_events(struct nvme_bdev_ns *nvme_ns,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lba = bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, chunk_entry->lba);
|
lba = bdev_ocssd_from_disk_lba(ocssd_ns, chunk_entry->lba);
|
||||||
while (num_blocks > 0 && lba < nvme_bdev->disk.blockcnt) {
|
while (num_blocks > 0 && lba < nvme_bdev->disk.blockcnt) {
|
||||||
event.offset = lba;
|
event.offset = lba;
|
||||||
event.num_blocks = spdk_min(num_blocks, geometry->clba);
|
event.num_blocks = spdk_min(num_blocks, geometry->clba);
|
||||||
|
@ -687,7 +687,6 @@ test_lba_translation(void)
|
|||||||
const char *bdev_name = "nvme0n1";
|
const char *bdev_name = "nvme0n1";
|
||||||
struct spdk_ocssd_geometry_data geometry = {};
|
struct spdk_ocssd_geometry_data geometry = {};
|
||||||
struct bdev_ocssd_ns *ocssd_ns;
|
struct bdev_ocssd_ns *ocssd_ns;
|
||||||
struct ocssd_bdev *ocssd_bdev;
|
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
uint64_t lba;
|
uint64_t lba;
|
||||||
int rc;
|
int rc;
|
||||||
@ -717,33 +716,32 @@ test_lba_translation(void)
|
|||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(bdev_name);
|
bdev = spdk_bdev_get_by_name(bdev_name);
|
||||||
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
||||||
ocssd_bdev = SPDK_CONTAINEROF(bdev, struct ocssd_bdev, nvme_bdev.disk);
|
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, 0);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, 0);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), 0);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), 0);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size - 1);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size - 1);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, bdev->zone_size - 1, 0, 0, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, bdev->zone_size - 1, 0, 0, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size - 1);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), bdev->zone_size - 1);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 1, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 1, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), bdev->zone_size);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size * geometry.num_pu);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size * geometry.num_pu);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 1));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 1));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba),
|
||||||
bdev->zone_size * geometry.num_pu);
|
bdev->zone_size * geometry.num_pu);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size * geometry.num_pu + 68);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size * geometry.num_pu + 68);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, 0, 1));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, 0, 1));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba),
|
||||||
bdev->zone_size * geometry.num_pu + 68);
|
bdev->zone_size * geometry.num_pu + 68);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size + 68);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size + 68);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, 1, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 0, 1, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size + 68);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), bdev->zone_size + 68);
|
||||||
|
|
||||||
delete_nvme_bdev_controller(nvme_bdev_ctrlr);
|
delete_nvme_bdev_controller(nvme_bdev_ctrlr);
|
||||||
free_controller(ctrlr);
|
free_controller(ctrlr);
|
||||||
@ -773,35 +771,34 @@ test_lba_translation(void)
|
|||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(bdev_name);
|
bdev = spdk_bdev_get_by_name(bdev_name);
|
||||||
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
||||||
ocssd_bdev = SPDK_CONTAINEROF(bdev, struct ocssd_bdev, nvme_bdev.disk);
|
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, 0);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, 0);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 0, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), 0);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), 0);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size - 1);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size - 1);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, bdev->zone_size - 1, 0, 0, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, bdev->zone_size - 1, 0, 0, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size - 1);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), bdev->zone_size - 1);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size);
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns, bdev->zone_size);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 1, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 0, 1, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba), bdev->zone_size);
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba), bdev->zone_size);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, bdev->zone_size * (geometry.num_pu - 1));
|
lba = bdev_ocssd_to_disk_lba(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(lba, generate_lba(&geometry, 0, 0, geometry.num_pu - 1, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba),
|
||||||
bdev->zone_size * (geometry.num_pu - 1));
|
bdev->zone_size * (geometry.num_pu - 1));
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns,
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns,
|
||||||
bdev->zone_size * geometry.num_pu * geometry.num_grp);
|
bdev->zone_size * geometry.num_pu * geometry.num_grp);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 1, 0, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 0, 1, 0, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba),
|
||||||
bdev->zone_size * geometry.num_pu * geometry.num_grp);
|
bdev->zone_size * geometry.num_pu * geometry.num_grp);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns,
|
lba = bdev_ocssd_to_disk_lba(ocssd_ns,
|
||||||
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 1, 0, 0));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 1, 0, 0));
|
||||||
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, ocssd_ns, lba),
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_ns, lba),
|
||||||
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
||||||
|
|
||||||
delete_nvme_bdev_controller(nvme_bdev_ctrlr);
|
delete_nvme_bdev_controller(nvme_bdev_ctrlr);
|
||||||
|
Loading…
Reference in New Issue
Block a user