Whamcloud - gitweb
1. modified the code to #colibri coding guideline.
authorhuanghua <huanghua>
Thu, 27 Apr 2006 12:11:57 +0000 (12:11 +0000)
committerhuanghua <huanghua>
Thu, 27 Apr 2006 12:11:57 +0000 (12:11 +0000)
2. put mdt_reint_record into mdt_thread_info to avoid dynamic memory allocation.

lustre/include/linux/lustre_mdt.h
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_lib.c
lustre/mdt/mdt_reint.c

index 8b9af68..23206ab 100644 (file)
 
 
 struct mdt_reint_record {
-        __u32 ur_opcode;
-        struct lu_fid *ur_fid1;
-        struct lu_fid *ur_fid2;
-        int ur_namelen;
-        char *ur_name;
-        int ur_tgtlen;
-        char *ur_tgt;
-        int ur_eadatalen;
-        void *ur_eadata;
-        int ur_cookielen;
-        struct llog_cookie *ur_logcookies;
-        struct iattr ur_iattr;
-        struct lvfs_ucred ur_uc;
-        __u64 ur_rdev;
-        __u64 ur_time;
-        __u32 ur_mode;
-        __u32 ur_flags;
-        struct lvfs_grp_hash_entry *ur_grp_entry;
+        __u32 rr_opcode;
+        struct lu_fid *rr_fid1;
+        struct lu_fid *rr_fid2;
+        int rr_namelen;
+        char *rr_name;
+        int rr_tgtlen;
+        char *rr_tgt;
+        int rr_eadatalen;
+        void *rr_eadata;
+        int rr_cookielen;
+        struct llog_cookie *rr_logcookies;
+        struct lvfs_ucred rr_uc;
+        __u64 rr_rdev;
+        __u64 rr_time;
+        __u32 rr_mode;
+        __u32 rr_flags;
 };
 
-/* file data for open files on MDT */
-struct mdt_file_data {
-        struct portals_handle mfd_handle; /* must be first */
-        atomic_t              mfd_refcount;
-        struct list_head      mfd_list; /* protected by med_open_lock */
-        __u64                 mfd_xid;
-        int                   mfd_mode;
-        struct dentry        *mfd_dentry;
-};
-
-
-/* ioctls for trying requests */
-#define IOC_REQUEST_TYPE                   'f'
-#define IOC_REQUEST_MIN_NR                 30
-
-#define IOC_REQUEST_GETATTR             _IOWR('f', 30, long)
-#define IOC_REQUEST_READPAGE            _IOWR('f', 31, long)
-#define IOC_REQUEST_SETATTR             _IOWR('f', 32, long)
-#define IOC_REQUEST_CREATE              _IOWR('f', 33, long)
-#define IOC_REQUEST_OPEN                _IOWR('f', 34, long)
-#define IOC_REQUEST_CLOSE               _IOWR('f', 35, long)
-#define IOC_REQUEST_MAX_NR               35
-
 #endif
index 0ce79af..473ace2 100644 (file)
@@ -77,22 +77,21 @@ static int mdt_getstatus(struct mdt_thread_info *info,
                          struct ptlrpc_request *req, int offset)
 {
         struct md_device *next  = info->mti_mdt->mdt_child;
-        struct mdt_body  *body;
-        int               size = sizeof *body;
         int               result;
 
         ENTRY;
 
-        result = lustre_pack_reply(req, 1, &size, NULL);
+        info->mti_rep_buf_size[0] = sizeof (struct mdt_body);
+        result = lustre_pack_reply(req, 1, info->mti_rep_buf_size, NULL);
         if (result)
                 CERROR(LUSTRE_MDT0_NAME" out of memory for message: size=%d\n",
-                       size);
+                       sizeof (struct mdt_body));
         else if (OBD_FAIL_CHECK(OBD_FAIL_MDS_GETSTATUS_PACK))
                 result = -ENOMEM;
         else {
-                body = lustre_msg_buf(req->rq_repmsg, 0, sizeof *body);
+                info->mti_body = lustre_msg_buf(req->rq_repmsg, 0, sizeof (struct mdt_body));
                 result = next->md_ops->mdo_root_get(info->mti_ctxt,
-                                                    next, &body->fid1);
+                                                    next, &info->mti_body->fid1);
         }
 
         /* the last_committed and last_xid fields are filled in for all
@@ -106,24 +105,28 @@ static int mdt_statfs(struct mdt_thread_info *info,
 {
         struct md_device  *next  = info->mti_mdt->mdt_child;
         struct obd_statfs *osfs;
-        struct kstatfs    sfs;
+        struct kstatfs    *sfs;
         int               result;
-        int               size = sizeof(struct obd_statfs);
 
         ENTRY;
 
-        result = lustre_pack_reply(req, 1, &size, NULL);
+        info->mti_rep_buf_size[0] = sizeof(struct obd_statfs);
+        result = lustre_pack_reply(req, 1, info->mti_rep_buf_size, NULL);
         if (result)
                 CERROR(LUSTRE_MDT0_NAME" out of memory for statfs: size=%d\n",
-                       size);
+                       sizeof(struct obd_statfs));
         else if (OBD_FAIL_CHECK(OBD_FAIL_MDS_STATFS_PACK)) {
                 CERROR(LUSTRE_MDT0_NAME": statfs lustre_pack_reply failed\n");
                 result = -ENOMEM;
         } else {
-                osfs = lustre_msg_buf(req->rq_repmsg, 0, size);
+                osfs = lustre_msg_buf(req->rq_repmsg, 0,  sizeof(struct obd_statfs));
+                OBD_ALLOC_PTR(sfs);
+                if(sfs == NULL)
+                        RETURN(-ENOMEM);
                 /* XXX max_age optimisation is needed here. See mds_statfs */
-                result = next->md_ops->mdo_statfs(info->mti_ctxt, next, &sfs);
-                statfs_pack(osfs, &sfs);
+                result = next->md_ops->mdo_statfs(info->mti_ctxt, next, sfs);
+                statfs_pack(osfs, sfs);
+                OBD_FREE_PTR(sfs);
         }
 
         RETURN(result);
@@ -154,18 +157,17 @@ static void mdt_pack_attr2body(struct mdt_body *b, struct lu_attr *attr)
 static int mdt_getattr(struct mdt_thread_info *info,
                        struct ptlrpc_request *req, int offset)
 {
-        struct mdt_body *body;
-        int              size = sizeof (*body);
         int              result;
 
         LASSERT(info->mti_object != NULL);
 
         ENTRY;
 
-        result = lustre_pack_reply(req, 1, &size, NULL);
+        info->mti_rep_buf_size[0] = sizeof(struct mdt_body);
+        result = lustre_pack_reply(req, 1, info->mti_rep_buf_size, NULL);
         if (result)
                 CERROR(LUSTRE_MDT0_NAME" cannot pack size=%d, rc=%d\n",
-                       size, result);
+                       sizeof(struct mdt_body), result);
         else if (OBD_FAIL_CHECK(OBD_FAIL_MDS_GETATTR_PACK)) {
                 CERROR(LUSTRE_MDT0_NAME": statfs lustre_pack_reply failed\n");
                 result = -ENOMEM;
@@ -175,9 +177,9 @@ static int mdt_getattr(struct mdt_thread_info *info,
                 result = next->mo_ops->moo_attr_get(info->mti_ctxt, next,
                                                     &info->mti_attr);
                 if (result == 0) {
-                        body = lustre_msg_buf(req->rq_repmsg, 0, size);
-                        mdt_pack_attr2body(body, &info->mti_attr);
-                        body->fid1 = *mdt_object_fid(info->mti_object);
+                        info->mti_body = lustre_msg_buf(req->rq_repmsg, 0, sizeof(struct mdt_body));
+                        mdt_pack_attr2body(info->mti_body, &info->mti_attr);
+                        info->mti_body->fid1 = *mdt_object_fid(info->mti_object);
                 }
         }
         RETURN(result);
@@ -249,27 +251,19 @@ static int mdt_readpage(struct mdt_thread_info *info,
         return -EOPNOTSUPP;
 }
 
-int mdt_reint_internal(struct mdt_thread_info *info,
+static int mdt_reint_internal(struct mdt_thread_info *info,
                        struct ptlrpc_request *req, 
                        int offset,
                        struct lustre_handle *lockh)
 {
-        struct mdt_reint_record *rec; /* 116 bytes on the stack?  no sir! */
         int rc;
 
-        OBD_ALLOC(rec, sizeof(*rec));
-        if (rec == NULL)
-                RETURN(-ENOMEM);
-
-        rc = mdt_reint_unpack(info, req, offset, rec);
+        rc = mdt_reint_unpack(info, req, offset);
         if (rc || OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_UNPACK)) {
                 CERROR("invalid record\n");
-                GOTO(out, rc = -EINVAL);
+                RETURN(rc = -EINVAL);
         }
-
-        rc = mdt_reint_rec(info, rec, offset, req, lockh);
-out:
-        OBD_FREE(rec, sizeof(*rec));
+        rc = mdt_reint_rec(info, lockh);
         RETURN(rc);
 }
 
@@ -279,9 +273,7 @@ static int mdt_reint(struct mdt_thread_info *info,
         __u32 *opcp = lustre_msg_buf(req->rq_reqmsg, MDS_REQ_REC_OFF,
                                      sizeof (*opcp));
         __u32  opc;
-        int size[] = { sizeof(struct mdt_body), sizeof(struct lov_mds_md), /*FIXME*/
-                       sizeof(struct llog_cookie)};
-        int bufcount,rc;
+        int rc;
 
         ENTRY;
 
@@ -299,10 +291,15 @@ static int mdt_reint(struct mdt_thread_info *info,
         OBD_FAIL_RETURN(OBD_FAIL_MDS_REINT_NET, 0);
 
         if (opc == REINT_UNLINK || opc == REINT_RENAME)
-                bufcount = 3;
+                info->mti_rep_buf_nr = 3;
         else if (opc == REINT_OPEN)
-                bufcount = 2;
-        rc = lustre_pack_reply(req, bufcount, size, NULL);
+                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);
         rc = mdt_reint_internal(info, req, offset, NULL);
@@ -1050,20 +1047,19 @@ static int mdt_intent_policy(struct ldlm_namespace *ns,
         struct lustre_handle lockh = { 0 };
         struct ldlm_lock *new_lock = NULL;
         int getattr_part = MDS_INODELOCK_UPDATE;
-        int repsize[4] = {sizeof(*rep),
-                          sizeof(struct mdt_body),
-                          sizeof(struct lov_mds_md)};/*FIXME:See mds*/
-        int repbufcnt = 3, offset = MDS_REQ_INTENT_REC_OFF;
+        int offset = MDS_REQ_INTENT_REC_OFF;
         int rc;
-        struct mdt_thread_info *info = NULL;
-        /*FIXME:How to get this pointer?
-                from the request? or passed in by @data*/ 
-
+        struct mdt_thread_info *info;
 
         ENTRY;
 
         LASSERT(req != NULL);
 
+        /* We already got it in mdt_handle. But we have to do it again*/
+        info = lu_context_key_get(req->rq_svc_thread->t_ctx, &mdt_thread_key);
+        mdt_thread_info_init(info);
+
+
         if (req->rq_reqmsg->bufcount <= MDS_REQ_INTENT_IT_OFF) {
                 /* No intent was provided */
                 int size = sizeof(struct ldlm_reply);
@@ -1080,15 +1076,25 @@ static int mdt_intent_policy(struct ldlm_namespace *ns,
         }
 
         LDLM_DEBUG(lock, "intent policy, opc: %s", ldlm_it2str(it->opc));
+        info->mti_rep_buf_nr = 3;
+        info->mti_rep_buf_size[0] = sizeof(*rep);
+        info->mti_rep_buf_size[1] = sizeof(struct mdt_body);
+        info->mti_rep_buf_size[2] = sizeof(struct lov_mds_md);/*FIXME:See mds*/
 
         if ((req->rq_export->exp_connect_flags & OBD_CONNECT_ACL) &&
-            (it->opc & (IT_OPEN | IT_GETATTR | IT_LOOKUP)))
+            (it->opc & (IT_OPEN | IT_GETATTR | IT_LOOKUP))){
                 /* we should never allow OBD_CONNECT_ACL if not configured */
-                repsize[repbufcnt++] = LUSTRE_POSIX_ACL_MAX_SIZE;
-        else if (it->opc & IT_UNLINK)
-                repsize[repbufcnt++] = sizeof(struct llog_cookie); /*FIXME:See mds*/
+                info->mti_rep_buf_size[info->mti_rep_buf_nr++] = 
+                                        LUSTRE_POSIX_ACL_MAX_SIZE;
+        }
+        else if (it->opc & IT_UNLINK){
+                info->mti_rep_buf_size[info->mti_rep_buf_nr++] = 
+                                        sizeof(struct llog_cookie); 
+                                        /*FIXME:See mds*/
+        }
 
-        rc = lustre_pack_reply(req, repbufcnt, repsize, NULL);
+        rc = lustre_pack_reply(req, info->mti_rep_buf_nr, 
+                               info->mti_rep_buf_size, NULL);
         if (rc)
                 RETURN(req->rq_status = rc);
 
index e2f85e2..a2b375a 100644 (file)
@@ -155,6 +155,10 @@ struct mdt_thread_info {
          */
         struct lu_attr         mti_attr;
         /*
+         * some addtional attributes for reint.
+         */
+        struct mdt_reint_record mti_rr;
+        /*
          * Additional fail id that can be set by handler. Passed to
          * target_send_reply().
          */
@@ -186,11 +190,11 @@ void mdt_object_unlock(struct ldlm_namespace *, struct mdt_object *,
 struct mdt_object *mdt_object_find_lock(struct lu_context *, struct mdt_device *,
                                         struct lu_fid *,
                                         struct mdt_lock_handle *, __u64);
-int mdt_reint_unpack(struct mdt_thread_info *info, struct ptlrpc_request *req, int offset,
-                      struct mdt_reint_record *rec);
+int mdt_reint_unpack(struct mdt_thread_info *, 
+                     struct ptlrpc_request *, 
+                     int);
 
-int mdt_reint_rec(struct mdt_thread_info *, struct mdt_reint_record *,
-                  int, struct ptlrpc_request *,
+int mdt_reint_rec(struct mdt_thread_info *,
                   struct lustre_handle *);
 
 #endif /* __KERNEL__ */
index 189de80..ffd83c7 100644 (file)
@@ -1,7 +1,17 @@
 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
- *  Copyright (c) 2003 Cluster File Systems, Inc.
+ *  lustre/mdt/mdt_lib.c
+ *  Lustre Metadata Target (mdt) request unpacking helper.
+ *
+ *  Copyright (c) 2006 Cluster File Systems, Inc.
+ *   Author: Peter Braam <braam@clusterfs.com>
+ *   Author: Andreas Dilger <adilger@clusterfs.com>
+ *   Author: Phil Schwan <phil@clusterfs.com>
+ *   Author: Mike Shaver <shaver@clusterfs.com>
+ *   Author: Nikita Danilov <nikita@clusterfs.com>
+ *   Author: Huang Hua <huanghua@clusterfs.com>
+ *
  *
  *   This file is part of the Lustre file system, http://www.lustre.org
  *   Lustre is a trademark of Cluster File Systems, Inc.
 #endif
 #define DEBUG_SUBSYSTEM S_MDS
 
-#include <linux/module.h>
-
-/* LUSTRE_VERSION_CODE */
-#include <linux/lustre_ver.h>
-/*
- * struct OBD_{ALLOC,FREE}*()
- * OBD_FAIL_CHECK
- */
-#include <linux/obd_support.h>
-/* struct ptlrpc_request */
-#include <linux/lustre_net.h>
-/* struct obd_export */
-#include <linux/lustre_export.h>
-/* struct obd_device */
-#include <linux/obd.h>
-/* lu2dt_dev() */
-#include <linux/dt_object.h>
-
-
-#include "../mds/mds_internal.h"
 #include "mdt_internal.h"
 
 
 /* unpacking */
-static int mdt_setattr_unpack(struct ptlrpc_request *req, int offset,
-                              struct mdt_reint_record *r)
+static int mdt_setattr_unpack(struct mdt_thread_info *info,
+                              struct ptlrpc_request *req, 
+                              int offset)
 {
-        struct iattr *attr = &r->ur_iattr;
+        struct lu_attr *attr = &info->mti_attr;
+        struct mdt_reint_record *r = &info->mti_rr;
         struct mdt_rec_setattr *rec;
         ENTRY;
 
         rec = lustre_swab_reqbuf(req, offset, sizeof(*rec),
                                  lustre_swab_mdt_rec_setattr);
         if (rec == NULL)
-                RETURN (-EFAULT);
-
-        r->ur_uc.luc_fsuid = rec->sa_fsuid;
-        r->ur_uc.luc_fsgid = rec->sa_fsgid;
-        r->ur_uc.luc_cap = rec->sa_cap;
-        r->ur_uc.luc_suppgid1 = rec->sa_suppgid;
-        r->ur_uc.luc_suppgid2 = -1;
-        r->ur_fid1 = &rec->sa_fid;
-        attr->ia_valid = rec->sa_valid;
-        attr->ia_mode = rec->sa_mode;
-        attr->ia_uid = rec->sa_uid;
-        attr->ia_gid = rec->sa_gid;
-        attr->ia_size = rec->sa_size;
-        LTIME_S(attr->ia_atime) = rec->sa_atime;
-        LTIME_S(attr->ia_mtime) = rec->sa_mtime;
-        LTIME_S(attr->ia_ctime) = rec->sa_ctime;
-        attr->ia_attr_flags = rec->sa_attr_flags;
+                RETURN(-EFAULT);
+
+        r->rr_uc.luc_fsuid = rec->sa_fsuid;
+        r->rr_uc.luc_fsgid = rec->sa_fsgid;
+        r->rr_uc.luc_cap = rec->sa_cap;
+        r->rr_uc.luc_suppgid1 = rec->sa_suppgid;
+        r->rr_uc.luc_suppgid2 = -1;
+        r->rr_fid1 = &rec->sa_fid;
+/*FIXME        attr->la_valid = rec->sa_valid; */
+        attr->la_mode = rec->sa_mode;
+        attr->la_uid = rec->sa_uid;
+        attr->la_gid = rec->sa_gid;
+        attr->la_size = rec->sa_size;
+        attr->la_atime = rec->sa_atime;
+        attr->la_mtime = rec->sa_mtime;
+        attr->la_ctime = rec->sa_ctime;
+/*FIXME        attr->la_attr_flags = rec->sa_attr_flags;*/
 
         LASSERT_REQSWAB (req, offset + 1);
         if (req->rq_reqmsg->bufcount > offset + 1) {
-                r->ur_eadata = lustre_msg_buf (req->rq_reqmsg,
+                r->rr_eadata = lustre_msg_buf (req->rq_reqmsg,
                                                offset + 1, 0);
-                if (r->ur_eadata == NULL)
-                        RETURN (-EFAULT);
-                r->ur_eadatalen = req->rq_reqmsg->buflens[offset + 1];
+                if (r->rr_eadata == NULL)
+                        RETURN(-EFAULT);
+                r->rr_eadatalen = req->rq_reqmsg->buflens[offset + 1];
         }
 
         if (req->rq_reqmsg->bufcount > offset + 2) {
-                r->ur_logcookies = lustre_msg_buf(req->rq_reqmsg, offset + 2,0);
-                if (r->ur_eadata == NULL)
-                        RETURN (-EFAULT);
+                r->rr_logcookies = lustre_msg_buf(req->rq_reqmsg, offset + 2,0);
+                if (r->rr_logcookies == NULL)
+                        RETURN(-EFAULT);
 
-                r->ur_cookielen = req->rq_reqmsg->buflens[offset + 2];
+                r->rr_cookielen = req->rq_reqmsg->buflens[offset + 2];
         }
 
         RETURN(0);
 }
 
-static int mdt_create_unpack(struct ptlrpc_request *req, int offset,
-                             struct mdt_reint_record *r)
+static int mdt_create_unpack(struct mdt_thread_info *info,
+                             struct ptlrpc_request *req, 
+                             int offset)
 {
         struct mdt_rec_create *rec;
+        struct mdt_reint_record *r = &info->mti_rr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
                                   lustre_swab_mdt_rec_create);
         if (rec == NULL)
-                RETURN (-EFAULT);
-
-        r->ur_uc.luc_fsuid = rec->cr_fsuid;
-        r->ur_uc.luc_fsgid = rec->cr_fsgid;
-        r->ur_uc.luc_cap = rec->cr_cap;
-        r->ur_uc.luc_suppgid1 = rec->cr_suppgid;
-        r->ur_uc.luc_suppgid2 = -1;
-        r->ur_fid1 = &rec->cr_fid;
-        r->ur_fid2 = &rec->cr_replayfid;
-        r->ur_mode = rec->cr_mode;
-        r->ur_rdev = rec->cr_rdev;
-        r->ur_time = rec->cr_time;
-        r->ur_flags = rec->cr_flags;
+                RETURN(-EFAULT);
+
+        r->rr_uc.luc_fsuid = rec->cr_fsuid;
+        r->rr_uc.luc_fsgid = rec->cr_fsgid;
+        r->rr_uc.luc_cap = rec->cr_cap;
+        r->rr_uc.luc_suppgid1 = rec->cr_suppgid;
+        r->rr_uc.luc_suppgid2 = -1;
+        r->rr_fid1 = &rec->cr_fid;
+        r->rr_fid2 = &rec->cr_replayfid;
+        r->rr_mode = rec->cr_mode;
+        r->rr_rdev = rec->cr_rdev;
+        r->rr_time = rec->cr_time;
+        r->rr_flags = rec->cr_flags;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->ur_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
-        if (r->ur_name == NULL)
-                RETURN (-EFAULT);
-        r->ur_namelen = req->rq_reqmsg->buflens[offset + 1];
+        r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
+        if (r->rr_name == NULL)
+                RETURN(-EFAULT);
+        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
 
         LASSERT_REQSWAB (req, offset + 2);
         if (req->rq_reqmsg->bufcount > offset + 2) {
@@ -136,48 +130,52 @@ static int mdt_create_unpack(struct ptlrpc_request *req, int offset,
                  * to stop checking for a buffer filled completely with a
                  * NULL terminated string here, and make the callers check
                  * depending on what they expect.  We should probably stash
-                 * it in r->ur_eadata in that case, so it's obvious... -eeb
+                 * it in r->rr_eadata in that case, so it's obvious... -eeb
                  */
-                r->ur_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
-                if (r->ur_tgt == NULL)
-                        RETURN (-EFAULT);
-                r->ur_tgtlen = req->rq_reqmsg->buflens[offset + 2];
+                r->rr_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
+                if (r->rr_tgt == NULL)
+                        RETURN(-EFAULT);
+                r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2];
         }
         RETURN(0);
 }
 
-static int mdt_link_unpack(struct ptlrpc_request *req, int offset,
-                           struct mdt_reint_record *r)
+static int mdt_link_unpack(struct mdt_thread_info *info,
+                           struct ptlrpc_request *req, 
+                           int offset)
 {
         struct mdt_rec_link *rec;
+        struct mdt_reint_record *r = &info->mti_rr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
                                   lustre_swab_mdt_rec_link);
         if (rec == NULL)
-                RETURN (-EFAULT);
+                RETURN(-EFAULT);
 
-        r->ur_uc.luc_fsuid = rec->lk_fsuid;
-        r->ur_uc.luc_fsgid = rec->lk_fsgid;
-        r->ur_uc.luc_cap = rec->lk_cap;
-        r->ur_uc.luc_suppgid1 = rec->lk_suppgid1;
-        r->ur_uc.luc_suppgid2 = rec->lk_suppgid2;
-        r->ur_fid1 = &rec->lk_fid1;
-        r->ur_fid2 = &rec->lk_fid2;
-        r->ur_time = rec->lk_time;
+        r->rr_uc.luc_fsuid = rec->lk_fsuid;
+        r->rr_uc.luc_fsgid = rec->lk_fsgid;
+        r->rr_uc.luc_cap = rec->lk_cap;
+        r->rr_uc.luc_suppgid1 = rec->lk_suppgid1;
+        r->rr_uc.luc_suppgid2 = rec->lk_suppgid2;
+        r->rr_fid1 = &rec->lk_fid1;
+        r->rr_fid2 = &rec->lk_fid2;
+        r->rr_time = rec->lk_time;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->ur_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
-        if (r->ur_name == NULL)
-                RETURN (-EFAULT);
-        r->ur_namelen = req->rq_reqmsg->buflens[offset + 1];
+        r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
+        if (r->rr_name == NULL)
+                RETURN(-EFAULT);
+        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
         RETURN(0);
 }
 
-static int mdt_unlink_unpack(struct ptlrpc_request *req, int offset,
-                             struct mdt_reint_record *r)
+static int mdt_unlink_unpack(struct mdt_thread_info *info,
+                             struct ptlrpc_request *req, 
+                             int offset)
 {
         struct mdt_rec_unlink *rec;
+        struct mdt_reint_record *r = &info->mti_rr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -185,28 +183,30 @@ static int mdt_unlink_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        r->ur_uc.luc_fsuid = rec->ul_fsuid;
-        r->ur_uc.luc_fsgid = rec->ul_fsgid;
-        r->ur_uc.luc_cap = rec->ul_cap;
-        r->ur_uc.luc_suppgid1 = rec->ul_suppgid;
-        r->ur_uc.luc_suppgid2 = -1;
-        r->ur_mode = rec->ul_mode;
-        r->ur_fid1 = &rec->ul_fid1;
-        r->ur_fid2 = &rec->ul_fid2;
-        r->ur_time = rec->ul_time;
+        r->rr_uc.luc_fsuid = rec->ul_fsuid;
+        r->rr_uc.luc_fsgid = rec->ul_fsgid;
+        r->rr_uc.luc_cap = rec->ul_cap;
+        r->rr_uc.luc_suppgid1 = rec->ul_suppgid;
+        r->rr_uc.luc_suppgid2 = -1;
+        r->rr_mode = rec->ul_mode;
+        r->rr_fid1 = &rec->ul_fid1;
+        r->rr_fid2 = &rec->ul_fid2;
+        r->rr_time = rec->ul_time;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
-        if (r->ur_name == NULL)
+        r->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
+        if (r->rr_name == NULL)
                 RETURN(-EFAULT);
-        r->ur_namelen = req->rq_reqmsg->buflens[offset + 1];
+        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
         RETURN(0);
 }
 
-static int mdt_rename_unpack(struct ptlrpc_request *req, int offset,
-                             struct mdt_reint_record *r)
+static int mdt_rename_unpack(struct mdt_thread_info *info,
+                             struct ptlrpc_request *req, 
+                             int offset)
 {
         struct mdt_rec_rename *rec;
+        struct mdt_reint_record *r = &info->mti_rr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -214,84 +214,89 @@ static int mdt_rename_unpack(struct ptlrpc_request *req, int offset,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        r->ur_uc.luc_fsuid = rec->rn_fsuid;
-        r->ur_uc.luc_fsgid = rec->rn_fsgid;
-        r->ur_uc.luc_cap = rec->rn_cap;
-        r->ur_uc.luc_suppgid1 = rec->rn_suppgid1;
-        r->ur_uc.luc_suppgid2 = rec->rn_suppgid2;
-        r->ur_fid1 = &rec->rn_fid1;
-        r->ur_fid2 = &rec->rn_fid2;
-        r->ur_time = rec->rn_time;
+        r->rr_uc.luc_fsuid = rec->rn_fsuid;
+        r->rr_uc.luc_fsgid = rec->rn_fsgid;
+        r->rr_uc.luc_cap = rec->rn_cap;
+        r->rr_uc.luc_suppgid1 = rec->rn_suppgid1;
+        r->rr_uc.luc_suppgid2 = rec->rn_suppgid2;
+        r->rr_fid1 = &rec->rn_fid1;
+        r->rr_fid2 = &rec->rn_fid2;
+        r->rr_time = rec->rn_time;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
-        if (r->ur_name == NULL)
+        r->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
+        if (r->rr_name == NULL)
                 RETURN(-EFAULT);
-        r->ur_namelen = req->rq_reqmsg->buflens[offset + 1];
+        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
 
         LASSERT_REQSWAB (req, offset + 2);
-        r->ur_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
-        if (r->ur_tgt == NULL)
+        r->rr_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
+        if (r->rr_tgt == NULL)
                 RETURN(-EFAULT);
-        r->ur_tgtlen = req->rq_reqmsg->buflens[offset + 2];
+        r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2];
         RETURN(0);
 }
 
-static int mdt_open_unpack(struct ptlrpc_request *req, int offset,
-                           struct mdt_reint_record *r)
+static int mdt_open_unpack(struct mdt_thread_info *info,
+                           struct ptlrpc_request *req, 
+                           int offset)
 {
         struct mdt_rec_create *rec;
+        struct mdt_reint_record *r = &info->mti_rr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
                                   lustre_swab_mdt_rec_create);
         if (rec == NULL)
-                RETURN (-EFAULT);
-
-        r->ur_uc.luc_fsuid = rec->cr_fsuid;
-        r->ur_uc.luc_fsgid = rec->cr_fsgid;
-        r->ur_uc.luc_cap = rec->cr_cap;
-        r->ur_uc.luc_suppgid1 = rec->cr_suppgid;
-        r->ur_uc.luc_suppgid2 = -1;
-        r->ur_fid1 = &rec->cr_fid;
-        r->ur_fid2 = &rec->cr_replayfid;
-        r->ur_mode = rec->cr_mode;
-        r->ur_rdev = rec->cr_rdev;
-        r->ur_time = rec->cr_time;
-        r->ur_flags = rec->cr_flags;
+                RETURN(-EFAULT);
+
+        r->rr_uc.luc_fsuid = rec->cr_fsuid;
+        r->rr_uc.luc_fsgid = rec->cr_fsgid;
+        r->rr_uc.luc_cap = rec->cr_cap;
+        r->rr_uc.luc_suppgid1 = rec->cr_suppgid;
+        r->rr_uc.luc_suppgid2 = -1;
+        r->rr_fid1 = &rec->cr_fid;
+        r->rr_fid2 = &rec->cr_replayfid;
+        r->rr_mode = rec->cr_mode;
+        r->rr_rdev = rec->cr_rdev;
+        r->rr_time = rec->cr_time;
+        r->rr_flags = rec->cr_flags;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->ur_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
-        if (r->ur_name == NULL)
-                RETURN (-EFAULT);
-        r->ur_namelen = req->rq_reqmsg->buflens[offset + 1];
+        r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
+        if (r->rr_name == NULL)
+                RETURN(-EFAULT);
+        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
 
         LASSERT_REQSWAB (req, offset + 2);
         if (req->rq_reqmsg->bufcount > offset + 2) {
-                r->ur_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0);
-                if (r->ur_eadata == NULL)
-                        RETURN (-EFAULT);
-                r->ur_eadatalen = req->rq_reqmsg->buflens[offset + 2];
+                r->rr_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0);
+                if (r->rr_eadata == NULL)
+                        RETURN(-EFAULT);
+                r->rr_eadatalen = req->rq_reqmsg->buflens[offset + 2];
         }
         RETURN(0);
 }
 
-typedef int (*reint_unpacker)(struct ptlrpc_request *req, int offset,
-                               struct mdt_reint_record *r);
+typedef int (*reint_unpacker)(struct mdt_thread_info *info,
+                              struct ptlrpc_request *req, 
+                              int offset);
 
 static reint_unpacker mdt_reint_unpackers[REINT_MAX] = {
-        [REINT_SETATTR] mdt_setattr_unpack,
-        [REINT_CREATE] mdt_create_unpack,
-        [REINT_LINK] mdt_link_unpack,
-        [REINT_UNLINK] mdt_unlink_unpack,
-        [REINT_RENAME] mdt_rename_unpack,
-        [REINT_OPEN] mdt_open_unpack,
+        [REINT_SETATTR]  = mdt_setattr_unpack,
+        [REINT_CREATE] mdt_create_unpack,
+        [REINT_LINK] mdt_link_unpack,
+        [REINT_UNLINK] mdt_unlink_unpack,
+        [REINT_RENAME] mdt_rename_unpack,
+        [REINT_OPEN] = mdt_open_unpack
 };
 
-int mdt_reint_unpack(struct mdt_thread_info *info, struct ptlrpc_request *req, int offset,
-                      struct mdt_reint_record *rec)
+int mdt_reint_unpack(struct mdt_thread_info *info,
+                     struct ptlrpc_request *req, 
+                     int offset)
 {
-        mdt_reint_t opcode, *opcodep;
+        mdt_reint_t opcode;
+        mdt_reint_t *opcodep;
         int rc;
         ENTRY;
 
@@ -311,8 +316,8 @@ int mdt_reint_unpack(struct mdt_thread_info *info, struct ptlrpc_request *req, i
                 RETURN(-EFAULT);
         }
 
-        rec->ur_opcode = opcode;
-        rc = mdt_reint_unpackers[opcode](req, offset, rec);
+        info->mti_rr.rr_opcode = opcode;
+        rc = mdt_reint_unpackers[opcode](info, req, offset);
 
         RETURN(rc);
 }
index 42a13da..1d54c35 100644 (file)
@@ -2,12 +2,13 @@
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
  *  linux/mdt/mdt_reint.c
- *  Lustre Metadata Server (mds) reintegration routines
+ *  Lustre Metadata Target (mdt) reintegration routines
  *
- *  Copyright (C) 2002-2005 Cluster File Systems, Inc.
+ *  Copyright (C) 2002-2006 Cluster File Systems, Inc.
  *   Author: Peter Braam <braam@clusterfs.com>
  *   Author: Andreas Dilger <adilger@clusterfs.com>
  *   Author: Phil Schwan <phil@clusterfs.com>
+ *   Author: Huang Hua <huanghua@clusterfs.com>
  *
  *   This file is part of the Lustre file system, http://www.lustre.org
  *   Lustre is a trademark of Cluster File Systems, Inc.
 #endif
 #define DEBUG_SUBSYSTEM S_MDS
 
-#include <linux/module.h>
-
-/* LUSTRE_VERSION_CODE */
-#include <linux/lustre_ver.h>
-/*
- * struct OBD_{ALLOC,FREE}*()
- * OBD_FAIL_CHECK
- */
-#include <linux/obd_support.h>
-/* struct ptlrpc_request */
-#include <linux/lustre_net.h>
-/* struct obd_export */
-#include <linux/lustre_export.h>
-/* struct obd_device */
-#include <linux/obd.h>
-/* lu2dt_dev() */
-#include <linux/dt_object.h>
-
-
-#include "../mds/mds_internal.h"
 #include "mdt_internal.h"
 
 
 /* object operations */
-static int mdt_md_mkdir(struct mdt_thread_info *info,
-                        struct mdt_reint_record *rec)
+static int mdt_md_mkdir(struct mdt_thread_info *info)
 {
-        struct mdt_device      *mdt= info->mti_mdt;
+        struct mdt_device      *mdt = info->mti_mdt;
         struct mdt_object      *parent;
         struct mdt_object      *child;
         struct mdt_lock_handle *lh;
@@ -71,15 +51,15 @@ static int mdt_md_mkdir(struct mdt_thread_info *info,
         lh->mlh_mode = LCK_PW;
 
         parent = mdt_object_find_lock(info->mti_ctxt,
-                                 mdt, rec->ur_fid1, lh, MDS_INODELOCK_UPDATE);
+                                      mdt, info->mti_rr.rr_fid1, lh, MDS_INODELOCK_UPDATE);
         if (IS_ERR(parent))
                 return PTR_ERR(parent);
 
-        child = mdt_object_find(info->mti_ctxt, mdt, rec->ur_fid2);
+        child = mdt_object_find(info->mti_ctxt, mdt, info->mti_rr.rr_fid2);
         if (!IS_ERR(child)) {
                 struct md_object *next = mdt_object_child(parent);
 
-                result = next->mo_ops->moo_mkdir(info->mti_ctxt, next, rec->ur_name,
+                result = next->mo_ops->moo_mkdir(info->mti_ctxt, next, info->mti_rr.rr_name,
                                                  mdt_object_child(child));
                 mdt_object_put(info->mti_ctxt, child);
         } else
@@ -91,112 +71,97 @@ static int mdt_md_mkdir(struct mdt_thread_info *info,
 
 
 static int mdt_reint_setattr(struct mdt_thread_info *info,
-                             struct mdt_reint_record *rec, int offset,
-                             struct ptlrpc_request *req,
                              struct lustre_handle *lh)
 {
         ENTRY;
-        RETURN (-EOPNOTSUPP);
+        RETURN(-EOPNOTSUPP);
 }
 
 
 static int mdt_reint_create(struct mdt_thread_info *info,
-                            struct mdt_reint_record *rec, int offset,
-                            struct ptlrpc_request *req,
                             struct lustre_handle *lh)
 {
-        int rc = 0, type = rec->ur_mode & S_IFMT;
-        
+        int rc;
         ENTRY;
 
-        switch (type) {
+        switch (info->mti_rr.rr_mode & S_IFMT) {
         case S_IFREG:{
-                RETURN (rc = -EOPNOTSUPP);
+                rc = -EOPNOTSUPP;
                 break;
         }
         case S_IFDIR:{
-                rc = mdt_md_mkdir(info, rec);
+                rc = mdt_md_mkdir(info);
                 break;
         }
         case S_IFLNK:{
-                RETURN (rc = -EOPNOTSUPP);
+                rc = -EOPNOTSUPP;
                 break;
         }
         case S_IFCHR:
         case S_IFBLK:
         case S_IFIFO:
         case S_IFSOCK:{
-                RETURN (rc = -EOPNOTSUPP);
+                rc = -EOPNOTSUPP;
                 break;
         }
         default:
-                CERROR("bad file type %o creating %s\n", type, rec->ur_name);
+                rc = -EOPNOTSUPP;
         }
-        RETURN (rc);
+        RETURN(rc);
 }
 
 
 static int mdt_reint_unlink(struct mdt_thread_info *info,
-                            struct mdt_reint_record *rec, int offset,
-                            struct ptlrpc_request *req,
                             struct lustre_handle *lh)
 {
         ENTRY;
-        RETURN (-EOPNOTSUPP);
+        RETURN(-EOPNOTSUPP);
 }
 
 static int mdt_reint_link(struct mdt_thread_info *info,
-                          struct mdt_reint_record *rec, int offset,
-                          struct ptlrpc_request *req,
                           struct lustre_handle *lh)
 {
         ENTRY;
-        RETURN (-EOPNOTSUPP);
+        RETURN(-EOPNOTSUPP);
 }
 
 
 static int mdt_reint_rename(struct mdt_thread_info *info,
-                            struct mdt_reint_record *rec, int offset,
-                            struct ptlrpc_request *req,
                             struct lustre_handle *lockh)
 {
         ENTRY;
-        RETURN (-EOPNOTSUPP);
+        RETURN(-EOPNOTSUPP);
 }
 
 static int mdt_reint_open(struct mdt_thread_info *info,
-                            struct mdt_reint_record *rec, int offset,
-                            struct ptlrpc_request *req,
-                            struct lustre_handle *lockh)
+                          struct lustre_handle *lockh)
 {
         ENTRY;
-        RETURN (-EOPNOTSUPP);
+        RETURN(-EOPNOTSUPP);
 }
 
 
 typedef int (*mdt_reinter)(struct mdt_thread_info *info,
-                           struct mdt_reint_record *, int offset,
-                           struct ptlrpc_request *, struct lustre_handle *);
+                           struct lustre_handle *);
 
 static mdt_reinter reinters[REINT_MAX] = {
-        [REINT_SETATTR] mdt_reint_setattr,
-        [REINT_CREATE] mdt_reint_create,
-        [REINT_LINK] mdt_reint_link,
-        [REINT_UNLINK] mdt_reint_unlink,
-        [REINT_RENAME] mdt_reint_rename,
-        [REINT_OPEN] mdt_reint_open
+        [REINT_SETATTR]  = mdt_reint_setattr,
+        [REINT_CREATE] mdt_reint_create,
+        [REINT_LINK] mdt_reint_link,
+        [REINT_UNLINK] mdt_reint_unlink,
+        [REINT_RENAME] mdt_reint_rename,
+        [REINT_OPEN] mdt_reint_open
 };
 
-int mdt_reint_rec(struct mdt_thread_info *info, struct mdt_reint_record *rec, 
-                  int offset, struct ptlrpc_request *req, 
+int mdt_reint_rec(struct mdt_thread_info *info, 
                   struct lustre_handle *lockh)
 {
         int rc;
         ENTRY;
         /* checked by unpacker */
-        LASSERT(rec->ur_opcode < REINT_MAX && reinters[rec->ur_opcode] != NULL);
+        LASSERT(info->mti_rr.rr_opcode < REINT_MAX && reinters[info->mti_rr.rr_opcode] != NULL);
 
-        rc = reinters[rec->ur_opcode] (info, rec, offset, req, lockh);
+        rc = reinters[info->mti_rr.rr_opcode] (info, lockh);
 
         RETURN(rc);
 }