summaryrefslogtreecommitdiffstats
path: root/tools/vgmerge.c
diff options
context:
space:
mode:
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;
}