From ceb0db233a247001af0693fd27163076d7e25c6c Mon Sep 17 00:00:00 2001 From: Jonathan Earl Brassow Date: Tue, 13 Jul 2010 21:53:07 +0000 Subject: [PATCH] Fix for bug 612311: Split of linear provides no error msg An unhandled condition allowed the command to terminate cleanly without a warning. Added a check for the '--splitmirrors' argument to allow execution to the lower level function that has the check to see if the user is trying to split a linear device. You should now see a message if you try to use --splitmirrors on a linear device. --- tools/lvconvert.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/lvconvert.c b/tools/lvconvert.c index ffdbd07f3..77ddce809 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -861,7 +861,8 @@ static int _lvconvert_mirrors_parse_params(struct cmd_context *cmd, else if (lp->mirrors_sign == SIGN_PLUS) lp->mirrors = *old_mimage_count + lp->mirrors; else if (lp->mirrors_sign == SIGN_MINUS) - lp->mirrors = *old_mimage_count - lp->mirrors; + lp->mirrors = (*old_mimage_count > lp->mirrors) ? + *old_mimage_count - lp->mirrors: 0; else lp->mirrors += 1; @@ -876,8 +877,8 @@ static int _lvconvert_mirrors_parse_params(struct cmd_context *cmd, /* Did the user try to subtract more legs than available? */ if (lp->mirrors < 1) { - log_error("Logical volume %s only has %" PRIu32 " mirrors.", - lv->name, *old_mimage_count); + log_error("Unable to reduce images by specified amount - only %d in %s", + *old_mimage_count, lv->name); return 0; } @@ -1561,7 +1562,9 @@ static int _lvconvert_single(struct cmd_context *cmd, struct logical_volume *lv, stack; return ECMD_FAILED; } - } else if (arg_count(cmd, mirrors_ARG) || (lv->status & MIRRORED)) { + } else if (arg_count(cmd, mirrors_ARG) || + arg_count(cmd, splitmirrors_ARG) || + (lv->status & MIRRORED)) { if (!archive(lv->vg)) { stack; return ECMD_FAILED; -- 2.43.5