Whamcloud - gitweb
mdt: reint fixes: pack reply (only mdt_body for now)
authornikita <nikita>
Sat, 27 May 2006 15:38:00 +0000 (15:38 +0000)
committernikita <nikita>
Sat, 27 May 2006 15:38:00 +0000 (15:38 +0000)
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_reint.c

index 12c5044..374ed2a 100644 (file)
@@ -275,14 +275,26 @@ static int mdt_readpage(struct mdt_thread_info *info)
 static int mdt_reint_internal(struct mdt_thread_info *info, __u32 op)
 {
         int rc;
-
         ENTRY;
 
         OBD_FAIL_RETURN(OBD_FAIL_MDS_REINT_UNPACK, -EFAULT);
 
         rc = mdt_reint_unpack(info, op);
-        if (rc == 0)
-                rc = mdt_reint_rec(info);
+        if (rc == 0) {
+                struct mdt_reint_reply *rep;
+
+                rep = &info->mti_reint_rep;
+                rep->mrr_body = req_capsule_server_get(&info->mti_pill,
+                                                       &RMF_MDT_BODY);
+                if (rep->mrr_body != NULL)
+                        /*
+                         * XXX fill other fields in @rec with pointers to
+                         * reply buffers.
+                         */
+                        rc = mdt_reint_rec(info);
+                else
+                        rc = -EFAULT;
+        }
 
         RETURN(rc);
 }
@@ -326,26 +338,14 @@ static int mdt_reint(struct mdt_thread_info *info)
 
         req = mdt_info_req(info);
         opc = mdt_reint_opcode(info, reint_fmts);
-        if (opc < 0)
-                RETURN(opc);
-
-        OBD_FAIL_RETURN(OBD_FAIL_MDS_REINT_NET, 0);
-
-        if (opc == REINT_UNLINK || opc == REINT_RENAME)
-                info->mti_rep_buf_nr = 3;
-        else if (opc == REINT_OPEN)
-                info->mti_rep_buf_nr = 2;
-        else
-                info->mti_rep_buf_nr = 1;
-        info->mti_rep_buf_size[0] = sizeof(struct mdt_body);
-        info->mti_rep_buf_size[1] = sizeof(struct lov_mds_md); /*FIXME:See mds*/
-        info->mti_rep_buf_size[2] = sizeof(struct llog_cookie);/*FIXME:See mds*/
-        rc = lustre_pack_reply(req, info->mti_rep_buf_nr,
-                               info->mti_rep_buf_size, NULL);
-        if (rc)
-                RETURN(rc);
+        if (opc >= 0) {
+                OBD_FAIL_RETURN(OBD_FAIL_MDS_REINT_NET, 0);
 
-        rc = mdt_reint_internal(info, opc);
+                rc = req_capsule_pack(&info->mti_pill);
+                if (rc == 0)
+                        rc = mdt_reint_internal(info, opc);
+        } else
+                rc = opc;
         RETURN(rc);
 }
 
@@ -562,7 +562,7 @@ void mdt_object_unlock(struct ldlm_namespace *ns, struct mdt_object *o,
 
 struct mdt_object *mdt_object_find_lock(const struct lu_context *ctxt,
                                         struct mdt_device *d,
-                                        struct lu_fid *f,
+                                        const struct lu_fid *f,
                                         struct mdt_lock_handle *lh,
                                         __u64 ibits)
 {
@@ -1372,7 +1372,7 @@ struct lu_seq_mgr_ops seq_mgr_ops = {
  * FLD wrappers
  */
 
-static int mdt_fld_init(struct lu_context *ctx, struct mdt_device *m)
+static int mdt_fld_init(const struct lu_context *ctx, struct mdt_device *m)
 {
         struct lu_site *ls;
         int rc;
@@ -1390,16 +1390,15 @@ static int mdt_fld_init(struct lu_context *ctx, struct mdt_device *m)
         RETURN(rc);
 }
 
-static int mdt_fld_fini(struct mdt_device *m)
+static int mdt_fld_fini(const struct lu_context *ctx, struct mdt_device *m)
 {
         struct lu_site *ls = m->mdt_md_dev.md_lu_dev.ld_site;
-        int rc = 0;
 
         if (ls && ls->ls_fld) {
-                fld_server_fini(ls->ls_fld);
+                fld_server_fini(ctx, ls->ls_fld);
                 OBD_FREE_PTR(ls->ls_fld);
         }
-        RETURN(rc);
+        return 0;
 }
 
 /* device init/fini methods */
@@ -1591,7 +1590,7 @@ static void mdt_fini(struct mdt_device *m)
         /* finish the stack */
         mdt_stack_fini(&ctx, m, md2lu_dev(m->mdt_child));
 
-        mdt_fld_fini(m);
+        mdt_fld_fini(&ctx, m);
 
         LASSERT(atomic_read(&d->ld_ref) == 0);
         md_device_fini(&m->mdt_md_dev);
@@ -1673,7 +1672,7 @@ static int mdt_init0(struct mdt_device *m,
 
         /* init sequence info after device stack is initialized. */
         rc = seq_mgr_setup(&ctx, m->mdt_seq_mgr);
-        
+
         lu_context_exit(&ctx);
         if (rc)
                 GOTO(err_fini_mgr, rc);
@@ -1707,7 +1706,7 @@ err_free_ns:
         ldlm_namespace_free(m->mdt_namespace, 0);
         m->mdt_namespace = NULL;
 err_free_fld:
-        mdt_fld_fini(m);
+        mdt_fld_fini(&ctx, m);
 err_fini_mgr:
         seq_mgr_fini(m->mdt_seq_mgr);
         m->mdt_seq_mgr = NULL;
index 19d2bd9..e724743 100644 (file)
@@ -124,12 +124,18 @@ enum {
 };
 
 struct mdt_reint_record {
-        mdt_reint_t    rr_opcode;
-        struct lu_fid *rr_fid1;
-        struct lu_fid *rr_fid2;
-        char          *rr_name;
-        char          *rr_tgt;
-        __u32         rr_flags;
+        mdt_reint_t          rr_opcode;
+        const struct lu_fid *rr_fid1;
+        struct lu_fid       *rr_fid2;
+        const char          *rr_name;
+        const char          *rr_tgt;
+        __u32                rr_flags;
+};
+
+struct mdt_reint_reply {
+        struct mdt_body    *mrr_body;
+        struct lov_mds_md  *mrr_md;
+        struct llog_cookie *mrr_cookie;
 };
 
 /*
@@ -187,7 +193,7 @@ struct mdt_thread_info {
          * frequent.
          */
         struct kstatfs             mti_sfs;
-
+        struct mdt_reint_reply     mti_reint_rep;
 };
 
 int fid_lock(struct ldlm_namespace *, const struct lu_fid *,
@@ -208,7 +214,8 @@ void mdt_object_unlock(struct ldlm_namespace *, struct mdt_object *,
                        struct mdt_lock_handle *);
 
 struct mdt_object *mdt_object_find_lock(const struct lu_context *,
-                                        struct mdt_device *, struct lu_fid *,
+                                        struct mdt_device *,
+                                        const struct lu_fid *,
                                         struct mdt_lock_handle *, __u64);
 
 int mdt_reint_unpack(struct mdt_thread_info *info, __u32 op);
index 1524ee3..df9fbf8 100644 (file)
@@ -158,11 +158,14 @@ static int mdt_reint_create(struct mdt_thread_info *info)
                 else
                         rc = mdt_md_mkobj(info);
 
-                /* return fid to client. mti_body should point to
-                 * rep's body. */
-                /* XXX these fields are not used by the callers. */
-                /* info->mti_body->fid1 = *info->mti_rr.rr_fid2; */
-                /* info->mti_body->valid |= OBD_MD_FLID; */
+                /* return fid to client. */
+                if (rc == 0) {
+                        struct mdt_body *body;
+
+                        body = info->mti_reint_rep.mrr_body;
+                        body->fid1   = *info->mti_rr.rr_fid2;
+                        body->valid |= OBD_MD_FLID;
+                }
                 break;
         }
         case S_IFLNK:{