summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-11-30 17:00:26 -0600
committerDavid Teigland <teigland@redhat.com>2015-12-01 09:36:45 -0600
commitea74215fa1f76cc965efd4f4656ad74321827161 (patch)
treee78cfb9328ea3ccb69fe279505a6cd7b80b625ac
parent3bcdf5d14b930ba71c4dc5b03fcde0b19a5c8515 (diff)
downloadlvm2-ea74215fa1f76cc965efd4f4656ad74321827161.tar.gz
vgextend: pass single vgname as process_each_vg arg
Pass the single vgname as a new process_each_vg arg instead of setting a cmd flag to tell process_each_vg to take only the first vgname arg from argv. Other commands with different argv formats will be able to use it this way.
-rw-r--r--tools/commands.h2
-rw-r--r--tools/polldaemon.c4
-rw-r--r--tools/reporter.c6
-rw-r--r--tools/toollib.c31
-rw-r--r--tools/toollib.h3
-rw-r--r--tools/tools.h2
-rw-r--r--tools/vgcfgbackup.c2
-rw-r--r--tools/vgchange.c2
-rw-r--r--tools/vgck.c2
-rw-r--r--tools/vgconvert.c2
-rw-r--r--tools/vgdisplay.c2
-rw-r--r--tools/vgexport.c2
-rw-r--r--tools/vgextend.c5
-rw-r--r--tools/vgimport.c2
-rw-r--r--tools/vgremove.c2
-rw-r--r--tools/vgscan.c2
16 files changed, 37 insertions, 34 deletions
diff --git a/tools/commands.h b/tools/commands.h
index b232a7db5..5770bf3ee 100644
--- a/tools/commands.h
+++ b/tools/commands.h
@@ -1214,7 +1214,7 @@ xx(vgexport,
xx(vgextend,
"Add physical volumes to a volume group",
- ONE_VGNAME_ARG,
+ 0,
"vgextend\n"
"\t[-A|--autobackup y|n]\n"
"\t[--restoremissing]\n"
diff --git a/tools/polldaemon.c b/tools/polldaemon.c
index ccfaa7d71..9172d71ef 100644
--- a/tools/polldaemon.c
+++ b/tools/polldaemon.c
@@ -364,7 +364,7 @@ static void _poll_for_all_vgs(struct cmd_context *cmd,
while (1) {
parms->outstanding_count = 0;
- process_each_vg(cmd, 0, NULL, READ_FOR_UPDATE, handle, _poll_vg);
+ process_each_vg(cmd, 0, NULL, NULL, READ_FOR_UPDATE, handle, _poll_vg);
if (!parms->outstanding_count)
break;
if (parms->interval)
@@ -508,7 +508,7 @@ static void _lvmpolld_poll_for_all_vgs(struct cmd_context *cmd,
handle->custom_handle = &lpdp;
- process_each_vg(cmd, 0, NULL, 0, handle, _lvmpolld_init_poll_vg);
+ process_each_vg(cmd, 0, NULL, NULL, 0, handle, _lvmpolld_init_poll_vg);
first = dm_list_first(&lpdp.idls);
diff --git a/tools/reporter.c b/tools/reporter.c
index 71f20a309..88025ec10 100644
--- a/tools/reporter.c
+++ b/tools/reporter.c
@@ -884,7 +884,7 @@ static int _report(struct cmd_context *cmd, int argc, char **argv,
&_lvs_single);
break;
case VGS:
- r = process_each_vg(cmd, argc, argv, 0,
+ r = process_each_vg(cmd, argc, argv, NULL, 0,
&handle, &_vgs_single);
break;
case LABEL:
@@ -896,7 +896,7 @@ static int _report(struct cmd_context *cmd, int argc, char **argv,
r = process_each_pv(cmd, argc, argv, NULL, 0,
&handle, &_pvs_single);
else
- r = process_each_vg(cmd, argc, argv, 0,
+ r = process_each_vg(cmd, argc, argv, NULL, 0,
&handle, &_pvs_in_vg);
break;
case SEGSSTATUS:
@@ -917,7 +917,7 @@ static int _report(struct cmd_context *cmd, int argc, char **argv,
lv_info_needed && lv_segment_status_needed ? &_pvsegs_with_lv_info_and_status_single :
&_pvsegs_single);
else
- r = process_each_vg(cmd, argc, argv, 0,
+ r = process_each_vg(cmd, argc, argv, NULL, 0,
&handle, &_pvsegs_in_vg);
break;
}
diff --git a/tools/toollib.c b/tools/toollib.c
index f97947572..e49356f12 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1729,7 +1729,7 @@ int validate_restricted_lvname_param(struct cmd_context *cmd, const char **vg_na
*/
static int _get_arg_vgnames(struct cmd_context *cmd,
int argc, char **argv,
- unsigned one_vgname_arg,
+ const char *one_vgname,
struct dm_list *arg_vgnames,
struct dm_list *arg_tags)
{
@@ -1739,15 +1739,19 @@ static int _get_arg_vgnames(struct cmd_context *cmd,
log_verbose("Using volume group(s) on command line.");
+ if (one_vgname) {
+ if (!str_list_add(cmd->mem, arg_vgnames,
+ dm_pool_strdup(cmd->mem, one_vgname))) {
+ log_error("strlist allocation failed.");
+ return ECMD_FAILED;
+ }
+ return ret_max;
+ }
+
for (; opt < argc; opt++) {
vg_name = argv[opt];
if (*vg_name == '@') {
- if (one_vgname_arg) {
- log_error("This command does not yet support a tag to identify a Volume Group.");
- return EINVALID_CMD_LINE;
- }
-
if (!validate_tag(vg_name + 1)) {
log_error("Skipping invalid tag: %s", vg_name);
if (ret_max < EINVALID_CMD_LINE)
@@ -1769,8 +1773,6 @@ static int _get_arg_vgnames(struct cmd_context *cmd,
log_error("Invalid volume group name %s.", vg_name);
if (ret_max < EINVALID_CMD_LINE)
ret_max = EINVALID_CMD_LINE;
- if (one_vgname_arg)
- break;
continue;
}
@@ -1779,9 +1781,6 @@ static int _get_arg_vgnames(struct cmd_context *cmd,
log_error("strlist allocation failed.");
return ECMD_FAILED;
}
-
- if (one_vgname_arg)
- break;
}
return ret_max;
@@ -1937,7 +1936,7 @@ static int _process_vgnameid_list(struct cmd_context *cmd, uint32_t read_flags,
process_all = 1;
/*
- * FIXME If one_vgname_arg, only proceed if exactly one VG matches tags or selection.
+ * FIXME If one_vgname, only proceed if exactly one VG matches tags or selection.
*/
dm_list_iterate_items(vgnl, vgnameids_to_process) {
if (sigint_caught())
@@ -2120,9 +2119,12 @@ static void _choose_vgs_to_process(struct cmd_context *cmd,
/*
* Call process_single_vg() for each VG selected by the command line arguments.
+ * If one_vgname is set, process only that VG and ignore argc/argv (which should be 0/NULL)..
+ * If one_vgname is not set, get VG names to process from argc/argv.
*/
int process_each_vg(struct cmd_context *cmd, int argc, char **argv,
- uint32_t read_flags, struct processing_handle *handle,
+ const char *one_vgname, uint32_t read_flags,
+ struct processing_handle *handle,
process_single_vg_fn_t process_single_vg)
{
int handle_supplied = handle != NULL;
@@ -2131,7 +2133,6 @@ int process_each_vg(struct cmd_context *cmd, int argc, char **argv,
struct dm_list vgnameids_on_system; /* vgnameid_list */
struct dm_list vgnameids_to_process; /* vgnameid_list */
int enable_all_vgs = (cmd->command->flags & ALL_VGS_IS_DEFAULT);
- int one_vgname_arg = (cmd->command->flags & ONE_VGNAME_ARG);
int process_all_vgs_on_system = 0;
int ret_max = ECMD_PROCESSED;
int ret;
@@ -2147,7 +2148,7 @@ int process_each_vg(struct cmd_context *cmd, int argc, char **argv,
/*
* Find any VGs or tags explicitly provided on the command line.
*/
- if ((ret = _get_arg_vgnames(cmd, argc, argv, one_vgname_arg, &arg_vgnames, &arg_tags)) != ECMD_PROCESSED) {
+ if ((ret = _get_arg_vgnames(cmd, argc, argv, one_vgname, &arg_vgnames, &arg_tags)) != ECMD_PROCESSED) {
ret_max = ret;
goto_out;
}
diff --git a/tools/toollib.h b/tools/toollib.h
index 2dc5ad73f..400bac520 100644
--- a/tools/toollib.h
+++ b/tools/toollib.h
@@ -97,7 +97,8 @@ typedef int (*process_single_pvseg_fn_t) (struct cmd_context * cmd,
struct processing_handle *handle);
int process_each_vg(struct cmd_context *cmd, int argc, char **argv,
- uint32_t flags, struct processing_handle *handle,
+ const char *one_vgname, uint32_t flags,
+ struct processing_handle *handle,
process_single_vg_fn_t process_single_vg);
int process_each_pv(struct cmd_context *cmd, int argc, char **argv,
diff --git a/tools/tools.h b/tools/tools.h
index 4ed893fc4..27061fc94 100644
--- a/tools/tools.h
+++ b/tools/tools.h
@@ -99,8 +99,6 @@ struct arg_value_group_list {
#define ALL_VGS_IS_DEFAULT 0x00000004
/* Process all devices with --all if none are specified on the command line. */
#define ENABLE_ALL_DEVS 0x00000008
-/* Exactly one VG name argument required. */
-#define ONE_VGNAME_ARG 0x00000010
/* Command needs a shared lock on a VG; it only reads the VG. */
#define LOCKD_VG_SH 0x00000020
/* Command does not process any metadata. */
diff --git a/tools/vgcfgbackup.c b/tools/vgcfgbackup.c
index 5e80c806a..be4dbb0c8 100644
--- a/tools/vgcfgbackup.c
+++ b/tools/vgcfgbackup.c
@@ -94,7 +94,7 @@ int vgcfgbackup(struct cmd_context *cmd, int argc, char **argv)
init_pvmove(1);
- ret = process_each_vg(cmd, argc, argv, READ_ALLOW_INCONSISTENT,
+ ret = process_each_vg(cmd, argc, argv, NULL, READ_ALLOW_INCONSISTENT,
handle, &vg_backup_single);
dm_free(last_filename);
diff --git a/tools/vgchange.c b/tools/vgchange.c
index 81e4bf30f..9e1b09e3c 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -1227,7 +1227,7 @@ int vgchange(struct cmd_context *cmd, int argc, char **argv)
if (arg_is_set(cmd, lockstart_ARG) || arg_is_set(cmd, lockstop_ARG))
flags |= READ_ALLOW_EXPORTED;
- ret = process_each_vg(cmd, argc, argv, flags, NULL, &vgchange_single);
+ ret = process_each_vg(cmd, argc, argv, NULL, flags, NULL, &vgchange_single);
/* Wait for lock-start ops that were initiated in vgchange_lockstart. */
diff --git a/tools/vgck.c b/tools/vgck.c
index 16312891b..b73544b7e 100644
--- a/tools/vgck.c
+++ b/tools/vgck.c
@@ -38,6 +38,6 @@ static int vgck_single(struct cmd_context *cmd __attribute__((unused)),
int vgck(struct cmd_context *cmd, int argc, char **argv)
{
lvmetad_set_active(cmd, 0);
- return process_each_vg(cmd, argc, argv, 0, NULL,
+ return process_each_vg(cmd, argc, argv, NULL, 0, NULL,
&vgck_single);
}
diff --git a/tools/vgconvert.c b/tools/vgconvert.c
index c4bb37a23..9e6cb57f5 100644
--- a/tools/vgconvert.c
+++ b/tools/vgconvert.c
@@ -249,6 +249,6 @@ int vgconvert(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
}
- return process_each_vg(cmd, argc, argv, READ_FOR_UPDATE, NULL,
+ return process_each_vg(cmd, argc, argv, NULL, READ_FOR_UPDATE, NULL,
&vgconvert_single);
}
diff --git a/tools/vgdisplay.c b/tools/vgdisplay.c
index 1acb3ece7..f232a830a 100644
--- a/tools/vgdisplay.c
+++ b/tools/vgdisplay.c
@@ -89,7 +89,7 @@ int vgdisplay(struct cmd_context *cmd, int argc, char **argv)
}
**********/
- return process_each_vg(cmd, argc, argv, 0, NULL,
+ return process_each_vg(cmd, argc, argv, NULL, 0, NULL,
vgdisplay_single);
/******** FIXME Need to count number processed
diff --git a/tools/vgexport.c b/tools/vgexport.c
index 566cc96e4..59ad1231d 100644
--- a/tools/vgexport.c
+++ b/tools/vgexport.c
@@ -80,6 +80,6 @@ int vgexport(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
}
- return process_each_vg(cmd, argc, argv, READ_FOR_UPDATE, NULL,
+ return process_each_vg(cmd, argc, argv, NULL, READ_FOR_UPDATE, NULL,
&vgexport_single);
}
diff --git a/tools/vgextend.c b/tools/vgextend.c
index bddc22f92..a747113d2 100644
--- a/tools/vgextend.c
+++ b/tools/vgextend.c
@@ -129,6 +129,7 @@ int vgextend(struct cmd_context *cmd, int argc, char **argv)
struct vgextend_params vp;
unsigned restoremissing = arg_is_set(cmd, restoremissing_ARG);
struct processing_handle *handle;
+ const char *one_vgname;
int ret;
if (!argc) {
@@ -137,6 +138,8 @@ int vgextend(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
}
+ one_vgname = skip_dev_dir(cmd, argv[0], NULL);
+
if (arg_count(cmd, metadatacopies_ARG)) {
log_error("Invalid option --metadatacopies, "
"use --pvmetadatacopies instead.");
@@ -169,7 +172,7 @@ int vgextend(struct cmd_context *cmd, int argc, char **argv)
if (!lockd_gl(cmd, "ex", 0))
return_ECMD_FAILED;
- ret = process_each_vg(cmd, argc, argv,
+ ret = process_each_vg(cmd, 0, NULL, one_vgname,
READ_FOR_UPDATE, handle,
restoremissing ? &_vgextend_restoremissing : &_vgextend_single);
diff --git a/tools/vgimport.c b/tools/vgimport.c
index 04a59dce5..9e27ca3cb 100644
--- a/tools/vgimport.c
+++ b/tools/vgimport.c
@@ -98,7 +98,7 @@ int vgimport(struct cmd_context *cmd, int argc, char **argv)
return ECMD_FAILED;
}
- return process_each_vg(cmd, argc, argv,
+ return process_each_vg(cmd, argc, argv, NULL,
READ_FOR_UPDATE | READ_ALLOW_EXPORTED,
NULL,
&vgimport_single);
diff --git a/tools/vgremove.c b/tools/vgremove.c
index 219149ee0..3bf2b7045 100644
--- a/tools/vgremove.c
+++ b/tools/vgremove.c
@@ -109,7 +109,7 @@ int vgremove(struct cmd_context *cmd, int argc, char **argv)
cmd->lockd_gl_disable = 1;
cmd->handles_missing_pvs = 1;
- ret = process_each_vg(cmd, argc, argv,
+ ret = process_each_vg(cmd, argc, argv, NULL,
READ_FOR_UPDATE,
NULL, &vgremove_single);
diff --git a/tools/vgscan.c b/tools/vgscan.c
index 7328a096d..45841ec4c 100644
--- a/tools/vgscan.c
+++ b/tools/vgscan.c
@@ -62,7 +62,7 @@ int vgscan(struct cmd_context *cmd, int argc, char **argv)
log_print_unless_silent("Reading all physical volumes. This may take a while...");
- maxret = process_each_vg(cmd, argc, argv, 0, NULL,
+ maxret = process_each_vg(cmd, argc, argv, NULL, 0, NULL,
&vgscan_single);
if (arg_count(cmd, mknodes_ARG)) {