mrc0mmand / rpms / lvm2

Forked from rpms/lvm2 2 years ago
Clone

Blame SOURCES/lvm2-2_02_182-mirror-fix-splitmirrors-for-mirror-type.patch

0d8a0a
 WHATS_NEW               | 1 +
0d8a0a
 lib/activate/activate.c | 5 +++++
0d8a0a
 lib/metadata/mirror.c   | 2 +-
0d8a0a
 3 files changed, 7 insertions(+), 1 deletion(-)
0d8a0a
0d8a0a
diff --git a/WHATS_NEW b/WHATS_NEW
0d8a0a
index 17aff08..6560357 100644
0d8a0a
--- a/WHATS_NEW
0d8a0a
+++ b/WHATS_NEW
0d8a0a
@@ -1,5 +1,6 @@
0d8a0a
 Version 2.02.182 - 
0d8a0a
 ==============================
0d8a0a
+  Fix lvconvert --splitmirror for mirror type (2.02.178).
0d8a0a
   Do not pair cache policy and cache metadata format.
0d8a0a
 
0d8a0a
 Version 2.02.181 - 
0d8a0a
diff --git a/lib/activate/activate.c b/lib/activate/activate.c
0d8a0a
index e38ab03..16704f6 100644
0d8a0a
--- a/lib/activate/activate.c
0d8a0a
+++ b/lib/activate/activate.c
0d8a0a
@@ -2125,6 +2125,11 @@ static int _preload_detached_lv(struct logical_volume *lv, void *data)
0d8a0a
 		    !lv_is_raid_metadata(lv_pre) && lv_is_active(lv) &&
0d8a0a
 		    !_lv_preload(lv_pre, detached->laopts, detached->flush_required))
0d8a0a
 			return_0;
0d8a0a
+	} else if (lv_is_mirror_image(lv)) {
0d8a0a
+		if ((lv_pre = find_lv_in_vg_by_lvid(detached->lv_pre->vg, &lv->lvid)) &&
0d8a0a
+		    !lv_is_mirror_image(lv_pre) && lv_is_active(lv) &&
0d8a0a
+		    !_lv_preload(lv_pre, detached->laopts, detached->flush_required))
0d8a0a
+			return_0;
0d8a0a
 	}
0d8a0a
 
0d8a0a
 	if (!lv_is_visible(lv) && (lv_pre = find_lv(detached->lv_pre->vg, lv->name)) &&
0d8a0a
diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
0d8a0a
index 7f38d4f..c7d8a9e 100644
0d8a0a
--- a/lib/metadata/mirror.c
0d8a0a
+++ b/lib/metadata/mirror.c
0d8a0a
@@ -786,7 +786,7 @@ static int _split_mirror_images(struct logical_volume *lv,
0d8a0a
 
0d8a0a
 	act = lv_is_active(lv_lock_holder(lv));
0d8a0a
 
0d8a0a
-	if (act && !_activate_lv_like_model(lv, new_lv)) {
0d8a0a
+	if (act && (!deactivate_lv(cmd, new_lv) || !_activate_lv_like_model(lv, new_lv))) {
0d8a0a
 		log_error("Failed to rename newly split LV in the kernel");
0d8a0a
 		return 0;
0d8a0a
 	}