diff options
author | Dave Wysochanski <dwysocha@redhat.com> | 2009-09-02 21:28:43 +0000 |
---|---|---|
committer | Dave Wysochanski <dwysocha@redhat.com> | 2009-09-02 21:28:43 +0000 |
commit | 3d9c2d86b0c07f6ba6b4d6924f55168d7396c56c (patch) | |
tree | ad024d310e6fdf88f9a2d5b48305edaf51694ae9 /tools/vgmerge.c | |
parent | 7c86e3909cbdfeee32c09c5a2da3f17adda7df11 (diff) | |
download | lvm2-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.c | 28 |
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)) |