X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_recovery.c;h=5c955ca347a7eb381c94f20ca3722c74def1562d;hb=a2e997f0bed0ae4cfdcf6d73f8a79e3d23d28a2f;hp=2c1e2aced0790594822d5b01aaf81d85bd9f4f73;hpb=7194eb6431d2ef7245ef3b13394b60e220145187;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_recovery.c b/lustre/mdt/mdt_recovery.c index 2c1e2ac..5c955ca 100644 --- a/lustre/mdt/mdt_recovery.c +++ b/lustre/mdt/mdt_recovery.c @@ -187,6 +187,7 @@ static void mdt_reconstruct_create(struct mdt_thread_info *mti, struct ptlrpc_request *req = mdt_info_req(mti); struct obd_export *exp = req->rq_export; struct mdt_device *mdt = mti->mti_mdt; + struct md_attr *ma = &mti->mti_attr; struct mdt_object *child; struct mdt_body *body; int rc; @@ -209,11 +210,14 @@ static void mdt_reconstruct_create(struct mdt_thread_info *mti, } body = req_capsule_server_get(mti->mti_pill, &RMF_MDT_BODY); - mti->mti_attr.ma_need = MA_INODE; - mti->mti_attr.ma_valid = 0; - rc = mdt_attr_get_complex(mti, child, &mti->mti_attr); + ma->ma_need = MA_INODE; + if (S_ISDIR(ma->ma_attr.la_mode) && + (mti->mti_spec.sp_cr_flags & MDS_MKDIR_LMV)) + mdt_prep_ma_buf_from_rep(mti, child, ma, 0); + ma->ma_valid = 0; + rc = mdt_attr_get_complex(mti, child, ma); if (rc == -ENOENT) { - mdt_fake_ma(&mti->mti_attr); + mdt_fake_ma(ma); } else if (rc == -EREMOTE) { /* object was created on remote server */ if (!mdt_is_dne_client(exp)) @@ -223,8 +227,11 @@ static void mdt_reconstruct_create(struct mdt_thread_info *mti, req->rq_status = rc; body->mbo_valid |= OBD_MD_MDS; } - mdt_pack_attr2body(mti, body, &mti->mti_attr.ma_attr, - mdt_object_fid(child)); + if (ma->ma_valid & MA_LMV) { + body->mbo_eadatasize = ma->ma_lmv_size; + body->mbo_valid |= (OBD_MD_FLDIREA|OBD_MD_MEA); + } + mdt_pack_attr2body(mti, body, &ma->ma_attr, mdt_object_fid(child)); mdt_object_put(mti->mti_env, child); }