ftl: Add helper functions for creating md regions

Helper functions which determine which md regions will be stored
in shm.

Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: I94cbfca66dfb56457a350874dbd1de63a2e07661
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14159
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Kozlowski Mateusz 2022-08-23 13:52:12 +02:00 committed by Jim Harris
parent 101a039923
commit 811a027e43
4 changed files with 61 additions and 4 deletions

View File

@ -62,9 +62,8 @@ ftl_mngt_init_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
*/
continue;
}
md_flags = is_buffer_needed(i) ?
FTL_MD_CREATE_SHM | FTL_MD_CREATE_SHM_NEW :
FTL_MD_CREATE_NO_MEM;
md_flags = is_buffer_needed(i) ? ftl_md_create_region_flags(dev,
region->type) : FTL_MD_CREATE_NO_MEM;
layout->md[i] = ftl_md_create(dev, region->current.blocks, region->vss_blksz, region->name,
md_flags, region);
if (NULL == layout->md[i]) {

View File

@ -30,7 +30,7 @@ init_p2l_map_pool(struct spdk_ftl_dev *dev)
void *p2l_pool_buf;
dev->p2l_pool_md = ftl_md_create(dev, p2l_pool_buf_blks, 0, "p2l_pool",
FTL_MD_CREATE_SHM | FTL_MD_CREATE_SHM_NEW, NULL);
ftl_md_create_shm_flags(dev), NULL);
if (!dev->p2l_pool_md) {
return -ENOMEM;
}

View File

@ -1100,3 +1100,34 @@ ftl_md_set_region(struct ftl_md *md,
return 0;
}
int
ftl_md_create_region_flags(struct spdk_ftl_dev *dev, int region_type)
{
int flags = FTL_MD_CREATE_SHM;
switch (region_type) {
case FTL_LAYOUT_REGION_TYPE_SB:
if (dev->conf.mode & SPDK_FTL_MODE_CREATE) {
flags |= FTL_MD_CREATE_SHM_NEW;
}
break;
case FTL_LAYOUT_REGION_TYPE_BAND_MD:
case FTL_LAYOUT_REGION_TYPE_NVC_MD:
flags |= FTL_MD_CREATE_SHM_NEW;
break;
default:
return FTL_MD_CREATE_HEAP;
}
return flags;
}
int
ftl_md_create_shm_flags(struct spdk_ftl_dev *dev)
{
int flags = FTL_MD_CREATE_SHM | FTL_MD_CREATE_SHM_NEW;
return flags;
}

View File

@ -321,4 +321,31 @@ void ftl_md_clear(struct ftl_md *md, int pattern, union ftl_md_vss *vss_pattern)
*/
uint64_t ftl_md_xfer_blocks(struct spdk_ftl_dev *dev);
/**
* @brief Return the md creation flags for a given md region type
*
* Controls MD regions backed up on SHM via FTL_MD_CREATE_SHM.
* FTL_MD_CREATE_SHM_NEW is added for:
* 1. superblock upon SPDK_FTL_MODE_CREATE flag set,
* 2. other regions if not in a fast startup mode.
*
* @param dev The FTL device
* @param region_type MD region type
*
* @return MD creation flags
*/
int ftl_md_create_region_flags(struct spdk_ftl_dev *dev, int region_type);
/**
* @brief Return the SHM-backed md creation flags
*
* FTL_MD_CREATE_SHM is always set.
* FTL_MD_CREATE_SHM_NEW is added if not in a fast startup mode.
*
* @param dev The FTL device
*
* @return MD creation flags
*/
int ftl_md_create_shm_flags(struct spdk_ftl_dev *dev);
#endif /* FTL_MD_H */