Whamcloud - gitweb
LU-3529 lod: create striped directory
[fs/lustre-release.git] / lustre / mdt / mdt_lib.c
index aa4c2cb..08d4809 100644 (file)
@@ -648,13 +648,21 @@ int mdt_fix_reply(struct mdt_thread_info *info)
                         /* 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)
@@ -1046,10 +1054,19 @@ static int mdt_create_unpack(struct mdt_thread_info *info)
                         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)