diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2011-03-30 14:35:00 +0000 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2011-03-30 14:35:00 +0000 |
commit | 91d865cab579154787b37aaecfba92fe4485dcbd (patch) | |
tree | 9d0fe9deac882f5cb38bed5854bec853724ce60b /tools | |
parent | e6609094f7776eac213ceab906347b5eba0b600a (diff) | |
download | lvm2-91d865cab579154787b37aaecfba92fe4485dcbd.tar.gz lvm2-91d865cab579154787b37aaecfba92fe4485dcbd.tar.xz lvm2-91d865cab579154787b37aaecfba92fe4485dcbd.zip |
Fix free_vg order
As now the FID management is more complex, the code inside free_vg needs
to access some parts of memory pools which were not needed before.
For this - makes the order of unlock_and_free_vg() unconditional.
Keek using unlock_and_free_vg() API function.
For properly working VG locking mechanism only the alphabeting locking
orderer needs to be preserved.
TODO: there could be few more code parts simplified when we 'officially'
support of referencies between different memory pools.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/vgmerge.c | 14 | ||||
-rw-r--r-- | tools/vgsplit.c | 14 |
2 files changed, 14 insertions, 14 deletions
diff --git a/tools/vgmerge.c b/tools/vgmerge.c index adb00a0f..6b403bf4 100644 --- a/tools/vgmerge.c +++ b/tools/vgmerge.c @@ -151,13 +151,13 @@ static int _vgmerge_single(struct cmd_context *cmd, const char *vg_name_to, vg_from->name, vg_to->name); r = ECMD_PROCESSED; bad: - if (lock_vg_from_first) { - unlock_and_free_vg(cmd, vg_to, vg_name_to); - unlock_and_free_vg(cmd, vg_from, vg_name_from); - } else { - unlock_and_free_vg(cmd, vg_from, vg_name_from); - unlock_and_free_vg(cmd, vg_to, vg_name_to); - } + /* + * Note: as vg_to is referencing moved elements from vg_from + * the order of free_vg calls is mandatory. + */ + unlock_and_free_vg(cmd, vg_to, vg_name_to); + unlock_and_free_vg(cmd, vg_from, vg_name_from); + return r; } diff --git a/tools/vgsplit.c b/tools/vgsplit.c index b97db97b..b0494a0d 100644 --- a/tools/vgsplit.c +++ b/tools/vgsplit.c @@ -487,12 +487,12 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv) r = ECMD_PROCESSED; bad: - if (lock_vg_from_first) { - unlock_and_free_vg(cmd, vg_to, vg_name_to); - unlock_and_free_vg(cmd, vg_from, vg_name_from); - } else { - unlock_and_free_vg(cmd, vg_from, vg_name_from); - unlock_and_free_vg(cmd, vg_to, vg_name_to); - } + /* + * Note: as vg_to is referencing moved elements from vg_from + * the order of free_vg calls is mandatory. + */ + unlock_and_free_vg(cmd, vg_to, vg_name_to); + unlock_and_free_vg(cmd, vg_from, vg_name_from); + return r; } |