__u64 end = le64_to_cpu(lcme->lcme_extent.e_end);
__u32 gen = version + range;
__u32 tmp_gen;
- int i;
__u16 count = le16_to_cpu(lcm->lcm_entry_count);
__u16 flags = le16_to_cpu(lcm->lcm_flags);
+ __u16 flr_state = flags & LCM_FL_FLR_MASK;
+ int i;
if (!gen)
gen = 1;
lcm->lcm_layout_gen = cpu_to_le32(gen);
if (range)
- lcm->lcm_flags = cpu_to_le16(LCM_FL_WRITE_PENDING);
- else if (flags == LCM_FL_NONE && le16_to_cpu(lcm->lcm_mirror_count) > 0)
- lcm->lcm_flags = cpu_to_le16(LCM_FL_RDONLY);
+ lcm->lcm_flags = cpu_to_le16((flags & ~LCM_FL_FLR_MASK) |
+ LCM_FL_WRITE_PENDING);
+ else if (flr_state == LCM_FL_NONE &&
+ le16_to_cpu(lcm->lcm_mirror_count) > 0)
+ lcm->lcm_flags = cpu_to_le16((flags & ~LCM_FL_FLR_MASK) |
+ LCM_FL_RDONLY);
for (i = 0; i < count; i++) {
tmp = &lcm->lcm_entries[i];
lcm->lcm_entry_count = cpu_to_le16(cur_entry_count + merge_entry_count);
lcm->lcm_mirror_count = cpu_to_le16(mirror_count);
if ((le16_to_cpu(lcm->lcm_flags) & LCM_FL_FLR_MASK) == LCM_FL_NONE)
- lcm->lcm_flags = cpu_to_le32(LCM_FL_RDONLY);
+ lcm->lcm_flags = cpu_to_le16((le16_to_cpu(lcm->lcm_flags) &
+ ~LCM_FL_FLR_MASK) |
+ LCM_FL_RDONLY);
rc = lod_striping_reload(env, lo, buf, 0);
if (rc)
comp_rem->lcm_entry_count = cpu_to_le32(comp_cnt - count);
comp_rem->lcm_size = cpu_to_le32(lmm_size - lmm_size_vic);
if (!comp_rem->lcm_mirror_count)
- comp_rem->lcm_flags = cpu_to_le16(LCM_FL_NONE);
+ comp_rem->lcm_flags = cpu_to_le16(comp_rem->lcm_flags &
+ ~LCM_FL_FLR_MASK);
memset(comp_vic, 0, sizeof(*comp_v1));
comp_vic->lcm_magic = cpu_to_le32(LOV_MAGIC_COMP_V1);
comp_vic->lcm_mirror_count = 0;
comp_vic->lcm_entry_count = cpu_to_le32(count);
comp_vic->lcm_size = cpu_to_le32(lmm_size_vic + sizeof(*comp_vic));
- comp_vic->lcm_flags = cpu_to_le16(LCM_FL_NONE);
+ comp_vic->lcm_flags = cpu_to_le16(comp_vic->lcm_flags &
+ ~LCM_FL_FLR_MASK);
comp_vic->lcm_layout_gen = 0;
offset = sizeof(*comp_v1) + sizeof(*entry) * comp_cnt;