Whamcloud - gitweb
MDT updates due to md_attr changes.
authortappro <tappro>
Wed, 19 Jul 2006 07:59:53 +0000 (07:59 +0000)
committertappro <tappro>
Wed, 19 Jul 2006 07:59:53 +0000 (07:59 +0000)
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_lib.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_reint.c

index 55509a9..5f20021 100644 (file)
@@ -202,7 +202,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
         struct md_object        *next = mdt_object_child(o);
         const struct mdt_body   *reqbody = info->mti_body;
         struct ptlrpc_request   *req = mdt_info_req(info);
-        struct lu_attr          *la = &info->mti_attr;
+        struct lu_attr          *la = &info->mti_attr.ma_attr;
         struct req_capsule      *pill = &info->mti_pill;
         const struct lu_context *ctxt = info->mti_ctxt;
         struct mdt_body         *repbody;
@@ -619,12 +619,12 @@ static int mdt_sync(struct mdt_thread_info *info)
                                 next = mdt_object_child(info->mti_object);
                                 fid = mdt_object_fid(info->mti_object);
                                 rc = mo_attr_get(info->mti_ctxt,
-                                                 next, &info->mti_attr);
+                                                 next, &info->mti_attr.ma_attr);
                                 if (rc == 0) {
                                         body = req_capsule_server_get(pill, 
                                                                 &RMF_MDT_BODY);
                                         mdt_pack_attr2body(body, 
-                                                           &info->mti_attr, 
+                                                           &info->mti_attr.ma_attr
                                                            fid);
                                 }
                         }
@@ -739,7 +739,7 @@ int fid_lock(struct ldlm_namespace *ns, const struct lu_fid *f,
              ldlm_policy_data_t *policy,
              struct ldlm_res_id *res_id)
 {
-        int flags = 0;
+        int flags = 0; /*XXX: LDLM_FL_LOCAL_ONLY?*/
         int rc;
 
         LASSERT(ns != NULL);
@@ -1109,18 +1109,13 @@ void mdt_lock_handle_fini(struct mdt_lock_handle *lh)
 static void mdt_thread_info_init(struct ptlrpc_request *req,
                                  struct mdt_thread_info *info)
 {
-        memset(info, 0, sizeof *info);
-/*
         int i;
-        memset(&info->mti_rr, 0, sizeof info->mti_rr);
-        memset(&info->mti_attr, 0, sizeof info->mti_attr);
 
-        for (i = 0; i < ARRAY_SIZE(info->mti_rep_buf_size); i++)
-                info->mti_rep_buf_size[i] = 0;
-        info->mti_rep_buf_nr = i;
+        memset(info, 0, sizeof(*info));
+        
+        info->mti_rep_buf_nr = ARRAY_SIZE(info->mti_rep_buf_size);
         for (i = 0; i < ARRAY_SIZE(info->mti_lh); i++)
                 mdt_lock_handle_init(&info->mti_lh[i]);
-*/
 
         info->mti_fail_id = OBD_FAIL_MDS_ALL_REPLY_NET;
         info->mti_ctxt = req->rq_svc_thread->t_ctx;
@@ -1377,7 +1372,6 @@ static int mdt_handle(struct ptlrpc_request *req)
         ctx = req->rq_svc_thread->t_ctx;
         LASSERT(ctx != NULL);
         LASSERT(ctx->lc_thread == req->rq_svc_thread);
-
         info = lu_context_key_get(ctx, &mdt_thread_key);
         LASSERT(info != NULL);
 
index b48ca65..97fbaff 100644 (file)
@@ -210,7 +210,7 @@ struct mdt_thread_info {
         /*
          * Object attributes.
          */
-        struct lu_attr             mti_attr;
+        struct md_attr             mti_attr;
         /*
          * reint record. Containing information for reint operations.
          */
index 49b40d3..5968309 100644 (file)
 
 #include "mdt_internal.h"
 
-/* if object is dying, pack the lov/llog data */
+/* if object is dying, pack the lov/llog data,
+ * parameter info->mti_attr should be valid at this point! */
 int mdt_handle_last_unlink(struct mdt_thread_info *info,
                            struct mdt_object *mo, const struct req_format *fmt)
 {
         struct mdt_body *body;
+        struct lu_attr *la = &info->mti_attr.ma_attr;
         int rc = 0;
         ENTRY;
  
-        rc = mo_attr_get(info->mti_ctxt, mdt_object_child(mo),
-                         &info->mti_attr);
-        if (rc)
-                RETURN(rc);
-
         body = req_capsule_server_get(&info->mti_pill,
                                       &RMF_MDT_BODY);
-        mdt_pack_attr2body(body, &info->mti_attr, mdt_object_fid(mo));
+        mdt_pack_attr2body(body, la, mdt_object_fid(mo));
         
         /* if last unlinked object reference so client should destroy ost
          * objects*/
-        if (S_ISREG(info->mti_attr.la_mode) &&
-            info->mti_attr.la_nlink == 0 && mo->mot_header.loh_ref == 1) {
+        if (S_ISREG(la->la_mode) &&
+            la->la_nlink == 0 && mo->mot_header.loh_ref == 1) {
                 struct lov_mds_md  *lmm;
                 
-                CERROR("Last object!\n");
                 /* reply should contains more data,
                  * * so we need to extend it */
                 req_capsule_extend(&info->mti_pill, fmt);
@@ -94,7 +90,7 @@ int mdt_handle_last_unlink(struct mdt_thread_info *info,
 static int mdt_setattr_unpack(struct mdt_thread_info *info)
 {
         struct mdt_rec_setattr *rec;
-        struct lu_attr *attr = &info->mti_attr;
+        struct lu_attr *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         struct req_capsule *pill = &info->mti_pill;
         ENTRY;
@@ -135,7 +131,7 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info)
 static int mdt_create_unpack(struct mdt_thread_info *info)
 {
         struct mdt_rec_create *rec;
-        struct lu_attr *attr = &info->mti_attr;
+        struct lu_attr *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         struct req_capsule *pill = &info->mti_pill;
         int result = 0;
@@ -164,7 +160,7 @@ static int mdt_create_unpack(struct mdt_thread_info *info)
 static int mdt_link_unpack(struct mdt_thread_info *info)
 {
         struct mdt_rec_link *rec;
-        struct lu_attr *attr = &info->mti_attr;
+        struct lu_attr *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         struct req_capsule *pill = &info->mti_pill;
         ENTRY;
@@ -189,7 +185,7 @@ static int mdt_link_unpack(struct mdt_thread_info *info)
 static int mdt_unlink_unpack(struct mdt_thread_info *info)
 {
         struct mdt_rec_unlink *rec;
-        struct lu_attr *attr = &info->mti_attr;
+        struct lu_attr *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         struct req_capsule *pill = &info->mti_pill;
         ENTRY;
@@ -215,7 +211,7 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info)
 static int mdt_rename_unpack(struct mdt_thread_info *info)
 {
         struct mdt_rec_rename *rec;
-        struct lu_attr *attr = &info->mti_attr;
+        struct lu_attr *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         struct req_capsule *pill = &info->mti_pill;
         ENTRY;
@@ -243,7 +239,7 @@ static int mdt_rename_unpack(struct mdt_thread_info *info)
 static int mdt_open_unpack(struct mdt_thread_info *info)
 {
         struct mdt_rec_create   *rec;
-        struct lu_attr          *attr = &info->mti_attr;
+        struct lu_attr          *attr = &info->mti_attr.ma_attr;
         struct req_capsule      *pill = &info->mti_pill;
         struct mdt_reint_record *rr   = &info->mti_rr;
         int result;
index ed4f35e..137119a 100644 (file)
@@ -79,7 +79,7 @@ static int mdt_mfd_open(struct mdt_thread_info *info,
         struct mdt_file_data   *mfd;
         struct mdt_body        *repbody;
         struct lov_mds_md      *lmm = NULL;
-        struct lu_attr         *attr = &info->mti_attr;
+        struct lu_attr         *attr = &info->mti_attr.ma_attr;
         struct ptlrpc_request  *req = mdt_info_req(info);
         int                     rc = 0;
         ENTRY;
@@ -230,6 +230,7 @@ int mdt_reint_open(struct mdt_thread_info *info)
         struct mdt_lock_handle *lh;
         struct ldlm_reply      *ldlm_rep;
         struct lu_fid          *child_fid = &info->mti_tmp_fid1;
+        struct lu_attr         *attr = &info->mti_attr.ma_attr;
         int                     result;
         int                     created = 0;
         struct mdt_reint_record *rr = &info->mti_rr;
@@ -237,8 +238,7 @@ int mdt_reint_open(struct mdt_thread_info *info)
 
         if (strlen(rr->rr_name) == 0) {
                 /* reint partial remote open */
-                RETURN(mdt_open_by_fid(info, rr->rr_fid1, 
-                                       info->mti_attr.la_flags));
+                RETURN(mdt_open_by_fid(info, rr->rr_fid1, attr->la_flags));
         }
 
         /* we now have no resent message, so it must be an intent */
@@ -266,13 +266,13 @@ int mdt_reint_open(struct mdt_thread_info *info)
 
         if (result == -ENOENT) {
                 intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
-                if (!(info->mti_attr.la_flags & MDS_OPEN_CREAT))
+                if (!(attr->la_flags & MDS_OPEN_CREAT))
                         GOTO(out_parent, result);
                 *child_fid = *info->mti_rr.rr_fid2;
         } else {
                 intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
-                if (info->mti_attr.la_flags & MDS_OPEN_EXCL &&
-                    info->mti_attr.la_flags & MDS_OPEN_CREAT)
+                if (attr->la_flags & MDS_OPEN_EXCL &&
+                    attr->la_flags & MDS_OPEN_CREAT)
                         GOTO(out_parent, result = -EEXIST);
                 /* child_fid is filled by mdo_lookup(). */
                 LASSERT(lu_fid_eq(child_fid, info->mti_rr.rr_fid2));
@@ -297,14 +297,15 @@ int mdt_reint_open(struct mdt_thread_info *info)
         }
 
         /* Open it now. */
-        result = mdt_mfd_open(info, child, info->mti_attr.la_flags);
+        result = mdt_mfd_open(info, child, attr->la_flags);
         intent_set_disposition(ldlm_rep, DISP_OPEN_OPEN);
         GOTO(finish_open, result);
 
 finish_open:
-        if (result != 0 && result != -EREMOTE && created) {
+        if (result != 0 && created) {
                 mdo_unlink(info->mti_ctxt, mdt_object_child(parent),
-                           mdt_object_child(child), rr->rr_name);
+                           mdt_object_child(child), rr->rr_name,
+                           &info->mti_attr);
         } 
 out_child:
         mdt_object_put(info->mti_ctxt, child);
index 0c4a94a..893bff4 100644 (file)
@@ -44,7 +44,7 @@ static int mdt_md_create(struct mdt_thread_info *info)
         struct mdt_object      *child;
         struct mdt_lock_handle *lh;
         struct mdt_body        *repbody;
-        struct lu_attr         *attr = &info->mti_attr;
+        struct lu_attr         *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         int rc;
         ENTRY;
@@ -64,7 +64,7 @@ static int mdt_md_create(struct mdt_thread_info *info)
                 struct md_object *next = mdt_object_child(parent);
 
                 rc = mdo_create(info->mti_ctxt, next, rr->rr_name,
-                                mdt_object_child(child), rr->rr_tgt, attr);
+                                mdt_object_child(child), rr->rr_tgt, &info->mti_attr);
                 if (rc == 0) {
                         /* return fid & attr to client. attr is over-written!*/
                         rc = mo_attr_get(info->mti_ctxt,
@@ -110,9 +110,10 @@ static int mdt_md_mkobj(struct mdt_thread_info *info)
                         /* return fid to client. */
                         rc = mo_attr_get(info->mti_ctxt,
                                          next,
-                                         &info->mti_attr);
+                                         &info->mti_attr.ma_attr);
                         if (rc == 0) {
-                                mdt_pack_attr2body(repbody, &info->mti_attr,
+                                mdt_pack_attr2body(repbody,
+                                                   &info->mti_attr.ma_attr,
                                                    mdt_object_fid(o));
                         }
                 }
@@ -130,7 +131,7 @@ static int mdt_md_mkobj(struct mdt_thread_info *info)
  * We use the ATTR_FROM_OPEN flag to tell these cases apart. */
 static int mdt_reint_setattr(struct mdt_thread_info *info)
 {
-        struct lu_attr          *attr = &info->mti_attr;
+        struct lu_attr          *attr = &info->mti_attr.ma_attr;
         struct mdt_reint_record *rr = &info->mti_rr;
         struct ptlrpc_request   *req = mdt_info_req(info);
         struct mdt_object       *mo;
@@ -207,7 +208,7 @@ static int mdt_reint_create(struct mdt_thread_info *info)
         int rc;
         ENTRY;
 
-        switch (info->mti_attr.la_mode & S_IFMT) {
+        switch (info->mti_attr.ma_attr.la_mode & S_IFMT) {
         case S_IFREG:
         case S_IFDIR:{
                 if (strlen(info->mti_rr.rr_name) > 0)
@@ -262,7 +263,8 @@ static int mdt_reint_unlink(struct mdt_thread_info *info)
 
         if (strlen(rr->rr_name) == 0) {
                 /* remote partial operation */
-                rc = mo_ref_del(info->mti_ctxt, mdt_object_child(mp));
+                rc = mo_ref_del(info->mti_ctxt, mdt_object_child(mp), 
+                                &info->mti_attr);
                 GOTO(out_unlock_parent, rc);
         }
 
@@ -286,7 +288,7 @@ static int mdt_reint_unlink(struct mdt_thread_info *info)
         /* step 4: delete it */
         /* cmm will take care if child is local or remote */
         rc = mdo_unlink(info->mti_ctxt, mdt_object_child(mp),
-                        mdt_object_child(mc), rr->rr_name);
+                        mdt_object_child(mc), rr->rr_name, &info->mti_attr);
         
         if (rc)
                 GOTO(out_unlock_child, rc);