]> sourceware.org Git - lvm2.git/commitdiff
Add --metadataignore to pvchange, allowing for ignoring of metadata areas.
authorDave Wysochanski <dwysocha@redhat.com>
Mon, 28 Jun 2010 20:33:58 +0000 (20:33 +0000)
committerDave Wysochanski <dwysocha@redhat.com>
Mon, 28 Jun 2010 20:33:58 +0000 (20:33 +0000)
This patch just modifies pvchange to call the underlying ignore
functions for mdas.  Ensure special cases do not reflect changes
in metadata (PVs with 0 mdas, setting ignored when already ignored,
clearing ignored when not ignored).

Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
tools/args.h
tools/commands.h
tools/pvchange.c

index 76146eef05bb4b2d8b61d322d5bb746b9d62cbf0..d343689da2079164f8770e9630b60b1a4420b448 100644 (file)
@@ -25,6 +25,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(metadataignore_ARG, '\0', "metadataignore", 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)
index e33cadcb917f474ea76d12346818c783d77c939e..6d8d2c07ef9aaa855ec14fed4676258da538859f 100644 (file)
@@ -455,6 +455,7 @@ xx(pvchange,
    "\t[-t|--test]\n"
    "\t[-u|--uuid]\n"
    "\t[-x|--allocatable y|n]\n"
+   "\t[--metadataignore y|n]\n"
    "\t[-v|--verbose]\n"
    "\t[--addtag Tag]\n"
    "\t[--deltag Tag]\n"
@@ -462,7 +463,7 @@ xx(pvchange,
    "\t[PhysicalVolumePath...]\n",
 
    all_ARG, allocatable_ARG, allocation_ARG, autobackup_ARG, deltag_ARG,
-   addtag_ARG, test_ARG, uuid_ARG)
+   addtag_ARG, metadataignore_ARG, test_ARG, uuid_ARG)
 
 xx(pvresize,
    "Resize physical volume(s)",
index 5486b73303f6d7facca79082bfec5d4fe85f89c3..22988510e793f891afeac5bba0bcb531cf46de1a 100644 (file)
@@ -34,6 +34,7 @@ static int _pvchange_single(struct cmd_context *cmd, struct volume_group *vg,
        int allocatable = 0;
        int tagarg = 0;
        int r = 0;
+       int mda_ignore = 0;
 
        if (arg_count(cmd, addtag_ARG))
                tagarg = addtag_ARG;
@@ -43,6 +44,9 @@ static int _pvchange_single(struct cmd_context *cmd, struct volume_group *vg,
        if (arg_count(cmd, allocatable_ARG))
                allocatable = !strcmp(arg_str_value(cmd, allocatable_ARG, "n"),
                                      "y");
+       if (arg_count(cmd, metadataignore_ARG))
+               mda_ignore = !strcmp(arg_str_value(cmd, metadataignore_ARG, "n"),
+                                     "y");
        else if (tagarg && !(tag = arg_str_value(cmd, tagarg, NULL))) {
                log_error("Failed to get tag");
                return 0;
@@ -117,6 +121,32 @@ static int _pvchange_single(struct cmd_context *cmd, struct volume_group *vg,
                                goto out;
                        }
                }
+       } else if (arg_count(cmd, metadataignore_ARG)) {
+               if (mda_ignore && (pv_mda_used_count(pv) == 0)) {
+                       log_error("Physical volume \"%s\" metadata already "
+                                 "ignored", pv_name);
+                       goto out;
+               }
+               if (!mda_ignore && (pv_mda_used_count(pv) == pv_mda_count(pv))) {
+                       log_error("Physical volume \"%s\" metadata already "
+                                 "not ignored", pv_name);
+                       goto out;
+               }
+               if (!pv_mda_count(pv)) {
+                       log_error("Physical volume \"%s\" has no metadata "
+                                 "areas ", pv_name);
+                       goto out;
+               }
+               if (mda_ignore) {
+                       log_verbose("Setting physical volume \"%s\" "
+                                   "metadata ignored", pv_name);
+               } else {
+                       log_verbose("Setting physical volume \"%s\" "
+                                   "metadata not ignored", pv_name);
+               }
+               if (!pv_mda_set_ignored(pv, mda_ignore)) {
+                       goto out;
+               }
        } else {
                /* --uuid: Change PV ID randomly */
                if (!id_create(&pv->id)) {
@@ -187,7 +217,8 @@ int pvchange(struct cmd_context *cmd, int argc, char **argv)
        struct str_list *sll;
 
        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, metadataignore_ARG) != 1) {
                log_error("Please give exactly one option of -x, -uuid, "
                          "--addtag or --deltag");
                return EINVALID_CMD_LINE;
This page took 0.046284 seconds and 5 git commands to generate.