X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_reint.c;h=c2227e7d36c2cf1e2631d7914ed36fee046a36c0;hb=976cbeb5ff1d32e7cac54478e6ff249cffe45116;hp=60730a88455cd0fff7dea30fe2d4814322d41479;hpb=0081d9de639979c0d0e341ad6ded442b9043a379;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 60730a8..c2227e7 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -103,7 +103,7 @@ static void mdt_obj_version_get(struct mdt_thread_info *info, { LASSERT(o); LASSERT(mdt_object_exists(o) >= 0); - if (mdt_object_exists(o) > 0) + if (mdt_object_exists(o) > 0 && !mdt_object_obf(o)) *version = dt_version_get(info->mti_env, mdt_obj2dt(o)); else *version = ENOENT_VERSION; @@ -347,6 +347,9 @@ static int mdt_md_create(struct mdt_thread_info *info) rc = mdo_create(info->mti_env, next, lname, mdt_object_child(child), &info->mti_spec, ma); + if (rc == 0) + rc = mdt_attr_get_complex(info, child, ma); + if (rc == 0) { /* Return fid & attr to client. */ if (ma->ma_valid & MA_INODE) @@ -391,7 +394,7 @@ static int mdt_md_mkobj(struct mdt_thread_info *info) * recovery, just get attr in that case. */ if (mdt_object_exists(o) == 1) { - rc = mo_attr_get(info->mti_env, next, ma); + rc = mdt_attr_get_complex(info, o, ma); } else { /* * Here, NO permission check for object_create, @@ -476,7 +479,6 @@ static int mdt_reint_setattr(struct mdt_thread_info *info, struct mdt_export_data *med = &req->rq_export->exp_mdt_data; struct mdt_file_data *mfd; struct mdt_object *mo; - struct md_object *next; struct mdt_body *repbody; int som_au, rc, rc2; ENTRY; @@ -492,6 +494,9 @@ static int mdt_reint_setattr(struct mdt_thread_info *info, if (IS_ERR(mo)) GOTO(out, rc = PTR_ERR(mo)); + if (mdt_object_obf(mo)) + GOTO(out_put, rc = -EPERM); + /* start a log jounal handle if needed */ if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM)) { if ((ma->ma_attr.la_valid & LA_SIZE) || @@ -568,8 +573,7 @@ static int mdt_reint_setattr(struct mdt_thread_info *info, ma->ma_need = MA_INODE; ma->ma_valid = 0; - next = mdt_object_child(mo); - rc = mo_attr_get(info->mti_env, next, ma); + rc = mdt_attr_get_complex(info, mo, ma); if (rc != 0) GOTO(out_put, rc); @@ -764,6 +768,8 @@ static int mdt_reint_unlink(struct mdt_thread_info *info, mdt_set_capainfo(info, 1, child_fid, BYPASS_CAPA); rc = mdo_unlink(info->mti_env, mdt_object_child(mp), mdt_object_child(mc), lname, ma); + if (rc == 0 && !lu_object_is_dying(&mc->mot_header)) + rc = mdt_attr_get_complex(info, mc, ma); if (rc == 0) mdt_handle_last_unlink(info, mc, ma); @@ -1222,6 +1228,11 @@ static int mdt_reint_rename(struct mdt_thread_info *info, if (IS_ERR(mold)) GOTO(out_unlock_target, rc = PTR_ERR(mold)); + if (mdt_object_obf(mold)) { + mdt_object_put(info->mti_env, mold); + GOTO(out_unlock_target, rc = -EPERM); + } + lh_oldp = &info->mti_lh[MDT_LH_OLD]; mdt_lock_reg_init(lh_oldp, LCK_EX); rc = mdt_object_lock(info, mold, lh_oldp, MDS_INODELOCK_LOOKUP, @@ -1256,6 +1267,11 @@ static int mdt_reint_rename(struct mdt_thread_info *info, if (IS_ERR(mnew)) GOTO(out_unlock_old, rc = PTR_ERR(mnew)); + if (mdt_object_obf(mnew)) { + mdt_object_put(info->mti_env, mnew); + GOTO(out_unlock_old, rc = -EPERM); + } + rc = mdt_object_lock(info, mnew, lh_newp, MDS_INODELOCK_FULL, MDT_CROSS_LOCK); if (rc != 0) {