73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
/*
|
|
* Copyright(c) 2012-2018 Intel Corporation
|
|
* SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
*/
|
|
|
|
#include "ocf/ocf.h"
|
|
#include "ocf_priv.h"
|
|
#include "metadata/metadata.h"
|
|
#include "engine/cache_engine.h"
|
|
#include "utils/utils_part.h"
|
|
|
|
int ocf_cache_io_class_get_info(ocf_cache_t cache, uint32_t io_class,
|
|
struct ocf_io_class_info *info)
|
|
{
|
|
ocf_part_id_t part_id = io_class;
|
|
|
|
OCF_CHECK_NULL(cache);
|
|
|
|
if (!info)
|
|
return -OCF_ERR_INVAL;
|
|
|
|
if (io_class >= OCF_IO_CLASS_MAX)
|
|
return -OCF_ERR_INVAL;
|
|
|
|
if (!ocf_part_is_valid(&cache->user_parts[part_id])) {
|
|
/* Partition does not exist */
|
|
return -OCF_ERR_IO_CLASS_NOT_EXIST;
|
|
}
|
|
|
|
if (env_strncpy(info->name, sizeof(info->name),
|
|
cache->user_parts[part_id].config->name,
|
|
sizeof(cache->user_parts[part_id].config->name))) {
|
|
return -OCF_ERR_INVAL;
|
|
}
|
|
|
|
info->priority = cache->user_parts[part_id].config->priority;
|
|
info->curr_size = ocf_cache_is_device_attached(cache) ?
|
|
cache->user_parts[part_id].runtime->curr_size : 0;
|
|
info->min_size = cache->user_parts[part_id].config->min_size;
|
|
info->max_size = cache->user_parts[part_id].config->max_size;
|
|
|
|
info->eviction_policy_type = cache->conf_meta->eviction_policy_type;
|
|
info->cleaning_policy_type = cache->conf_meta->cleaning_policy_type;
|
|
|
|
info->cache_mode = cache->user_parts[part_id].config->cache_mode;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int ocf_io_class_visit(ocf_cache_t cache, ocf_io_class_visitor_t visitor,
|
|
void *cntx)
|
|
{
|
|
struct ocf_user_part *part;
|
|
ocf_part_id_t part_id;
|
|
int result = 0;
|
|
|
|
OCF_CHECK_NULL(cache);
|
|
|
|
if (!visitor)
|
|
return -OCF_ERR_INVAL;
|
|
|
|
for_each_part(cache, part, part_id) {
|
|
if (!ocf_part_is_valid(part))
|
|
continue;
|
|
|
|
result = visitor(cache, part_id, cntx);
|
|
if (result)
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|