diff --git a/inc/ocf_cache.h b/inc/ocf_cache.h index a38a61fa..fa07bf66 100644 --- a/inc/ocf_cache.h +++ b/inc/ocf_cache.h @@ -264,6 +264,17 @@ const struct ocf_volume_uuid *ocf_cache_get_uuid(ocf_cache_t cache); */ ocf_ctx_t ocf_cache_get_ctx(ocf_cache_t cache); +/** + * @brief Get OCF cleaner of given cache object + * + * @param[in] cache Cache object + * + * @retval OCF cleaner, NULL if cache is in standby mode, + * cache device is not attached (cleaner not initialized) + * or cleaner is disabled + */ +ocf_cleaner_t ocf_cache_get_cleaner(ocf_cache_t cache); + /** * @brief Get volume type id of given cache object * diff --git a/src/ocf_cache.c b/src/ocf_cache.c index b8dd408a..29e71533 100644 --- a/src/ocf_cache.c +++ b/src/ocf_cache.c @@ -288,6 +288,22 @@ ocf_ctx_t ocf_cache_get_ctx(ocf_cache_t cache) return cache->owner; } +ocf_cleaner_t ocf_cache_get_cleaner(ocf_cache_t cache) +{ + OCF_CHECK_NULL(cache); + + if (ocf_cache_is_standby(cache)) + return NULL; + + if (!ocf_cache_is_device_attached(cache)) + return NULL; + + if (cache->conf_meta->cleaner_disabled) + return NULL; + + return &cache->cleaner; +} + void ocf_cache_set_priv(ocf_cache_t cache, void *priv) { OCF_CHECK_NULL(cache);