summaryrefslogtreecommitdiff
path: root/tools/vgmerge.c
diff options
context:
space:
mode:
authorDave Wysochanski <dwysocha@redhat.com>2009-09-02 21:28:43 +0000
committerDave Wysochanski <dwysocha@redhat.com>2009-09-02 21:28:43 +0000
commit3d9c2d86b0c07f6ba6b4d6924f55168d7396c56c (patch)
treead024d310e6fdf88f9a2d5b48305edaf51694ae9 /tools/vgmerge.c
parent7c86e3909cbdfeee32c09c5a2da3f17adda7df11 (diff)
downloadlvm2-3d9c2d86b0c07f6ba6b4d6924f55168d7396c56c.tar.gz
Change vgmerge behavior to open/lock first vg based on alphabetical ordering.
This enforces our alphabetical lock ordering rules for vgmerge. Author: Dave Wysochanski <dwysocha@redhat.com>
Diffstat (limited to 'tools/vgmerge.c')
-rw-r--r--tools/vgmerge.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/tools/vgmerge.c b/tools/vgmerge.c
index 9e38e6cf9..e147d27b2 100644
--- a/tools/vgmerge.c
+++ b/tools/vgmerge.c
@@ -41,14 +41,28 @@ static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to,
return ECMD_FAILED;
}
- vg_to = _vgmerge_vg_read(cmd, vg_name_to);
- if (!vg_to)
- return ECMD_FAILED;
+ if (strcmp(vg_name_to, vg_name_from) > 0)
+ lock_vg_from_first = 1;
- vg_from = _vgmerge_vg_read(cmd, vg_name_from);
- if (!vg_from) {
- unlock_and_release_vg(cmd, vg_to, vg_name_to);
- return ECMD_FAILED;
+ if (lock_vg_from_first) {
+ vg_from = _vgmerge_vg_read(cmd, vg_name_from);
+ if (!vg_from)
+ return ECMD_FAILED;
+ vg_to = _vgmerge_vg_read(cmd, vg_name_to);
+ if (!vg_to) {
+ unlock_and_release_vg(cmd, vg_from, vg_name_from);
+ return ECMD_FAILED;
+ }
+ } else {
+ vg_to = _vgmerge_vg_read(cmd, vg_name_to);
+ if (!vg_to)
+ return ECMD_FAILED;
+
+ vg_from = _vgmerge_vg_read(cmd, vg_name_from);
+ if (!vg_from) {
+ unlock_and_release_vg(cmd, vg_to, vg_name_to);
+ return ECMD_FAILED;
+ }
}
if (!vgs_are_compatible(cmd, vg_from, vg_to))