From 2575be83fa8de203e8bbad692c7a3487ff7b3e20 Mon Sep 17 00:00:00 2001 From: Michal Rakowski Date: Fri, 27 Sep 2019 15:21:53 +0200 Subject: [PATCH] Error handling for env_rwsem_init added Signed-off-by: Michal Rakowski --- src/cleaning/acp.c | 9 +++++++-- src/concurrency/ocf_metadata_concurrency.c | 19 +++++++++++-------- src/utils/utils_async_lock.c | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/cleaning/acp.c b/src/cleaning/acp.c index a294bd0..85d7be9 100644 --- a/src/cleaning/acp.c +++ b/src/cleaning/acp.c @@ -302,11 +302,16 @@ int cleaning_policy_acp_initialize(struct ocf_cache *cache, ocf_cache_log(cache, log_err, "acp context allocation error\n"); return -OCF_ERR_NO_MEM; } + + err = env_rwsem_init(&acp->chunks_lock); + if (err) { + env_vfree(acp); + return err; + } + cache->cleaner.cleaning_policy_context = acp; acp->cache = cache; - env_rwsem_init(&acp->chunks_lock); - for (i = 0; i < ACP_MAX_BUCKETS; i++) { INIT_LIST_HEAD(&acp->bucket_info[i].chunk_list); acp->bucket_info[i].threshold = diff --git a/src/concurrency/ocf_metadata_concurrency.c b/src/concurrency/ocf_metadata_concurrency.c index 0863957..6502983 100644 --- a/src/concurrency/ocf_metadata_concurrency.c +++ b/src/concurrency/ocf_metadata_concurrency.c @@ -15,22 +15,25 @@ int ocf_metadata_concurrency_init(struct ocf_metadata_lock *metadata_lock) if (err) return err; - //@TODO handle env_rwlock_init return val env_rwlock_init(&metadata_lock->status); - env_rwsem_init(&metadata_lock->global); + err = env_rwsem_init(&metadata_lock->global); + if (err) + goto rwsem_err; for (i = 0; i < OCF_IO_CLASS_MAX; i++) { err = env_spinlock_init(&metadata_lock->partition[i]); if (err) - break; + goto spinlocks_err; } - if (err) { - while (i--) - env_spinlock_destroy(&metadata_lock->partition[i]); - return err; - } + return err; +spinlocks_err: + while (i--) + env_spinlock_destroy(&metadata_lock->partition[i]); +rwsem_err: + env_rwlock_destroy(&metadata_lock->status); + env_spinlock_destroy(&metadata_lock->eviction); return err; } diff --git a/src/utils/utils_async_lock.c b/src/utils/utils_async_lock.c index d9679a2..2321c28 100644 --- a/src/utils/utils_async_lock.c +++ b/src/utils/utils_async_lock.c @@ -50,7 +50,7 @@ int ocf_async_lock_init(struct ocf_async_lock *lock, uint32_t waiter_priv_size) int err = 0; err = env_spinlock_init(&lock->waiters_lock); - if (err); + if (err) return err; INIT_LIST_HEAD(&lock->waiters);