Whamcloud - gitweb
LU-10988 lfsck: load object attr when prepare LFSCK request 22/32522/2
authorFan Yong <fan.yong@intel.com>
Wed, 2 May 2018 16:00:40 +0000 (00:00 +0800)
committerJohn L. Hammond <john.hammond@intel.com>
Mon, 11 Jun 2018 22:16:06 +0000 (22:16 +0000)
It will avoid empty attrs in LFSCK request (lfsck_namespace_req).
The patch also shows invalid mode for dt_mode_to_dft() for debug.

Other cleanup for lfsck_namespace_striped_dir_rescan().

Lustre-change: https://review.whamcloud.com/32245
Lustre-commit: f7c354096a810df0a9333dace2f538d6dfbe486f

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I2874160d9a0c9e3084d0d3d7f365940108c82018
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Minh Diep <minh.diep@intel.com>
Reviewed-on: https://review.whamcloud.com/32522
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
lustre/lfsck/lfsck_namespace.c
lustre/lfsck/lfsck_striped_dir.c
lustre/obdclass/dt_object.c

index 2fc7b98..36098bb 100644 (file)
@@ -3964,14 +3964,19 @@ static void lfsck_namespace_close_dir(const struct lu_env *env,
        struct lfsck_instance           *lfsck  = com->lc_lfsck;
        struct lfsck_lmv                *llmv   = lfsck->li_lmv;
        struct lfsck_namespace_req      *lnr;
-       __u32                            size   =
-                               sizeof(*lnr) + LFSCK_TMPBUF_LEN;
-       bool                             wakeup = false;
+       struct lu_attr *la = &lfsck_env_info(env)->lti_la2;
+       __u32 size = sizeof(*lnr) + LFSCK_TMPBUF_LEN;
+       int rc;
+       bool wakeup = false;
        ENTRY;
 
        if (llmv == NULL)
                RETURN_EXIT;
 
+       rc = dt_attr_get(env, lfsck->li_obj_dir, la);
+       if (rc)
+               RETURN_EXIT;
+
        OBD_ALLOC(lnr, size);
        if (lnr == NULL) {
                ns->ln_striped_dirs_skipped++;
@@ -3980,7 +3985,7 @@ static void lfsck_namespace_close_dir(const struct lu_env *env,
        }
 
        lso = lfsck_assistant_object_init(env, lfsck_dto2fid(lfsck->li_obj_dir),
-                       NULL, lfsck->li_pos_current.lp_oit_cookie, true);
+                       la, lfsck->li_pos_current.lp_oit_cookie, true);
        if (IS_ERR(lso)) {
                OBD_FREE(lnr, size);
                ns->ln_striped_dirs_skipped++;
index 1a5c48f..8ccf20b 100644 (file)
@@ -1930,7 +1930,6 @@ int lfsck_namespace_striped_dir_rescan(const struct lu_env *env,
                const struct lu_fid *cfid = &lslr->lslr_fid;
                const struct lu_name *cname;
                struct linkea_data ldata = { NULL };
-               int len;
                int rc1 = 0;
                bool repair_linkea = false;
                bool repair_lmvea = false;
@@ -1945,11 +1944,12 @@ int lfsck_namespace_striped_dir_rescan(const struct lu_env *env,
                if (fid_is_zero(cfid))
                        continue;
 
-               len = snprintf(info->lti_tmpbuf, sizeof(info->lti_tmpbuf),
-                              DFID":%u", PFID(cfid), i);
-               cname = lfsck_name_get_const(env, info->lti_tmpbuf, len);
-               memcpy(lnr->lnr_name, info->lti_tmpbuf, len);
-
+               lnr->lnr_fid = *cfid;
+               lnr->lnr_namelen = snprintf(lnr->lnr_name,
+                                           lnr->lnr_size - sizeof(*lnr),
+                                           DFID":%u", PFID(cfid), i);
+               cname = lfsck_name_get_const(env, lnr->lnr_name,
+                                            lnr->lnr_namelen);
                obj = lfsck_object_find_bottom(env, lfsck, cfid);
                if (IS_ERR(obj)) {
                        if (dir == NULL) {
index c2f9224..a8f144f 100644 (file)
@@ -210,10 +210,11 @@ enum dt_format_type dt_mode_to_dft(__u32 mode)
                 result = DFT_NODE;
                 break;
         default:
-                LBUG();
-                break;
-        }
-        return result;
+               LASSERTF(0, "invalid mode %o\n", mode);
+               result = 0; /* Just for satisfying compiler. */
+               break;
+       }
+       return result;
 }
 EXPORT_SYMBOL(dt_mode_to_dft);