summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2017-10-30 14:34:30 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2017-10-30 14:39:16 +0100
commit04244107732feb5274bc24efed428a0d4ddae8f6 (patch)
tree657aa69d2baa0621044ed29bc8d6c724dfac8f97
parente9206fb93dcbc7c07ee7f6c4438f1dbd91c4d73a (diff)
downloadlvm2-04244107732feb5274bc24efed428a0d4ddae8f6.tar.gz
validation: capture store of LV without segment
-rw-r--r--WHATS_NEW1
-rw-r--r--lib/metadata/merge.c5
-rw-r--r--test/shell/metadata-balance.sh15
3 files changed, 18 insertions, 3 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index e8e6bb0f1..0ee52bae9 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.176 -
===================================
+ Do not allow storing VG metadata with LV without any segment.
Fix printed message when thin snapshot was already merged.
Remove created spare LV when creation of thin-pool failed.
Avoid reading ignored metadata when mda gets used again.
diff --git a/lib/metadata/merge.c b/lib/metadata/merge.c
index 7de0c10f5..d5024cfdc 100644
--- a/lib/metadata/merge.c
+++ b/lib/metadata/merge.c
@@ -628,6 +628,11 @@ int check_lv_segments(struct logical_volume *lv, int complete_vg)
inc_error_count;
}
+ if (!le) {
+ log_error("LV %s: has no segment.", lv->name);
+ inc_error_count;
+ }
+
dm_list_iterate_items(sl, &lv->segs_using_this_lv) {
seg = sl->seg;
seg_found = 0;
diff --git a/test/shell/metadata-balance.sh b/test/shell/metadata-balance.sh
index fe94aed57..1f22b2430 100644
--- a/test/shell/metadata-balance.sh
+++ b/test/shell/metadata-balance.sh
@@ -189,8 +189,8 @@ done
echo Test special situations, vgsplit, vgmerge, etc
for mdacp in 1 2; do
pvcreate --metadatacopies $mdacp "$dev1" "$dev2" "$dev3" "$dev4" "$dev5"
- vgcreate --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
- vgcreate --vgmetadatacopies $(( mdacp * 1 )) $vg2 "$dev4" "$dev5"
+ vgcreate -cy --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
+ vgcreate -cy --vgmetadatacopies $(( mdacp * 1 )) $vg2 "$dev4" "$dev5"
echo vgsplit/vgmerge preserves value of metadata copies
check vg_field $vg1 vg_mda_copies 2
check vg_field $vg2 vg_mda_copies $(( mdacp * 1 ))
@@ -200,7 +200,16 @@ for mdacp in 1 2; do
check vg_field $vg1 vg_mda_copies 2
check vg_field $vg1 vg_mda_count $(( mdacp * 5 ))
echo vgsplit into new vg sets proper value of vgmetadatacopies
- vgsplit --vgmetadatacopies $(( mdacp * 2 )) $vg1 $vg2 "$dev1" "$dev2"
+# echo y | pvchange -y --metadataignore n "$dev3" || true
+# echo y | pvchange -y --metadataignore y "$dev4" || true
+# echo y | pvchange -y --metadataignore n "$dev5" || true
+# echo y | pvchange -y --metadataignore y "$dev1" || true
+# echo y | pvchange -y --metadataignore y "$dev2" || true
+ pvs -o+pv_mda_size,pv_mda_count,pv_mda_used_count,pv_in_use
+ pvdisplay
+
+ #LVM_GDB=1
+ vgsplit --vgmetadatacopies $(( mdacp * 2 )) $vg1 $vg2 "$dev1" "$dev2"
check vg_field $vg2 vg_mda_copies $(( mdacp * 2 ))
echo vgchange fails if given both vgmetadatacopies and metadatacopies
not vgchange --vgmetadatacopies 5 --metadatacopies 7 $vg2