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

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: default avatarShuhei 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: 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 dad1be97
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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);
+23 −20
Original line number Diff line number Diff line
@@ -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);