From a6d13308ec0baca9a5bd48f80d02e5c71a54287f Mon Sep 17 00:00:00 2001 From: Jonathan Brassow Date: Wed, 19 Jun 2013 17:50:10 -0500 Subject: [PATCH] RAID/MIRROR: Honor mirror_segtype_default when upconverting linear LVs If the user would upconvert a linear LV to a mirror without specifying the segment type ("--type mirror" vs "--type raid1"), the "mirror" segment type would be chosen without consulting the 'default_mirror_segtype' setting in lvm.conf. This is now used as the basis for determining which should be used if left unspecified. --- WHATS_NEW | 2 ++ test/shell/lvconvert-mirror.sh | 12 ++++++++++-- test/shell/lvconvert-raid.sh | 18 ++++++++++++++++++ tools/lvconvert.c | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 19bcf829f..d527854d1 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,7 @@ Version 2.02.99 - =================================== + Use mirror_segtype_default if type not specified for linear->mirror upconvert. + Make upconvert from linear use mirror_segtype_default to determine segtype. Fix use of too big chunks of memory when communication with lvmetad. Fix vgcfgrestore crash when specified incorrect vg name. Refine lvm.conf and man page documentation for autoactivation feature. diff --git a/test/shell/lvconvert-mirror.sh b/test/shell/lvconvert-mirror.sh index 420241a3e..e3c01fa1c 100644 --- a/test/shell/lvconvert-mirror.sh +++ b/test/shell/lvconvert-mirror.sh @@ -16,9 +16,17 @@ aux prepare_pvs 5 10 DEVRANGE="0-32" vgcreate -s 32k $vg $(cat DEVICES) -# convert from linear to 2-way mirror +# convert from linear to 2-way mirror ("mirror" default type) lvcreate -aey -l2 -n $lv1 $vg "$dev1" -lvconvert -i1 -m+1 $vg/$lv1 "$dev2" "$dev3:0-1" +lvconvert -i1 -m+1 $vg/$lv1 "$dev2" "$dev3:0-1" \ + --config 'global { mirror_segtype_default = "mirror" }' +check mirror $vg $lv1 "$dev3" +lvremove -ff $vg + +# convert from linear to 2-way mirror (override "raid1" default type) +lvcreate -aey -l2 -n $lv1 $vg "$dev1" +lvconvert --type mirror -i1 -m+1 $vg/$lv1 "$dev2" "$dev3:0-1" \ + --config 'global { mirror_segtype_default = "raid1" }' check mirror $vg $lv1 "$dev3" lvremove -ff $vg diff --git a/test/shell/lvconvert-raid.sh b/test/shell/lvconvert-raid.sh index 61345da7e..8693cf373 100644 --- a/test/shell/lvconvert-raid.sh +++ b/test/shell/lvconvert-raid.sh @@ -135,6 +135,24 @@ lvconvert --merge $vg/${lv1}_rimage_2 # FIXME: ensure no residual devices lvremove -ff $vg +########################################### +# Linear to RAID1 conversion ("raid1" default segtype) +########################################### +lvcreate -l 2 -n $lv1 $vg +lvconvert -m 1 $vg/$lv1 \ + --config 'global { mirror_segtype_default = "raid1" }' +lvs --noheadings -o attr $vg/$lv1 | grep '^r*' +lvremove -ff $vg + +########################################### +# Linear to RAID1 conversion (override "mirror" default segtype) +########################################### +lvcreate -l 2 -n $lv1 $vg +lvconvert --type raid1 -m 1 $vg/$lv1 \ + --config 'global { mirror_segtype_default = "mirror" }' +lvs --noheadings -o attr $vg/$lv1 | grep '^r*' +lvremove -ff $vg + ########################################### # Mirror to RAID1 conversion ########################################### diff --git a/tools/lvconvert.c b/tools/lvconvert.c index 46f996a79..be6b55ff1 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -490,7 +490,7 @@ static int _read_params(struct lvconvert_params *lp, struct cmd_context *cmd, return 0; } - lp->segtype = get_segtype_from_string(cmd, arg_str_value(cmd, type_ARG, "mirror")); + lp->segtype = get_segtype_from_string(cmd, arg_str_value(cmd, type_ARG, find_config_tree_str(cmd, global_mirror_segtype_default_CFG))); if (!lp->segtype) return_0; }