mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
Fix wrong number of mirror log at allocate policy
With mirror_log_fault_policy of 'remove' and mirror_image_fault_policy of 'allocate', the log type of the mirror volume is converted from 'disk' or 'mirrored' to 'core' when all mirror legs but one in a mirror volume broke. Keep new_log_count as a number of valid log devices by using log_count variable for a temporary usage in the first phase of error recovery in _lvconvert_mirrors_repair(). Signed-off-by: Takahiro Yasui <takahiro.yasui@hds.com> Reviewed-by: Petr Rockai <prockai@redhat.com>
This commit is contained in:
parent
936541ec56
commit
07c7f12deb
@ -1,5 +1,6 @@
|
||||
Version 2.02.73 -
|
||||
================================
|
||||
Fix wrong number of mirror log at allocate policy
|
||||
|
||||
Version 2.02.72 - 28th July 2010 [CVE-2010-2526]
|
||||
=================================================
|
||||
|
@ -1237,25 +1237,27 @@ static int _lvconvert_mirrors_repair(struct cmd_context *cmd,
|
||||
if (!(lp->failed_pvs = _failed_pv_list(lv->vg)))
|
||||
return_0;
|
||||
|
||||
log_count = new_log_count;
|
||||
|
||||
/*
|
||||
* We must adjust the log first, or the entire mirror
|
||||
* will get stuck during a suspend.
|
||||
*/
|
||||
if (!_lv_update_mirrored_log(lv, lp->failed_pvs, new_log_count))
|
||||
if (!_lv_update_mirrored_log(lv, lp->failed_pvs, log_count))
|
||||
return 0;
|
||||
|
||||
if (lp->mirrors == 1)
|
||||
new_log_count = 0;
|
||||
log_count = 0;
|
||||
|
||||
if (failed_mirrors) {
|
||||
if (!lv_remove_mirrors(cmd, lv, failed_mirrors,
|
||||
new_log_count ? 0U : 1U,
|
||||
log_count ? 0U : 1U,
|
||||
_is_partial_lv, NULL, 0))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!_lv_update_log_type(cmd, lp, lv, lp->failed_pvs,
|
||||
new_log_count))
|
||||
log_count))
|
||||
return 0;
|
||||
|
||||
if (!_reload_lv(cmd, lv))
|
||||
|
Loading…
Reference in New Issue
Block a user