diff options
author | Mike Snitzer <snitzer@redhat.com> | 2010-10-26 01:37:59 +0000 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2010-10-26 01:37:59 +0000 |
commit | 178ff2becc6f22db3c68aaa89b7839d47c095705 (patch) | |
tree | ddf1d5026f0105da3c0a9daa2e7e38db9dea2ca0 | |
parent | 8328e5f0944f9c685b3d469c08abe28fd32e47a5 (diff) | |
download | lvm2-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.
-rw-r--r-- | WHATS_NEW | 1 | ||||
-rw-r--r-- | tools/lvchange.c | 6 | ||||
-rw-r--r-- | tools/vgchange.c | 47 |
3 files changed, 44 insertions, 10 deletions
@@ -1,5 +1,6 @@ Version 2.02.76 =================================== + Fix vgchange to process -a, --refresh, --monitor and --poll like lvchange. Add lvm2app functions to query any pv, vg, or lv property / report field. Version 2.02.75 - 25th October 2010 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; |