[lvm-devel] LVM2 ./WHATS_NEW lib/config/defaults.h lib/met ...

agk at sourceware.org agk at sourceware.org
Tue Aug 21 19:46:37 UTC 2007


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	agk at sourceware.org	2007-08-21 19:46:36

Modified files:
	.              : WHATS_NEW 
	lib/config     : defaults.h 
	lib/metadata   : lv_manip.c 
	tools          : args.h commands.h lvconvert.c lvcreate.c 
	                 lvmcmdline.c tools.h 

Log message:
	Clean up mirrorlog argument processing.
	Only permit --force, --verbose and --debug arguments to be repeated.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.687&r2=1.688
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/defaults.h.diff?cvsroot=lvm2&r1=1.32&r2=1.33
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/lv_manip.c.diff?cvsroot=lvm2&r1=1.125&r2=1.126
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/args.h.diff?cvsroot=lvm2&r1=1.53&r2=1.54
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/commands.h.diff?cvsroot=lvm2&r1=1.100&r2=1.101
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvconvert.c.diff?cvsroot=lvm2&r1=1.34&r2=1.35
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvcreate.c.diff?cvsroot=lvm2&r1=1.141&r2=1.142
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/lvmcmdline.c.diff?cvsroot=lvm2&r1=1.47&r2=1.48
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/tools.h.diff?cvsroot=lvm2&r1=1.56&r2=1.57

--- LVM2/WHATS_NEW	2007/08/21 17:37:34	1.687
+++ LVM2/WHATS_NEW	2007/08/21 19:46:35	1.688
@@ -1,5 +1,6 @@
 Version 2.02.28 -
 ================================
+  Only permit --force, --verbose and --debug arguments to be repeated.
   Move guts of vgremove into library.
   Fix inconsistent licence notices: executables are GPLv2; libraries LGPLv2.1.
   Move guts of lvremove into library.
@@ -9,10 +10,10 @@
   Add const attributes where possible, first cut.
   Add support for renaming mirrored LVs.
   Factor out core of lvrename() to lv_rename lvm library function.
-  Add --log argument to specify log type for mirrors.
+  Add --mirrorlog argument to specify log type for mirrors.
   Don't try to monitor devices which we failed to create.
   Don't leak a file descriptor in fcntl_lock_file(), when fcntl fails.
-  Remove create_dir function; use now-equivalent dm_create_dir instead
+  Replace create_dir with dm_create_dir.
   Detect stream write failure reliably; new fn: lvm_fclose; use dm_fclose
   Fix clvmd if compiled with gulm support. (2.02.26)
   Trivial fix to lvdisplay man page.
--- LVM2/lib/config/defaults.h	2007/08/20 20:55:24	1.32
+++ LVM2/lib/config/defaults.h	2007/08/21 19:46:35	1.33
@@ -39,6 +39,7 @@
 #define DEFAULT_FALLBACK_TO_LOCAL_LOCKING 1
 #define DEFAULT_FALLBACK_TO_CLUSTERED_LOCKING 1
 
+#define DEFAULT_MIRRORLOG "disk"
 #define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate"
 #define DEFAULT_MIRROR_DEV_FAULT_POLICY "remove"
 #define DEFAULT_DMEVENTD_MIRROR_LIB "libdevmapper-event-lvm2mirror.so"
--- LVM2/lib/metadata/lv_manip.c	2007/08/21 16:40:33	1.125
+++ LVM2/lib/metadata/lv_manip.c	2007/08/21 19:46:36	1.126
@@ -1574,7 +1574,6 @@
 /*
  * Core of LV renaming routine.
  * VG must be locked by caller.
- * Returns 0 on failure, 1 on success.
  */
 int lv_rename(struct cmd_context *cmd, struct logical_volume *lv,
 	      const char *new_name)
--- LVM2/tools/args.h	2007/08/20 20:55:30	1.53
+++ LVM2/tools/args.h	2007/08/21 19:46:36	1.54
@@ -1,6 +1,6 @@
 /*
- * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
- * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
+ * Copyright (C, 0) 2001-2004 Sistina Software, Inc. All rights reserved.  
+ * Copyright (C, 0) 2004-2007 Red Hat, Inc. All rights reserved.
  *
  * This file is part of LVM2.
  *
@@ -18,114 +18,114 @@
  * corresponding short option first ...
  */
 /* *INDENT-OFF* */
-arg(version_ARG, '\0', "version", NULL)
-arg(quiet_ARG, '\0', "quiet", NULL)
-arg(physicalvolumesize_ARG, '\0', "setphysicalvolumesize", size_mb_arg)
-arg(ignorelockingfailure_ARG, '\0', "ignorelockingfailure", NULL)
-arg(nolocking_ARG, '\0', "nolocking", NULL)
-arg(metadatacopies_ARG, '\0', "metadatacopies", int_arg)
-arg(metadatasize_ARG, '\0', "metadatasize", size_mb_arg)
-arg(restorefile_ARG, '\0', "restorefile", string_arg)
-arg(labelsector_ARG, '\0', "labelsector", int_arg)
-arg(driverloaded_ARG, '\0', "driverloaded", yes_no_arg)
-arg(aligned_ARG, '\0', "aligned", NULL)
-arg(unbuffered_ARG, '\0', "unbuffered", NULL)
-arg(noheadings_ARG, '\0', "noheadings", NULL)
-arg(segments_ARG, '\0', "segments", NULL)
-arg(units_ARG, '\0', "units", string_arg)
-arg(nosuffix_ARG, '\0', "nosuffix", NULL)
-arg(removemissing_ARG, '\0', "removemissing", NULL)
-arg(abort_ARG, '\0', "abort", NULL)
-arg(addtag_ARG, '\0', "addtag", tag_arg)
-arg(deltag_ARG, '\0', "deltag", tag_arg)
-arg(refresh_ARG, '\0', "refresh", NULL)
-arg(mknodes_ARG, '\0', "mknodes", NULL)
-arg(minor_ARG, '\0', "minor", minor_arg)
-arg(type_ARG, '\0', "type", segtype_arg)
-arg(alloc_ARG, '\0', "alloc", alloc_arg)
-arg(separator_ARG, '\0', "separator", string_arg)
-arg(mirrorsonly_ARG, '\0', "mirrorsonly", NULL)
-arg(nosync_ARG, '\0', "nosync", NULL)
-arg(resync_ARG, '\0', "resync", NULL)
-arg(corelog_ARG, '\0', "corelog", NULL)
-arg(mirrorlog_ARG, '\0', "log", string_arg)
-arg(monitor_ARG, '\0', "monitor", yes_no_arg)
-arg(config_ARG, '\0', "config", string_arg)
-arg(trustcache_ARG, '\0', "trustcache", NULL)
-arg(ignoremonitoring_ARG, '\0', "ignoremonitoring", NULL)
+arg(version_ARG, '\0', "version", NULL, 0)
+arg(quiet_ARG, '\0', "quiet", NULL, 0)
+arg(physicalvolumesize_ARG, '\0', "setphysicalvolumesize", size_mb_arg, 0)
+arg(ignorelockingfailure_ARG, '\0', "ignorelockingfailure", NULL, 0)
+arg(nolocking_ARG, '\0', "nolocking", NULL, 0)
+arg(metadatacopies_ARG, '\0', "metadatacopies", int_arg, 0)
+arg(metadatasize_ARG, '\0', "metadatasize", size_mb_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)
+arg(aligned_ARG, '\0', "aligned", NULL, 0)
+arg(unbuffered_ARG, '\0', "unbuffered", NULL, 0)
+arg(noheadings_ARG, '\0', "noheadings", NULL, 0)
+arg(segments_ARG, '\0', "segments", NULL, 0)
+arg(units_ARG, '\0', "units", string_arg, 0)
+arg(nosuffix_ARG, '\0', "nosuffix", NULL, 0)
+arg(removemissing_ARG, '\0', "removemissing", NULL, 0)
+arg(abort_ARG, '\0', "abort", NULL, 0)
+arg(addtag_ARG, '\0', "addtag", tag_arg, 0)
+arg(deltag_ARG, '\0', "deltag", tag_arg, 0)
+arg(refresh_ARG, '\0', "refresh", NULL, 0)
+arg(mknodes_ARG, '\0', "mknodes", NULL, 0)
+arg(minor_ARG, '\0', "minor", minor_arg, 0)
+arg(type_ARG, '\0', "type", segtype_arg, 0)
+arg(alloc_ARG, '\0', "alloc", alloc_arg, 0)
+arg(separator_ARG, '\0', "separator", string_arg, 0)
+arg(mirrorsonly_ARG, '\0', "mirrorsonly", NULL, 0)
+arg(nosync_ARG, '\0', "nosync", NULL, 0)
+arg(resync_ARG, '\0', "resync", NULL, 0)
+arg(corelog_ARG, '\0', "corelog", NULL, 0)
+arg(mirrorlog_ARG, '\0', "mirrorlog", string_arg, 0)
+arg(monitor_ARG, '\0', "monitor", yes_no_arg, 0)
+arg(config_ARG, '\0', "config", string_arg, 0)
+arg(trustcache_ARG, '\0', "trustcache", NULL, 0)
+arg(ignoremonitoring_ARG, '\0', "ignoremonitoring", NULL, 0)
 
 /* Allow some variations */
-arg(resizable_ARG, '\0', "resizable", yes_no_arg)
-arg(allocation_ARG, '\0', "allocation", yes_no_arg)
+arg(resizable_ARG, '\0', "resizable", yes_no_arg, 0)
+arg(allocation_ARG, '\0', "allocation", yes_no_arg, 0)
 
 /*
  * ... and now the short args.
  */
-arg(available_ARG, 'a', "available", yes_no_excl_arg)
-arg(all_ARG, 'a', "all", NULL)
-arg(autobackup_ARG, 'A', "autobackup", yes_no_arg)
-arg(activevolumegroups_ARG, 'A', "activevolumegroups", NULL)
-arg(background_ARG, 'b', "background", NULL)
-arg(blockdevice_ARG, 'b', "blockdevice", NULL)
-arg(chunksize_ARG, 'c', "chunksize", size_kb_arg)
-arg(clustered_ARG, 'c', "clustered", yes_no_arg)
-arg(colon_ARG, 'c', "colon", NULL)
-arg(columns_ARG, 'C', "columns", NULL)
-arg(contiguous_ARG, 'C', "contiguous", yes_no_arg)
-arg(debug_ARG, 'd', "debug", NULL)
-arg(disk_ARG, 'D', "disk", NULL)
-arg(exported_ARG, 'e', "exported", NULL)
-arg(physicalextent_ARG, 'E', "physicalextent", NULL)
-arg(file_ARG, 'f', "file", string_arg)
-arg(force_ARG, 'f', "force", NULL)
-arg(full_ARG, 'f', "full", NULL)
-arg(help_ARG, 'h', "help", NULL)
-arg(help2_ARG, '?', "", NULL)
-arg(stripesize_ARG, 'I', "stripesize", size_kb_arg)
-arg(stripes_ARG, 'i', "stripes", int_arg)
-arg(interval_ARG, 'i', "interval", int_arg)
-arg(iop_version_ARG, 'i', "iop_version", NULL)
-arg(logicalvolume_ARG, 'l', "logicalvolume", int_arg)
-arg(maxlogicalvolumes_ARG, 'l', "maxlogicalvolumes", int_arg)
-arg(extents_ARG, 'l', "extents", int_arg_with_sign_and_percent)
-arg(lvmpartition_ARG, 'l', "lvmpartition", NULL)
-arg(list_ARG, 'l', "list", NULL)
-arg(size_ARG, 'L', "size", size_mb_arg)
-arg(logicalextent_ARG, 'L', "logicalextent", int_arg_with_sign)
-arg(persistent_ARG, 'M', "persistent", yes_no_arg)
-arg(major_ARG, 'j', "major", major_arg)
-arg(mirrors_ARG, 'm', "mirrors", int_arg_with_sign)
-arg(metadatatype_ARG, 'M', "metadatatype", metadatatype_arg)
-arg(maps_ARG, 'm', "maps", NULL)
-arg(name_ARG, 'n', "name", string_arg)
-arg(oldpath_ARG, 'n', "oldpath", NULL)
-arg(nofsck_ARG, 'n', "nofsck", NULL)
-arg(novolumegroup_ARG, 'n', "novolumegroup", NULL)
-arg(options_ARG, 'o', "options", string_arg)
-arg(sort_ARG, 'O', "sort", string_arg)
-arg(permission_ARG, 'p', "permission", permission_arg)
-arg(maxphysicalvolumes_ARG, 'p', "maxphysicalvolumes", int_arg)
-arg(partial_ARG, 'P', "partial", NULL)
-arg(physicalvolume_ARG, 'P', "physicalvolume", NULL)
-arg(readahead_ARG, 'r', "readahead", int_arg)
-arg(resizefs_ARG, 'r', "resizefs", NULL)
-arg(reset_ARG, 'R', "reset", NULL)
-arg(regionsize_ARG, 'R', "regionsize", size_mb_arg)
-arg(physicalextentsize_ARG, 's', "physicalextentsize", size_mb_arg)
-arg(stdin_ARG, 's', "stdin", NULL)
-arg(snapshot_ARG, 's', "snapshot", NULL)
-arg(short_ARG, 's', "short", NULL)
-arg(test_ARG, 't', "test", NULL)
-arg(uuid_ARG, 'u', "uuid", NULL)
-arg(uuidstr_ARG, 'u', "uuid", string_arg)
-arg(uuidlist_ARG, 'U', "uuidlist", NULL)
-arg(verbose_ARG, 'v', "verbose", NULL)
-arg(volumegroup_ARG, 'V', "volumegroup", NULL)
-arg(allocatable_ARG, 'x', "allocatable", yes_no_arg)
-arg(resizeable_ARG, 'x', "resizeable", yes_no_arg)
-arg(yes_ARG, 'y', "yes", NULL)
-arg(zero_ARG, 'Z', "zero", yes_no_arg)
+arg(available_ARG, 'a', "available", yes_no_excl_arg, 0)
+arg(all_ARG, 'a', "all", NULL, 0)
+arg(autobackup_ARG, 'A', "autobackup", yes_no_arg, 0)
+arg(activevolumegroups_ARG, 'A', "activevolumegroups", NULL, 0)
+arg(background_ARG, 'b', "background", NULL, 0)
+arg(blockdevice_ARG, 'b', "blockdevice", NULL, 0)
+arg(chunksize_ARG, 'c', "chunksize", size_kb_arg, 0)
+arg(clustered_ARG, 'c', "clustered", yes_no_arg, 0)
+arg(colon_ARG, 'c', "colon", NULL, 0)
+arg(columns_ARG, 'C', "columns", NULL, 0)
+arg(contiguous_ARG, 'C', "contiguous", yes_no_arg, 0)
+arg(debug_ARG, 'd', "debug", NULL, ARG_REPEATABLE)
+arg(disk_ARG, 'D', "disk", NULL, 0)
+arg(exported_ARG, 'e', "exported", NULL, 0)
+arg(physicalextent_ARG, 'E', "physicalextent", NULL, 0)
+arg(file_ARG, 'f', "file", string_arg, 0)
+arg(force_ARG, 'f', "force", NULL, ARG_REPEATABLE)
+arg(full_ARG, 'f', "full", NULL, 0)
+arg(help_ARG, 'h', "help", NULL, 0)
+arg(help2_ARG, '?', "", NULL, 0)
+arg(stripesize_ARG, 'I', "stripesize", size_kb_arg, 0)
+arg(stripes_ARG, 'i', "stripes", int_arg, 0)
+arg(interval_ARG, 'i', "interval", int_arg, 0)
+arg(iop_version_ARG, 'i', "iop_version", NULL, 0)
+arg(logicalvolume_ARG, 'l', "logicalvolume", int_arg, 0)
+arg(maxlogicalvolumes_ARG, 'l', "maxlogicalvolumes", int_arg, 0)
+arg(extents_ARG, 'l', "extents", int_arg_with_sign_and_percent, 0)
+arg(lvmpartition_ARG, 'l', "lvmpartition", NULL, 0)
+arg(list_ARG, 'l', "list", NULL, 0)
+arg(size_ARG, 'L', "size", size_mb_arg, 0)
+arg(logicalextent_ARG, 'L', "logicalextent", int_arg_with_sign, 0)
+arg(persistent_ARG, 'M', "persistent", yes_no_arg, 0)
+arg(major_ARG, 'j', "major", major_arg, 0)
+arg(mirrors_ARG, 'm', "mirrors", int_arg_with_sign, 0)
+arg(metadatatype_ARG, 'M', "metadatatype", metadatatype_arg, 0)
+arg(maps_ARG, 'm', "maps", NULL, 0)
+arg(name_ARG, 'n', "name", string_arg, 0)
+arg(oldpath_ARG, 'n', "oldpath", NULL, 0)
+arg(nofsck_ARG, 'n', "nofsck", NULL, 0)
+arg(novolumegroup_ARG, 'n', "novolumegroup", NULL, 0)
+arg(options_ARG, 'o', "options", string_arg, 0)
+arg(sort_ARG, 'O', "sort", string_arg, 0)
+arg(permission_ARG, 'p', "permission", permission_arg, 0)
+arg(maxphysicalvolumes_ARG, 'p', "maxphysicalvolumes", int_arg, 0)
+arg(partial_ARG, 'P', "partial", NULL, 0)
+arg(physicalvolume_ARG, 'P', "physicalvolume", NULL, 0)
+arg(readahead_ARG, 'r', "readahead", int_arg, 0)
+arg(resizefs_ARG, 'r', "resizefs", NULL, 0)
+arg(reset_ARG, 'R', "reset", NULL, 0)
+arg(regionsize_ARG, 'R', "regionsize", size_mb_arg, 0)
+arg(physicalextentsize_ARG, 's', "physicalextentsize", size_mb_arg, 0)
+arg(stdin_ARG, 's', "stdin", NULL, 0)
+arg(snapshot_ARG, 's', "snapshot", NULL, 0)
+arg(short_ARG, 's', "short", NULL, 0)
+arg(test_ARG, 't', "test", NULL, 0)
+arg(uuid_ARG, 'u', "uuid", NULL, 0)
+arg(uuidstr_ARG, 'u', "uuid", string_arg, 0)
+arg(uuidlist_ARG, 'U', "uuidlist", NULL, 0)
+arg(verbose_ARG, 'v', "verbose", NULL, ARG_REPEATABLE)
+arg(volumegroup_ARG, 'V', "volumegroup", NULL, 0)
+arg(allocatable_ARG, 'x', "allocatable", yes_no_arg, 0)
+arg(resizeable_ARG, 'x', "resizeable", yes_no_arg, 0)
+arg(yes_ARG, 'y', "yes", NULL, 0)
+arg(zero_ARG, 'Z', "zero", yes_no_arg, 0)
 
 /* this should always be last */
-arg(ARG_COUNT, '-', "", NULL)
+arg(ARG_COUNT, '-', "", NULL, 0)
 /* *INDENT-ON* */
--- LVM2/tools/commands.h	2007/08/20 20:55:30	1.100
+++ LVM2/tools/commands.h	2007/08/21 19:46:36	1.101
@@ -88,7 +88,7 @@
 xx(lvconvert,
    "Change logical volume layout",
    "lvconvert "
-   "[-m|--mirrors Mirrors [--log {disk|core}]]\n"
+   "[-m|--mirrors Mirrors [{--mirrorlog {disk|core}|--corelog}]]\n"
    "\t[-R|--regionsize MirrorLogRegionSize]\n"
    "\t[--alloc AllocationPolicy]\n"
    "\t[-d|--debug]\n"
@@ -107,7 +107,7 @@
    "\t[--version]" "\n"
    "\tOriginalLogicalVolume[Path] SnapshotLogicalVolume[Path]\n",
 
-   alloc_ARG, chunksize_ARG, mirrors_ARG, corelog_ARG, mirrorlog_ARG,
+   alloc_ARG, chunksize_ARG, corelog_ARG, mirrorlog_ARG, mirrors_ARG,
    regionsize_ARG, snapshot_ARG, test_ARG, zero_ARG)
 
 xx(lvcreate,
@@ -123,7 +123,7 @@
    "\t{-l|--extents LogicalExtentsNumber |\n"
    "\t -L|--size LogicalVolumeSize[kKmMgGtTpPeE]}\n"
    "\t[-M|--persistent {y|n}] [--major major] [--minor minor]\n"
-   "\t[-m|--mirrors Mirrors [--nosync] [--log {disk|core}]]\n"
+   "\t[-m|--mirrors Mirrors [--nosync] [{--mirrorlog {disk|core}|--corelog}]]\n"
    "\t[-n|--name LogicalVolumeName]\n"
    "\t[-p|--permission {r|rw}]\n"
    "\t[-r|--readahead ReadAheadSectors]\n"
@@ -156,10 +156,10 @@
    "\tOriginalLogicalVolume[Path] [PhysicalVolumePath...]\n\n",
 
    addtag_ARG, alloc_ARG, autobackup_ARG, chunksize_ARG, contiguous_ARG,
-   corelog_ARG, mirrorlog_ARG, extents_ARG, major_ARG, minor_ARG, mirrors_ARG, name_ARG,
-   nosync_ARG, permission_ARG, persistent_ARG, readahead_ARG, regionsize_ARG,
-   size_ARG, snapshot_ARG, stripes_ARG, stripesize_ARG, test_ARG, type_ARG,
-   zero_ARG)
+   corelog_ARG, extents_ARG, major_ARG, minor_ARG, mirrorlog_ARG, mirrors_ARG,
+   name_ARG, nosync_ARG, permission_ARG, persistent_ARG, readahead_ARG,
+   regionsize_ARG, size_ARG, snapshot_ARG, stripes_ARG, stripesize_ARG,
+   test_ARG, type_ARG, zero_ARG)
 
 xx(lvdisplay,
    "Display information about a logical volume",
--- LVM2/tools/lvconvert.c	2007/08/20 20:55:30	1.34
+++ LVM2/tools/lvconvert.c	2007/08/21 19:46:36	1.35
@@ -101,29 +101,13 @@
 static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd,
 			int argc, char **argv)
 {
-	int count = 0;
 	int region_size;
 	int pagesize = lvm_getpagesize();
 
 	memset(lp, 0, sizeof(*lp));
 
-	if (arg_count(cmd, mirrorlog_ARG) > 1) {
-		log_error("Too many --log arguments supplied.");
-		return 0;
-	}
-	if (arg_count(cmd, mirrors_ARG) > 1) {
-		log_error("Too many --mirrors arguments supplied.");
-		return 0;
-	}
-	if (arg_count(cmd, snapshot_ARG) > 1) {
-		log_error("Too many --snapshot arguments supplied.");
-		return 0;
-	}
-	if (arg_count(cmd, mirrorlog_ARG) || arg_count(cmd, mirrors_ARG))
-		count = 1;
-	count += arg_count(cmd, snapshot_ARG);
-
-	if (count != 1) {
+	if (arg_count(cmd, snapshot_ARG) &&
+	    (arg_count(cmd, mirrorlog_ARG) || arg_count(cmd, mirrors_ARG))) {
 		log_error("--snapshots argument cannot be mixed "
 			  "with --mirrors or --log");
 		return 0;
@@ -254,8 +238,8 @@
 	struct list *parallel_areas;
 	struct segment_type *segtype;  /* FIXME: could I just use lp->segtype */
 	float sync_percent;
-	const char *log_arg;
-	int corelog = 0;
+	const char *mirrorlog;
+	unsigned corelog = 0;
 
 	seg = first_seg(lv);
 	existing_mirrors = seg->area_count;
@@ -289,25 +273,26 @@
 	/*
 	 * Adjust log type
 	 */
-	if (arg_count(cmd, corelog_ARG)) {
-		log_verbose("Setting logging type to \"core\"");
+	if (arg_count(cmd, corelog_ARG))
 		corelog = 1;
-	}
 
-	if (arg_count(cmd, mirrorlog_ARG)) {
-		log_arg = arg_str_value(cmd, mirrorlog_ARG, "disk");
-		if (!strcmp("disk", log_arg)) {
-			log_verbose("Setting logging type to \"disk\"");
-			corelog = 0;
-		} else if (!strcmp("core", log_arg)) {
-			log_verbose("Setting logging type to \"core\"");
-			corelog = 1;
-		} else {
-			log_error("Unknown logging type, \"%s\"", log_arg);
+	mirrorlog = arg_str_value(cmd, mirrorlog_ARG, DEFAULT_MIRRORLOG);
+	if (!strcmp("disk", mirrorlog)) {
+		if (corelog) {
+			log_error("--mirrorlog disk and --corelog "
+				  "are incompatible");
 			return 0;
 		}
+		corelog = 0;
+	} else if (!strcmp("core", mirrorlog))
+		corelog = 1;
+	else {
+		log_error("Unknown mirrorlog type: %s", mirrorlog);
+		return 0;
 	}
 
+	log_verbose("Setting logging type to %s", mirrorlog);
+
 	/*
 	 * Region size must not change on existing mirrors
 	 */
--- LVM2/tools/lvcreate.c	2007/08/20 20:55:30	1.141
+++ LVM2/tools/lvcreate.c	2007/08/21 19:46:36	1.142
@@ -241,7 +241,7 @@
 	int argc = *pargc;
 	int region_size;
 	int pagesize = lvm_getpagesize();
-	const char *log_arg;
+	const char *mirrorlog;
 
 	if (argc && (unsigned) argc < lp->mirrors) {
 		log_error("Too few physical volumes on "
@@ -285,25 +285,26 @@
 		return 0;
 	}
 
-	if (arg_count(cmd, corelog_ARG)) {
-		log_verbose("Setting logging type to \"core\"");
+	if (arg_count(cmd, corelog_ARG))
 		lp->corelog = 1;
-	}
 
-	if (arg_count(cmd, mirrorlog_ARG)) {
-		log_arg = arg_str_value(cmd, mirrorlog_ARG, "disk");
-		if (!strcmp("disk", log_arg)) {
-			log_verbose("Setting logging type to \"disk\"");
-			lp->corelog = 0;
-		} else if (!strcmp("core", log_arg)) {
-			log_verbose("Setting logging type to \"core\"");
-			lp->corelog = 1;
-		} else {
-			log_error("Unknown logging type, \"%s\"", log_arg);
+	mirrorlog = arg_str_value(cmd, mirrorlog_ARG, DEFAULT_MIRRORLOG);
+	if (!strcmp("disk", mirrorlog)) {
+		if (lp->corelog) {
+			log_error("--mirrorlog disk and --corelog "
+				  "are incompatible");
 			return 0;
 		}
+		lp->corelog = 0;
+	} else if (!strcmp("core", mirrorlog))
+		lp->corelog = 1;
+	else {
+		log_error("Unknown mirrorlog type: %s", mirrorlog);
+		return 0;
 	}
 
+	log_verbose("Setting logging type to %s", mirrorlog);
+
 	lp->nosync = arg_count(cmd, nosync_ARG) ? 1 : 0;
 
 	return 1;
--- LVM2/tools/lvmcmdline.c	2007/08/20 20:55:30	1.47
+++ LVM2/tools/lvmcmdline.c	2007/08/21 19:46:36	1.48
@@ -45,7 +45,7 @@
  * Table of valid switches
  */
 static struct arg _the_args[ARG_COUNT + 1] = {
-#define arg(a, b, c, d) {b, "", "--" c, d, 0, NULL, 0, 0, INT64_C(0), UINT64_C(0), SIGN_NONE, PERCENT_NONE, NULL},
+#define arg(a, b, c, d, e) {b, "", "--" c, d, e, 0, NULL, 0, 0, INT64_C(0), UINT64_C(0), SIGN_NONE, PERCENT_NONE, NULL},
 #include "args.h"
 #undef arg
 };
@@ -568,16 +568,16 @@
 			return 0;
 		}
 
-		if (a->fn) {
-			if (a->count) {
-				log_error("Option%s%c%s%s may not be repeated",
-					  a->short_arg ? " -" : "",
-					  a->short_arg ? : ' ',
-					  (a->short_arg && a->long_arg) ?
-					  "/" : "", a->long_arg ? : "");
-				return 0;
-			}
+		if (a->count && !(a->flags & ARG_REPEATABLE)) {
+			log_error("Option%s%c%s%s may not be repeated",
+				  a->short_arg ? " -" : "",
+				  a->short_arg ? : ' ',
+				  (a->short_arg && a->long_arg) ?
+				  "/" : "", a->long_arg ? : "");
+			return 0;
+		}
 
+		if (a->fn) {
 			if (!optarg) {
 				log_error("Option requires argument.");
 				return 0;
--- LVM2/tools/tools.h	2007/08/20 20:55:30	1.56
+++ LVM2/tools/tools.h	2007/08/21 19:46:36	1.57
@@ -68,7 +68,7 @@
 
 /* define the enums for the command line switches */
 enum {
-#define arg(a, b, c, d) a ,
+#define arg(a, b, c, d, e) a ,
 #include "args.h"
 #undef arg
 };
@@ -94,6 +94,8 @@
 	CHANGE_ALN = 4
 };
 
+#define ARG_REPEATABLE 0x00000001
+
 /* a global table of possible arguments */
 struct arg {
 	const char short_arg;
@@ -101,6 +103,7 @@
 	const char *long_arg;
 
 	int (*fn) (struct cmd_context * cmd, struct arg * a);
+	uint32_t flags;
 
 	unsigned count;
 	char *value;




More information about the lvm-devel mailing list