1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

cache: convert libdm to use plain function call

Avoid introducing libdm structure allocated in library user.
Use direct call with all currently supported args.
When new arg is added, new function will cover it.
This commit is contained in:
Zdenek Kabelac 2014-02-14 22:09:39 +01:00
parent 7ec8e691c4
commit da268eb4cc
3 changed files with 52 additions and 56 deletions

View File

@ -359,34 +359,29 @@ static int _cache_add_target_line(struct dev_manager *dm,
struct dm_tree_node *node, uint64_t len, struct dm_tree_node *node, uint64_t len,
uint32_t *pvmove_mirror_count __attribute__((unused))) uint32_t *pvmove_mirror_count __attribute__((unused)))
{ {
struct logical_volume *data, *metadata, *origin;
struct lv_segment *cache_pool_seg = first_seg(seg->pool_lv); struct lv_segment *cache_pool_seg = first_seg(seg->pool_lv);
struct dm_tree_node_cache_params params = { char *metadata_uuid, *data_uuid, *origin_uuid;
.chunk_size = cache_pool_seg->chunk_size,
/* Cache features, core args, and policy are stored in the cache_pool */ if (!(metadata_uuid = build_dm_uuid(mem, cache_pool_seg->metadata_lv->lvid.s, NULL)))
.feature_flags = cache_pool_seg->feature_flags,
.core_argc = cache_pool_seg->core_argc,
.core_argv = cache_pool_seg->core_argv,
.policy_name = cache_pool_seg->policy_name,
.policy_argc = cache_pool_seg->policy_argc,
.policy_argv = cache_pool_seg->policy_argv
};
data = seg_lv(cache_pool_seg, 0);
metadata = cache_pool_seg->metadata_lv;
origin = seg_lv(seg, 0);
if (!(params.data_uuid = build_dm_uuid(mem, data->lvid.s, NULL)))
return_0; return_0;
if (!(params.metadata_uuid = build_dm_uuid(mem, metadata->lvid.s, NULL))) if (!(data_uuid = build_dm_uuid(mem, seg_lv(cache_pool_seg, 0)->lvid.s, NULL)))
return_0; return_0;
if (!(params.origin_uuid = build_dm_uuid(mem, origin->lvid.s, NULL))) if (!(origin_uuid = build_dm_uuid(mem, seg_lv(seg, 0)->lvid.s, NULL)))
return_0; return_0;
if (!dm_tree_node_add_cache_target(node, len, &params)) if (!dm_tree_node_add_cache_target(node, len,
metadata_uuid,
data_uuid,
origin_uuid,
cache_pool_seg->chunk_size,
cache_pool_seg->feature_flags,
cache_pool_seg->core_argc,
cache_pool_seg->core_argv,
cache_pool_seg->policy_name,
cache_pool_seg->policy_argc,
cache_pool_seg->policy_argv))
return_0; return_0;
return add_areas_line(dm, seg, node, 0u, seg->area_count); return add_areas_line(dm, seg, node, 0u, seg->area_count);

View File

@ -764,28 +764,19 @@ int dm_tree_node_add_raid_target_with_params(struct dm_tree_node *node,
/* Cache feature_flags */ /* Cache feature_flags */
#define DM_CACHE_FEATURE_WRITEBACK 0x00000001 #define DM_CACHE_FEATURE_WRITEBACK 0x00000001
#define DM_CACHE_FEATURE_WRITETHROUGH 0x00000002 #define DM_CACHE_FEATURE_WRITETHROUGH 0x00000002
struct dm_tree_node_cache_params {
uint32_t version;
uint32_t chunk_size;
uint32_t feature_flags; /* DM_CACHE_FEATURE_* */
int core_argc;
char **core_argv;
char *policy_name;
int policy_argc;
char **policy_argv;
const char *data_uuid;
const char *metadata_uuid;
const char *origin_uuid;
/* 'version == 0' end */
};
int dm_tree_node_add_cache_target(struct dm_tree_node *node, int dm_tree_node_add_cache_target(struct dm_tree_node *node,
uint64_t size, uint64_t size,
struct dm_tree_node_cache_params *p); const char *metadata_uuid,
const char *data_uuid,
const char *origin_uuid,
uint32_t chunk_size,
uint32_t feature_flags, /* DM_CACHE_FEATURE_* */
int core_argc,
char **core_argv,
char *policy_name,
int policy_argc,
char **policy_argv);
/* /*
* Replicator operation mode * Replicator operation mode

View File

@ -2284,19 +2284,18 @@ static int _cache_emit_segment_line(struct dm_task *dmt,
/* Metadata Dev */ /* Metadata Dev */
if (!_build_dev_string(metadata, sizeof(metadata), seg->metadata)) if (!_build_dev_string(metadata, sizeof(metadata), seg->metadata))
return_0; return_0;
EMIT_PARAMS(pos, " %s", metadata);
/* Cache Dev */ /* Cache Dev */
if (!_build_dev_string(data, sizeof(origin), seg->pool)) if (!_build_dev_string(data, sizeof(origin), seg->pool))
return_0; return_0;
EMIT_PARAMS(pos, " %s", data);
/* Origin Dev */ /* Origin Dev */
dm_list_iterate_items(area, &seg->areas) dm_list_iterate_items(area, &seg->areas)
break; /* There is only ever 1 area */ break; /* There is only ever 1 area */
if (!_build_dev_string(origin, sizeof(data), area->dev_node)) if (!_build_dev_string(origin, sizeof(data), area->dev_node))
return_0; return_0;
EMIT_PARAMS(pos, " %s", origin);
EMIT_PARAMS(pos, " %s %s %s", metadata, data, origin);
/* Chunk size */ /* Chunk size */
EMIT_PARAMS(pos, " %u", seg->chunk_size); EMIT_PARAMS(pos, " %u", seg->chunk_size);
@ -3202,7 +3201,16 @@ bad:
int dm_tree_node_add_cache_target(struct dm_tree_node *node, int dm_tree_node_add_cache_target(struct dm_tree_node *node,
uint64_t size, uint64_t size,
struct dm_tree_node_cache_params *p) const char *metadata_uuid,
const char *data_uuid,
const char *origin_uuid,
uint32_t chunk_size,
uint32_t feature_flags, /* DM_CACHE_FEATURE_* */
int core_argc,
char **core_argv,
char *policy_name,
int policy_argc,
char **policy_argv)
{ {
int i; int i;
struct load_segment *seg = NULL; struct load_segment *seg = NULL;
@ -3218,33 +3226,35 @@ int dm_tree_node_add_cache_target(struct dm_tree_node *node,
return_0; return_0;
if (!(seg->pool = dm_tree_find_node_by_uuid(node->dtree, if (!(seg->pool = dm_tree_find_node_by_uuid(node->dtree,
p->data_uuid))) { data_uuid))) {
log_error("Missing cache's data uuid, %s", log_error("Missing cache's data uuid %s.",
p->data_uuid); data_uuid);
return 0; return 0;
} }
if (!_link_tree_nodes(node, seg->pool)) if (!_link_tree_nodes(node, seg->pool))
return_0; return_0;
if (!(seg->metadata = dm_tree_find_node_by_uuid(node->dtree, if (!(seg->metadata = dm_tree_find_node_by_uuid(node->dtree,
p->metadata_uuid))) { metadata_uuid))) {
log_error("Missing cache's metadata uuid, %s", log_error("Missing cache's metadata uuid %s.",
p->metadata_uuid); metadata_uuid);
return 0; return 0;
} }
if (!_link_tree_nodes(node, seg->metadata)) if (!_link_tree_nodes(node, seg->metadata))
return_0; return_0;
seg->chunk_size = p->chunk_size; seg->chunk_size = chunk_size;
seg->flags = p->feature_flags; seg->flags = feature_flags;
seg->core_argc = p->core_argc; /* FIXME: validation missing */
seg->core_argv = p->core_argv;
seg->policy_name = p->policy_name; seg->core_argc = core_argc;
seg->policy_argc = p->policy_argc; seg->core_argv = core_argv;
seg->policy_argv = p->policy_argv;
seg->policy_name = policy_name;
seg->policy_argc = policy_argc;
seg->policy_argv = policy_argv;
return 1; return 1;
} }