Move metadata layout field outside meteadata ifc

Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
Adam Rutkowski 2020-11-23 22:06:22 -06:00
parent b5d6cdb398
commit 4d97b1611f
2 changed files with 17 additions and 28 deletions

View File

@ -32,9 +32,6 @@
#define METADATA_MEM_POOL(ctrl, section) ctrl->raw_desc[section].mem_pool #define METADATA_MEM_POOL(ctrl, section) ctrl->raw_desc[section].mem_pool
static void ocf_metadata_hash_init_iface(struct ocf_cache *cache,
ocf_metadata_layout_t layout);
#define OCF_METADATA_HASH_DIFF_MAX 1000 #define OCF_METADATA_HASH_DIFF_MAX 1000
enum { enum {
@ -900,6 +897,17 @@ static void ocf_metadata_hash_flush_unlock_collision_page(
page); page);
} }
static void ocf_metadata_init_layout(struct ocf_cache *cache,
ocf_metadata_layout_t layout)
{
ENV_BUG_ON(layout >= ocf_metadata_layout_max || layout < 0);
/* Initialize metadata location interface*/
if (cache->device->init_mode == ocf_init_mode_metadata_volatile)
layout = ocf_metadata_layout_seq;
cache->metadata.layout = layout;
}
/* /*
* Initialize hash metadata interface * Initialize hash metadata interface
*/ */
@ -940,7 +948,7 @@ int ocf_metadata_init_variable_size(struct ocf_cache *cache,
ctrl->mapping_size = ocf_metadata_status_sizeof(settings) ctrl->mapping_size = ocf_metadata_status_sizeof(settings)
+ sizeof(struct ocf_metadata_map); + sizeof(struct ocf_metadata_map);
ocf_metadata_hash_init_iface(cache, layout); ocf_metadata_init_layout(cache, layout);
/* Initial setup of dynamic size RAW containers */ /* Initial setup of dynamic size RAW containers */
for (i = metadata_segment_variable_size_start; for (i = metadata_segment_variable_size_start;
@ -2553,10 +2561,7 @@ static ocf_cache_line_t ocf_metadata_hash_map_phy2lg_striping(
ocf_cache_line_t ocf_metadata_map_lg2phy( ocf_cache_line_t ocf_metadata_map_lg2phy(
struct ocf_cache *cache, ocf_cache_line_t coll_idx) struct ocf_cache *cache, ocf_cache_line_t coll_idx)
{ {
struct ocf_metadata_iface *iface = (struct ocf_metadata_iface *) switch (cache->metadata.layout) {
&cache->metadata.iface;
switch (iface->layout) {
case ocf_metadata_layout_striping: case ocf_metadata_layout_striping:
return ocf_metadata_hash_map_lg2phy_striping( return ocf_metadata_hash_map_lg2phy_striping(
cache, coll_idx); cache, coll_idx);
@ -2572,10 +2577,7 @@ ocf_cache_line_t ocf_metadata_map_lg2phy(
ocf_cache_line_t ocf_metadata_map_phy2lg( ocf_cache_line_t ocf_metadata_map_phy2lg(
struct ocf_cache *cache, ocf_cache_line_t cache_line) struct ocf_cache *cache, ocf_cache_line_t cache_line)
{ {
struct ocf_metadata_iface *iface = (struct ocf_metadata_iface *) switch (cache->metadata.layout) {
&cache->metadata.iface;
switch (iface->layout) {
case ocf_metadata_layout_striping: case ocf_metadata_layout_striping:
return ocf_metadata_hash_map_phy2lg_striping( return ocf_metadata_hash_map_phy2lg_striping(
cache, cache_line); cache, cache_line);
@ -2844,22 +2846,6 @@ bool ocf_metadata_##what(struct ocf_cache *cache, \
_ocf_metadata_funcs(dirty) _ocf_metadata_funcs(dirty)
_ocf_metadata_funcs(valid) _ocf_metadata_funcs(valid)
static void ocf_metadata_hash_init_iface(struct ocf_cache *cache,
ocf_metadata_layout_t layout)
{
struct ocf_metadata_iface *iface = (struct ocf_metadata_iface *)
&cache->metadata.iface;
ENV_BUG_ON(layout >= ocf_metadata_layout_max || layout < 0);
/* Initialize metadata location interface*/
if (cache->device->init_mode == ocf_init_mode_metadata_volatile)
layout = ocf_metadata_layout_seq;
iface->layout = layout;
/* Initialize bit status function */
}
/* /*
* Get metadata hash interface * Get metadata hash interface
*/ */

View File

@ -344,6 +344,9 @@ struct ocf_metadata {
const struct ocf_metadata_iface iface; const struct ocf_metadata_iface iface;
/*!< Metadata service interface */ /*!< Metadata service interface */
ocf_metadata_layout_t layout;
/*!< Per-cacheline metadata layout */
void *priv; void *priv;
/*!< Private data of metadata service interface */ /*!< Private data of metadata service interface */