summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Rockai <me@mornfall.net>2013-03-18 15:46:00 +0100
committerPetr Rockai <prockai@redhat.com>2013-04-11 12:17:33 +0200
commit85ec20cb00fab40576b3e1b802932b8a6adb3fd3 (patch)
tree52ba90a6020397a12a331f741e926de856c3d74a
parentce8eed5ef79bb55a1c889f335d1ed3e3585f2f0f (diff)
downloadlvm2-85ec20cb00fab40576b3e1b802932b8a6adb3fd3.tar.gz
metadata: Fix a pool CRC failure due to "late" ondisk copy creation.
-rw-r--r--lib/metadata/metadata.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 295305397..fe6bee1c3 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -837,12 +837,21 @@ static int _vg_metadata_snapshot(struct volume_group *vg)
if (vg->ondisk) /* we already have it */
return 1;
+ int pool_locked = dm_pool_locked(vg->vgmem);
+ if (pool_locked && !dm_pool_unlock(vg->vgmem, 0))
+ return_0;
+
cft = export_vg_to_config_tree(vg);
if (!cft)
return 0;
vg->ondisk = import_vg_from_config_tree(cft, vg->fid);
dm_config_destroy(cft);
+
+ /* recompute the pool crc */
+ if (pool_locked && !dm_pool_lock(vg->vgmem, detect_internal_vg_cache_corruption()))
+ return_0;
+
return 1;
}