From 69c0f20b6ea749983c35f07ac8be785a71886bdf Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Fri, 5 Mar 2021 11:20:46 +0100 Subject: [PATCH] Remove global metadata lock from cleaner metadata update step Signed-off-by: Adam Rutkowski --- src/utils/utils_cleaner.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/utils/utils_cleaner.c b/src/utils/utils_cleaner.c index 5c07aa4..d3169f9 100644 --- a/src/utils/utils_cleaner.c +++ b/src/utils/utils_cleaner.c @@ -323,7 +323,6 @@ static int _ocf_cleaner_update_metadata(struct ocf_request *req) OCF_DEBUG_TRACE(req->cache); - ocf_metadata_start_exclusive_access(&cache->metadata.lock); /* Update metadata */ for (i = 0; i < req->core_line_count; i++, iter++) { if (iter->status == LOOKUP_MISS) @@ -336,22 +335,29 @@ static int _ocf_cleaner_update_metadata(struct ocf_request *req) cache_line = iter->coll_idx; - if (!metadata_test_dirty(cache, cache_line)) - continue; + ocf_hb_cline_prot_lock_wr(&cache->metadata.lock, + req->lock_idx, req->map[i].core_id, + req->map[i].core_line); - ocf_metadata_get_core_and_part_id(cache, cache_line, - &core_id, &req->part_id); - req->core = &cache->core[core_id]; + if (metadata_test_dirty(cache, cache_line)) { + ocf_metadata_get_core_and_part_id(cache, cache_line, + &core_id, &req->part_id); + req->core = &cache->core[core_id]; - ocf_metadata_start_collision_shared_access(cache, cache_line); - set_cache_line_clean(cache, 0, ocf_line_end_sector(cache), req, - i); - ocf_metadata_end_collision_shared_access(cache, cache_line); + ocf_metadata_start_collision_shared_access(cache, + cache_line); + set_cache_line_clean(cache, 0, + ocf_line_end_sector(cache), req, i); + ocf_metadata_end_collision_shared_access(cache, + cache_line); + } + + ocf_hb_cline_prot_unlock_wr(&cache->metadata.lock, + req->lock_idx, req->map[i].core_id, + req->map[i].core_line); } ocf_metadata_flush_do_asynch(cache, req, _ocf_cleaner_metadata_io_end); - ocf_metadata_end_exclusive_access(&cache->metadata.lock); - return 0; }