Whamcloud - gitweb
LU-13424 mdt: fix DOM entry check
[fs/lustre-release.git] / lustre / mdt / mdt_internal.h
index 6e46e8f..4b4afef 100644 (file)
@@ -670,7 +670,7 @@ static inline int mdt_lmm_dom_entry(struct lov_mds_md *lmm)
        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)
@@ -686,21 +686,22 @@ static inline int mdt_lmm_dom_entry(struct lov_mds_md *lmm)
                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;
 }