Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions src/cleaning/acp.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2024-2025 Huawei Technologies
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -246,7 +247,7 @@ void cleaning_policy_acp_setup(struct ocf_cache *cache)
config->flush_max_buffers = OCF_ACP_DEFAULT_FLUSH_MAX_BUFFERS;
}

int cleaning_policy_acp_initialize(ocf_cache_t cache, int kick_cleaner)
int cleaning_policy_acp_initialize(ocf_cache_t cache)
{
struct acp_context *acp;
int err, i;
Expand Down Expand Up @@ -292,9 +293,6 @@ int cleaning_policy_acp_initialize(ocf_cache_t cache, int kick_cleaner)
}
}

if (kick_cleaner)
ocf_kick_cleaner(cache);

return 0;
}

Expand Down Expand Up @@ -419,7 +417,7 @@ static void ocf_acp_populate_finish(ocf_parallelize_t parallelize,
ocf_parallelize_destroy(parallelize);
}

void cleaning_policy_acp_populate(ocf_cache_t cache,
void cleaning_policy_acp_populate(ocf_cache_t cache, bool reconstruct,
ocf_cleaning_op_end_t cmpl, void *priv)
{
struct ocf_acp_populate_context *context;
Expand Down
5 changes: 3 additions & 2 deletions src/cleaning/acp.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2025 Huawei Technologies
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __LAYER_CLEANING_POLICY_AGGRESSIVE_H__
Expand All @@ -11,9 +12,9 @@

void cleaning_policy_acp_setup(ocf_cache_t cache);

int cleaning_policy_acp_initialize(ocf_cache_t cache, int kick_cleaner);
int cleaning_policy_acp_initialize(ocf_cache_t cache);

void cleaning_policy_acp_populate(ocf_cache_t cache,
void cleaning_policy_acp_populate(ocf_cache_t cache, bool reconstruct,
ocf_cleaning_op_end_t cmpl, void *priv);

void cleaning_policy_acp_prepopulate(ocf_cache_t cache,
Expand Down
13 changes: 8 additions & 5 deletions src/cleaning/alru.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2022 David Lee <live4thee@gmail.com>
* Copyright(c) 2024-2025 Huawei Technologies
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -361,7 +362,7 @@ void cleaning_policy_alru_setup(struct ocf_cache *cache)
config->dirty_ratio_inertia = OCF_ALRU_DEFAULT_DIRTY_RATIO_INERTIA;
}

int cleaning_policy_alru_initialize(ocf_cache_t cache, int kick_cleaner)
int cleaning_policy_alru_initialize(ocf_cache_t cache)
{
struct alru_context *ctx;
int error = 0;
Expand Down Expand Up @@ -390,9 +391,6 @@ int cleaning_policy_alru_initialize(ocf_cache_t cache, int kick_cleaner)

cache->cleaner.cleaning_policy_context = ctx;

if (kick_cleaner)
ocf_kick_cleaner(cache);

return 0;
}

Expand Down Expand Up @@ -607,9 +605,14 @@ static void cleaning_policy_alru_fill(ocf_cache_t cache,
ocf_parallelize_run(parallelize);
}

void cleaning_policy_alru_populate(ocf_cache_t cache,
void cleaning_policy_alru_populate(ocf_cache_t cache, bool reconstruct,
ocf_cleaning_op_end_t cmpl, void *priv)
{
if (!reconstruct) {
ocf_kick_cleaner(cache);
OCF_CMPL_RET(priv, 0);
}

cleaning_policy_alru_fill(cache, cmpl, priv,
ocf_alru_populate_handle);
}
Expand Down
5 changes: 3 additions & 2 deletions src/cleaning/alru.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2025 Huawei Technologies
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __LAYER_CLEANING_POLICY_ALRU_H__
Expand All @@ -11,8 +12,8 @@
#include "alru_structs.h"

void cleaning_policy_alru_setup(ocf_cache_t cache);
int cleaning_policy_alru_initialize(ocf_cache_t cache, int kick_cleaner);
void cleaning_policy_alru_populate(ocf_cache_t cache,
int cleaning_policy_alru_initialize(ocf_cache_t cache);
void cleaning_policy_alru_populate(ocf_cache_t cache, bool reconstruct,
ocf_cleaning_op_end_t cmpl, void *priv);
void cleaning_policy_alru_prepopulate(ocf_cache_t cache,
ocf_cleaning_op_end_t cmpl, void *priv);
Expand Down
13 changes: 7 additions & 6 deletions src/cleaning/cleaning_ops.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2023-2025 Huawei Technologies Co., Ltd.
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand All @@ -14,8 +15,8 @@

struct cleaning_policy_ops {
void (*setup)(ocf_cache_t cache);
int (*initialize)(ocf_cache_t cache, int kick_cleaner);
void (*populate)(ocf_cache_t cache,
int (*initialize)(ocf_cache_t cache);
void (*populate)(ocf_cache_t cache, bool reconstruct,
ocf_cleaning_op_end_t cmpl, void *priv);
void (*prepopulate)(ocf_cache_t cache,
ocf_cleaning_op_end_t cmpl, void *priv);
Expand Down Expand Up @@ -90,18 +91,18 @@ static inline void ocf_cleaning_setup(ocf_cache_t cache, ocf_cleaning_t policy)
}

static inline int ocf_cleaning_initialize(ocf_cache_t cache,
ocf_cleaning_t policy, int kick_cleaner)
ocf_cleaning_t policy)
{
ENV_BUG_ON(policy >= ocf_cleaning_max);

if (unlikely(!cleaning_policy_ops[policy].initialize))
return 0;

return cleaning_policy_ops[policy].initialize(cache, kick_cleaner);
return cleaning_policy_ops[policy].initialize(cache);
}

static inline void ocf_cleaning_populate(ocf_cache_t cache,
ocf_cleaning_t policy,
ocf_cleaning_t policy, bool reconstruct,
ocf_cleaning_op_end_t cmpl, void *priv)
{
ENV_BUG_ON(policy >= ocf_cleaning_max);
Expand All @@ -111,7 +112,7 @@ static inline void ocf_cleaning_populate(ocf_cache_t cache,
return;
}

cleaning_policy_ops[policy].populate(cache, cmpl, priv);
cleaning_policy_ops[policy].populate(cache, reconstruct, cmpl, priv);
}

static inline void ocf_cleaning_prepopulate(ocf_cache_t cache,
Expand Down
25 changes: 10 additions & 15 deletions src/mngt/ocf_mngt_cache.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2023-2025 Huawei Technologies
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -232,7 +233,7 @@ static ocf_error_t __init_cleaning_policy(ocf_cache_t cache)
for (i = 0; i < ocf_cleaning_max; i++)
ocf_cleaning_setup(cache, i);

result = ocf_cleaning_initialize(cache, cache->cleaner.policy, false);
result = ocf_cleaning_initialize(cache, cache->cleaner.policy);
if (result)
env_refcnt_deinit(&cache->cleaner.refcnt);

Expand Down Expand Up @@ -736,6 +737,8 @@ static void _ocf_mngt_load_init_cleaning(ocf_pipeline_t pipeline,
{
struct ocf_cache_attach_context *context = priv;
ocf_cache_t cache = context->cache;
bool reconstruct = context->metadata.shutdown_status ==
ocf_metadata_dirty_shutdown;
ocf_error_t result;

result = env_refcnt_init(&cache->cleaner.refcnt, "cleaner", sizeof("cleaner"));
Expand All @@ -744,20 +747,12 @@ static void _ocf_mngt_load_init_cleaning(ocf_pipeline_t pipeline,
OCF_PL_FINISH_RET(pipeline, result);
}

if (context->metadata.shutdown_status == ocf_metadata_clean_shutdown) {
/* Cleaning policy structures have been loaded so no need to populate
them for the second time */
result = ocf_cleaning_initialize(cache, cache->cleaner.policy, true);
OCF_PL_NEXT_ON_SUCCESS_RET(pipeline, result);

} else {
result = ocf_cleaning_initialize(cache, cache->cleaner.policy, false);
if (result)
OCF_PL_FINISH_RET(pipeline, result);
result = ocf_cleaning_initialize(cache, cache->cleaner.policy);
if (result)
OCF_PL_FINISH_RET(pipeline, result);

ocf_cleaning_populate(cache, cache->cleaner.policy,
_ocf_mngt_cleaning_populate_complete, context);
}
ocf_cleaning_populate(cache, cache->cleaner.policy, reconstruct,
_ocf_mngt_cleaning_populate_complete, context);
}

static void _ocf_mngt_init_metadata_complete(void *priv, int error)
Expand Down Expand Up @@ -1469,7 +1464,7 @@ static void _ocf_mngt_attach_init_services(ocf_pipeline_t pipeline,
OCF_PL_FINISH_RET(pipeline, result);
}

ocf_cleaning_populate(cache, cache->cleaner.policy,
ocf_cleaning_populate(cache, cache->cleaner.policy, true,
_ocf_mngt_cleaning_populate_init_complete, context);
}

Expand Down
3 changes: 2 additions & 1 deletion src/mngt/ocf_mngt_flush.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2023-2025 Huawei Technologies Co., Ltd.
* Copyright(c) 2026 Unvertical
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -1006,7 +1007,7 @@ static void _ocf_mngt_cache_cleaning_set_policy_initialize(
ocf_cleaning_t new_policy = context->new_policy;
int result;

result = ocf_cleaning_initialize(cache, new_policy, false);
result = ocf_cleaning_initialize(cache, new_policy);

OCF_PL_NEXT_ON_SUCCESS_RET(context->pipeline, result);
}
Expand Down
Loading