summaryrefslogtreecommitdiffstats
path: root/lib/metadata/raid_manip.c
diff options
context:
space:
mode:
authorJonathan Earl Brassow <jbrassow@redhat.com>2011-09-13 16:33:21 +0000
committerJonathan Earl Brassow <jbrassow@redhat.com>2011-09-13 16:33:21 +0000
commit0c89ef513ad24be31649e67e05e5c2c46ef07216 (patch)
tree511d54aa8b8d9b6b8600a2c3b74c07b26db2fb79 /lib/metadata/raid_manip.c
parent8171b93700f8f6f6a646d8b894e7cd5ba7236783 (diff)
downloadlvm2-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.c6
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;
}