From 23e330a21fbad63705a8efc001f92fdac3cd8aea Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 15 May 2019 20:10:19 +0200 Subject: [PATCH] Adapt to new cache lock API Signed-off-by: Robert Baldyga --- casadm/extended_err_msg.c | 4 -- modules/cas_cache/layer_cache_management.c | 78 ++++++++++++++++------ modules/cas_cache/service_ui_ioctl.c | 1 - modules/cas_cache/utils/utils_mpool.c | 2 +- ocf | 2 +- 5 files changed, 59 insertions(+), 28 deletions(-) diff --git a/casadm/extended_err_msg.c b/casadm/extended_err_msg.c index 45333ba..50abd7c 100644 --- a/casadm/extended_err_msg.c +++ b/casadm/extended_err_msg.c @@ -49,10 +49,6 @@ struct { OCF_ERR_START_CACHE_FAIL, "Failed to insert cache" }, - { - OCF_ERR_CACHE_IN_USE, - "At least one cas device is still in use" - }, { OCF_ERR_CACHE_NOT_EXIST, "Cache ID does not exist" diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index c1baec9..09d236b 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -19,6 +19,42 @@ struct _cache_mng_sync_context { int *result; }; +static void _cache_mng_lock_complete(ocf_cache_t cache, void *priv, int error) +{ + struct _cache_mng_sync_context *context = priv; + + *context->result = error; + complete(&context->compl); +} + +static int _cache_mng_lock_sync(ocf_cache_t cache) +{ + struct _cache_mng_sync_context context; + int result; + + init_completion(&context.compl); + context.result = &result; + + ocf_mngt_cache_lock(cache, _cache_mng_lock_complete, &context); + wait_for_completion(&context.compl); + + return result; +} + +static int _cache_mng_read_lock_sync(ocf_cache_t cache) +{ + struct _cache_mng_sync_context context; + int result; + + init_completion(&context.compl); + context.result = &result; + + ocf_mngt_cache_read_lock(cache, _cache_mng_lock_complete, &context); + wait_for_completion(&context.compl); + + return result; +} + static void _cache_mng_save_sync_complete(ocf_cache_t cache, void *priv, int error) { @@ -128,7 +164,7 @@ int cache_mng_flush_object(ocf_cache_id_t cache_id, ocf_core_id_t core_id) if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -155,7 +191,7 @@ int cache_mng_flush_device(ocf_cache_id_t id) if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -177,7 +213,7 @@ int cache_mng_set_cleaning_policy(ocf_cache_id_t cache_id, uint32_t type) if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -205,7 +241,7 @@ int cache_mng_get_cleaning_policy(ocf_cache_id_t cache_id, uint32_t *type) if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -231,7 +267,7 @@ int cache_mng_set_cleaning_param(ocf_cache_id_t cache_id, ocf_cleaning_t type, if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -260,7 +296,7 @@ int cache_mng_get_cleaning_param(ocf_cache_id_t cache_id, ocf_cleaning_t type, if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -548,7 +584,7 @@ int cache_mng_add_core_to_cache(struct ocf_mngt_core_config *cfg, return result; } - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -679,7 +715,7 @@ int cache_mng_remove_core_from_cache(struct kcas_remove_core *cmd) if (!cmd->force_no_flush) { /* First check state and flush data (if requested by user) under read lock */ - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) goto put; @@ -696,7 +732,7 @@ int cache_mng_remove_core_from_cache(struct kcas_remove_core *cmd) } /* Acquire write lock */ - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) goto put; @@ -758,7 +794,7 @@ int cache_mng_reset_stats(ocf_cache_id_t cache_id, if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -828,7 +864,7 @@ int cache_mng_set_partitions(struct kcas_io_classes *cfg) goto out_cls; } - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) goto out_cls; @@ -1296,7 +1332,7 @@ int cache_mng_set_seq_cutoff_threshold(ocf_cache_id_t cache_id, ocf_core_id_t co if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -1345,7 +1381,7 @@ int cache_mng_set_seq_cutoff_policy(ocf_cache_id_t id, ocf_core_id_t core_id, if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -1393,7 +1429,7 @@ int cache_mng_get_seq_cutoff_threshold(ocf_cache_id_t cache_id, if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -1433,7 +1469,7 @@ int cache_mng_get_seq_cutoff_policy(ocf_cache_id_t id, ocf_core_id_t core_id, if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -1470,7 +1506,7 @@ int cache_mng_set_cache_mode(ocf_cache_id_t id, ocf_cache_mode_t mode, if (result) return result; - result = ocf_mngt_cache_lock(cache); + result = _cache_mng_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -1522,7 +1558,7 @@ int cache_mng_exit_instance(ocf_cache_id_t id, int flush) cache_priv = ocf_cache_get_priv(cache); - status = ocf_mngt_cache_read_lock(cache); + status = _cache_mng_read_lock_sync(cache); if (status) goto put; /* @@ -1550,7 +1586,7 @@ int cache_mng_exit_instance(ocf_cache_id_t id, int flush) ocf_mngt_cache_read_unlock(cache); /* get cache write lock */ - status = ocf_mngt_cache_lock(cache); + status = _cache_mng_lock_sync(cache); if (status) goto put; @@ -1656,7 +1692,7 @@ int cache_mng_get_info(struct kcas_cache_info *info) if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) goto put; @@ -1713,7 +1749,7 @@ int cache_mng_get_io_class_info(struct kcas_io_class *part) if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if (result) { ocf_mngt_cache_put(cache); return result; @@ -1751,7 +1787,7 @@ int cache_mng_get_core_info(struct kcas_core_info *info) if (result) return result; - result = ocf_mngt_cache_read_lock(cache); + result = _cache_mng_read_lock_sync(cache); if(result) goto put; diff --git a/modules/cas_cache/service_ui_ioctl.c b/modules/cas_cache/service_ui_ioctl.c index df78264..15bce12 100644 --- a/modules/cas_cache/service_ui_ioctl.c +++ b/modules/cas_cache/service_ui_ioctl.c @@ -18,7 +18,6 @@ struct { { OCF_ERR_NO_MEM, ENOMEM }, { OCF_ERR_NO_FREE_RAM, ENOMEM }, { OCF_ERR_START_CACHE_FAIL, EFAULT }, - { OCF_ERR_CACHE_IN_USE, EBUSY }, { OCF_ERR_CACHE_NOT_EXIST, ENODEV }, { OCF_ERR_CACHE_EXIST, EEXIST }, { OCF_ERR_TOO_MANY_CORES, ENOSPC }, diff --git a/modules/cas_cache/utils/utils_mpool.c b/modules/cas_cache/utils/utils_mpool.c index 2205762..dfc6e0e 100644 --- a/modules/cas_cache/utils/utils_mpool.c +++ b/modules/cas_cache/utils/utils_mpool.c @@ -27,7 +27,7 @@ struct cas_mpool *cas_mpool_create(uint32_t hdr_size, uint32_t size, int flags, result = snprintf(name, sizeof(name), "%s_%u", name_perfix, (1 << i)); if (result < 0 || result >= sizeof(name)) - goto cas_multi_allocator_create_ERROR; + goto err; mpool->allocator[i] = env_allocator_create( hdr_size + (size * (1 << i)), name); diff --git a/ocf b/ocf index b609164..75fb6c7 160000 --- a/ocf +++ b/ocf @@ -1 +1 @@ -Subproject commit b609164f78d365b8fdce44c730243d4a07efa017 +Subproject commit 75fb6c7940667e5845d24317cf703624a2485a88