diff options
author | Petr Rockai <me@mornfall.net> | 2013-03-18 15:46:00 +0100 |
---|---|---|
committer | Petr Rockai <prockai@redhat.com> | 2013-04-11 12:17:33 +0200 |
commit | 85ec20cb00fab40576b3e1b802932b8a6adb3fd3 (patch) | |
tree | 52ba90a6020397a12a331f741e926de856c3d74a | |
parent | ce8eed5ef79bb55a1c889f335d1ed3e3585f2f0f (diff) | |
download | lvm2-85ec20cb00fab40576b3e1b802932b8a6adb3fd3.tar.gz |
metadata: Fix a pool CRC failure due to "late" ondisk copy creation.
-rw-r--r-- | lib/metadata/metadata.c | 9 |
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; } |