summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/example.conf.in17
-rw-r--r--lib/config/defaults.h1
-rw-r--r--tools/lvcreate.c11
3 files changed, 24 insertions, 5 deletions
diff --git a/doc/example.conf.in b/doc/example.conf.in
index a1ba5f83a..e6494e545 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -498,6 +498,23 @@ global {
# setting.
mirror_segtype_default = "mirror"
+ # 'raid10_segtype_default' determines the segment types used by default
+ # when the '--stripes/-i' and '--mirrors/-m' arguments are both specified
+ # during the creation of a logical volume.
+ # Possible settings include:
+ #
+ # "raid10" - This implementation leverages MD's RAID10 personality through
+ # device-mapper.
+ #
+ # "mirror" - LVM will layer the 'mirror' and 'stripe' segment types. It
+ # will do this by creating a mirror on top of striped sub-LVs;
+ # effectively creating a RAID 0+1 array. This is suboptimal
+ # in terms of providing redunancy and performance. Changing to
+ # this setting is not advised.
+ # Specify the '--type <raid10|mirror>' option to override this default
+ # setting.
+ raid10_segtype_default "mirror"
+
# The default format for displaying LV names in lvdisplay was changed
# in version 2.02.89 to show the LV name and path separately.
# Previously this was always shown as /dev/vgname/lvname even when that
diff --git a/lib/config/defaults.h b/lib/config/defaults.h
index 0a982542d..d39995e3b 100644
--- a/lib/config/defaults.h
+++ b/lib/config/defaults.h
@@ -56,6 +56,7 @@
#define DEFAULT_MIRROR_LOG_FAULT_POLICY "allocate"
#define DEFAULT_MIRROR_IMAGE_FAULT_POLICY "remove"
#define DEFAULT_MIRROR_MAX_IMAGES 8 /* limited by kernel DM_KCOPYD_MAX_REGIONS */
+#define DEFAULT_RAID10_SEGTYPE "mirror"
#define DEFAULT_RAID_FAULT_POLICY "warn"
#define DEFAULT_DMEVENTD_RAID_LIB "libdevmapper-event-lvm2raid.so"
#define DEFAULT_DMEVENTD_MIRROR_LIB "libdevmapper-event-lvm2mirror.so"
diff --git a/tools/lvcreate.c b/tools/lvcreate.c
index 8919ba41e..a2626c0cf 100644
--- a/tools/lvcreate.c
+++ b/tools/lvcreate.c
@@ -673,11 +673,12 @@ static int _lvcreate_params(struct lvcreate_params *lp,
/* Set default segtype */
if (arg_count(cmd, mirrors_ARG))
- /*
- * FIXME: Add default setting for when -i and -m arguments
- * are both given. We should default to "raid10".
- */
- segtype_str = find_config_tree_str(cmd, "global/mirror_segtype_default", DEFAULT_MIRROR_SEGTYPE);
+ if (arg_uint_value(cmd, arg_count(cmd, stripes_long_ARG) ?
+ stripes_long_ARG : stripes_ARG, 1) > 1) {
+ segtype_str = find_config_tree_str(cmd, "global/raid10_segtype_default", DEFAULT_RAID10_SEGTYPE);
+ } else {
+ segtype_str = find_config_tree_str(cmd, "global/mirror_segtype_default", DEFAULT_MIRROR_SEGTYPE);
+ }
else if (arg_count(cmd, thin_ARG) || arg_count(cmd, thinpool_ARG))
segtype_str = "thin";
else