[lvm-devel] [PATCH] Prevent simultaneous mirror up-converts (bug 582251)

Jonathan Brassow jbrassow at redhat.com
Mon Apr 19 19:03:13 UTC 2010


This patch fixes bug 582251 by disallowing the addition of
another image to a mirror when it is already in the process
of adding an image.

The fix forces a user to wait for the first conversion to
complete before starting another one.

Signed-off-by: Jonathan Brassow <jbrassow at redhat.com>

Index: LVM2/tools/lvconvert.c
===================================================================
--- LVM2.orig/tools/lvconvert.c
+++ LVM2/tools/lvconvert.c
@@ -996,6 +996,16 @@ static int _lvconvert_mirrors_aux(struct
 		}
 
 		/*
+		 * Is there already a convert in progress?  We do not
+		 * currently allow more than one.
+		 */
+		if (find_temporary_mirror(lv) || (lv->status & CONVERTING)) {
+			log_error("%s is already being converted.  Unable to start another conversion.",
+				  lv->name);
+			return 0;
+		}
+
+		/*
 		 * Log addition/removal should be done before the layer
 		 * insertion to make the end result consistent with
 		 * linear-to-mirror conversion.
Index: LVM2/test/t-mirror-lvconvert.sh
===================================================================
--- LVM2.orig/test/t-mirror-lvconvert.sh
+++ LVM2/test/t-mirror-lvconvert.sh
@@ -155,11 +155,15 @@ check_and_cleanup_lvs_
 # add 1 mirror
 prepare_lvs_
 lvs -a -o+devices $vg
-lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
+lvcreate -l5 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0
 lvs -a -o+devices $vg
 check_mirror_count_ $vg/$lv1 2
 check_mirror_log_ $vg/$lv1
-lvconvert -m+1 -i1 $vg/$lv1 $dev4
+lvconvert -m+1 -b $vg/$lv1 $dev4
+# FIXME:  Next test is a bit time dependent
+#  The test /could/ succeed if the previous conversion
+#  happens quickly enough.
+not lvconvert -m+1 -b $vg/$lv1 $dev5
 lvs -a -o+devices $vg
 check_no_tmplvs_ $vg/$lv1
 check_mirror_count_ $vg/$lv1 3





More information about the lvm-devel mailing list