From d5ecdc16dd30bcf0a9c17e9c6b758056c6e1c0fa Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Thu, 23 Jul 2020 13:46:38 +0200 Subject: [PATCH] Make CRC mismatch on recovery a warning instead of error Signed-off-by: Robert Baldyga --- src/metadata/metadata_hash.c | 14 ++++++++++---- src/mngt/ocf_mngt_cache.c | 12 ++++++++++-- src/mngt/ocf_mngt_core.c | 5 ++++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/metadata/metadata_hash.c b/src/metadata/metadata_hash.c index b9f1b4b..d2a1c6c 100644 --- a/src/metadata/metadata_hash.c +++ b/src/metadata/metadata_hash.c @@ -1293,10 +1293,16 @@ static void ocf_medatata_hash_check_crc_skip(ocf_pipeline_t pipeline, if (crc != sb_config->checksum[segment]) { /* Checksum does not match */ - ocf_cache_log(cache, log_err, - "Loading %s ERROR, invalid checksum", - ocf_metadata_hash_raw_names[segment]); - OCF_PL_FINISH_RET(pipeline, -OCF_ERR_INVAL); + if (!sb_config->clean_shutdown) { + ocf_cache_log(cache, log_warn, + "Loading %s WARNING, invalid checksum", + ocf_metadata_hash_raw_names[segment]); + } else { + ocf_cache_log(cache, log_err, + "Loading %s ERROR, invalid checksum", + ocf_metadata_hash_raw_names[segment]); + OCF_PL_FINISH_RET(pipeline, -OCF_ERR_INVAL); + } } ocf_pipeline_next(pipeline); diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index 0d49f91..86b32d5 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -373,6 +373,7 @@ static int _ocf_mngt_init_instance_add_cores( ocf_core_id_t core_id; int ret = -1; uint64_t hd_lines = 0; + uint64_t length; OCF_ASSERT_PLUGGED(cache); @@ -439,8 +440,15 @@ static int _ocf_mngt_init_instance_add_cores( ocf_core_seq_cutoff_init(core); - hd_lines = ocf_bytes_2_lines(cache, - ocf_volume_get_length(&core->volume)); + length = ocf_volume_get_length(&core->volume); + if (length != core->conf_meta->length) { + ocf_cache_log(cache, log_err, + "Size of core volume doesn't match with" + " the size stored in cache metadata!"); + goto err; + } + + hd_lines = ocf_bytes_2_lines(cache, length); if (hd_lines) { ocf_cache_log(cache, log_info, diff --git a/src/mngt/ocf_mngt_core.c b/src/mngt/ocf_mngt_core.c index b3f3dfd..2db7479 100644 --- a/src/mngt/ocf_mngt_core.c +++ b/src/mngt/ocf_mngt_core.c @@ -279,7 +279,10 @@ static void ocf_mngt_cache_try_add_core_insert(ocf_pipeline_t pipeline, if (result) OCF_PL_FINISH_RET(pipeline, result); - if (!ocf_volume_get_length(volume)) { + if (ocf_volume_get_length(volume) != core->conf_meta->length) { + ocf_cache_log(cache, log_err, + "Size of core volume doesn't match with" + " the size stored in cache metadata!"); result = -OCF_ERR_CORE_NOT_AVAIL; goto error_after_open; }