[lvm-devel] [PATCH 20/21] Update vgchange tool to handle metadata balance min/max.
Dave Wysochanski
dwysocha at redhat.com
Tue Feb 9 22:32:23 UTC 2010
Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
---
tools/vgchange.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 76 insertions(+), 1 deletions(-)
diff --git a/tools/vgchange.c b/tools/vgchange.c
index b4f5d00..ce1ace0 100644
--- a/tools/vgchange.c
+++ b/tools/vgchange.c
@@ -532,6 +532,74 @@ static int _vgchange_refresh(struct cmd_context *cmd, struct volume_group *vg)
return ECMD_PROCESSED;
}
+static int _vgchange_metadata_balance_min(struct cmd_context *cmd,
+ struct volume_group *vg)
+{
+ uint32_t value;
+
+ value = arg_uint_value(cmd, metadatabalancemin_ARG, 0);
+ if (value == vg_mda_balance_min(vg)) {
+ log_error("Metadata balance min of VG %s is already %u",
+ vg->name, value);
+ return ECMD_PROCESSED;
+ }
+
+ if (!archive(vg)) {
+ stack;
+ return ECMD_FAILED;
+ }
+
+ if (!vg_set_mda_balance_min(vg, value)) {
+ stack;
+ return EINVALID_CMD_LINE;
+ }
+
+ if (!vg_write(vg) || !vg_commit(vg)) {
+ stack;
+ return ECMD_FAILED;
+ }
+
+ backup(vg);
+
+ log_print("Volume group \"%s\" successfully changed", vg->name);
+
+ return ECMD_PROCESSED;
+}
+
+static int _vgchange_metadata_balance_max(struct cmd_context *cmd,
+ struct volume_group *vg)
+{
+ uint32_t value;
+
+ value = arg_uint_value(cmd, metadatabalancemax_ARG, 0);
+ if (value == vg_mda_balance_max(vg)) {
+ log_error("Metadata balance max of VG %s is already %u",
+ vg->name, value);
+ return ECMD_PROCESSED;
+ }
+
+ if (!archive(vg)) {
+ stack;
+ return ECMD_FAILED;
+ }
+
+ if (!vg_set_mda_balance_max(vg, value)) {
+ stack;
+ return EINVALID_CMD_LINE;
+ }
+
+ if (!vg_write(vg) || !vg_commit(vg)) {
+ stack;
+ return ECMD_FAILED;
+ }
+
+ backup(vg);
+
+ log_print("Volume group \"%s\" successfully changed", vg->name);
+
+ return ECMD_PROCESSED;
+}
+
static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg,
void *handle __attribute((unused)))
@@ -596,6 +664,12 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
else if (arg_count(cmd, refresh_ARG))
r = _vgchange_refresh(cmd, vg);
+ else if (arg_count(cmd, metadatabalancemin_ARG))
+ r = _vgchange_metadata_balance_min(cmd, vg);
+
+ else if (arg_count(cmd, metadatabalancemax_ARG))
+ r = _vgchange_metadata_balance_max(cmd, vg);
+
return r;
}
@@ -609,7 +683,8 @@ int vgchange(struct cmd_context *cmd, int argc, char **argv)
arg_count(cmd, physicalextentsize_ARG) +
arg_count(cmd, clustered_ARG) + arg_count(cmd, alloc_ARG) +
arg_count(cmd, monitor_ARG) + arg_count(cmd, poll_ARG) +
- arg_count(cmd, refresh_ARG))) {
+ arg_count(cmd, refresh_ARG) + arg_count(cmd, metadatabalancemin_ARG) +
+ arg_count(cmd, metadatabalancemax_ARG))) {
log_error("Need 1 or more of -a, -c, -l, -p, -s, -x, "
"--refresh, --uuid, --alloc, --addtag, --deltag, "
"--monitor or --poll");
--
1.6.0.6
More information about the lvm-devel
mailing list