From 8363b679939a2c51a9279ea9e6232db40de08ae0 Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Tue, 7 Jul 2020 06:57:17 -0400 Subject: [PATCH 1/3] cas_disk: handle allocation error properly In case of error `blk_mq_init_queue()` does not return NULL, but `ERR_PTR(error_code)` instead. `IS_ERR_OR_NULL()` should be used to check if `blk_mq_init_queue()` actually failed. Signed-off-by: Michal Mielewczyk --- modules/cas_disk/exp_obj.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index ad856b1..a4d2ebe 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -557,8 +557,8 @@ int casdsk_exp_obj_create(struct casdsk_disk *dsk, const char *dev_name, } queue = blk_mq_init_queue(&dsk->tag_set); - if (!queue) { - result = -ENOMEM; + if (IS_ERR_OR_NULL(queue)) { + result = queue ? PTR_ERR(queue) : -ENOMEM; goto error_init_queue; } From 296cb0ef86dddffbb376f6a4a2870b332e735579 Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Tue, 7 Jul 2020 08:16:38 -0400 Subject: [PATCH 2/3] cas_cache: log failed activating exported object To avoid logging the same message each time block_dev_activate_exported_object() is called, print error message within it. Signed-off-by: Michal Mielewczyk --- modules/cas_cache/layer_cache_management.c | 5 ----- modules/cas_cache/volume/vol_block_dev_top.c | 10 +++++++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index 7ee0bd4..81633fa 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -1617,11 +1617,6 @@ static int _cache_mngt_create_exported_object(ocf_core_t core, void *cntx) } result = block_dev_activate_exported_object(core); - if (result) { - printk(KERN_ERR "Cannot to activate exported object, %s.%s\n", - ocf_cache_get_name(cache), - ocf_core_get_name(core)); - } return result; } diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index 1daae76..b1d43f0 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -822,16 +822,24 @@ int block_dev_activate_exported_object(ocf_core_t core) { int ret; ocf_volume_t obj = ocf_core_get_volume(core); + ocf_cache_t cache = ocf_core_get_cache(core); struct bd_object *bvol = bd_object(obj); if (!cas_upgrade_is_in_upgrade()) { ret = casdisk_functions.casdsk_exp_obj_activate(bvol->dsk); if (-EEXIST == ret) - return KCAS_ERR_FILE_EXISTS; + ret = KCAS_ERR_FILE_EXISTS; } else { ret = casdisk_functions.casdsk_disk_attach(bvol->dsk, THIS_MODULE, &_blockdev_exp_obj_ops); } + + if (ret) { + printk(KERN_ERR "Cannot activate exported object, %s.%s. " + "Error code %d\n", ocf_cache_get_name(cache), + ocf_core_get_name(core), ret); + } + return ret; } From 017c4261b0a7e7c02eb442a50117a5981deac009 Mon Sep 17 00:00:00 2001 From: Michal Mielewczyk Date: Tue, 7 Jul 2020 08:06:48 -0400 Subject: [PATCH 3/3] cas_cache: log failed creating exported object To avoid logging the same message each time _cache_mngt_create_exported_object() is called, print error message within it. Signed-off-by: Michal Mielewczyk --- modules/cas_cache/layer_cache_management.c | 7 +------ modules/cas_cache/volume/vol_block_dev_top.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index 81633fa..8e7827d 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -1606,15 +1606,10 @@ out_get: static int _cache_mngt_create_exported_object(ocf_core_t core, void *cntx) { int result; - ocf_cache_t cache = ocf_core_get_cache(core); result = block_dev_create_exported_object(core); - if (result) { - printk(KERN_ERR "Cannot to create exported object, %s.%s\n", - ocf_cache_get_name(cache), - ocf_core_get_name(core)); + if (result) return result; - } result = block_dev_activate_exported_object(core); diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index b1d43f0..57039ca 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -879,8 +879,10 @@ int block_dev_create_exported_object(ocf_core_t core) get_core_id_string(core)); dsk = casdisk_functions.casdsk_disk_claim(uuid->data, core); - if (dsk != bvol->dsk) - return -KCAS_ERR_SYSTEM; + if (dsk != bvol->dsk) { + result = -KCAS_ERR_SYSTEM; + goto end; + } if (cas_upgrade_is_in_upgrade()) { bvol->expobj_valid = true; @@ -892,6 +894,11 @@ int block_dev_create_exported_object(ocf_core_t core) if (!result) bvol->expobj_valid = true; +end: + if (result) { + printk(KERN_ERR "Cannot create exported object %s. Error code %d\n", + dev_name, result); + } return result; }