Skip to content

Commit 5c3bb82

Browse files
committed
cleaning: Populate cleaning policy on the load path properly
ACP requires dirty counter reconstruction regardless to shutdown status, while ALRU reconstructs only on dirty shutdown. Call the populate on load unconditionally and let the cleaining policy deciside on what to populate in each of those cases. Signed-off-by: Robert Baldyga <robert.baldyga@unvertical.com>
1 parent 222a937 commit 5c3bb82

File tree

7 files changed

+36
-36
lines changed

7 files changed

+36
-36
lines changed

src/cleaning/acp.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2024-2025 Huawei Technologies
4+
* Copyright(c) 2026 Unvertical
45
* SPDX-License-Identifier: BSD-3-Clause
56
*/
67

@@ -246,7 +247,7 @@ void cleaning_policy_acp_setup(struct ocf_cache *cache)
246247
config->flush_max_buffers = OCF_ACP_DEFAULT_FLUSH_MAX_BUFFERS;
247248
}
248249

249-
int cleaning_policy_acp_initialize(ocf_cache_t cache, int kick_cleaner)
250+
int cleaning_policy_acp_initialize(ocf_cache_t cache)
250251
{
251252
struct acp_context *acp;
252253
int err, i;
@@ -292,9 +293,6 @@ int cleaning_policy_acp_initialize(ocf_cache_t cache, int kick_cleaner)
292293
}
293294
}
294295

295-
if (kick_cleaner)
296-
ocf_kick_cleaner(cache);
297-
298296
return 0;
299297
}
300298

@@ -419,7 +417,7 @@ static void ocf_acp_populate_finish(ocf_parallelize_t parallelize,
419417
ocf_parallelize_destroy(parallelize);
420418
}
421419

422-
void cleaning_policy_acp_populate(ocf_cache_t cache,
420+
void cleaning_policy_acp_populate(ocf_cache_t cache, bool reconstruct,
423421
ocf_cleaning_op_end_t cmpl, void *priv)
424422
{
425423
struct ocf_acp_populate_context *context;

src/cleaning/acp.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2025 Huawei Technologies
4+
* Copyright(c) 2026 Unvertical
45
* SPDX-License-Identifier: BSD-3-Clause
56
*/
67
#ifndef __LAYER_CLEANING_POLICY_AGGRESSIVE_H__
@@ -11,9 +12,9 @@
1112

1213
void cleaning_policy_acp_setup(ocf_cache_t cache);
1314

14-
int cleaning_policy_acp_initialize(ocf_cache_t cache, int kick_cleaner);
15+
int cleaning_policy_acp_initialize(ocf_cache_t cache);
1516

16-
void cleaning_policy_acp_populate(ocf_cache_t cache,
17+
void cleaning_policy_acp_populate(ocf_cache_t cache, bool reconstruct,
1718
ocf_cleaning_op_end_t cmpl, void *priv);
1819

1920
void cleaning_policy_acp_prepopulate(ocf_cache_t cache,

src/cleaning/alru.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2022 David Lee <live4thee@gmail.com>
44
* Copyright(c) 2024-2025 Huawei Technologies
5+
* Copyright(c) 2026 Unvertical
56
* SPDX-License-Identifier: BSD-3-Clause
67
*/
78

@@ -361,7 +362,7 @@ void cleaning_policy_alru_setup(struct ocf_cache *cache)
361362
config->dirty_ratio_inertia = OCF_ALRU_DEFAULT_DIRTY_RATIO_INERTIA;
362363
}
363364

364-
int cleaning_policy_alru_initialize(ocf_cache_t cache, int kick_cleaner)
365+
int cleaning_policy_alru_initialize(ocf_cache_t cache)
365366
{
366367
struct alru_context *ctx;
367368
int error = 0;
@@ -390,9 +391,6 @@ int cleaning_policy_alru_initialize(ocf_cache_t cache, int kick_cleaner)
390391

391392
cache->cleaner.cleaning_policy_context = ctx;
392393

393-
if (kick_cleaner)
394-
ocf_kick_cleaner(cache);
395-
396394
return 0;
397395
}
398396

@@ -607,9 +605,14 @@ static void cleaning_policy_alru_fill(ocf_cache_t cache,
607605
ocf_parallelize_run(parallelize);
608606
}
609607

610-
void cleaning_policy_alru_populate(ocf_cache_t cache,
608+
void cleaning_policy_alru_populate(ocf_cache_t cache, bool reconstruct,
611609
ocf_cleaning_op_end_t cmpl, void *priv)
612610
{
611+
if (!reconstruct) {
612+
ocf_kick_cleaner(cache);
613+
OCF_CMPL_RET(priv, 0);
614+
}
615+
613616
cleaning_policy_alru_fill(cache, cmpl, priv,
614617
ocf_alru_populate_handle);
615618
}

src/cleaning/alru.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2025 Huawei Technologies
4+
* Copyright(c) 2026 Unvertical
45
* SPDX-License-Identifier: BSD-3-Clause
56
*/
67
#ifndef __LAYER_CLEANING_POLICY_ALRU_H__
@@ -11,8 +12,8 @@
1112
#include "alru_structs.h"
1213

1314
void cleaning_policy_alru_setup(ocf_cache_t cache);
14-
int cleaning_policy_alru_initialize(ocf_cache_t cache, int kick_cleaner);
15-
void cleaning_policy_alru_populate(ocf_cache_t cache,
15+
int cleaning_policy_alru_initialize(ocf_cache_t cache);
16+
void cleaning_policy_alru_populate(ocf_cache_t cache, bool reconstruct,
1617
ocf_cleaning_op_end_t cmpl, void *priv);
1718
void cleaning_policy_alru_prepopulate(ocf_cache_t cache,
1819
ocf_cleaning_op_end_t cmpl, void *priv);

src/cleaning/cleaning_ops.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2023-2025 Huawei Technologies Co., Ltd.
4+
* Copyright(c) 2026 Unvertical
45
* SPDX-License-Identifier: BSD-3-Clause
56
*/
67

@@ -14,8 +15,8 @@
1415

1516
struct cleaning_policy_ops {
1617
void (*setup)(ocf_cache_t cache);
17-
int (*initialize)(ocf_cache_t cache, int kick_cleaner);
18-
void (*populate)(ocf_cache_t cache,
18+
int (*initialize)(ocf_cache_t cache);
19+
void (*populate)(ocf_cache_t cache, bool reconstruct,
1920
ocf_cleaning_op_end_t cmpl, void *priv);
2021
void (*prepopulate)(ocf_cache_t cache,
2122
ocf_cleaning_op_end_t cmpl, void *priv);
@@ -90,18 +91,18 @@ static inline void ocf_cleaning_setup(ocf_cache_t cache, ocf_cleaning_t policy)
9091
}
9192

9293
static inline int ocf_cleaning_initialize(ocf_cache_t cache,
93-
ocf_cleaning_t policy, int kick_cleaner)
94+
ocf_cleaning_t policy)
9495
{
9596
ENV_BUG_ON(policy >= ocf_cleaning_max);
9697

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

100-
return cleaning_policy_ops[policy].initialize(cache, kick_cleaner);
101+
return cleaning_policy_ops[policy].initialize(cache);
101102
}
102103

103104
static inline void ocf_cleaning_populate(ocf_cache_t cache,
104-
ocf_cleaning_t policy,
105+
ocf_cleaning_t policy, bool reconstruct,
105106
ocf_cleaning_op_end_t cmpl, void *priv)
106107
{
107108
ENV_BUG_ON(policy >= ocf_cleaning_max);
@@ -111,7 +112,7 @@ static inline void ocf_cleaning_populate(ocf_cache_t cache,
111112
return;
112113
}
113114

114-
cleaning_policy_ops[policy].populate(cache, cmpl, priv);
115+
cleaning_policy_ops[policy].populate(cache, reconstruct, cmpl, priv);
115116
}
116117

117118
static inline void ocf_cleaning_prepopulate(ocf_cache_t cache,

src/mngt/ocf_mngt_cache.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2023-2025 Huawei Technologies
4+
* Copyright(c) 2026 Unvertical
45
* SPDX-License-Identifier: BSD-3-Clause
56
*/
67

@@ -232,7 +233,7 @@ static ocf_error_t __init_cleaning_policy(ocf_cache_t cache)
232233
for (i = 0; i < ocf_cleaning_max; i++)
233234
ocf_cleaning_setup(cache, i);
234235

235-
result = ocf_cleaning_initialize(cache, cache->cleaner.policy, false);
236+
result = ocf_cleaning_initialize(cache, cache->cleaner.policy);
236237
if (result)
237238
env_refcnt_deinit(&cache->cleaner.refcnt);
238239

@@ -736,6 +737,8 @@ static void _ocf_mngt_load_init_cleaning(ocf_pipeline_t pipeline,
736737
{
737738
struct ocf_cache_attach_context *context = priv;
738739
ocf_cache_t cache = context->cache;
740+
bool reconstruct = context->metadata.shutdown_status ==
741+
ocf_metadata_dirty_shutdown;
739742
ocf_error_t result;
740743

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

747-
if (context->metadata.shutdown_status == ocf_metadata_clean_shutdown) {
748-
/* Cleaning policy structures have been loaded so no need to populate
749-
them for the second time */
750-
result = ocf_cleaning_initialize(cache, cache->cleaner.policy, true);
751-
OCF_PL_NEXT_ON_SUCCESS_RET(pipeline, result);
752-
753-
} else {
754-
result = ocf_cleaning_initialize(cache, cache->cleaner.policy, false);
755-
if (result)
756-
OCF_PL_FINISH_RET(pipeline, result);
750+
result = ocf_cleaning_initialize(cache, cache->cleaner.policy);
751+
if (result)
752+
OCF_PL_FINISH_RET(pipeline, result);
757753

758-
ocf_cleaning_populate(cache, cache->cleaner.policy,
759-
_ocf_mngt_cleaning_populate_complete, context);
760-
}
754+
ocf_cleaning_populate(cache, cache->cleaner.policy, reconstruct,
755+
_ocf_mngt_cleaning_populate_complete, context);
761756
}
762757

763758
static void _ocf_mngt_init_metadata_complete(void *priv, int error)
@@ -1469,7 +1464,7 @@ static void _ocf_mngt_attach_init_services(ocf_pipeline_t pipeline,
14691464
OCF_PL_FINISH_RET(pipeline, result);
14701465
}
14711466

1472-
ocf_cleaning_populate(cache, cache->cleaner.policy,
1467+
ocf_cleaning_populate(cache, cache->cleaner.policy, false,
14731468
_ocf_mngt_cleaning_populate_init_complete, context);
14741469
}
14751470

src/mngt/ocf_mngt_flush.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Copyright(c) 2012-2022 Intel Corporation
33
* Copyright(c) 2023-2025 Huawei Technologies Co., Ltd.
4+
* Copyright(c) 2026 Unvertical
45
* SPDX-License-Identifier: BSD-3-Clause
56
*/
67

@@ -1006,7 +1007,7 @@ static void _ocf_mngt_cache_cleaning_set_policy_initialize(
10061007
ocf_cleaning_t new_policy = context->new_policy;
10071008
int result;
10081009

1009-
result = ocf_cleaning_initialize(cache, new_policy, false);
1010+
result = ocf_cleaning_initialize(cache, new_policy);
10101011

10111012
OCF_PL_NEXT_ON_SUCCESS_RET(context->pipeline, result);
10121013
}

0 commit comments

Comments
 (0)