diff --git a/casadm/cas_lib.c b/casadm/cas_lib.c index 0f8f0de..9b08437 100644 --- a/casadm/cas_lib.c +++ b/casadm/cas_lib.c @@ -3004,12 +3004,15 @@ int failover_activate(int cache_id, const char *cache_device) { struct kcas_failover_activate data = {.cache_id = cache_id}; - if (cache_device) { - if (set_device_path(data.cache_path, sizeof(data.cache_path), - cache_device, MAX_STR_LEN) != SUCCESS) { - return FAILURE; - } + if (set_device_path(data.cache_path, sizeof(data.cache_path), + cache_device, MAX_STR_LEN) != SUCCESS) { + return FAILURE; } - return cas_ioctl(KCAS_IOCTL_FAILOVER_ACTIVATE, &data); + if (cas_ioctl(KCAS_IOCTL_FAILOVER_ACTIVATE, &data) != SUCCESS) { + print_err(data.ext_err_code ? : KCAS_ERR_SYSTEM); + return FAILURE; + } + + return SUCCESS; } diff --git a/casadm/cas_main.c b/casadm/cas_main.c index 62c3b9d..e15f7c0 100644 --- a/casadm/cas_main.c +++ b/casadm/cas_main.c @@ -1497,7 +1497,7 @@ static cli_option failover_detach_options[] = { static cli_option failover_activate_options[] = { {'i', "cache-id", CACHE_ID_DESC, 1, "ID", CLI_OPTION_REQUIRED}, - {'d', "cache-device", CACHE_DEVICE_DESC, 1, "DEVICE"}, + {'d', "cache-device", CACHE_DEVICE_DESC, 1, "DEVICE", CLI_OPTION_REQUIRED}, {} }; diff --git a/casadm/extended_err_msg.c b/casadm/extended_err_msg.c index 11caf43..c2c6707 100644 --- a/casadm/extended_err_msg.c +++ b/casadm/extended_err_msg.c @@ -166,6 +166,22 @@ struct { OCF_ERR_NO_LOCK, "Failed to lock cache for management operation." }, + { + OCF_ERR_METADATA_LAYOUT_MISMATCH, + "Metadata layout mismatch" + }, + { + OCF_ERR_CACHE_LINE_SIZE_MISMATCH, + "Cache line size mismatch" + }, + { + OCF_ERR_CACHE_STANDBY, + "Operation not permitted in failover standby mode" + }, + { + OCF_ERR_FAILOVER_ATTACHED, + "Cache device is attached, please detach it first with --failover-detach" + }, /* CAS kernel error mappings*/ { diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index e618d13..6d60e60 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -1819,8 +1819,6 @@ static int cache_mngt_initialize_cache_exported_object(ocf_cache_t cache) int cache_mngt_prepare_cache_device_cfg(struct ocf_mngt_cache_device_config *cfg, char *cache_path) { - int result = 0; - memset(cfg, 0, sizeof(*cfg)); if (strnlen(cache_path, MAX_STR_LEN) == MAX_STR_LEN) @@ -1830,18 +1828,11 @@ int cache_mngt_prepare_cache_device_cfg(struct ocf_mngt_cache_device_config *cfg cfg->uuid.size = strnlen(cfg->uuid.data, MAX_STR_LEN) + 1; cfg->perform_test = false; - if (cfg->uuid.size == 1) { - // empty string means empty uuid - cfg->uuid.size = 0; - return 0; - } + if (cfg->uuid.size <= 1) + return -OCF_ERR_INVAL; - if (cfg->uuid.size > 1) { - result = cas_blk_identify_type(cfg->uuid.data, - &cfg->volume_type); - } - - return result; + return cas_blk_identify_type(cfg->uuid.data, + &cfg->volume_type); } @@ -2250,8 +2241,6 @@ int cache_mngt_activate(struct ocf_mngt_cache_device_config *cfg, struct _cache_mngt_attach_context *context; ocf_cache_t cache; struct cache_priv *cache_priv; - ocf_volume_t cache_volume; - const struct ocf_volume_uuid *cache_uuid; char cache_name[OCF_CACHE_NAME_SIZE]; int result = 0; @@ -2274,17 +2263,9 @@ int cache_mngt_activate(struct ocf_mngt_cache_device_config *cfg, if (result) goto out_cache_put; - if (strnlen(cmd->cache_path, MAX_STR_LEN) > 0) { - cache_volume = ocf_cache_get_volume(cache); - cache_uuid = ocf_volume_get_uuid(cache_volume); - if (cache_uuid->size > 0 && - strcmp(cfg->uuid.data, cache_uuid->data) - != 0) { - result = cache_mngt_check_bdev(cfg, false); - if (result) - goto out_cache_unlock; - } - } + result = cache_mngt_check_bdev(cfg, false); + if (result) + goto out_cache_unlock; context = kzalloc(sizeof(*context), GFP_KERNEL); if (!context) { diff --git a/ocf b/ocf index e72018b..aac21ca 160000 --- a/ocf +++ b/ocf @@ -1 +1 @@ -Subproject commit e72018bc02478f3ac73ee8984fafaf61f09c425d +Subproject commit aac21cab6321632b4ccb159466b94ea41e148d9a