1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-10 16:58:47 +03:00

Mirrors can be layered - as in the case of an converting 2-way

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.
This commit is contained in:
Jonathan Earl Brassow 2010-06-21 16:12:33 +00:00
parent 548cc88947
commit a7d355a28c
2 changed files with 4 additions and 0 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.68 - 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. 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. Use early udev synchronisation and update of dev nodes for clustered mirrors.
Remove incorrect inclusion of kdev_t.h from cmirrord/functions.h. Remove incorrect inclusion of kdev_t.h from cmirrord/functions.h.

View File

@ -851,6 +851,9 @@ static int _remove_mirror_images(struct logical_volume *lv,
log_error("Failed to add mirror images"); log_error("Failed to add mirror images");
return 0; 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) { } else if (new_area_count == 0) {
log_very_verbose("All mimages of %s are gone", lv->name); log_very_verbose("All mimages of %s are gone", lv->name);