remove metadata updater
Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:

committed by
Kozlowski Mateusz

parent
953e0f25d7
commit
f589341c9a
@@ -301,6 +301,15 @@ static void matadata_io_page_lock_acquired(struct ocf_request *req)
|
||||
ocf_engine_push_req_front(req, true);
|
||||
}
|
||||
|
||||
void metadata_io_req_finalize(struct metadata_io_request *m_req)
|
||||
{
|
||||
struct metadata_io_request_asynch *a_req = m_req->asynch;
|
||||
|
||||
if (env_atomic_dec_return(&a_req->req_active) == 0)
|
||||
env_mpool_del(m_req->cache->owner->resources.mio, a_req,
|
||||
a_req->alloc_req_count);
|
||||
}
|
||||
|
||||
static void metadata_io_req_submit(struct metadata_io_request *m_req)
|
||||
{
|
||||
struct metadata_io_request_asynch *a_req = m_req->asynch;
|
||||
@@ -311,7 +320,12 @@ static void metadata_io_req_submit(struct metadata_io_request *m_req)
|
||||
if (a_req->mio_conc) {
|
||||
lock = ocf_mio_async_lock(a_req->mio_conc, m_req,
|
||||
matadata_io_page_lock_acquired);
|
||||
/* TODO: error handling for lock < 0 */
|
||||
|
||||
if (lock != OCF_LOCK_ACQUIRED) {
|
||||
a_req->error = lock;
|
||||
metadata_io_req_finalize(m_req);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!a_req->mio_conc || lock == OCF_LOCK_ACQUIRED)
|
||||
@@ -329,15 +343,6 @@ void metadata_io_req_end(struct metadata_io_request *m_req)
|
||||
ctx_data_free(cache->owner, m_req->data);
|
||||
}
|
||||
|
||||
void metadata_io_req_finalize(struct metadata_io_request *m_req)
|
||||
{
|
||||
struct metadata_io_request_asynch *a_req = m_req->asynch;
|
||||
|
||||
if (env_atomic_dec_return(&a_req->req_active) == 0)
|
||||
env_mpool_del(m_req->cache->owner->resources.mio, a_req,
|
||||
a_req->alloc_req_count);
|
||||
}
|
||||
|
||||
static uint32_t metadata_io_max_page(ocf_cache_t cache)
|
||||
{
|
||||
uint32_t volume_max_io_pages = ocf_volume_get_max_io_size(
|
||||
|
@@ -1,163 +0,0 @@
|
||||
/*
|
||||
* Copyright(c) 2012-2021 Intel Corporation
|
||||
* SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
*/
|
||||
|
||||
#include "metadata.h"
|
||||
#include "metadata_io.h"
|
||||
#include "metadata_updater_priv.h"
|
||||
#include "../ocf_priv.h"
|
||||
#include "../engine/engine_common.h"
|
||||
#include "../ocf_cache_priv.h"
|
||||
#include "../ocf_ctx_priv.h"
|
||||
#include "../utils/utils_io.h"
|
||||
|
||||
int ocf_metadata_updater_init(ocf_cache_t cache)
|
||||
{
|
||||
ocf_metadata_updater_t mu = &cache->metadata_updater;
|
||||
struct ocf_metadata_io_syncher *syncher = &mu->syncher;
|
||||
|
||||
INIT_LIST_HEAD(&syncher->in_progress_head);
|
||||
INIT_LIST_HEAD(&syncher->pending_head);
|
||||
env_mutex_init(&syncher->lock);
|
||||
|
||||
return ctx_metadata_updater_init(cache->owner, mu);
|
||||
}
|
||||
|
||||
void ocf_metadata_updater_kick(ocf_cache_t cache)
|
||||
{
|
||||
ctx_metadata_updater_kick(cache->owner, &cache->metadata_updater);
|
||||
}
|
||||
|
||||
void ocf_metadata_updater_stop(ocf_cache_t cache)
|
||||
{
|
||||
ctx_metadata_updater_stop(cache->owner, &cache->metadata_updater);
|
||||
env_mutex_destroy(&cache->metadata_updater.syncher.lock);
|
||||
}
|
||||
|
||||
void ocf_metadata_updater_set_priv(ocf_metadata_updater_t mu, void *priv)
|
||||
{
|
||||
OCF_CHECK_NULL(mu);
|
||||
mu->priv = priv;
|
||||
}
|
||||
|
||||
void *ocf_metadata_updater_get_priv(ocf_metadata_updater_t mu)
|
||||
{
|
||||
OCF_CHECK_NULL(mu);
|
||||
return mu->priv;
|
||||
}
|
||||
|
||||
ocf_cache_t ocf_metadata_updater_get_cache(ocf_metadata_updater_t mu)
|
||||
{
|
||||
OCF_CHECK_NULL(mu);
|
||||
return container_of(mu, struct ocf_cache, metadata_updater);
|
||||
}
|
||||
|
||||
static int _metadata_updater_iterate_in_progress(ocf_cache_t cache,
|
||||
struct list_head *finished, struct metadata_io_request *new_req)
|
||||
{
|
||||
struct ocf_metadata_io_syncher *syncher =
|
||||
&cache->metadata_updater.syncher;
|
||||
struct metadata_io_request *curr, *temp;
|
||||
|
||||
list_for_each_entry_safe(curr, temp, &syncher->in_progress_head, list) {
|
||||
if (env_atomic_read(&curr->finished)) {
|
||||
list_move_tail(&curr->list, finished);
|
||||
continue;
|
||||
}
|
||||
if (new_req) {
|
||||
/* If request specified, check if overlap occurs. */
|
||||
if (ocf_io_overlaps(new_req->page, new_req->count,
|
||||
curr->page, curr->count)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void metadata_updater_process_finished(struct list_head *finished)
|
||||
{
|
||||
struct metadata_io_request *curr, *temp;
|
||||
|
||||
list_for_each_entry_safe(curr, temp, finished, list) {
|
||||
list_del(&curr->list);
|
||||
metadata_io_req_complete(curr);
|
||||
}
|
||||
}
|
||||
|
||||
void metadata_updater_submit(struct metadata_io_request *m_req)
|
||||
{
|
||||
ocf_cache_t cache = m_req->cache;
|
||||
struct ocf_metadata_io_syncher *syncher =
|
||||
&cache->metadata_updater.syncher;
|
||||
struct list_head finished;
|
||||
int ret;
|
||||
|
||||
INIT_LIST_HEAD(&finished);
|
||||
|
||||
env_mutex_lock(&syncher->lock);
|
||||
|
||||
ret = _metadata_updater_iterate_in_progress(cache, &finished, m_req);
|
||||
|
||||
/* Either add it to in-progress list or pending list for deferred
|
||||
* execution.
|
||||
*/
|
||||
if (ret == 0)
|
||||
list_add_tail(&m_req->list, &syncher->in_progress_head);
|
||||
else
|
||||
list_add_tail(&m_req->list, &syncher->pending_head);
|
||||
|
||||
env_mutex_unlock(&syncher->lock);
|
||||
|
||||
if (ret == 0)
|
||||
ocf_engine_push_req_front(&m_req->req, true);
|
||||
|
||||
metadata_updater_process_finished(&finished);
|
||||
}
|
||||
|
||||
uint32_t ocf_metadata_updater_run(ocf_metadata_updater_t mu)
|
||||
{
|
||||
struct metadata_io_request *curr, *temp;
|
||||
struct ocf_metadata_io_syncher *syncher;
|
||||
struct list_head finished;
|
||||
ocf_cache_t cache;
|
||||
int ret;
|
||||
|
||||
OCF_CHECK_NULL(mu);
|
||||
|
||||
INIT_LIST_HEAD(&finished);
|
||||
|
||||
cache = ocf_metadata_updater_get_cache(mu);
|
||||
syncher = &cache->metadata_updater.syncher;
|
||||
|
||||
env_mutex_lock(&syncher->lock);
|
||||
if (list_empty(&syncher->pending_head)) {
|
||||
/*
|
||||
* If pending list is empty, we iterate over in progress
|
||||
* list to free memory used by finished requests.
|
||||
*/
|
||||
_metadata_updater_iterate_in_progress(cache, &finished, NULL);
|
||||
env_mutex_unlock(&syncher->lock);
|
||||
metadata_updater_process_finished(&finished);
|
||||
env_cond_resched();
|
||||
return 0;
|
||||
}
|
||||
list_for_each_entry_safe(curr, temp, &syncher->pending_head, list) {
|
||||
ret = _metadata_updater_iterate_in_progress(cache, &finished, curr);
|
||||
if (ret == 0) {
|
||||
/* Move to in-progress list and kick the workers */
|
||||
list_move_tail(&curr->list, &syncher->in_progress_head);
|
||||
}
|
||||
env_mutex_unlock(&syncher->lock);
|
||||
metadata_updater_process_finished(&finished);
|
||||
if (ret == 0)
|
||||
ocf_engine_push_req_front(&curr->req, true);
|
||||
env_cond_resched();
|
||||
env_mutex_lock(&syncher->lock);
|
||||
}
|
||||
env_mutex_unlock(&syncher->lock);
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Copyright(c) 2012-2021 Intel Corporation
|
||||
* SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
*/
|
||||
|
||||
#ifndef __METADATA_UPDATER_PRIV_H__
|
||||
#define __METADATA_UPDATER_PRIV_H__
|
||||
|
||||
#include "../ocf_def_priv.h"
|
||||
#include "metadata_io.h"
|
||||
|
||||
struct ocf_metadata_updater {
|
||||
/* Metadata flush synchronizer context */
|
||||
struct ocf_metadata_io_syncher {
|
||||
struct list_head in_progress_head;
|
||||
struct list_head pending_head;
|
||||
env_mutex lock __attribute__((aligned(64)));
|
||||
} syncher;
|
||||
|
||||
void *priv;
|
||||
};
|
||||
|
||||
|
||||
void metadata_updater_submit(struct metadata_io_request *m_req);
|
||||
|
||||
int ocf_metadata_updater_init(struct ocf_cache *cache);
|
||||
|
||||
void ocf_metadata_updater_kick(struct ocf_cache *cache);
|
||||
|
||||
void ocf_metadata_updater_stop(struct ocf_cache *cache);
|
||||
|
||||
#endif /* __METADATA_UPDATER_PRIV_H__ */
|
Reference in New Issue
Block a user