Conditional pipeline step for filtering invalid segments

Signed-off-by: Piotr Debski <piotr.debski@intel.com>
This commit is contained in:
Piotr Debski 2022-06-14 11:02:55 +02:00
parent 1a27b07f72
commit c448043b42

View File

@ -976,7 +976,6 @@ struct ocf_pipeline_arg ocf_metadata_flush_all_args[] = {
OCF_PL_ARG_INT(metadata_segment_sb_runtime), OCF_PL_ARG_INT(metadata_segment_sb_runtime),
OCF_PL_ARG_INT(metadata_segment_part_runtime), OCF_PL_ARG_INT(metadata_segment_part_runtime),
OCF_PL_ARG_INT(metadata_segment_core_runtime), OCF_PL_ARG_INT(metadata_segment_core_runtime),
OCF_PL_ARG_INT(metadata_segment_cleaning),
OCF_PL_ARG_INT(metadata_segment_lru), OCF_PL_ARG_INT(metadata_segment_lru),
OCF_PL_ARG_INT(metadata_segment_collision), OCF_PL_ARG_INT(metadata_segment_collision),
OCF_PL_ARG_INT(metadata_segment_list_info), OCF_PL_ARG_INT(metadata_segment_list_info),
@ -984,12 +983,31 @@ struct ocf_pipeline_arg ocf_metadata_flush_all_args[] = {
OCF_PL_ARG_TERMINATOR(), OCF_PL_ARG_TERMINATOR(),
}; };
/*
* Predicate function checking whether disable cleaner option is set
*/
static bool ocf_check_if_cleaner_enabled(ocf_pipeline_t pipeline,
void* priv, ocf_pipeline_arg_t arg)
{
struct ocf_metadata_context *context = priv;
return !context->cache->conf_meta->cleaner_disabled;
}
struct ocf_pipeline_properties ocf_metadata_flush_all_pipeline_props = { struct ocf_pipeline_properties ocf_metadata_flush_all_pipeline_props = {
.priv_size = sizeof(struct ocf_metadata_context), .priv_size = sizeof(struct ocf_metadata_context),
.finish = ocf_metadata_flush_all_finish, .finish = ocf_metadata_flush_all_finish,
.steps = { .steps = {
OCF_PL_STEP_COND_ARG_INT(ocf_check_if_cleaner_enabled,
ocf_metadata_flush_segment,
metadata_segment_cleaning),
OCF_PL_STEP_FOREACH(ocf_metadata_flush_segment, OCF_PL_STEP_FOREACH(ocf_metadata_flush_segment,
ocf_metadata_flush_all_args), ocf_metadata_flush_all_args),
OCF_PL_STEP_COND_ARG_INT(ocf_check_if_cleaner_enabled,
ocf_metadata_calculate_crc,
metadata_segment_cleaning),
OCF_PL_STEP_FOREACH(ocf_metadata_calculate_crc, OCF_PL_STEP_FOREACH(ocf_metadata_calculate_crc,
ocf_metadata_flush_all_args), ocf_metadata_flush_all_args),
OCF_PL_STEP_ARG_INT(ocf_metadata_flush_all_set_status, OCF_PL_STEP_ARG_INT(ocf_metadata_flush_all_set_status,
@ -1125,26 +1143,21 @@ struct ocf_pipeline_arg ocf_metadata_load_all_args[] = {
OCF_PL_ARG_TERMINATOR(), OCF_PL_ARG_TERMINATOR(),
}; };
static bool ocf_metadata_check_disabled_segment(ocf_pipeline_t pipeline,
ocf_pipeline_arg_t arg)
{
....
}
struct ocf_pipeline_properties ocf_metadata_load_all_pipeline_props = { struct ocf_pipeline_properties ocf_metadata_load_all_pipeline_props = {
.priv_size = sizeof(struct ocf_metadata_context), .priv_size = sizeof(struct ocf_metadata_context),
.finish = ocf_metadata_load_all_finish, .finish = ocf_metadata_load_all_finish,
.steps = { .steps = {
OCF_PL_STEP_CONDITIONAL(ocf_metadata_load_segment, OCF_PL_STEP_COND_ARG_INT(ocf_check_if_cleaner_enabled,
metadata_segment_cleaning, ocf_metadata_load_segment,
ocf_metadata_check_disabled_segment), metadata_segment_cleaning),
OCF_PL_STEP_FOREACH(ocf_metadata_load_segment, OCF_PL_STEP_FOREACH(ocf_metadata_load_segment,
ocf_metadata_load_all_args, ocf_metadata_load_all_args),
// conditional sfor cleaning OCF_PL_STEP_COND_ARG_INT(ocf_check_if_cleaner_enabled,
ocf_metadata_check_crc,
metadata_segment_cleaning),
OCF_PL_STEP_FOREACH(ocf_metadata_check_crc, OCF_PL_STEP_FOREACH(ocf_metadata_check_crc,
ocf_metadata_load_all_args, ocf_metadata_load_all_args),
checker),
OCF_PL_STEP_TERMINATOR(), OCF_PL_STEP_TERMINATOR(),
}, },
}; };