From: Bobi Jam Date: Wed, 5 Jun 2024 13:46:27 +0000 (+0800) Subject: LU-17908 layout: preserve non-FLR state layout flags X-Git-Tag: 2.16.51~44 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=fb790204ce3ebd26f9a93923279ddc4009f49792;p=fs%2Flustre-release.git LU-17908 layout: preserve non-FLR state layout flags lfsck and layout split/merge would set FLR state but ditch non-FLR flags in error, this patch preserves them. Signed-off-by: Bobi Jam Change-Id: I7a8717756fba09ba10635bb3fbeed6afb4ed73a8 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/55319 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Artem Blagodarenko Reviewed-by: Oleg Drokin Reviewed-by: Andreas Dilger --- diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c index 2844b21..cf0f336 100644 --- a/lustre/lfsck/lfsck_layout.c +++ b/lustre/lfsck/lfsck_layout.c @@ -1938,9 +1938,10 @@ static void lfsck_layout_update_lcm(struct lov_comp_md_v1 *lcm, __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; @@ -1949,9 +1950,12 @@ static void lfsck_layout_update_lcm(struct lov_comp_md_v1 *lcm, 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]; diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index edf893b..130d057 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -3508,7 +3508,9 @@ static int lod_declare_layout_merge(const struct lu_env *env, 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) diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index fc9dc13..c497833 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -1816,14 +1816,16 @@ static int mdd_split_ea(struct lov_comp_md_v1 *comp_v1, __u16 mirror_id, 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;