1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Fix vgsplit internal counting of snapshot LVs.

This commit is contained in:
Dave Wysochanski 2008-04-23 14:33:06 +00:00
parent 029d4de4be
commit 8e8baf89c0
3 changed files with 19 additions and 2 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.36 -
=================================
Fix vgsplit internal counting of snapshot LVs.
Fix internal snapshot_count when vgmerge with snapshots in source VG.
Simply clvmd-openais by using non-async saLckResourceLock.
Check lv_count in vg_validate.

View File

@ -202,7 +202,23 @@ struct volume_group {
uint32_t pv_count;
struct list pvs;
/* logical volumes */
/*
* logical volumes
* The following relationship should always hold:
* list_size(lvs) = lv_count + 2 * snapshot_count
*
* Snapshots consist of 2 instances of "struct logical_volume":
* - cow (lv_name is visible to the user)
* - snapshot (lv_name is 'snapshotN')
* Neither of these instances is reflected in lv_count, but we
* multiply the snapshot_count by 2.
*
* Mirrors consist of multiple instances of "struct logical_volume":
* - one for the mirror log
* - one for each mirror leg
* - one for the user-visible mirror LV
* all of the instances are reflected in lv_count.
*/
uint32_t lv_count;
uint32_t snapshot_count;
struct list lvs;

View File

@ -109,7 +109,7 @@ static int _move_one_lv(struct volume_group *vg_from,
if (lv->status & SNAPSHOT) {
vg_from->snapshot_count--;
vg_to->snapshot_count++;
} else {
} else if (!lv_is_cow(lv)) {
vg_from->lv_count--;
vg_to->lv_count++;
}