summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Rajnoha <prajnoha@redhat.com>2010-04-14 13:03:06 +0000
committerPeter Rajnoha <prajnoha@redhat.com>2010-04-14 13:03:06 +0000
commitc6469d46dd1efb975a425103a39488b7ed73d131 (patch)
treeae88b625e5ab0ff1943d958db289ff1f873f0965
parentbda398201640b2d2b0127875630b265c3d1dbd44 (diff)
downloadlvm2-c6469d46dd1efb975a425103a39488b7ed73d131.tar.gz
lvm2-c6469d46dd1efb975a425103a39488b7ed73d131.tar.xz
lvm2-c6469d46dd1efb975a425103a39488b7ed73d131.zip
Allow VGs with active LVs to be renamed.
-rw-r--r--WHATS_NEW1
-rw-r--r--tools/vgrename.c42
2 files changed, 18 insertions, 25 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 93164b83..519373a9 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 799dcb24..3c383fbd 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);