mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-19 14:04:17 +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 -
|
Version 2.02.73 -
|
||||||
================================
|
================================
|
||||||
|
Fix wrong number of mirror log at allocate policy
|
||||||
|
|
||||||
Version 2.02.72 - 28th July 2010 [CVE-2010-2526]
|
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)))
|
if (!(lp->failed_pvs = _failed_pv_list(lv->vg)))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
|
log_count = new_log_count;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We must adjust the log first, or the entire mirror
|
* We must adjust the log first, or the entire mirror
|
||||||
* will get stuck during a suspend.
|
* 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;
|
return 0;
|
||||||
|
|
||||||
if (lp->mirrors == 1)
|
if (lp->mirrors == 1)
|
||||||
new_log_count = 0;
|
log_count = 0;
|
||||||
|
|
||||||
if (failed_mirrors) {
|
if (failed_mirrors) {
|
||||||
if (!lv_remove_mirrors(cmd, lv, failed_mirrors,
|
if (!lv_remove_mirrors(cmd, lv, failed_mirrors,
|
||||||
new_log_count ? 0U : 1U,
|
log_count ? 0U : 1U,
|
||||||
_is_partial_lv, NULL, 0))
|
_is_partial_lv, NULL, 0))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_lv_update_log_type(cmd, lp, lv, lp->failed_pvs,
|
if (!_lv_update_log_type(cmd, lp, lv, lp->failed_pvs,
|
||||||
new_log_count))
|
log_count))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!_reload_lv(cmd, lv))
|
if (!_reload_lv(cmd, lv))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user