From a6d3c70b1dcd59949ec0cb68e99bb720f7ed7a19 Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Tue, 27 Jul 2021 08:42:08 +0200 Subject: [PATCH] Async API for switching cleaning policy Signed-off-by: Michal Mielewczyk Signed-off-by: Robert Baldyga --- modules/cas_cache/layer_cache_management.c | 25 +++++++++++++++++----- ocf | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index ef30150..224a646 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -869,21 +869,36 @@ int cache_mngt_flush_device(const char *cache_name, size_t name_len) return result; } +struct cache_mngt_set_cleaning_policy_context { + struct completion cmpl; + int *result; +}; + +static void cache_mngt_set_cleaning_policy_cmpl(void *priv, int error) +{ + struct cache_mngt_set_cleaning_policy_context *context = priv; + + *context->result = error; + + complete(&context->cmpl); +} + int cache_mngt_set_cleaning_policy(ocf_cache_t cache, uint32_t type) { + struct cache_mngt_set_cleaning_policy_context context; int result; result = _cache_mngt_lock_sync(cache); if (result) return result; - result = ocf_mngt_cache_cleaning_set_policy(cache, type); - if (result) - goto out; + init_completion(&context.cmpl); + context.result = &result; - result = _cache_mngt_save_sync(cache); + ocf_mngt_cache_cleaning_set_policy(cache, type, + cache_mngt_set_cleaning_policy_cmpl, &context); + wait_for_completion(&context.cmpl); -out: ocf_mngt_cache_unlock(cache); return result; } diff --git a/ocf b/ocf index 227021b..8b1caf5 160000 --- a/ocf +++ b/ocf @@ -1 +1 @@ -Subproject commit 227021b416824bb707094f9209a32c66c91099b0 +Subproject commit 8b1caf5457c7324a5edaf8407f52e588ac0c1533