From a934b43aec8d3e9ed8748fc82db51033e4977db5 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Wed, 25 Sep 2019 13:58:14 -0400 Subject: [PATCH] Add missing error handling in hash bucket locks initialization Signed-off-by: Adam Rutkowski --- src/concurrency/ocf_metadata_concurrency.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/concurrency/ocf_metadata_concurrency.c b/src/concurrency/ocf_metadata_concurrency.c index ecea7a5..df996b4 100644 --- a/src/concurrency/ocf_metadata_concurrency.c +++ b/src/concurrency/ocf_metadata_concurrency.c @@ -52,14 +52,26 @@ int ocf_metadata_concurrency_attached_init( return -OCF_ERR_NO_MEM; } - for (i = 0; i < hash_table_entries; i++) - env_rwsem_init(&metadata_lock->hash[i]); + for (i = 0; i < hash_table_entries; i++) { + err = env_rwsem_init(&metadata_lock->hash[i]); + if (err) + break; + } + if (err) { + while (i--) + env_rwsem_destroy(&metadata_lock->hash[i]); + env_vfree(metadata_lock->hash); + metadata_lock->hash = NULL; + ocf_metadata_concurrency_attached_deinit(metadata_lock); + return err; + } + + for (i = 0; i < colision_table_pages; i++) { err = env_rwsem_init(&metadata_lock->collision_pages[i]); if (err) break; } - if (err) { while (i--) env_rwsem_destroy(&metadata_lock->collision_pages[i]);