]> sourceware.org Git - lvm2.git/commitdiff
Mirrors can be layered - as in the case of an converting 2-way
authorJonathan Earl Brassow <jbrassow@redhat.com>
Mon, 21 Jun 2010 16:12:33 +0000 (16:12 +0000)
committerJonathan Earl Brassow <jbrassow@redhat.com>
Mon, 21 Jun 2010 16:12:33 +0000 (16:12 +0000)
to 3-way mirror.  When conversion operations are performed on
these types of mirrors, log options can be confused/ignored.

In the case of a converting 3-way mirror, we have a top-level
2-way corelog mirror whose legs are 1) a 2-way disk-log mirror
and 2) a linear device.  If we wish to convert this 3-way mirror
to a 2-way mirror, the linear device is removed and the extra
top layer is eliminated.  If we also wished to convert the disk
log to a core log in the same step, ambiguity creeps in.  It is
somewhat obvious what the user wants - a 2-way mirror with a
corelog.  However, looking at the top level mirror before
compression, it seems that the mirror already has a core log.
This is why the operation seemed to fail.

This patch simply re-evaluates what mirrored_seg points to after
a compression and then considers the log argument.

This is a fix for bug 599898.

WHATS_NEW
lib/metadata/mirror.c

index e5abcb18a4d055215b03e3d5716bb832a6662ffe..cb57ed3c053effde852029aa9e2db7e66c613206 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.68 -
 ===============================
+  Honor log argument when down-converting stacked mirror.
   Sleep to workaround clvmd -S race: socket closed early and server drops cmd.
   Use early udev synchronisation and update of dev nodes for clustered mirrors.
   Remove incorrect inclusion of kdev_t.h from cmirrord/functions.h.
index 11777c0ed315daccf016e2ee4d89f640c0833b63..50082578bca68c2e1af47e8eab66bf49a35c5e8e 100644 (file)
@@ -851,6 +851,9 @@ static int _remove_mirror_images(struct logical_volume *lv,
                        log_error("Failed to add mirror images");
                        return 0;
                }
+               mirrored_seg = first_seg(lv);
+               if (remove_log && !detached_log_lv)
+                       detached_log_lv = detach_mirror_log(mirrored_seg);
        } else if (new_area_count == 0) {
                log_very_verbose("All mimages of %s are gone", lv->name);
 
This page took 0.050801 seconds and 5 git commands to generate.