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
25 changes: 14 additions & 11 deletions src/metadata/metadata.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* Copyright(c) 2024-2025 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -271,7 +271,7 @@ static int ocf_metadata_calculate_metadata_size(
lowest_diff = cache_lines;

do {
count_pages = ctrl->count_pages;
count_pages = 0;
for (i = metadata_segment_variable_size_start;
i < metadata_segment_max; i++) {
struct ocf_metadata_raw *raw = &ctrl->raw_desc[i];
Expand All @@ -286,7 +286,7 @@ static int ocf_metadata_calculate_metadata_size(
/*
* Setup SSD location and size
*/
raw->ssd_pages_offset = count_pages;
raw->ssd_pages_offset = ctrl->count_pages_fixed + count_pages;
raw->ssd_pages = OCF_DIV_ROUND_UP(raw->entries,
raw->entries_in_page);

Expand Down Expand Up @@ -321,7 +321,7 @@ static int ocf_metadata_calculate_metadata_size(
/* Cache size in bytes */
diff_lines = ctrl->device_lines * line_size;
/* Sub metadata size which is in 4 kiB unit */
diff_lines -= (int64_t)count_pages * PAGE_SIZE;
diff_lines -= (int64_t)(ctrl->count_pages_fixed + count_pages) * PAGE_SIZE;
/* Convert back to cache lines */
diff_lines /= line_size;
/* Calculate difference */
Expand All @@ -344,7 +344,7 @@ static int ocf_metadata_calculate_metadata_size(

} while (diff_lines);

ctrl->count_pages = count_pages;
ctrl->count_pages_variable = count_pages;
ctrl->cachelines = cache_lines;
OCF_DEBUG_PARAM(cache, "Cache lines = %u", ctrl->cachelines);

Expand Down Expand Up @@ -447,6 +447,7 @@ void ocf_metadata_deinit_variable_size(struct ocf_cache *cache)
i < metadata_segment_max; i++) {
ocf_metadata_segment_destroy(cache, ctrl->segment[i]);
}
ctrl->count_pages_variable = 0;
}

static inline void ocf_metadata_config_init(ocf_cache_t cache, size_t size)
Expand Down Expand Up @@ -530,7 +531,7 @@ static struct ocf_metadata_ctrl *ocf_metadata_ctrl_init(
page += ocf_metadata_raw_size_on_ssd(raw);
}

ctrl->count_pages = page;
ctrl->count_pages_fixed = page;

return ctrl;
}
Expand Down Expand Up @@ -711,9 +712,10 @@ int ocf_metadata_init_variable_size(struct ocf_cache *cache,
}

OCF_DEBUG_PARAM(cache, "Metadata begin pages = %u", ctrl->start_page);
OCF_DEBUG_PARAM(cache, "Metadata count pages = %u", ctrl->count_pages);
OCF_DEBUG_PARAM(cache, "Metadata count pages fixed = %u", ctrl->count_pages_fixed);
OCF_DEBUG_PARAM(cache, "Metadata count pages variable = %u", ctrl->count_pages_variable);
OCF_DEBUG_PARAM(cache, "Metadata end pages = %u", ctrl->start_page
+ ctrl->count_pages);
+ ocf_metadata_get_pages_count(cache));

superblock = ctrl->segment[metadata_segment_sb_config];

Expand Down Expand Up @@ -787,7 +789,8 @@ int ocf_metadata_init_variable_size(struct ocf_cache *cache,
cache->device->hash_table_entries =
ctrl->raw_desc[metadata_segment_hash].entries;

cache->device->metadata_offset = ctrl->count_pages * PAGE_SIZE;
cache->device->metadata_offset =
ocf_metadata_get_pages_count(cache) * PAGE_SIZE;

cache->conf_meta->cachelines = ctrl->cachelines;
cache->conf_meta->line_size = line_size;
Expand Down Expand Up @@ -946,15 +949,15 @@ void ocf_metadata_init_hash_table(ocf_pipeline_t pipeline, void *priv,
/*
* Get count of pages that is dedicated for metadata
*/
ocf_cache_line_t ocf_metadata_get_pages_count(struct ocf_cache *cache)
uint32_t ocf_metadata_get_pages_count(struct ocf_cache *cache)
{
struct ocf_metadata_ctrl *ctrl = NULL;

OCF_DEBUG_TRACE(cache);

ctrl = (struct ocf_metadata_ctrl *) cache->metadata.priv;

return ctrl->count_pages;
return ctrl->count_pages_fixed + ctrl->count_pages_variable;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix the return type of this function

}

/*
Expand Down
3 changes: 2 additions & 1 deletion src/metadata/metadata.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2025 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -125,7 +126,7 @@ ocf_metadata_get_cachelines_count(struct ocf_cache *cache);
* @param cache - Cache instance
* @return Pages required for store metadata on cache device
*/
ocf_cache_line_t ocf_metadata_get_pages_count(struct ocf_cache *cache);
uint32_t ocf_metadata_get_pages_count(struct ocf_cache *cache);

/**
* @brief Flush metadata
Expand Down
4 changes: 3 additions & 1 deletion src/metadata/metadata_internal.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2020-2021 Intel Corporation
* Copyright(c) 2025 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand All @@ -20,7 +21,8 @@
struct ocf_metadata_ctrl {
ocf_cache_line_t cachelines;
ocf_cache_line_t start_page;
ocf_cache_line_t count_pages;
uint32_t count_pages_fixed;
uint32_t count_pages_variable;
uint32_t device_lines;
size_t mapping_size;
struct ocf_metadata_raw raw_desc[metadata_segment_max];
Expand Down
5 changes: 2 additions & 3 deletions src/metadata/metadata_passive_update.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* Copyright(c) 2024 Huawei Technologies
* Copyright(c) 2024-2025 Huawei Technologies
* SPDX-License-Identifier: BSD-3-Clause
*/

Expand Down Expand Up @@ -76,7 +76,6 @@ static void passive_io_page_lock_acquired(struct ocf_request *req)
int ocf_metadata_passive_update(struct ocf_request *master)
{
ocf_cache_t cache = master->cache;
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
uint64_t io_start_page = BYTES_TO_PAGES(master->addr);
uint64_t io_end_page = io_start_page + BYTES_TO_PAGES(master->bytes);
struct ocf_request *req;
Expand All @@ -87,7 +86,7 @@ int ocf_metadata_passive_update(struct ocf_request *master)
return 0;
}

if (io_start_page >= ctrl->count_pages) {
if (io_start_page >= ocf_metadata_get_pages_count(cache)) {
master->complete(master, 0);
return 0;
}
Expand Down