Commit 811a027e authored by Kozlowski Mateusz's avatar Kozlowski Mateusz Committed by Jim Harris
Browse files

ftl: Add helper functions for creating md regions



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

Signed-off-by: default avatarKozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: I94cbfca66dfb56457a350874dbd1de63a2e07661
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14159


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 101a0399
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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]) {
+1 −1
Original line number Diff line number Diff line
@@ -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;
	}
+31 −0
Original line number Diff line number Diff line
@@ -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;
}
+27 −0
Original line number Diff line number Diff line
@@ -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 */