From 979f51612f7739f26ec900d830286aef300497e7 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Mon, 8 Apr 2019 19:39:52 -0400 Subject: [PATCH] Move dirty ref counter to cache->refcnt aggregate Signed-off-by: Adam Rutkowski --- src/mngt/ocf_mngt_cache.c | 4 ++-- src/mngt/ocf_mngt_flush.c | 6 +++--- src/ocf_cache_priv.h | 6 ++++-- src/ocf_core.c | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index b535415..9a34d53 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -2361,7 +2361,7 @@ static void ocf_mngt_cache_detach_finish(ocf_pipeline_t pipeline, struct ocf_mngt_cache_detach_context *context = priv; ocf_cache_t cache = context->cache; - ocf_refcnt_unfreeze(&cache->dirty); + ocf_refcnt_unfreeze(&cache->refcnt.dirty); if (!error) { if (!context->cache_write_error) { @@ -2422,7 +2422,7 @@ void ocf_mngt_cache_detach(ocf_cache_t cache, context->cache = cache; /* prevent dirty io */ - ocf_refcnt_freeze(&cache->dirty); + ocf_refcnt_freeze(&cache->refcnt.dirty); ocf_pipeline_next(pipeline); } diff --git a/src/mngt/ocf_mngt_flush.c b/src/mngt/ocf_mngt_flush.c index 05fcd15..f5e2af9 100644 --- a/src/mngt/ocf_mngt_flush.c +++ b/src/mngt/ocf_mngt_flush.c @@ -94,15 +94,15 @@ static void _ocf_mngt_begin_flush(ocf_pipeline_t pipeline, void *priv, * finish */ env_mutex_lock(&cache->flush_mutex); - ocf_refcnt_freeze(&cache->dirty); + ocf_refcnt_freeze(&cache->refcnt.dirty); - ocf_refcnt_register_zero_cb(&cache->dirty, + ocf_refcnt_register_zero_cb(&cache->refcnt.dirty, _ocf_mngt_begin_flush_complete, context); } static void _ocf_mngt_end_flush(ocf_cache_t cache) { - ocf_refcnt_unfreeze(&cache->dirty); + ocf_refcnt_unfreeze(&cache->refcnt.dirty); env_mutex_unlock(&cache->flush_mutex); } diff --git a/src/ocf_cache_priv.h b/src/ocf_cache_priv.h index 333ad3e..6842ca0 100644 --- a/src/ocf_cache_priv.h +++ b/src/ocf_cache_priv.h @@ -170,11 +170,13 @@ struct ocf_cache { env_atomic pending_requests; + struct { + struct ocf_refcnt dirty; + } refcnt; + env_atomic pending_cache_requests; env_waitqueue pending_cache_wq; - struct ocf_refcnt dirty; - uint32_t fallback_pt_error_threshold; env_atomic fallback_pt_error_counter; diff --git a/src/ocf_core.c b/src/ocf_core.c index 4f10335..020e271 100644 --- a/src/ocf_core.c +++ b/src/ocf_core.c @@ -156,7 +156,7 @@ static inline ocf_core_t ocf_volume_to_core(ocf_volume_t volume) static inline int ocf_io_set_dirty(ocf_cache_t cache, struct ocf_core_io *core_io) { - core_io->dirty = ocf_refcnt_inc(&cache->dirty); + core_io->dirty = ocf_refcnt_inc(&cache->refcnt.dirty); return core_io->dirty ? 0 : -EBUSY; } @@ -167,7 +167,7 @@ static inline void dec_counter_if_req_was_dirty(struct ocf_core_io *core_io, return; core_io->dirty = 0; - ocf_refcnt_dec(&cache->dirty); + ocf_refcnt_dec(&cache->refcnt.dirty); } static inline int ocf_core_validate_io(struct ocf_io *io)