[lvm-devel] [PATCH] Fix log disk disappear with mirror allocate policy

Petr Rockai prockai at redhat.com
Thu Jul 29 10:54:15 UTC 2010


Hi,

Takahiro Yasui <takahiro.yasui at hds.com> writes:
> 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.
I see.

> --- LVM2-2.02.71.orig/tools/lvconvert.c
> +++ LVM2-2.02.71/tools/lvconvert.c
> @@ -1237,25 +1237,27 @@ static int _lvconvert_mirrors_repair(str
>  	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;
Here we used to overwrite new_log_count which is later used for
restoring the mirror (i.e. when allocating new legs).

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

Ack.

Reviewed-By: Petr Rockai <prockai at redhat.com>

Yours,
   Petr.




More information about the lvm-devel mailing list