summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2011-03-30 14:35:00 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2011-03-30 14:35:00 +0000
commit91d865cab579154787b37aaecfba92fe4485dcbd (patch)
tree9d0fe9deac882f5cb38bed5854bec853724ce60b /tools
parente6609094f7776eac213ceab906347b5eba0b600a (diff)
downloadlvm2-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.c14
-rw-r--r--tools/vgsplit.c14
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;
}