struct lov_comp_md_v1 *comp_v1;
struct lov_mds_md *v1;
__u32 off;
- bool has_dom = true;
+ bool has_dom = false, has_ost = false;
int i;
if (le32_to_cpu(lmm->lmm_magic) != LOV_MAGIC_COMP_V1)
return LMM_NO_DOM;
for (i = 0; i < le16_to_cpu(comp_v1->lcm_entry_count); i++) {
- int j;
+ struct lov_comp_md_entry_v1 *lcme;
- off = le32_to_cpu(comp_v1->lcm_entries[i].lcme_offset);
+ lcme = &comp_v1->lcm_entries[i];
+ if (!(le32_to_cpu(lcme->lcme_flags) & LCME_FL_INIT))
+ continue;
+
+ off = le32_to_cpu(lcme->lcme_offset);
v1 = (struct lov_mds_md *)((char *)comp_v1 + off);
if (lov_pattern(le32_to_cpu(v1->lmm_pattern)) ==
LOV_PATTERN_MDT)
has_dom = true;
-
- for (j = 0; j < le16_to_cpu(v1->lmm_stripe_count); j++) {
- /* if there is any object on OST */
- if (le32_to_cpu(v1->lmm_objects[j].l_ost_idx) !=
- (__u32)-1UL)
- return LMM_DOM_OST;
- }
+ else
+ has_ost = true;
+ if (has_dom && has_ost)
+ return LMM_DOM_OST;
}
return has_dom ? LMM_DOM_ONLY : LMM_NO_DOM;
}