summaryrefslogtreecommitdiffstats
path: root/tools/vgmerge.c
diff options
context:
space:
mode:
authorDave Wysochanski <dwysocha@redhat.com>2009-09-02 21:27:55 +0000
committerDave Wysochanski <dwysocha@redhat.com>2009-09-02 21:27:55 +0000
commit115bc65bae2e27f5a615bc015e6ee9043c972d40 (patch)
tree266848af413d82d21325a43bdcd276ab84d0ae01 /tools/vgmerge.c
parentae4ca998a320138f2816caf74bb8eaa5d4df3cbf (diff)
downloadlvm2-115bc65bae2e27f5a615bc015e6ee9043c972d40.tar.gz
lvm2-115bc65bae2e27f5a615bc015e6ee9043c972d40.tar.xz
lvm2-115bc65bae2e27f5a615bc015e6ee9043c972d40.zip
Refactor vgmerge - introduce lock_vg_from_first flag.
Should be no functional change. Author: Dave Wysochanski <dwysocha@redhat.com>
Diffstat (limited to 'tools/vgmerge.c')
-rw-r--r--tools/vgmerge.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/vgmerge.c b/tools/vgmerge.c
index 37f6bd74..39032fb1 100644
--- a/tools/vgmerge.c
+++ b/tools/vgmerge.c
@@ -21,6 +21,7 @@ static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to,
struct volume_group *vg_to, *vg_from;
struct lv_list *lvl1, *lvl2;
int r = ECMD_FAILED;
+ int lock_vg_from_first = 0;
if (!strcmp(vg_name_to, vg_name_from)) {
log_error("Duplicate volume group name \"%s\"", vg_name_from);
@@ -116,8 +117,13 @@ static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to,
vg_from->name, vg_to->name);
r = ECMD_PROCESSED;
bad:
- unlock_and_release_vg(cmd, vg_from, vg_name_from);
- unlock_and_release_vg(cmd, vg_to, vg_name_to);
+ if (lock_vg_from_first) {
+ unlock_and_release_vg(cmd, vg_to, vg_name_to);
+ unlock_and_release_vg(cmd, vg_from, vg_name_from);
+ } else {
+ unlock_and_release_vg(cmd, vg_from, vg_name_from);
+ unlock_and_release_vg(cmd, vg_to, vg_name_to);
+ }
return r;
}