[lvm-devel] [PATCH 3/8] toollib: remove replicator wrappers in vg processing
David Teigland
teigland at redhat.com
Tue Mar 26 21:09:23 UTC 2013
The cmd_vg wrappers were not serving any purpose
because a single vg was only ever added to the
cmd_vg set. Remove the cmd_vg layer in
process_each_vg to simplify the code.
Pull the previous _process_one_vg into the calling
function and clarify some of the logic.
---
tools/toollib.c | 97 ++++++++++++++++++++++++---------------------------------
1 file changed, 41 insertions(+), 56 deletions(-)
diff --git a/tools/toollib.c b/tools/toollib.c
index e38e20c..8d6ba2e 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -274,58 +274,6 @@ int process_each_segment_in_lv(struct cmd_context *cmd,
return ret_max;
}
-static int _process_one_vg(struct cmd_context *cmd, const char *vg_name,
- struct dm_list *tags, struct dm_list *arg_vgnames,
- uint32_t flags, void *handle, int ret_max,
- process_single_vg_fn_t process_single_vg)
-{
- struct dm_list cmd_vgs;
- struct cmd_vg *cvl_vg;
- int ret = 0;
-
- log_verbose("Finding volume group \"%s\"", vg_name);
-
- dm_list_init(&cmd_vgs);
- if (!(cvl_vg = cmd_vg_add(cmd->mem, &cmd_vgs, vg_name, NULL, flags)))
- return_0;
-
- for (;;) {
- /* FIXME: consistent handling of command break */
- if (sigint_caught()) {
- ret = ECMD_FAILED;
- break;
- }
- if (!cmd_vg_read(cmd, &cmd_vgs))
- /* Allow FAILED_INCONSISTENT through only for vgcfgrestore */
- if (vg_read_error(cvl_vg->vg) &&
- (!((flags & READ_ALLOW_INCONSISTENT) &&
- (vg_read_error(cvl_vg->vg) == FAILED_INCONSISTENT)))) {
- ret = ECMD_FAILED;
- break;
- }
-
- if (!dm_list_empty(tags) &&
- /* Only process if a tag matches or it's on arg_vgnames */
- !str_list_match_item(arg_vgnames, vg_name) &&
- !str_list_match_list(tags, &cvl_vg->vg->tags, NULL))
- break;
-
- ret = process_single_vg(cmd, vg_name, cvl_vg->vg, handle);
-
- if (vg_read_error(cvl_vg->vg)) /* FAILED_INCONSISTENT */
- break;
-
- if (!cvl_vg->vg->cmd_missing_vgs)
- break;
-
- free_cmd_vgs(&cmd_vgs);
- }
-
- free_cmd_vgs(&cmd_vgs);
-
- return (ret > ret_max) ? ret : ret_max;
-}
-
int process_each_pv_in_vg(struct cmd_context *cmd, struct volume_group *vg,
const struct dm_list *tags, void *handle,
process_single_pv_fn_t process_single_pv)
@@ -1530,17 +1478,54 @@ static int process_vg_name_list(struct cmd_context *cmd, uint32_t flags,
void *handle,
process_single_vg_fn_t process_single_vg)
{
+ struct volume_group *vg;
struct str_list *sl;
const char *vgname;
int ret_max = ECMD_PROCESSED;
+ int ret = 0;
+ int process_all = 0;
+ int process_vg;
+
+ if (dm_list_empty(arg_vgnames) && dm_list_empty(arg_tags))
+ process_all = 1;
dm_list_iterate_items(sl, vg_name_list) {
vgname = sl->str;
- ret_max = _process_one_vg(cmd, vgname,
- arg_tags, arg_vgnames,
- flags, handle, ret_max,
- process_single_vg);
+ vg = vg_read(cmd, vgname, NULL, flags);
+ if (vg_read_error(vg)) {
+ if (!((flags & READ_ALLOW_INCONSISTENT) &&
+ (vg_read_error(vg) == FAILED_INCONSISTENT))) {
+ ret_max = ECMD_FAILED;
+ release_vg(vg);
+ stack;
+ continue;
+ }
+ }
+
+ process_vg = 0;
+
+ if (process_all)
+ process_vg = 1;
+
+ if (!process_vg && !dm_list_empty(arg_vgnames) &&
+ str_list_match_item(arg_vgnames, vgname))
+ process_vg = 1;
+
+ if (!process_vg && !dm_list_empty(arg_tags) &&
+ str_list_match_list(arg_tags, &vg->tags, NULL))
+ process_vg = 1;
+
+ if (process_vg)
+ ret = process_single_vg(cmd, vgname, vg, handle);
+
+ if (vg_read_error(vg))
+ release_vg(vg);
+ else
+ unlock_and_release_vg(cmd, vg, vgname);
+
+ if (ret > ret_max)
+ ret_max = ret;
if (sigint_caught())
break;
}
--
1.8.1.rc1.5.g7e0651a
More information about the lvm-devel
mailing list