[lvm-devel] [PATCH][RFC] Fix lvconvert repair at mirror leg and log failure (v2)
Jonathan Brassow
jbrassow at redhat.com
Fri Jun 18 19:02:43 UTC 2010
looks good. I'll try to generate a test rpm for corey. He can then
try it out against the bug he filed too (bug 596453)
brassow
On Jun 16, 2010, at 5:55 PM, Takahiro Yasui wrote:
> Hi,
>
> Fixed some issues in the previous patch.
>
> v2 changes:
> - rename _lv_update_log() to _lv_update_mirrored_log()
> - restore _reload_lv() in _lv_update_mirrored_log()
> - pass an updated new_log_count value to _lv_update_mirrored_log()
>
> Appreciate your review and comments.
>
> Thanks,
> Taka
>
>
> Signed-off-by: Takahiro Yasui <tyasui at redhat.com>
> ---
> tools/lvconvert.c | 33 +++++++++++++++++++++++++++++++--
> 1 file changed, 31 insertions(+), 2 deletions(-)
>
> Index: LVM2-2.02.67/tools/lvconvert.c
> ===================================================================
> --- LVM2-2.02.67.orig/tools/lvconvert.c
> +++ LVM2-2.02.67/tools/lvconvert.c
> @@ -689,6 +689,27 @@ static int _get_log_count(struct logical
> return lv_mirror_count(log_lv);
> }
>
> +static int _lv_update_mirrored_log(struct logical_volume *lv,
> + struct dm_list *operable_pvs,
> + int log_count)
> +{
> + int old_log_count;
> + struct logical_volume *log_lv;
> +
> + log_lv = first_seg(_original_lv(lv))->log_lv;
> + if (!log_lv || !(log_lv->status & MIRRORED))
> + return 1;
> +
> + old_log_count = _get_log_count(lv);
> + if (old_log_count == log_count)
> + return 1;
> +
> + /* Reducing redundancy of the log */
> + return remove_mirror_images(log_lv, log_count,
> + is_mirror_image_removable,
> + operable_pvs, 0U);
> +}
> +
> static int _lv_update_log_type(struct cmd_context *cmd,
> struct lvconvert_params *lp,
> struct logical_volume *lv,
> @@ -1218,15 +1239,23 @@ static int _lvconvert_mirrors_repair(str
> * We must adjust the log first, or the entire mirror
> * will get stuck during a suspend.
> */
> - if (!_lv_update_log_type(cmd, lp, lv, failed_pvs, new_log_count))
> + if (!_lv_update_mirrored_log(lv, failed_pvs, new_log_count))
> return 0;
>
> + if (lp->mirrors == 1)
> + new_log_count = 0;
> +
> if (failed_mirrors) {
> - if (!lv_remove_mirrors(cmd, lv, failed_mirrors, new_log_count,
> + if (!lv_remove_mirrors(cmd, lv, failed_mirrors,
> + new_log_count ? 0U : 1U,
> _is_partial_lv, NULL, 0))
> return 0;
> }
>
> + if (!_lv_update_log_type(cmd, lp, lv, failed_pvs,
> + new_log_count))
> + return 0;
> +
> if (!_reload_lv(cmd, lv))
> return 0;
>
>
> --
> lvm-devel mailing list
> lvm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/lvm-devel
More information about the lvm-devel
mailing list