[lvm-devel] [PATCH] Remove newly created log volume if initial deactivation fails.
Dave Wysochanski
dwysocha at redhat.com
Thu Dec 3 17:49:37 UTC 2009
On Thu, 2009-12-03 at 14:31 +0100, Milan Broz wrote:
> If there is problem deactivate LV and
> _init_mirror_log is called with remove_on_failure = 1,
> remove the newly created log LV from metadata.
>
> (This can happen if there is active device with the same name
> but different UUID.)
>
> Signed-off-by: Milan Broz <mbroz at redhat.com>
> ---
> lib/metadata/mirror.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
> index c331e0e..4c24058 100644
> --- a/lib/metadata/mirror.c
> +++ b/lib/metadata/mirror.c
> @@ -256,7 +256,7 @@ static int _init_mirror_log(struct cmd_context *cmd,
> /* If the LV is active, deactivate it first. */
> if (lv_info(cmd, log_lv, &info, 0, 0) && info.exists) {
> if (!deactivate_lv(cmd, log_lv))
> - return_0;
> + goto revert_new_lv;
> was_active = 1;
> }
>
This doesn't look right based on my read of the function.
First, if we goto revert_new_lv, we do all this recovery which is based
on things that have not happened. Also, later in the function we have
this:
if (!deactivate_lv(cmd, log_lv)) {
log_error("Aborting. Failed to deactivate mirror log. "
"Manual intervention required.");
return 0;
}
Do we just need a log_error() in your place above or is the recovery wrong later?
> @@ -1354,7 +1354,7 @@ static struct logical_volume *_set_up_mirror_log(struct cmd_context *cmd,
> }
>
> if (!_init_mirror_log(cmd, log_lv, in_sync, &lv->tags, 1)) {
> - log_error("Failed to create mirror log.");
> + log_error("Failed to initialise mirror log.");
> return NULL;
> }
>
More information about the lvm-devel
mailing list