From ce2ff14150dd5f0b179145358afecd41caf323a1 Mon Sep 17 00:00:00 2001 From: Adam Rutkowski Date: Fri, 5 Mar 2021 11:20:47 +0100 Subject: [PATCH] Move request engine callbacks to req structure Signed-off-by: Adam Rutkowski --- src/engine/engine_common.c | 24 +++++++++++------------- src/engine/engine_common.h | 3 +-- src/engine/engine_rd.c | 3 ++- src/engine/engine_wb.c | 3 ++- src/engine/engine_wt.c | 3 ++- src/ocf_request.h | 2 ++ 6 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/engine/engine_common.c b/src/engine/engine_common.c index 969bc18..b7e5816 100644 --- a/src/engine/engine_common.c +++ b/src/engine/engine_common.c @@ -449,25 +449,24 @@ static void _ocf_engine_clean_end(void *private_data, int error) } } -static int lock_clines(struct ocf_request *req, - const struct ocf_engine_callbacks *engine_cbs) +static int _lock_clines(struct ocf_request *req) { - enum ocf_engine_lock_type lock_type = engine_cbs->get_lock_type(req); struct ocf_cache_line_concurrency *c = req->cache->device->concurrency.cache_line; + enum ocf_engine_lock_type lock_type = + req->engine_cbs->get_lock_type(req); switch (lock_type) { case ocf_engine_lock_write: - return ocf_req_async_lock_wr(c, req, engine_cbs->resume); + return ocf_req_async_lock_wr(c, req, req->engine_cbs->resume); case ocf_engine_lock_read: - return ocf_req_async_lock_rd(c, req, engine_cbs->resume); + return ocf_req_async_lock_rd(c, req, req->engine_cbs->resume); default: return OCF_LOCK_ACQUIRED; } } -static inline int ocf_prepare_clines_miss(struct ocf_request *req, - const struct ocf_engine_callbacks *engine_cbs) +static inline int ocf_prepare_clines_miss(struct ocf_request *req) { int lock_status = -OCF_ERR_NO_LOCK; struct ocf_metadata_lock *metadata_lock = &req->cache->metadata.lock; @@ -490,7 +489,7 @@ static inline int ocf_prepare_clines_miss(struct ocf_request *req, ocf_engine_map(req); if (!ocf_req_test_mapping_error(req)) { - lock_status = lock_clines(req, engine_cbs); + lock_status = _lock_clines(req); if (lock_status < 0) { /* Mapping succeeded, but we failed to acquire cacheline lock. * Don't try to evict, just return error to caller */ @@ -523,7 +522,7 @@ eviction: if (ocf_req_test_mapping_error(req)) goto unlock; - lock_status = lock_clines(req, engine_cbs); + lock_status = _lock_clines(req); if (lock_status < 0) ocf_req_set_mapping_error(req); @@ -533,8 +532,7 @@ unlock: return lock_status; } -int ocf_engine_prepare_clines(struct ocf_request *req, - const struct ocf_engine_callbacks *engine_cbs) +int ocf_engine_prepare_clines(struct ocf_request *req) { bool mapped; bool promote = true; @@ -553,7 +551,7 @@ int ocf_engine_prepare_clines(struct ocf_request *req, mapped = ocf_engine_is_mapped(req); if (mapped) { - lock = lock_clines(req, engine_cbs); + lock = _lock_clines(req); ocf_hb_req_prot_unlock_rd(req); return lock; } @@ -567,7 +565,7 @@ int ocf_engine_prepare_clines(struct ocf_request *req, return lock; } - return ocf_prepare_clines_miss(req, engine_cbs); + return ocf_prepare_clines_miss(req); } static int _ocf_engine_clean_getter(struct ocf_cache *cache, diff --git a/src/engine/engine_common.h b/src/engine/engine_common.h index 466cc89..aabffe9 100644 --- a/src/engine/engine_common.h +++ b/src/engine/engine_common.h @@ -245,8 +245,7 @@ struct ocf_engine_callbacks * @retval LOOKUP_INSERTED successfully evicted required number of cachelines * @retval LOOKUP_MISS eviction failure */ -int ocf_engine_prepare_clines(struct ocf_request *req, - const struct ocf_engine_callbacks *engine_cbs); +int ocf_engine_prepare_clines(struct ocf_request *req); /** * @brief Traverse OCF request (lookup cache) diff --git a/src/engine/engine_rd.c b/src/engine/engine_rd.c index 6a9f778..74d5f12 100644 --- a/src/engine/engine_rd.c +++ b/src/engine/engine_rd.c @@ -242,8 +242,9 @@ int ocf_read_generic(struct ocf_request *req) /* Set resume call backs */ req->io_if = &_io_if_read_generic_resume; + req->engine_cbs = &_rd_engine_callbacks; - lock = ocf_engine_prepare_clines(req, &_rd_engine_callbacks); + lock = ocf_engine_prepare_clines(req); if (!ocf_req_test_mapping_error(req)) { if (lock >= 0) { diff --git a/src/engine/engine_wb.c b/src/engine/engine_wb.c index 70ab3cb..b0cdbee 100644 --- a/src/engine/engine_wb.c +++ b/src/engine/engine_wb.c @@ -189,10 +189,11 @@ int ocf_write_wb(struct ocf_request *req) /* Set resume io_if */ req->io_if = &_io_if_wb_resume; + req->engine_cbs = &_wb_engine_callbacks; /* TODO: Handle fits into dirty */ - lock = ocf_engine_prepare_clines(req, &_wb_engine_callbacks); + lock = ocf_engine_prepare_clines(req); if (!ocf_req_test_mapping_error(req)) { if (lock >= 0) { diff --git a/src/engine/engine_wt.c b/src/engine/engine_wt.c index a8eb087..968e8fa 100644 --- a/src/engine/engine_wt.c +++ b/src/engine/engine_wt.c @@ -178,8 +178,9 @@ int ocf_write_wt(struct ocf_request *req) /* Set resume io_if */ req->io_if = &_io_if_wt_resume; + req->engine_cbs = &_wt_engine_callbacks; - lock = ocf_engine_prepare_clines(req, &_wt_engine_callbacks); + lock = ocf_engine_prepare_clines(req); if (!ocf_req_test_mapping_error(req)) { if (lock >= 0) { diff --git a/src/ocf_request.h b/src/ocf_request.h index c14aac5..12020a3 100644 --- a/src/ocf_request.h +++ b/src/ocf_request.h @@ -103,6 +103,8 @@ struct ocf_request { struct ocf_io_internal ioi; /*!< OCF IO associated with request */ + const struct ocf_engine_callbacks *engine_cbs; + env_atomic ref_count; /*!< Reference usage count, once OCF request reaches zero it * will be de-initialed. Get/Put method are intended to modify