Whamcloud - gitweb
LU-1303 mds: integration lod/osp into the stack
[fs/lustre-release.git] / lustre / mdt / mdt_lib.c
index b734013..d5b125b 100644 (file)
@@ -672,25 +672,10 @@ int mdt_handle_last_unlink(struct mdt_thread_info *info, struct mdt_object *mo,
                 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;
@@ -903,13 +888,6 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info)
                 }
         }
 
-        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);
 }
@@ -1134,8 +1112,6 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info)
                 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);
@@ -1196,13 +1172,35 @@ static int mdt_rename_unpack(struct mdt_thread_info *info)
                 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);
@@ -1279,6 +1277,7 @@ static int mdt_open_unpack(struct mdt_thread_info *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);
                 }
 
                 /*