1
0
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:
Takahiro Yasui 2010-07-30 17:50:15 +00:00
parent 936541ec56
commit 07c7f12deb
2 changed files with 7 additions and 4 deletions

View File

@ -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]
=================================================

View File

@ -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))