summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2010-10-26 01:37:59 +0000
committerMike Snitzer <snitzer@redhat.com>2010-10-26 01:37:59 +0000
commit178ff2becc6f22db3c68aaa89b7839d47c095705 (patch)
treeddf1d5026f0105da3c0a9daa2e7e38db9dea2ca0 /tools
parent8328e5f0944f9c685b3d469c08abe28fd32e47a5 (diff)
downloadlvm2-178ff2becc6f22db3c68aaa89b7839d47c095705.tar.gz
lvm2-178ff2becc6f22db3c68aaa89b7839d47c095705.tar.xz
lvm2-178ff2becc6f22db3c68aaa89b7839d47c095705.zip
Fix vgchange to process -a, --refresh, --monitor and --poll like lvchange.
Simultaneous -a and --refresh is not valid. poll+monitor are valid together with or without -ay* (but not with -an*) No longer print polling results summary if no LVs in the VG were polled.
Diffstat (limited to 'tools')
-rw-r--r--tools/lvchange.c6
-rw-r--r--tools/vgchange.c47
2 files changed, 43 insertions, 10 deletions
diff --git a/tools/lvchange.c b/tools/lvchange.c
index 5ac223ab..cd7a06f0 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -715,7 +715,7 @@ static int lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
int lvchange(struct cmd_context *cmd, int argc, char **argv)
{
- int update = /* options other than -a, --refresh or --monitor */
+ int update = /* options other than -a, --refresh, --monitor or --poll */
arg_count(cmd, contiguous_ARG) || arg_count(cmd, permission_ARG) ||
arg_count(cmd, readahead_ARG) || arg_count(cmd, persistent_ARG) ||
arg_count(cmd, addtag_ARG) || arg_count(cmd, deltag_ARG) ||
@@ -732,6 +732,10 @@ int lvchange(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
}
+ if (arg_count(cmd, available_ARG) && arg_count(cmd, refresh_ARG)) {
+ log_error("Only one of -a and --refresh permitted.");
+ return EINVALID_CMD_LINE;
+ }
if ((arg_count(cmd, ignorelockingfailure_ARG) ||
arg_count(cmd, sysinit_ARG)) && update) {
diff --git a/tools/vgchange.c b/tools/vgchange.c
index 92f32dbb..be9d0fdb 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -180,9 +180,10 @@ static int _vgchange_background_polling(struct cmd_context *cmd, struct volume_g
if (lvs_in_vg_activated(vg) && background_polling()) {
polled = _poll_lvs_in_vg(cmd, vg);
- log_print("Background polling started for %d logical volume(s) "
- "in volume group \"%s\"",
- polled, vg->name);
+ if (polled)
+ log_print("Background polling started for %d logical volume(s) "
+ "in volume group \"%s\"",
+ polled, vg->name);
}
return ECMD_PROCESSED;
@@ -592,13 +593,30 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
arg_int_value(cmd, poll_ARG,
DEFAULT_BACKGROUND_POLLING));
- if (arg_count(cmd, available_ARG))
+ if (arg_count(cmd, available_ARG)) {
r = _vgchange_available(cmd, vg);
+ if (r != ECMD_PROCESSED)
+ return r;
+ }
+
+ if (arg_count(cmd, refresh_ARG)) {
+ /* refreshes the visible LVs (which starts polling) */
+ r = _vgchange_refresh(cmd, vg);
+ if (r != ECMD_PROCESSED)
+ return r;
+ }
- else if (arg_count(cmd, monitor_ARG))
+ if (!arg_count(cmd, available_ARG) &&
+ !arg_count(cmd, refresh_ARG) &&
+ arg_count(cmd, monitor_ARG)) {
+ /* -ay* will have already done monitoring changes */
r = _vgchange_monitoring(cmd, vg);
+ if (r != ECMD_PROCESSED)
+ return r;
+ }
- else if (arg_count(cmd, poll_ARG))
+ if (!arg_count(cmd, refresh_ARG) &&
+ arg_count(cmd, poll_ARG))
r = _vgchange_background_polling(cmd, vg);
else if (arg_count(cmd, resizeable_ARG))
@@ -628,9 +646,6 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
else if (arg_count(cmd, clustered_ARG))
r = _vgchange_clustered(cmd, vg);
- else if (arg_count(cmd, refresh_ARG))
- r = _vgchange_refresh(cmd, vg);
-
else if (arg_count(cmd, vgmetadatacopies_ARG) ||
arg_count(cmd, metadatacopies_ARG))
r = _vgchange_metadata_copies(cmd, vg);
@@ -669,12 +684,26 @@ int vgchange(struct cmd_context *cmd, int argc, char **argv)
return EINVALID_CMD_LINE;
}
+ if (arg_count(cmd, available_ARG) && arg_count(cmd, refresh_ARG)) {
+ log_error("Only one of -a and --refresh permitted.");
+ return EINVALID_CMD_LINE;
+ }
+
if ((arg_count(cmd, ignorelockingfailure_ARG) ||
arg_count(cmd, sysinit_ARG)) && !arg_count(cmd, available_ARG)) {
log_error("Only -a permitted with --ignorelockingfailure and --sysinit");
return EINVALID_CMD_LINE;
}
+ if (arg_count(cmd, available_ARG) &&
+ (arg_count(cmd, monitor_ARG) || arg_count(cmd, poll_ARG))) {
+ int activate = arg_uint_value(cmd, available_ARG, 0);
+ if (activate == CHANGE_AN || activate == CHANGE_ALN) {
+ log_error("Only -ay* allowed with --monitor or --poll.");
+ return EINVALID_CMD_LINE;
+ }
+ }
+
if (arg_count(cmd, poll_ARG) && arg_count(cmd, sysinit_ARG)) {
log_error("Only one of --poll and --sysinit permitted.");
return EINVALID_CMD_LINE;