/* don't return transno along with error */
lustre_msg_set_transno(pill->rc_req->rq_repmsg, 0);
} else {
- /* now we need to pack right LOV EA */
- lmm = req_capsule_server_get(pill, &RMF_MDT_MD);
- LASSERT(req_capsule_get_size(pill, &RMF_MDT_MD,
- RCL_SERVER) ==
- info->mti_attr.ma_lmm_size);
- memcpy(lmm, info->mti_attr.ma_lmm,
- info->mti_attr.ma_lmm_size);
+ /* now we need to pack right LOV/LMV EA */
+ lmm = req_capsule_server_get(pill, &RMF_MDT_MD);
+ if (info->mti_attr.ma_valid & MA_LOV) {
+ LASSERT(req_capsule_get_size(pill, &RMF_MDT_MD,
+ RCL_SERVER) ==
+ info->mti_attr.ma_lmm_size);
+ memcpy(lmm, info->mti_attr.ma_lmm,
+ info->mti_attr.ma_lmm_size);
+ } else if (info->mti_attr.ma_valid & MA_LMV) {
+ LASSERT(req_capsule_get_size(pill, &RMF_MDT_MD,
+ RCL_SERVER) ==
+ info->mti_attr.ma_lmv_size);
+ memcpy(lmm, info->mti_attr.ma_lmv,
+ info->mti_attr.ma_lmv_size);
+ }
}
/* update mdt_max_mdsize so clients will be aware about that */
if (info->mti_mdt->mdt_max_mdsize < info->mti_attr.ma_lmm_size)
RETURN(-EFAULT);
} else {
req_capsule_extend(pill, &RQF_MDS_REINT_CREATE_RMT_ACL);
- }
+ if (S_ISDIR(attr->la_mode) &&
+ req_capsule_get_size(pill, &RMF_EADATA, RCL_CLIENT) > 0) {
+ sp->u.sp_ea.eadata =
+ req_capsule_client_get(pill, &RMF_EADATA);
+ sp->u.sp_ea.eadatalen =
+ req_capsule_get_size(pill, &RMF_EADATA,
+ RCL_CLIENT);
+ sp->sp_cr_flags |= MDS_OPEN_HAS_EA;
+ }
+ }
- rc = mdt_dlmreq_unpack(info);
- RETURN(rc);
+ rc = mdt_dlmreq_unpack(info);
+ RETURN(rc);
}
static int mdt_link_unpack(struct mdt_thread_info *info)