[lvm-devel] [PATCH 11/21] Add --metadatadisable to pvchange, allowing for disabling of metadata areas.
Dave Wysochanski
dwysocha at redhat.com
Tue Feb 9 22:32:14 UTC 2010
This patch just modifies pvchange to call the underlying enable/disable
functions for mdas.
Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
---
tools/args.h | 1 +
tools/commands.h | 3 ++-
tools/pvchange.c | 30 +++++++++++++++++++++++++++++-
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/tools/args.h b/tools/args.h
index 981f45f..f41fbf5 100644
--- a/tools/args.h
+++ b/tools/args.h
@@ -26,6 +26,7 @@ arg(nolocking_ARG, '\0', "nolocking", NULL, 0)
arg(pvmetadatacopies_ARG, '\0', "pvmetadatacopies", int_arg, 0)
arg(metadatacopies_ARG, '\0', "metadatacopies", int_arg, 0)
arg(metadatasize_ARG, '\0', "metadatasize", size_mb_arg, 0)
+arg(metadatadisable_ARG, '\0', "metadatadisable", yes_no_arg, 0)
arg(restorefile_ARG, '\0', "restorefile", string_arg, 0)
arg(labelsector_ARG, '\0', "labelsector", int_arg, 0)
arg(driverloaded_ARG, '\0', "driverloaded", yes_no_arg, 0)
diff --git a/tools/commands.h b/tools/commands.h
index ad0b385..66727d9 100644
--- a/tools/commands.h
+++ b/tools/commands.h
@@ -448,6 +448,7 @@ xx(pvchange,
"\t[-t|--test]\n"
"\t[-u|--uuid]\n"
"\t[-x|--allocatable y|n]\n"
+ "\t[--metadatadisable y|n]\n"
"\t[-v|--verbose]\n"
"\t[--addtag Tag]\n"
"\t[--deltag Tag]\n"
@@ -455,7 +456,7 @@ xx(pvchange,
"\t[PhysicalVolumePath...]\n",
all_ARG, allocatable_ARG, allocation_ARG, autobackup_ARG, deltag_ARG,
- addtag_ARG, test_ARG, uuid_ARG)
+ addtag_ARG, metadatadisable_ARG, test_ARG, uuid_ARG)
xx(pvresize,
"Resize physical volume(s)",
diff --git a/tools/pvchange.c b/tools/pvchange.c
index cba9dd2..aa87ed8 100644
--- a/tools/pvchange.c
+++ b/tools/pvchange.c
@@ -37,6 +37,7 @@ static int _pvchange_single(struct cmd_context *cmd, struct physical_volume *pv,
int allocatable = 0;
int tagarg = 0;
int r = 0;
+ int mda_disable = 0;
if (arg_count(cmd, addtag_ARG))
tagarg = addtag_ARG;
@@ -46,6 +47,9 @@ static int _pvchange_single(struct cmd_context *cmd, struct physical_volume *pv,
if (arg_count(cmd, allocatable_ARG))
allocatable = !strcmp(arg_str_value(cmd, allocatable_ARG, "n"),
"y");
+ if (arg_count(cmd, metadatadisable_ARG))
+ mda_disable = !strcmp(arg_str_value(cmd, metadatadisable_ARG, "n"),
+ "y");
else if (tagarg && !(tag = arg_str_value(cmd, tagarg, NULL))) {
log_error("Failed to get tag");
return 0;
@@ -149,6 +153,29 @@ static int _pvchange_single(struct cmd_context *cmd, struct physical_volume *pv,
goto out;
}
}
+ } else if (arg_count(cmd, metadatadisable_ARG)) {
+ if (mda_disable && pv_mda_is_disabled(pv)) {
+ log_error("Physical volume \"%s\" mdas already "
+ "disabled", pv_name);
+ r = 1;
+ goto out;
+ }
+ if (!mda_disable && !pv_mda_is_disabled(pv)) {
+ log_error("Physical volume \"%s\" mdas already "
+ "enabled", pv_name);
+ r = 1;
+ goto out;
+ }
+ if (mda_disable) {
+ log_verbose("Setting physical volume \"%s\" "
+ "metadata disable", pv_name);
+ } else {
+ log_verbose("Setting physical volume \"%s\" "
+ "metadata enable", pv_name);
+ }
+ if (!pv_mda_set_disabled(pv, mda_disable)) {
+ goto out;
+ }
} else {
/* --uuid: Change PV ID randomly */
if (!id_create(&pv->id)) {
@@ -220,7 +247,8 @@ int pvchange(struct cmd_context *cmd, int argc, char **argv)
struct dm_list mdas;
if (arg_count(cmd, allocatable_ARG) + arg_count(cmd, addtag_ARG) +
- arg_count(cmd, deltag_ARG) + arg_count(cmd, uuid_ARG) != 1) {
+ arg_count(cmd, deltag_ARG) + arg_count(cmd, uuid_ARG) +
+ arg_count(cmd, metadatadisable_ARG) != 1) {
log_error("Please give exactly one option of -x, -uuid, "
"--addtag or --deltag");
return EINVALID_CMD_LINE;
--
1.6.0.6
More information about the lvm-devel
mailing list