mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
lib: when moving segtypes, move LV bits
When we insert layer we also move status flag-bits for certain LV types, so internal volume_group structure remains consistent. (Perhaps it's misuse of 'insert_layer' function and we should have another similar function for this.) Basically we aim to maintain the same state as after reading fresh metadata out of volume group. Currently we when i.e. cache 'raid' LV - this should transfer 'raidLV' flag to _corigin LV and cache is no longer a raid. TODO: bits for stacked devices needs more exact rules.
This commit is contained in:
parent
3670f095c7
commit
e1edb5676e
@ -1,5 +1,6 @@
|
||||
Version 2.02.131 -
|
||||
=====================================
|
||||
When layering LV, move LV flags with segments.
|
||||
Ignore persistent cache if configuration changed. (2.02.127)
|
||||
Fix devices/filter to be applied before disk-accessing filters. (2.02.112)
|
||||
Make tags only when requested via 'make tags'.
|
||||
|
@ -6254,6 +6254,7 @@ int move_lv_segments(struct logical_volume *lv_to,
|
||||
struct logical_volume *lv_from,
|
||||
uint64_t set_status, uint64_t reset_status)
|
||||
{
|
||||
const uint64_t MOVE_BITS = (RAID | MIRROR | THIN_VOLUME);
|
||||
struct lv_segment *seg;
|
||||
|
||||
dm_list_iterate_items(seg, &lv_to->segments)
|
||||
@ -6271,6 +6272,16 @@ int move_lv_segments(struct logical_volume *lv_to,
|
||||
seg->status |= set_status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Move LV status bits for selected types with their segments
|
||||
* i.e. when inserting layer to cache LV, we move raid segments
|
||||
* to a new place, thus 'raid' LV property now belongs to this LV.
|
||||
*
|
||||
* Bits should match to those which appears after read from disk.
|
||||
*/
|
||||
lv_to->status |= lv_from->status & MOVE_BITS;
|
||||
lv_from->status &= ~MOVE_BITS;
|
||||
|
||||
lv_to->le_count = lv_from->le_count;
|
||||
lv_to->size = lv_from->size;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user