From: Fan Yong Date: Fri, 13 May 2016 15:44:35 +0000 (+0800) Subject: LU-8300 lfsck: pass LOC_F_NEW when create new object X-Git-Tag: 2.8.59~38 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=1b00b45a6abd419a5c5dac67fee56d6f24100d23 LU-8300 lfsck: pass LOC_F_NEW when create new object For lfsck_create_lpf() case, we know that the target object of '.lustre/lost+found/MDTxxxx' does not exist, need to pass the lu_object_conf parameter 'LOC_F_NEW' to the lower layer, then the OSD will not return -115 to the LFSCK if OI files lost. Signed-off-by: Fan Yong Change-Id: I0c348dea99e7ff98f432e09a9664c6ba46567f11 Reviewed-on: http://review.whamcloud.com/20868 Tested-by: Jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Lai Siyao Reviewed-by: Oleg Drokin --- diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h index fd3164c..9b82ca0 100644 --- a/lustre/lfsck/lfsck_internal.h +++ b/lustre/lfsck/lfsck_internal.h @@ -1234,6 +1234,16 @@ static inline u32 lfsck_dev_idx(struct lfsck_instance *lfsck) } static inline struct dt_object * +lfsck_object_find_by_dev_new(const struct lu_env *env, struct dt_device *dev, + const struct lu_fid *fid) +{ + struct lu_object_conf *conf = &lfsck_env_info(env)->lti_conf; + + conf->loc_flags = LOC_F_NEW; + return lu2dt(lu_object_find_slice(env, dt2lu_dev(dev), fid, conf)); +} + +static inline struct dt_object * lfsck_object_find_by_dev_nowait(const struct lu_env *env, struct dt_device *dev, const struct lu_fid *fid) { @@ -1307,6 +1317,20 @@ lfsck_object_find_bottom_nowait(const struct lu_env *env, } static inline struct dt_object * +lfsck_object_find_bottom_new(const struct lu_env *env, + struct lfsck_instance *lfsck, + const struct lu_fid *fid) +{ + struct dt_device *dev; + + dev = lfsck_find_dev_by_fid(env, lfsck, fid); + if (IS_ERR(dev)) + return (struct dt_object *)dev; + + return lfsck_object_find_by_dev_new(env, dev, fid); +} + +static inline struct dt_object * lfsck_object_locate(struct dt_device *dev, struct dt_object *obj) { if (lfsck_obj2dev(obj) == dev) { diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c index 0a0c483..634b451 100644 --- a/lustre/lfsck/lfsck_lib.c +++ b/lustre/lfsck/lfsck_lib.c @@ -1034,7 +1034,7 @@ static int lfsck_create_lpf(const struct lu_env *env, *cfid = bk->lb_lpf_fid; } - child = lfsck_object_find_bottom(env, lfsck, cfid); + child = lfsck_object_find_bottom_new(env, lfsck, cfid); if (IS_ERR(child)) GOTO(unlock, rc = PTR_ERR(child));