From af43a240d30fa225a7729aff69926e4dd424579e Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Mon, 28 Mar 2022 22:42:59 +0200 Subject: [PATCH] Return more specific error on CRC mismatch Signed-off-by: Robert Baldyga --- inc/ocf_err.h | 3 +++ src/metadata/metadata_segment.c | 2 +- src/mngt/ocf_mngt_cache.c | 3 +-- tests/functional/pyocf/types/shared.py | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/inc/ocf_err.h b/inc/ocf_err.h index a6116b4..53bc626 100644 --- a/inc/ocf_err.h +++ b/inc/ocf_err.h @@ -47,6 +47,9 @@ typedef enum { /** Metadata on the device doesn't match with metadata in DRAM */ OCF_ERR_SUPERBLOCK_MISMATCH, + /** Metadata checksum is not correct. Metadata is damaged */ + OCF_ERR_CRC_MISMATCH, + /** Invalid volume type */ OCF_ERR_INVAL_VOLUME_TYPE, diff --git a/src/metadata/metadata_segment.c b/src/metadata/metadata_segment.c index 86553aa..8a4599c 100644 --- a/src/metadata/metadata_segment.c +++ b/src/metadata/metadata_segment.c @@ -88,7 +88,7 @@ void ocf_metadata_check_crc(ocf_pipeline_t pipeline, ocf_cache_log(cache, log_err, "Loading %s ERROR, invalid checksum\n", ocf_metadata_segment_names[segment_id]); - OCF_PL_FINISH_RET(pipeline, -OCF_ERR_INVAL); + OCF_PL_FINISH_RET(pipeline, -OCF_ERR_CRC_MISMATCH); } ocf_pipeline_next(pipeline); diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index 39a335d..b5ee5a1 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -1547,8 +1547,7 @@ static void _ocf_mngt_load_superblock_complete(void *priv, int error) if (error) { ocf_cache_log(cache, log_err, "ERROR: Cannot load cache state\n"); - OCF_PL_FINISH_RET(context->pipeline, - -OCF_ERR_START_CACHE_FAIL); + OCF_PL_FINISH_RET(context->pipeline, error); } if (cache->conf_meta->cachelines != diff --git a/tests/functional/pyocf/types/shared.py b/tests/functional/pyocf/types/shared.py index 793b563..0093aec 100644 --- a/tests/functional/pyocf/types/shared.py +++ b/tests/functional/pyocf/types/shared.py @@ -23,6 +23,7 @@ class OcfErrorCode(IntEnum): OCF_ERR_NO_METADATA = auto() OCF_ERR_METADATA_FOUND = auto() OCF_ERR_SUPERBLOCK_MISMATCH = auto() + OCF_ERR_CRC_MISMATCH = auto() OCF_ERR_INVAL_VOLUME_TYPE = auto() OCF_ERR_UNKNOWN = auto() OCF_ERR_TOO_MANY_CACHES = auto()