diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index 40f2b70..383755c 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -713,7 +713,7 @@ int cache_mngt_remove_core_from_cache(struct kcas_remove_core *cmd) return result; if (!cmd->force_no_flush) { - /* First check state and flush data (if requested by user) + /* First check state and flush data (if requested by user) under read lock */ result = _cache_mngt_read_lock_sync(cache); if (result) @@ -766,6 +766,9 @@ int cache_mngt_remove_core_from_cache(struct kcas_remove_core *cmd) _cache_mngt_remove_core_complete, &context); } + if (!cmd->force_no_flush && !flush_result) + BUG_ON(ocf_mngt_core_is_dirty(core)); + wait_for_completion(&context.compl); if (!result && flush_result) @@ -1614,6 +1617,9 @@ int cache_mngt_exit_instance(ocf_cache_id_t id, int flush) if (flush) flush_status = _cache_mngt_cache_flush_sync(cache, false); + if (flush && !flush_status) + BUG_ON(ocf_mngt_cache_is_dirty(cache)); + /* Stop cache device */ status = _cache_mngt_cache_stop_sync(cache); if (status && status != -OCF_ERR_WRITE_CACHE)