diff options
author | Jonathan Earl Brassow <jbrassow@redhat.com> | 2011-09-13 16:33:21 +0000 |
---|---|---|
committer | Jonathan Earl Brassow <jbrassow@redhat.com> | 2011-09-13 16:33:21 +0000 |
commit | 0c89ef513ad24be31649e67e05e5c2c46ef07216 (patch) | |
tree | 511d54aa8b8d9b6b8600a2c3b74c07b26db2fb79 /lib/metadata/raid_manip.c | |
parent | 8171b93700f8f6f6a646d8b894e7cd5ba7236783 (diff) | |
download | lvm2-0c89ef513ad24be31649e67e05e5c2c46ef07216.tar.gz lvm2-0c89ef513ad24be31649e67e05e5c2c46ef07216.tar.xz lvm2-0c89ef513ad24be31649e67e05e5c2c46ef07216.zip |
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.
Diffstat (limited to 'lib/metadata/raid_manip.c')
-rw-r--r-- | lib/metadata/raid_manip.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c index 19808184..d1e40026 100644 --- a/lib/metadata/raid_manip.c +++ b/lib/metadata/raid_manip.c @@ -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; } |