Whamcloud - gitweb
LU-4719 mdt: Don't try to print non-existent objects 21/10021/2
authorJames Nunez <james.a.nunez@intel.com>
Fri, 18 Apr 2014 18:57:27 +0000 (12:57 -0600)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 29 Apr 2014 00:17:04 +0000 (00:17 +0000)
mdt_dump_lmm() needs to make sure it's not trying to print
objects for a default striping from a directory, since there
are not objects in this case.

Return early if the D_INFO debug mask is disenabled, so it
doesn't iterate through the LOV/LMV layout at all.  That is
just a waste of effort.

Lustre-change: http://review.whamcloud.com/#/c/9520
Lustre-commit: ebfc6f4b54961e5e0762af7d2555f2dc5d1e1ec3

Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: James Nunez <james.a.nunez@intel.com>
Change-Id: Ifbda7c0bfdec74c5ee4c097ea24613a4ce692572
Reviewed-on: http://review.whamcloud.com/10021
Tested-by: Jenkins
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Matt Ezell <ezellma@ornl.gov>
Tested-by: Maloo <hpdd-maloo@intel.com>
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_lib.c

index e11d6b1..9aae1eb 100644 (file)
@@ -812,13 +812,13 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
         if (mdt_body_has_lov(la, reqbody)) {
                 if (ma->ma_valid & MA_LOV) {
                         LASSERT(ma->ma_lmm_size);
-                        mdt_dump_lmm(D_INFO, ma->ma_lmm);
                         repbody->eadatasize = ma->ma_lmm_size;
                         if (S_ISDIR(la->la_mode))
                                 repbody->valid |= OBD_MD_FLDIREA;
                         else
-                                repbody->valid |= OBD_MD_FLEASIZE;
-                }
+                               repbody->valid |= OBD_MD_FLEASIZE;
+                       mdt_dump_lmm(D_INFO, ma->ma_lmm, repbody->valid);
+               }
                 if (ma->ma_valid & MA_LMV) {
                         LASSERT(S_ISDIR(la->la_mode));
                         repbody->eadatasize = ma->ma_lmv_size;
index f108b22..a4e5fdd 100644 (file)
@@ -834,7 +834,7 @@ struct lu_buf *mdt_buf(const struct lu_env *env, void *area, ssize_t len);
 const struct lu_buf *mdt_buf_const(const struct lu_env *env,
                                    const void *area, ssize_t len);
 
-void mdt_dump_lmm(int level, const struct lov_mds_md *lmm);
+void mdt_dump_lmm(int level, const struct lov_mds_md *lmm, __u64 valid);
 
 int mdt_check_ucred(struct mdt_thread_info *);
 int mdt_init_ucred(struct mdt_thread_info *, struct mdt_body *);
index a92089a..b3f9524 100644 (file)
@@ -529,26 +529,33 @@ int mdt_init_ucred_reint(struct mdt_thread_info *info)
 }
 
 /* copied from lov/lov_ea.c, just for debugging, will be removed later */
-void mdt_dump_lmm(int level, const struct lov_mds_md *lmm)
+void mdt_dump_lmm(int level, const struct lov_mds_md *lmm, __u64 valid)
 {
-        const struct lov_ost_data_v1 *lod;
-        int                           i;
-        __u16                         count;
+       const struct lov_ost_data_v1    *lod;
+       int                              i;
+       __u16                            count;
 
-        count = le16_to_cpu(((struct lov_user_md*)lmm)->lmm_stripe_count);
+       if (likely(!cfs_cdebug_show(level, DEBUG_SUBSYSTEM)))
+               return;
+
+       count = le16_to_cpu(((struct lov_user_md *)lmm)->lmm_stripe_count);
 
        CDEBUG(level, "objid "DOSTID", magic 0x%08X, pattern %#X\n",
               POSTID(&lmm->lmm_oi), le32_to_cpu(lmm->lmm_magic),
               le32_to_cpu(lmm->lmm_pattern));
-        CDEBUG(level,"stripe_size=0x%x, stripe_count=0x%x\n",
-               le32_to_cpu(lmm->lmm_stripe_size), count);
-        if (count == LOV_ALL_STRIPES ||
+       CDEBUG(level, "stripe_size=0x%x, stripe_count=0x%x\n",
+              le32_to_cpu(lmm->lmm_stripe_size), count);
+
+       /* If it's a directory or a released file, then there are
+        * no actual objects to print, so bail out. */
+       if (valid & OBD_MD_FLDIREA ||
            le32_to_cpu(lmm->lmm_pattern) & LOV_PATTERN_F_RELEASED)
-                return;
+               return;
 
        LASSERT(count <= LOV_MAX_STRIPE_COUNT);
        for (i = 0, lod = lmm->lmm_objects; i < count; i++, lod++) {
-               struct ost_id   oi;
+               struct ost_id oi;
+
                ostid_le_to_cpu(&lod->l_ost_oi, &oi);
                CDEBUG(level, "stripe %u idx %u subobj "DOSTID"\n",
                       i, le32_to_cpu(lod->l_ost_idx), POSTID(&oi));