Commit 8fcffeba authored by Mateusz Kozlowski's avatar Mateusz Kozlowski Committed by Tomasz Zawadzki
Browse files

lib/ftl: Add helper functions for layout



Calculating aligned number of blocks for an md region.

Change-Id: Iad214490129ce78341ea0f472326f8c962c34d2e
Signed-off-by: default avatarMateusz Kozlowski <mateusz.kozlowski@solidigm.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20522


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Reviewed-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Mellanox Build Bot
parent 30ef80cd
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -64,6 +64,18 @@ ftl_md_region_blocks(struct spdk_ftl_dev *dev, uint64_t bytes)
	return result;
}

uint64_t
ftl_md_region_align_blocks(struct spdk_ftl_dev *dev, uint64_t blocks)
{
	const uint64_t alignment = superblock_region_blocks(dev);
	uint64_t result;

	result = spdk_divide_round_up(blocks, alignment);
	result *= alignment;

	return result;
}

const char *
ftl_md_region_name(enum ftl_layout_region_type reg_type)
{
@@ -179,6 +191,12 @@ ftl_layout_region_get(struct spdk_ftl_dev *dev, enum ftl_layout_region_type reg_
	return reg->type == reg_type ? reg : NULL;
}

uint64_t
ftl_layout_base_offset(struct spdk_ftl_dev *dev)
{
	return dev->num_bands * ftl_get_num_blocks_in_band(dev);
}

static int
setup_layout_nvc(struct spdk_ftl_dev *dev)
{
+12 −0
Original line number Diff line number Diff line
@@ -188,6 +188,16 @@ struct ftl_md_layout_ops {
 */
uint64_t ftl_md_region_blocks(struct spdk_ftl_dev *dev, uint64_t bytes);

/**
 * @brief Get number of blocks for md_region aligned to a common value
 *
 * @param dev ftl device
 * @param blocks size of the MD region in blocks
 *
 * @retval Aligned number of blocks required to store an MD region
 */
uint64_t ftl_md_region_align_blocks(struct spdk_ftl_dev *dev, uint64_t blocks);

/**
 * @brief Get name of an MD region
 *
@@ -226,4 +236,6 @@ uint64_t ftl_layout_base_md_blocks(struct spdk_ftl_dev *dev);
struct ftl_layout_region *ftl_layout_region_get(struct spdk_ftl_dev *dev,
		enum ftl_layout_region_type reg_type);

uint64_t ftl_layout_base_offset(struct spdk_ftl_dev *dev);

#endif /* FTL_LAYOUT_H */