mdt_pack_attr2body(info, repbody, la, mdt_object_fid(mo));
if (ma->ma_valid & MA_LOV) {
- __u32 mode;
-
- if (mdt_object_exists(mo) < 0)
- /* If it is a remote object, and we do not retrieve
- * EA back unlink reg file*/
- mode = S_IFREG;
- else
- mode = lu_object_attr(&mo->mot_obj.mo_lu);
-
- LASSERT(ma->ma_lmm_size);
- mdt_dump_lmm(D_INFO, ma->ma_lmm);
- repbody->eadatasize = ma->ma_lmm_size;
- if (S_ISREG(mode))
- repbody->valid |= OBD_MD_FLEASIZE;
- else if (S_ISDIR(mode))
- repbody->valid |= OBD_MD_FLDIREA;
- else
- LBUG();
+ CERROR("No need in LOV EA upon unlink\n");
+ dump_stack();
}
+ repbody->eadatasize = 0;
if (ma->ma_cookie_size && (ma->ma_valid & MA_COOKIE)) {
repbody->aclsize = ma->ma_cookie_size;
}
}
- ma->ma_cookie_size = req_capsule_get_size(pill, &RMF_LOGCOOKIES,
- RCL_CLIENT);
- if (ma->ma_cookie_size) {
- ma->ma_cookie = req_capsule_client_get(pill, &RMF_LOGCOOKIES);
- ma->ma_valid |= MA_COOKIE;
- }
-
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
}
ma->ma_attr_flags &= ~MDS_VTX_BYPASS;
info->mti_spec.no_create = !!req_is_replay(mdt_info_req(info));
- /* last unlink need LOV EA sent back */
- rr->rr_eadatalen = info->mti_mdt->mdt_max_mdsize;
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
ma->ma_attr_flags &= ~MDS_VTX_BYPASS;
info->mti_spec.no_create = !!req_is_replay(mdt_info_req(info));
- /* rename may contain unlink so we might need LOV EA sent back */
- rr->rr_eadatalen = info->mti_mdt->mdt_max_mdsize;
rc = mdt_dlmreq_unpack(info);
RETURN(rc);
}
+/*
+ * please see comment above LOV_MAGIC_V1_DEF
+ */
+static void mdt_fix_lov_magic(struct mdt_thread_info *info)
+{
+ struct mdt_reint_record *rr = &info->mti_rr;
+ struct lov_user_md_v1 *v1;
+
+ v1 = (void *)rr->rr_eadata;
+ LASSERT(v1);
+
+ if (unlikely(req_is_replay(mdt_info_req(info)))) {
+ if (v1->lmm_magic == LOV_USER_MAGIC_V1) {
+ v1->lmm_magic = LOV_MAGIC_V1_DEF;
+ } else if (v1->lmm_magic == __swab32(LOV_USER_MAGIC_V1)) {
+ v1->lmm_magic = __swab32(LOV_MAGIC_V1_DEF);
+ } else if (v1->lmm_magic == LOV_USER_MAGIC_V3) {
+ v1->lmm_magic = LOV_MAGIC_V3_DEF;
+ } else if (v1->lmm_magic == __swab32(LOV_USER_MAGIC_V3)) {
+ v1->lmm_magic = __swab32(LOV_MAGIC_V3_DEF);
+ }
+ }
+}
+
static int mdt_open_unpack(struct mdt_thread_info *info)
{
struct md_ucred *uc = mdt_ucred(info);
sp->u.sp_ea.eadatalen = rr->rr_eadatalen;
sp->u.sp_ea.eadata = rr->rr_eadata;
sp->no_create = !!req_is_replay(req);
+ mdt_fix_lov_magic(info);
}
/*