Error handling for env_rwsem_init added

Signed-off-by: Michal Rakowski <michal.rakowski@intel.com>
This commit is contained in:
Michal Rakowski 2019-09-27 15:21:53 +02:00
parent b78557a2cc
commit 2575be83fa
3 changed files with 19 additions and 11 deletions

View File

@ -302,11 +302,16 @@ int cleaning_policy_acp_initialize(struct ocf_cache *cache,
ocf_cache_log(cache, log_err, "acp context allocation error\n"); ocf_cache_log(cache, log_err, "acp context allocation error\n");
return -OCF_ERR_NO_MEM; 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; cache->cleaner.cleaning_policy_context = acp;
acp->cache = cache; acp->cache = cache;
env_rwsem_init(&acp->chunks_lock);
for (i = 0; i < ACP_MAX_BUCKETS; i++) { for (i = 0; i < ACP_MAX_BUCKETS; i++) {
INIT_LIST_HEAD(&acp->bucket_info[i].chunk_list); INIT_LIST_HEAD(&acp->bucket_info[i].chunk_list);
acp->bucket_info[i].threshold = acp->bucket_info[i].threshold =

View File

@ -15,22 +15,25 @@ int ocf_metadata_concurrency_init(struct ocf_metadata_lock *metadata_lock)
if (err) if (err)
return err; return err;
//@TODO handle env_rwlock_init return val
env_rwlock_init(&metadata_lock->status); 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++) { for (i = 0; i < OCF_IO_CLASS_MAX; i++) {
err = env_spinlock_init(&metadata_lock->partition[i]); err = env_spinlock_init(&metadata_lock->partition[i]);
if (err) if (err)
break; goto spinlocks_err;
} }
if (err) { return err;
while (i--)
env_spinlock_destroy(&metadata_lock->partition[i]);
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; return err;
} }

View File

@ -50,7 +50,7 @@ int ocf_async_lock_init(struct ocf_async_lock *lock, uint32_t waiter_priv_size)
int err = 0; int err = 0;
err = env_spinlock_init(&lock->waiters_lock); err = env_spinlock_init(&lock->waiters_lock);
if (err); if (err)
return err; return err;
INIT_LIST_HEAD(&lock->waiters); INIT_LIST_HEAD(&lock->waiters);