bdev/ocssd: Change to_disk_lba() to take ocssd_ns as additional parameter
As same as the last patch, change bdev_ocssd_to_disk_lba() to take ocssd_ns as an additional parameter. In unit tests, get ocssd_ns from not ocssd_bdev but nvme_bdev_ctrlr because direct association between nvme_bdev and nvme_bdev_ns will be removed when supporting ANA multipath. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I8e86b43bfe435fb2732e29e0fb6926d7572b29e2 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5536 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:
parent
f4f3fe37ec
commit
dad1be9761
@ -315,9 +315,9 @@ bdev_ocssd_from_disk_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
bdev_ocssd_to_disk_lba(struct ocssd_bdev *ocssd_bdev, uint64_t lba)
|
bdev_ocssd_to_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 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;
|
||||||
|
|
||||||
@ -416,6 +416,8 @@ bdev_ocssd_read(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
|
|||||||
void *md, uint64_t lba_count, uint64_t lba)
|
void *md, uint64_t lba_count, uint64_t lba)
|
||||||
{
|
{
|
||||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||||
|
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
|
||||||
|
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
|
||||||
const size_t zone_size = nvme_bdev->disk.zone_size;
|
const size_t zone_size = nvme_bdev->disk.zone_size;
|
||||||
|
|
||||||
if ((lba % zone_size) + lba_count > zone_size) {
|
if ((lba % zone_size) + lba_count > zone_size) {
|
||||||
@ -428,9 +430,9 @@ bdev_ocssd_read(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
|
|||||||
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, lba);
|
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, lba);
|
||||||
|
|
||||||
return spdk_nvme_ns_cmd_readv_with_md(nvme_bdev->nvme_ns->ns, nvme_ch->qpair, lba,
|
return spdk_nvme_ns_cmd_readv_with_md(nvme_ns->ns, nvme_ch->qpair, lba,
|
||||||
lba_count, bdev_ocssd_read_cb,
|
lba_count, bdev_ocssd_read_cb,
|
||||||
ocdev_io, 0, bdev_ocssd_reset_sgl,
|
ocdev_io, 0, bdev_ocssd_reset_sgl,
|
||||||
bdev_ocssd_next_sge, md, 0, 0);
|
bdev_ocssd_next_sge, md, 0, 0);
|
||||||
@ -456,6 +458,8 @@ bdev_ocssd_write(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
|
|||||||
void *md, uint64_t lba_count, uint64_t lba)
|
void *md, uint64_t lba_count, uint64_t lba)
|
||||||
{
|
{
|
||||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||||
|
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
|
||||||
|
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
|
||||||
const size_t zone_size = nvme_bdev->disk.zone_size;
|
const size_t zone_size = nvme_bdev->disk.zone_size;
|
||||||
struct bdev_ocssd_zone *zone;
|
struct bdev_ocssd_zone *zone;
|
||||||
int rc;
|
int rc;
|
||||||
@ -476,8 +480,9 @@ bdev_ocssd_write(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvme_ch,
|
|||||||
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, lba);
|
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, lba);
|
||||||
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_bdev->nvme_ns->ns, nvme_ch->qpair, lba,
|
|
||||||
|
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_ns->ns, nvme_ch->qpair, lba,
|
||||||
lba_count, bdev_ocssd_write_cb,
|
lba_count, bdev_ocssd_write_cb,
|
||||||
ocdev_io, 0, bdev_ocssd_reset_sgl,
|
ocdev_io, 0, bdev_ocssd_reset_sgl,
|
||||||
bdev_ocssd_next_sge, md, 0, 0);
|
bdev_ocssd_next_sge, md, 0, 0);
|
||||||
@ -508,6 +513,8 @@ bdev_ocssd_zone_append(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nv
|
|||||||
void *md, uint64_t lba_count, uint64_t lba)
|
void *md, uint64_t lba_count, uint64_t lba)
|
||||||
{
|
{
|
||||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||||
|
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
|
||||||
|
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
|
||||||
struct bdev_ocssd_zone *zone;
|
struct bdev_ocssd_zone *zone;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
@ -533,8 +540,9 @@ bdev_ocssd_zone_append(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nv
|
|||||||
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, zone->write_pointer);
|
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, ocssd_ns, zone->write_pointer);
|
||||||
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_bdev->nvme_ns->ns, nvme_ch->qpair, lba,
|
|
||||||
|
rc = spdk_nvme_ns_cmd_writev_with_md(nvme_ns->ns, nvme_ch->qpair, lba,
|
||||||
lba_count, bdev_ocssd_append_cb,
|
lba_count, bdev_ocssd_append_cb,
|
||||||
ocdev_io, 0, bdev_ocssd_reset_sgl,
|
ocdev_io, 0, bdev_ocssd_reset_sgl,
|
||||||
bdev_ocssd_next_sge, md, 0, 0);
|
bdev_ocssd_next_sge, md, 0, 0);
|
||||||
@ -591,6 +599,8 @@ bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvm
|
|||||||
struct bdev_ocssd_io *ocdev_io, uint64_t slba, size_t num_zones)
|
struct bdev_ocssd_io *ocdev_io, uint64_t slba, size_t num_zones)
|
||||||
{
|
{
|
||||||
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
|
||||||
|
struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;
|
||||||
|
struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns);
|
||||||
uint64_t offset, zone_size = nvme_bdev->disk.zone_size;
|
uint64_t offset, zone_size = nvme_bdev->disk.zone_size;
|
||||||
struct bdev_ocssd_zone *zone;
|
struct bdev_ocssd_zone *zone;
|
||||||
int rc;
|
int rc;
|
||||||
@ -607,12 +617,12 @@ bdev_ocssd_reset_zone(struct ocssd_bdev *ocssd_bdev, struct nvme_io_channel *nvm
|
|||||||
|
|
||||||
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_bdev,
|
||||||
slba + offset * zone_size);
|
ocssd_ns, slba + offset * zone_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
ocdev_io->io.zone = zone;
|
ocdev_io->io.zone = zone;
|
||||||
|
|
||||||
rc = spdk_nvme_ocssd_ns_cmd_vector_reset(nvme_bdev->nvme_ns->ns, nvme_ch->qpair,
|
rc = spdk_nvme_ocssd_ns_cmd_vector_reset(nvme_ns->ns, nvme_ch->qpair,
|
||||||
ocdev_io->io.lba, num_zones, NULL,
|
ocdev_io->io.lba, num_zones, NULL,
|
||||||
bdev_ocssd_reset_zone_cb, ocdev_io);
|
bdev_ocssd_reset_zone_cb, ocdev_io);
|
||||||
if (spdk_unlikely(rc != 0)) {
|
if (spdk_unlikely(rc != 0)) {
|
||||||
|
@ -734,6 +734,7 @@ test_lba_translation(void)
|
|||||||
const char *controller_name = "nvme0";
|
const char *controller_name = "nvme0";
|
||||||
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 ocssd_bdev *ocssd_bdev;
|
struct ocssd_bdev *ocssd_bdev;
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
uint64_t lba;
|
uint64_t lba;
|
||||||
@ -754,6 +755,10 @@ test_lba_translation(void)
|
|||||||
|
|
||||||
ctrlr = create_controller(&trid, 1, &geometry);
|
ctrlr = create_controller(&trid, 1, &geometry);
|
||||||
nvme_bdev_ctrlr = create_nvme_bdev_controller(&trid, controller_name);
|
nvme_bdev_ctrlr = create_nvme_bdev_controller(&trid, controller_name);
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL);
|
||||||
|
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr->namespaces[0] != NULL);
|
||||||
|
ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_bdev_ctrlr->namespaces[0]);
|
||||||
|
|
||||||
rc = create_bdev(controller_name, bdev_name, 1, NULL);
|
rc = create_bdev(controller_name, bdev_name, 1, NULL);
|
||||||
CU_ASSERT_EQUAL(rc, 0);
|
CU_ASSERT_EQUAL(rc, 0);
|
||||||
@ -762,27 +767,27 @@ test_lba_translation(void)
|
|||||||
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
||||||
ocssd_bdev = SPDK_CONTAINEROF(bdev, struct ocssd_bdev, nvme_bdev.disk);
|
ocssd_bdev = SPDK_CONTAINEROF(bdev, struct ocssd_bdev, nvme_bdev.disk);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, 0);
|
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(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, lba), 0);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size - 1);
|
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(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, lba), bdev->zone_size - 1);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size);
|
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(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, lba), bdev->zone_size);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size * geometry.num_pu);
|
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(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, lba), bdev->zone_size * geometry.num_pu);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size * geometry.num_pu + 68);
|
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(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, lba), bdev->zone_size * geometry.num_pu + 68);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size + 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(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, lba), bdev->zone_size + 68);
|
||||||
|
|
||||||
@ -804,6 +809,10 @@ test_lba_translation(void)
|
|||||||
|
|
||||||
ctrlr = create_controller(&trid, 1, &geometry);
|
ctrlr = create_controller(&trid, 1, &geometry);
|
||||||
nvme_bdev_ctrlr = create_nvme_bdev_controller(&trid, controller_name);
|
nvme_bdev_ctrlr = create_nvme_bdev_controller(&trid, controller_name);
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL);
|
||||||
|
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr->namespaces[0] != NULL);
|
||||||
|
ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_bdev_ctrlr->namespaces[0]);
|
||||||
|
|
||||||
rc = create_bdev(controller_name, bdev_name, 1, NULL);
|
rc = create_bdev(controller_name, bdev_name, 1, NULL);
|
||||||
CU_ASSERT_EQUAL(rc, 0);
|
CU_ASSERT_EQUAL(rc, 0);
|
||||||
@ -812,28 +821,30 @@ test_lba_translation(void)
|
|||||||
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
SPDK_CU_ASSERT_FATAL(bdev != NULL);
|
||||||
ocssd_bdev = SPDK_CONTAINEROF(bdev, struct ocssd_bdev, nvme_bdev.disk);
|
ocssd_bdev = SPDK_CONTAINEROF(bdev, struct ocssd_bdev, nvme_bdev.disk);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, 0);
|
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(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, lba), 0);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size - 1);
|
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(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, lba), bdev->zone_size - 1);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size);
|
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(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, lba), bdev->zone_size);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev->zone_size * (geometry.num_pu - 1));
|
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(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, lba), bdev->zone_size * (geometry.num_pu - 1));
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev, 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);
|
||||||
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, lba),
|
CU_ASSERT_EQUAL(bdev_ocssd_from_disk_lba(ocssd_bdev, 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, bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
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(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, lba),
|
||||||
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
bdev->zone_size * geometry.num_pu * geometry.num_grp + 68);
|
||||||
@ -864,6 +875,7 @@ test_parallel_unit_range(void)
|
|||||||
const char *controller_name = "nvme0";
|
const char *controller_name = "nvme0";
|
||||||
const char *bdev_name[] = { "nvme0n1", "nvme0n2", "nvme0n3" };
|
const char *bdev_name[] = { "nvme0n1", "nvme0n2", "nvme0n3" };
|
||||||
const struct bdev_ocssd_range range[3] = { { 0, 5 }, { 6, 18 }, { 19, 23 } };
|
const struct bdev_ocssd_range range[3] = { { 0, 5 }, { 6, 18 }, { 19, 23 } };
|
||||||
|
struct bdev_ocssd_ns *ocssd_ns;
|
||||||
struct ocssd_bdev *ocssd_bdev[3];
|
struct ocssd_bdev *ocssd_bdev[3];
|
||||||
struct spdk_ocssd_geometry_data geometry = {};
|
struct spdk_ocssd_geometry_data geometry = {};
|
||||||
struct spdk_bdev *bdev[3];
|
struct spdk_bdev *bdev[3];
|
||||||
@ -885,6 +897,10 @@ test_parallel_unit_range(void)
|
|||||||
|
|
||||||
ctrlr = create_controller(&trid, 1, &geometry);
|
ctrlr = create_controller(&trid, 1, &geometry);
|
||||||
nvme_bdev_ctrlr = create_nvme_bdev_controller(&trid, controller_name);
|
nvme_bdev_ctrlr = create_nvme_bdev_controller(&trid, controller_name);
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL);
|
||||||
|
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr->namespaces[0] != NULL);
|
||||||
|
ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_bdev_ctrlr->namespaces[0]);
|
||||||
|
|
||||||
for (i = 0; i < SPDK_COUNTOF(range); ++i) {
|
for (i = 0; i < SPDK_COUNTOF(range); ++i) {
|
||||||
rc = create_bdev(controller_name, bdev_name[i], 1, &range[i]);
|
rc = create_bdev(controller_name, bdev_name[i], 1, &range[i]);
|
||||||
@ -900,28 +916,28 @@ test_parallel_unit_range(void)
|
|||||||
CU_ASSERT_EQUAL(zone_size, bdev[2]->zone_size);
|
CU_ASSERT_EQUAL(zone_size, bdev[2]->zone_size);
|
||||||
|
|
||||||
/* Verify the first addresses are correct */
|
/* Verify the first addresses are correct */
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[0], 0);
|
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(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], lba), 0);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[1], 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(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], lba), 0);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[2], 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(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], lba), 0);
|
||||||
|
|
||||||
/* Verify last address correctness */
|
/* Verify last address correctness */
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[0], bdev[0]->blockcnt - 1);
|
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(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], lba), bdev[0]->blockcnt - 1);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[1], bdev[1]->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(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], lba), bdev[1]->blockcnt - 1);
|
||||||
|
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[2], bdev[2]->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(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], lba), bdev[2]->blockcnt - 1);
|
||||||
|
|
||||||
@ -929,7 +945,7 @@ test_parallel_unit_range(void)
|
|||||||
for (i = 0; i < SPDK_COUNTOF(range); ++i) {
|
for (i = 0; i < SPDK_COUNTOF(range); ++i) {
|
||||||
for (offset = 0; offset < bdev_ocssd_num_parallel_units(ocssd_bdev[i]); ++offset) {
|
for (offset = 0; offset < bdev_ocssd_num_parallel_units(ocssd_bdev[i]); ++offset) {
|
||||||
punit_range_to_addr(ctrlr, range[i].begin + offset, &grp, &pu);
|
punit_range_to_addr(ctrlr, range[i].begin + offset, &grp, &pu);
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[i], offset * zone_size + 68);
|
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(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], lba),
|
||||||
offset * zone_size + 68);
|
offset * zone_size + 68);
|
||||||
@ -941,7 +957,7 @@ test_parallel_unit_range(void)
|
|||||||
punit_range_to_addr(ctrlr, range[i].begin, &grp, &pu);
|
punit_range_to_addr(ctrlr, range[i].begin, &grp, &pu);
|
||||||
|
|
||||||
offset = bdev_ocssd_num_parallel_units(ocssd_bdev[i]) * zone_size + 68;
|
offset = bdev_ocssd_num_parallel_units(ocssd_bdev[i]) * zone_size + 68;
|
||||||
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[i], offset);
|
lba = bdev_ocssd_to_disk_lba(ocssd_bdev[i], ocssd_ns, offset);
|
||||||
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 1, pu, grp));
|
CU_ASSERT_EQUAL(lba, generate_lba(&geometry, 68, 1, pu, grp));
|
||||||
assert(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], lba), offset);
|
||||||
|
Loading…
Reference in New Issue
Block a user