From f7c354096a810df0a9333dace2f538d6dfbe486f Mon Sep 17 00:00:00 2001 From: Fan Yong Date: Thu, 3 May 2018 00:00:40 +0800 Subject: [PATCH] LU-10988 lfsck: load object attr when prepare LFSCK request 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(). Signed-off-by: Fan Yong Change-Id: I2874160d9a0c9e3084d0d3d7f365940108c82018 Reviewed-on: https://review.whamcloud.com/32245 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/lfsck/lfsck_namespace.c | 13 +++++++++---- lustre/lfsck/lfsck_striped_dir.c | 12 ++++++------ lustre/obdclass/dt_object.c | 9 +++++---- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index fd41129..d490fd4 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -4112,14 +4112,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++; @@ -4128,7 +4133,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++; diff --git a/lustre/lfsck/lfsck_striped_dir.c b/lustre/lfsck/lfsck_striped_dir.c index a336d77..5cffac7 100644 --- a/lustre/lfsck/lfsck_striped_dir.c +++ b/lustre/lfsck/lfsck_striped_dir.c @@ -1928,7 +1928,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; @@ -1943,11 +1942,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) { diff --git a/lustre/obdclass/dt_object.c b/lustre/obdclass/dt_object.c index 0662d07..6a8b50c 100644 --- a/lustre/obdclass/dt_object.c +++ b/lustre/obdclass/dt_object.c @@ -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); -- 1.8.3.1