diff --git a/inc/ocf_cache.h b/inc/ocf_cache.h index 5b9f01c..c31d72b 100644 --- a/inc/ocf_cache.h +++ b/inc/ocf_cache.h @@ -172,6 +172,13 @@ bool ocf_cache_is_device_attached(ocf_cache_t cache); */ bool ocf_cache_is_running(ocf_cache_t cache); +/** + * @brief Wait for all IO to finish + * + * @param[in] cache Cache object + */ +void ocf_cache_wait_for_io_finish(ocf_cache_t cache); + /** * @brief Get cache mode of given cache object * diff --git a/src/mngt/ocf_mngt_cache.c b/src/mngt/ocf_mngt_cache.c index 2fbba57..663c1d3 100644 --- a/src/mngt/ocf_mngt_cache.c +++ b/src/mngt/ocf_mngt_cache.c @@ -1559,7 +1559,7 @@ static int _ocf_mngt_cache_unplug(ocf_cache_t cache, bool stop) cache->device = NULL; env_atomic_set(&cache->attached, 0); - /* TODO: this should be removed from detach after 'attached' stats + /* TODO: this should be removed from detach after 'attached' stats are better separated in statistics */ _ocf_mngt_init_attached_nonpersistent(cache); @@ -1579,7 +1579,7 @@ static int _ocf_mngt_cache_stop(ocf_cache_t cache) env_bit_set(ocf_cache_state_stopping, &cache->cache_state); env_bit_clear(ocf_cache_state_running, &cache->cache_state); - ocf_mngt_wait_for_io_finish(cache); + ocf_cache_wait_for_io_finish(cache); /* All exported objects removed, cleaning up rest. */ for (i = 0, j = 0; j < no && i < OCF_CORE_MAX; i++) { @@ -1681,7 +1681,7 @@ int ocf_mngt_cache_stop(ocf_cache_t cache) { int result; char cache_name[OCF_CACHE_NAME_SIZE]; - ocf_ctx_t context; + ocf_ctx_t ctx; OCF_CHECK_NULL(cache); @@ -1690,21 +1690,21 @@ int ocf_mngt_cache_stop(ocf_cache_t cache) if (result) return result; - context = ocf_cache_get_ctx(cache); + ctx = ocf_cache_get_ctx(cache); ocf_cache_log(cache, log_info, "Stopping cache\n"); result = _ocf_mngt_cache_stop(cache); if (result == -OCF_ERR_WRITE_CACHE) { - ocf_log(context, log_warn, "Stopped cache %s with " - "errors\n", cache_name); + ocf_log(ctx, log_warn, "Stopped cache %s with errors\n", + cache_name); } else if (result) { - ocf_log(context, log_err, "Stopping cache %s " - "failed\n", cache_name); + ocf_log(ctx, log_err, "Stopping cache %s failed\n", + cache_name); } else { - ocf_log(context, log_info, "Cache %s successfully " - "stopped\n", cache_name); + ocf_log(ctx, log_info, "Cache %s successfully stopped\n", + cache_name); } return result; diff --git a/src/mngt/ocf_mngt_common.c b/src/mngt/ocf_mngt_common.c index 80c99ab..65c786a 100644 --- a/src/mngt/ocf_mngt_common.c +++ b/src/mngt/ocf_mngt_common.c @@ -434,15 +434,3 @@ int ocf_mngt_cache_visit_reverse(ocf_ctx_t ocf_ctx, return result; } - -void ocf_mngt_wait_for_io_finish(ocf_cache_t cache) -{ - uint32_t req_active = 0; - - do { - req_active = ocf_req_get_allocated(cache); - if (req_active) - env_msleep(500); - } while (req_active); -} - diff --git a/src/mngt/ocf_mngt_common.h b/src/mngt/ocf_mngt_common.h index 60b3a3f..66b7735 100644 --- a/src/mngt/ocf_mngt_common.h +++ b/src/mngt/ocf_mngt_common.h @@ -24,8 +24,6 @@ int cache_mng_thread_io_requests(void *data); bool ocf_mngt_cache_is_dirty(ocf_cache_t cache); -void ocf_mngt_wait_for_io_finish(ocf_cache_t cache); - int ocf_mngt_add_partition_to_cache(struct ocf_cache *cache, ocf_part_id_t part_id, const char *name, uint32_t min_size, uint32_t max_size, uint8_t priority, bool valid); diff --git a/src/ocf_cache.c b/src/ocf_cache.c index c254655..cda2340 100644 --- a/src/ocf_cache.c +++ b/src/ocf_cache.c @@ -7,6 +7,7 @@ #include "metadata/metadata.h" #include "engine/cache_engine.h" #include "utils/utils_cache_line.h" +#include "utils/utils_req.h" #include "ocf_priv.h" #include "ocf_cache_priv.h" @@ -51,6 +52,17 @@ bool ocf_cache_is_device_attached(ocf_cache_t cache) return env_atomic_read(&(cache)->attached); } +void ocf_cache_wait_for_io_finish(ocf_cache_t cache) +{ + uint32_t req_active = 0; + + do { + req_active = ocf_req_get_allocated(cache); + if (req_active) + env_msleep(500); + } while (req_active); +} + ocf_cache_mode_t ocf_cache_get_mode(ocf_cache_t cache) { OCF_CHECK_NULL(cache); diff --git a/src/ocf_queue.c b/src/ocf_queue.c index 2eea7ac..72c614b 100644 --- a/src/ocf_queue.c +++ b/src/ocf_queue.c @@ -39,7 +39,7 @@ static void ocf_init_queue(struct ocf_queue *q) INIT_LIST_HEAD(&q->io_list); } -int ocf_start_queues(struct ocf_cache *cache) +int ocf_start_queues(ocf_cache_t cache) { int id, result = 0; struct ocf_queue *q; @@ -63,17 +63,17 @@ int ocf_start_queues(struct ocf_cache *cache) return result; } -void ocf_stop_queues(struct ocf_cache *dev) +void ocf_stop_queues(ocf_cache_t cache) { int i; struct ocf_queue *curr; - ocf_mngt_wait_for_io_finish(dev); + ocf_cache_wait_for_io_finish(cache); /* Stop IO threads. */ - for (i = 0 ; i < dev->io_queues_no; i++) { - curr = &dev->io_queues[i]; - ctx_queue_stop(dev->owner, curr); + for (i = 0 ; i < cache->io_queues_no; i++) { + curr = &cache->io_queues[i]; + ctx_queue_stop(cache->owner, curr); } }