From 072c9c19027eacb3ecbe2d56506c0acbd6ce0646 Mon Sep 17 00:00:00 2001 From: Rafal Stefanowski Date: Wed, 19 Aug 2020 03:09:05 +0200 Subject: [PATCH 1/2] Pass only needed values to _ocf_mngt_calculate_ram_needed() function Rather then passing whole structs, supply _ocf_mngt_calculate_ram_needed() with just the values it actually uses. Signed-off-by: Rafal Stefanowski --- src/mngt/ocf_mngt_cache.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index 86b32d5..dc22da0 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -1043,11 +1043,9 @@ static void _ocf_mngt_init_instance_init(struct ocf_cache_attach_context *contex ocf_pipeline_next(context->pipeline); } -uint64_t _ocf_mngt_calculate_ram_needed(ocf_cache_t cache, - ocf_volume_t cache_volume) +uint64_t _ocf_mngt_calculate_ram_needed(ocf_cache_line_size_t line_size, + uint64_t volume_size) { - ocf_cache_line_size_t line_size = ocf_line_size(cache); - uint64_t volume_size = ocf_volume_get_length(cache_volume); uint64_t const_data_size; uint64_t cache_line_no; uint64_t data_per_line; @@ -1073,6 +1071,8 @@ int ocf_mngt_get_ram_needed(ocf_cache_t cache, { ocf_volume_t volume; ocf_volume_type_t type; + ocf_cache_line_size_t line_size; + uint64_t volume_size; int result; OCF_CHECK_NULL(cache); @@ -1094,7 +1094,9 @@ int ocf_mngt_get_ram_needed(ocf_cache_t cache, return result; } - *ram_needed = _ocf_mngt_calculate_ram_needed(cache, volume); + line_size = ocf_line_size(cache); + volume_size = ocf_volume_get_length(volume); + *ram_needed = _ocf_mngt_calculate_ram_needed(line_size, volume_size); ocf_volume_close(volume); ocf_volume_destroy(volume); @@ -1287,11 +1289,12 @@ static void _ocf_mngt_attach_check_ram(ocf_pipeline_t pipeline, { struct ocf_cache_attach_context *context = priv; ocf_cache_t cache = context->cache; + ocf_cache_line_size_t line_size = ocf_line_size(cache); + uint64_t volume_size = ocf_volume_get_length(&cache->device->volume); uint64_t min_free_ram; uint64_t free_ram; - min_free_ram = _ocf_mngt_calculate_ram_needed(cache, - &cache->device->volume); + min_free_ram = _ocf_mngt_calculate_ram_needed(line_size, volume_size); free_ram = env_get_free_memory(); From 6542c2fa943cd6607db33aa0f398de606fc56d26 Mon Sep 17 00:00:00 2001 From: Rafal Stefanowski Date: Wed, 19 Aug 2020 03:15:18 +0200 Subject: [PATCH 2/2] Fix memory requirement when loading cache Load properties before checking memory needs and obtain cache line size from context rather than from cache state. Signed-off-by: Rafal Stefanowski --- src/mngt/ocf_mngt_cache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index dc22da0..4879348 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -1289,7 +1289,7 @@ static void _ocf_mngt_attach_check_ram(ocf_pipeline_t pipeline, { struct ocf_cache_attach_context *context = priv; ocf_cache_t cache = context->cache; - ocf_cache_line_size_t line_size = ocf_line_size(cache); + ocf_cache_line_size_t line_size = context->metadata.line_size; uint64_t volume_size = ocf_volume_get_length(&cache->device->volume); uint64_t min_free_ram; uint64_t free_ram; @@ -1538,8 +1538,8 @@ struct ocf_pipeline_properties _ocf_mngt_cache_attach_pipeline_properties = { .finish = _ocf_mngt_cache_attach_finish, .steps = { OCF_PL_STEP(_ocf_mngt_attach_cache_device), - OCF_PL_STEP(_ocf_mngt_attach_check_ram), OCF_PL_STEP(_ocf_mngt_attach_load_properties), + OCF_PL_STEP(_ocf_mngt_attach_check_ram), OCF_PL_STEP(_ocf_mngt_attach_prepare_metadata), OCF_PL_STEP(_ocf_mngt_test_volume), OCF_PL_STEP(_ocf_mngt_attach_load_superblock),