From 2d8b9935a1726bfd410c6712b2c4ee63ed6e7f88 Mon Sep 17 00:00:00 2001 From: Peter Rajnoha Date: Wed, 14 Apr 2010 13:03:06 +0000 Subject: [PATCH] Allow VGs with active LVs to be renamed. --- WHATS_NEW | 1 + tools/vgrename.c | 42 +++++++++++++++++------------------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 93164b83b..519373a90 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.63 - ================================ + Allow VGs with active LVs to be renamed. Use UUIDs instead of names while processing event handlers. Only pass visible LVs to tools in cmdline VG name/tag expansions without -a. Use typedefs for toollib process_each functions. diff --git a/tools/vgrename.c b/tools/vgrename.c index 799dcb24a..3c383fbd6 100644 --- a/tools/vgrename.c +++ b/tools/vgrename.c @@ -15,9 +15,9 @@ #include "tools.h" -static struct volume_group *vg_rename_old(struct cmd_context *cmd, - const char *vg_name_old, - const char *vgid) +static struct volume_group *_get_old_vg_for_rename(struct cmd_context *cmd, + const char *vg_name_old, + const char *vgid) { struct volume_group *vg; @@ -29,18 +29,11 @@ static struct volume_group *vg_rename_old(struct cmd_context *cmd, return_NULL; } - if (lvs_in_vg_activated(vg)) { - unlock_and_release_vg(cmd, vg, vg_name_old); - log_error("Volume group \"%s\" still has active LVs", - vg_name_old); - /* FIXME Remove this restriction */ - return NULL; - } return vg; } -static int vg_rename_new(struct cmd_context *cmd, - const char *vg_name_new) +static int _lock_new_vg_for_rename(struct cmd_context *cmd, + const char *vg_name_new) { int rc; @@ -82,7 +75,7 @@ static int vg_rename_path(struct cmd_context *cmd, const char *old_vg_path, dev_dir = cmd->dev_dir; if (!validate_vg_rename_params(cmd, vg_name_old, vg_name_new)) - return 0; + return_0; log_verbose("Checking for existing volume group \"%s\"", vg_name_old); @@ -119,22 +112,23 @@ static int vg_rename_path(struct cmd_context *cmd, const char *old_vg_path, lock_vg_old_first = 0; if (lock_vg_old_first) { - vg = vg_rename_old(cmd, vg_name_old, vgid); + vg = _get_old_vg_for_rename(cmd, vg_name_old, vgid); if (!vg) - return 0; + return_0; - if (!vg_rename_new(cmd, vg_name_new)) { + if (!_lock_new_vg_for_rename(cmd, vg_name_new)) { unlock_and_release_vg(cmd, vg, vg_name_old); - return 0; + return_0; } } else { - if (!vg_rename_new(cmd, vg_name_new)) { - return 0; - } + if (!_lock_new_vg_for_rename(cmd, vg_name_new)) + return_0; - vg = vg_rename_old(cmd, vg_name_old, vgid); - if (!vg) - return 0; + vg = _get_old_vg_for_rename(cmd, vg_name_old, vgid); + if (!vg) { + unlock_vg(cmd, vg_name_new); + return_0; + } } if (!archive(vg)) @@ -170,8 +164,6 @@ static int vg_rename_path(struct cmd_context *cmd, const char *old_vg_path, } } -/******* FIXME Rename any active LVs! *****/ - backup(vg); backup_remove(cmd, vg_name_old); -- 2.43.5