1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-18 10:04:20 +03:00

Changing RAID status flags to 64-bit broke some binary flag operations.

LVM_WRITE is a 32-bit flag.  Now that RAID[_IMAGE|_META] are 64-bit,
and'ing a RAID LV's status against LVM_WRITE can reset the higher order
flags.

A similar thing will affect thinp flags if not careful.
This commit is contained in:
Jonathan Earl Brassow 2011-09-13 16:33:21 +00:00
parent 8171b93700
commit 0c89ef513a
2 changed files with 6 additions and 1 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.89 -
==================================
Fix improper RAID 64-bit status flag reset when and'ing against 32-bit flag.
Fix log size calculation when only a log is being added to a mirror.
Work around resume_lv causing error LV scanning during splitmirror operation.
Add 7th lv_attr char to show the related kernel target.

View File

@ -971,7 +971,11 @@ int lv_raid_split_and_track(struct logical_volume *lv,
if (!_lv_is_on_pvs(seg_lv(seg, s), splittable_pvs))
continue;
lv_set_visible(seg_lv(seg, s));
seg_lv(seg, s)->status &= ~LVM_WRITE;
/*
* LVM_WRITE is 32-bit, if we don't '|' it with
* UINT64_C(0) it will remove all higher order flags
*/
seg_lv(seg, s)->status &= ~(UINT64_C(0) | LVM_WRITE);
break;
}