Whamcloud - gitweb
(1) put REINT requests' argument into lu_attr.
authorhuanghua <huanghua>
Fri, 28 Apr 2006 07:36:08 +0000 (07:36 +0000)
committerhuanghua <huanghua>
Fri, 28 Apr 2006 07:36:08 +0000 (07:36 +0000)
(2) add lu_attr* into moo_mkdir parameter list, and pass through server stack.

lustre/cmm/cmm_internal.h
lustre/cmm/cmm_object.c
lustre/include/linux/lustre_mdt.h [deleted file]
lustre/mdd/mdd_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_lib.c
lustre/mdt/mdt_reint.c

index 791ded4..aab84e1 100644 (file)
@@ -107,7 +107,8 @@ int cmm_config(struct lu_context *ctx, struct md_device *md, const char *name,
 int cmm_root_get(struct lu_context *ctx, struct md_device *m, struct lu_fid *f);
 int cmm_statfs(struct lu_context *ctx,
                struct md_device *m, struct kstatfs *sfs);
-int cmm_mkdir(struct lu_context *ctxt, struct md_object *o, const char *name,
+int cmm_mkdir(struct lu_context *ctxt, struct lu_attr*,
+              struct md_object *o, const char *name,
               struct md_object *child);
 int cmm_xattr_get(struct lu_context *ctxt,
                   struct md_object *obj, void *buf, int size,
index fa73d89..392c4ac 100644 (file)
@@ -177,13 +177,14 @@ int cmm_statfs(struct lu_context *ctxt,
         RETURN (result);
 }
 
-int cmm_mkdir(struct lu_context *ctxt, struct md_object *md_parent,
+int cmm_mkdir(struct lu_context *ctxt, struct lu_attr* attr,
+              struct md_object *md_parent,
               const char *name, struct md_object *md_child)
 {
        struct cmm_object *cmm_parent = md2cmm_obj(md_parent);
         struct md_object  *next       = cmm2child_obj(cmm_parent);
 
-        return next->mo_ops->moo_mkdir(ctxt, next, name, md_child);
+        return next->mo_ops->moo_mkdir(ctxt, attr, next, name, md_child);
 }
 
 int cmm_attr_get(struct lu_context *ctxt, struct md_object *obj,
diff --git a/lustre/include/linux/lustre_mdt.h b/lustre/include/linux/lustre_mdt.h
deleted file mode 100644 (file)
index 23206ab..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *   This file is part of Lustre, http://www.lustre.org
- *
- * MDS data structures.
- * See also lustre_idl.h for wire formats of requests.
- */
-
-#ifndef _LUSTRE_MDT_H
-#define _LUSTRE_MDT_H
-
-#ifdef __KERNEL__
-# include <linux/fs.h>
-# include <linux/dcache.h>
-#endif
-#include <linux/lustre_handles.h>
-#include <libcfs/kp30.h>
-#include <linux/lustre_idl.h>
-#include <linux/lustre_lib.h>
-#include <linux/lustre_dlm.h>
-#include <linux/lustre_log.h>
-#include <linux/lustre_export.h>
-
-
-struct mdt_reint_record {
-        __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;
-};
-
-#endif
index 61702cf..4608129 100644 (file)
@@ -658,7 +658,7 @@ cleanup:
 }
 
 static int
-mdd_mkdir(struct lu_context *ctxt, struct md_object *pobj,
+mdd_mkdir(struct lu_context *ctxt, struct lu_attr* attr, struct md_object *pobj,
           const char *name, struct md_object *child)
 {
         struct mdd_device *mdd = mdo2mdd(pobj);
index a2b375a..600e84c 100644 (file)
@@ -47,7 +47,6 @@
 #include <linux/lustre_idl.h>
 #include <linux/md_object.h>
 #include <linux/lustre_fid.h>
-#include <linux/lustre_mdt.h>
 
 struct mdt_device {
         /* super-class */
@@ -155,10 +154,6 @@ 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().
          */
index ffd83c7..dd9513b 100644 (file)
@@ -47,7 +47,6 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info,
                               int offset)
 {
         struct lu_attr *attr = &info->mti_attr;
-        struct mdt_reint_record *r = &info->mti_rr;
         struct mdt_rec_setattr *rec;
         ENTRY;
 
@@ -56,12 +55,12 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info,
         if (rec == NULL)
                 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;
+        attr->la_uc.luc_fsuid = rec->sa_fsuid;
+        attr->la_uc.luc_fsgid = rec->sa_fsgid;
+        attr->la_uc.luc_cap = rec->sa_cap;
+        attr->la_uc.luc_suppgid1 = rec->sa_suppgid;
+        attr->la_uc.luc_suppgid2 = -1;
+        attr->la_fid1 = &rec->sa_fid;
 /*FIXME        attr->la_valid = rec->sa_valid; */
         attr->la_mode = rec->sa_mode;
         attr->la_uid = rec->sa_uid;
@@ -70,23 +69,23 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info,
         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;*/
+        attr->la_flags = rec->sa_attr_flags;
 
         LASSERT_REQSWAB (req, offset + 1);
         if (req->rq_reqmsg->bufcount > offset + 1) {
-                r->rr_eadata = lustre_msg_buf (req->rq_reqmsg,
+                 attr->la_eadata = lustre_msg_buf (req->rq_reqmsg,
                                                offset + 1, 0);
-                if (r->rr_eadata == NULL)
+                if (attr->la_eadata == NULL)
                         RETURN(-EFAULT);
-                r->rr_eadatalen = req->rq_reqmsg->buflens[offset + 1];
+                 attr->la_eadatalen = req->rq_reqmsg->buflens[offset + 1];
         }
 
         if (req->rq_reqmsg->bufcount > offset + 2) {
-                r->rr_logcookies = lustre_msg_buf(req->rq_reqmsg, offset + 2,0);
-                if (r->rr_logcookies == NULL)
+                attr->la_logcookies = lustre_msg_buf(req->rq_reqmsg, offset + 2,0);
+                if (attr->la_logcookies == NULL)
                         RETURN(-EFAULT);
 
-                r->rr_cookielen = req->rq_reqmsg->buflens[offset + 2];
+                attr->la_logcookielen = req->rq_reqmsg->buflens[offset + 2];
         }
 
         RETURN(0);
@@ -97,7 +96,7 @@ static int mdt_create_unpack(struct mdt_thread_info *info,
                              int offset)
 {
         struct mdt_rec_create *rec;
-        struct mdt_reint_record *r = &info->mti_rr;
+        struct lu_attr *attr = &info->mti_attr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -105,23 +104,23 @@ static int mdt_create_unpack(struct mdt_thread_info *info,
         if (rec == NULL)
                 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;
+        attr->la_uc.luc_fsuid = rec->cr_fsuid;
+        attr->la_uc.luc_fsgid = rec->cr_fsgid;
+        attr->la_uc.luc_cap = rec->cr_cap;
+        attr->la_uc.luc_suppgid1 = rec->cr_suppgid;
+        attr->la_uc.luc_suppgid2 = -1;
+        attr->la_fid1 = &rec->cr_fid;
+        attr->la_fid2 = &rec->cr_replayfid;
+        attr->la_mode = rec->cr_mode;
+        attr->la_rdev = rec->cr_rdev;
+        attr->la_mtime = rec->cr_time;
+        attr->la_flags = rec->cr_flags;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
-        if (r->rr_name == NULL)
+        attr->la_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
+        if (attr->la_name == NULL)
                 RETURN(-EFAULT);
-        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
+        /*namelen = req->rq_reqmsg->buflens[offset + 1];*/
 
         LASSERT_REQSWAB (req, offset + 2);
         if (req->rq_reqmsg->bufcount > offset + 2) {
@@ -132,10 +131,10 @@ static int mdt_create_unpack(struct mdt_thread_info *info,
                  * depending on what they expect.  We should probably stash
                  * it in r->rr_eadata in that case, so it's obvious... -eeb
                  */
-                r->rr_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
-                if (r->rr_tgt == NULL)
+                attr->la_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
+                if (attr->la_tgt == NULL)
                         RETURN(-EFAULT);
-                r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2];
+                /*tgtlen = req->rq_reqmsg->buflens[offset + 2];*/
         }
         RETURN(0);
 }
@@ -145,7 +144,7 @@ static int mdt_link_unpack(struct mdt_thread_info *info,
                            int offset)
 {
         struct mdt_rec_link *rec;
-        struct mdt_reint_record *r = &info->mti_rr;
+        struct lu_attr *attr = &info->mti_attr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -153,20 +152,20 @@ static int mdt_link_unpack(struct mdt_thread_info *info,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        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;
+        attr->la_uc.luc_fsuid = rec->lk_fsuid;
+        attr->la_uc.luc_fsgid = rec->lk_fsgid;
+        attr->la_uc.luc_cap = rec->lk_cap;
+        attr->la_uc.luc_suppgid1 = rec->lk_suppgid1;
+        attr->la_uc.luc_suppgid2 = rec->lk_suppgid2;
+        attr->la_fid1 = &rec->lk_fid1;
+        attr->la_fid2 = &rec->lk_fid2;
+        attr->la_mtime = rec->lk_time;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
-        if (r->rr_name == NULL)
+        attr->la_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
+        if (attr->la_name == NULL)
                 RETURN(-EFAULT);
-        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
+        /*namelen = req->rq_reqmsg->buflens[offset + 1];*/
         RETURN(0);
 }
 
@@ -175,7 +174,7 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info,
                              int offset)
 {
         struct mdt_rec_unlink *rec;
-        struct mdt_reint_record *r = &info->mti_rr;
+        struct lu_attr *attr = &info->mti_attr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -183,21 +182,21 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        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;
+        attr->la_uc.luc_fsuid = rec->ul_fsuid;
+        attr->la_uc.luc_fsgid = rec->ul_fsgid;
+        attr->la_uc.luc_cap = rec->ul_cap;
+        attr->la_uc.luc_suppgid1 = rec->ul_suppgid;
+        attr->la_uc.luc_suppgid2 = -1;
+        attr->la_mode = rec->ul_mode;
+        attr->la_fid1 = &rec->ul_fid1;
+        attr->la_fid2 = &rec->ul_fid2;
+        attr->la_mtime = rec->ul_time;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
-        if (r->rr_name == NULL)
+        attr->la_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
+        if (attr->la_name == NULL)
                 RETURN(-EFAULT);
-        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
+        /*namelen = req->rq_reqmsg->buflens[offset + 1];*/
         RETURN(0);
 }
 
@@ -206,7 +205,7 @@ static int mdt_rename_unpack(struct mdt_thread_info *info,
                              int offset)
 {
         struct mdt_rec_rename *rec;
-        struct mdt_reint_record *r = &info->mti_rr;
+        struct lu_attr *attr = &info->mti_attr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -214,26 +213,26 @@ static int mdt_rename_unpack(struct mdt_thread_info *info,
         if (rec == NULL)
                 RETURN(-EFAULT);
 
-        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;
+        attr->la_uc.luc_fsuid = rec->rn_fsuid;
+        attr->la_uc.luc_fsgid = rec->rn_fsgid;
+        attr->la_uc.luc_cap = rec->rn_cap;
+        attr->la_uc.luc_suppgid1 = rec->rn_suppgid1;
+        attr->la_uc.luc_suppgid2 = rec->rn_suppgid2;
+        attr->la_fid1 = &rec->rn_fid1;
+        attr->la_fid2 = &rec->rn_fid2;
+        attr->la_mtime = rec->rn_time;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
-        if (r->rr_name == NULL)
+        attr->la_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
+        if (attr->la_name == NULL)
                 RETURN(-EFAULT);
-        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
+        /*r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];*/
 
         LASSERT_REQSWAB (req, offset + 2);
-        r->rr_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
-        if (r->rr_tgt == NULL)
+        attr->la_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
+        if (attr->la_tgt == NULL)
                 RETURN(-EFAULT);
-        r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2];
+        /*r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2];*/
         RETURN(0);
 }
 
@@ -242,7 +241,7 @@ static int mdt_open_unpack(struct mdt_thread_info *info,
                            int offset)
 {
         struct mdt_rec_create *rec;
-        struct mdt_reint_record *r = &info->mti_rr;
+        struct lu_attr *attr = &info->mti_attr;
         ENTRY;
 
         rec = lustre_swab_reqbuf (req, offset, sizeof (*rec),
@@ -250,30 +249,30 @@ static int mdt_open_unpack(struct mdt_thread_info *info,
         if (rec == NULL)
                 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;
+        attr->la_uc.luc_fsuid = rec->cr_fsuid;
+        attr->la_uc.luc_fsgid = rec->cr_fsgid;
+        attr->la_uc.luc_cap = rec->cr_cap;
+        attr->la_uc.luc_suppgid1 = rec->cr_suppgid;
+        attr->la_uc.luc_suppgid2 = -1;
+        attr->la_fid1 = &rec->cr_fid;
+        attr->la_fid2 = &rec->cr_replayfid;
+        attr->la_mode = rec->cr_mode;
+        attr->la_rdev = rec->cr_rdev;
+        attr->la_mtime = rec->cr_time;
+        attr->la_flags = rec->cr_flags;
 
         LASSERT_REQSWAB (req, offset + 1);
-        r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
-        if (r->rr_name == NULL)
+        attr->la_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0);
+        if (attr->la_name == NULL)
                 RETURN(-EFAULT);
-        r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];
+        /*r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];*/
 
         LASSERT_REQSWAB (req, offset + 2);
         if (req->rq_reqmsg->bufcount > offset + 2) {
-                r->rr_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0);
-                if (r->rr_eadata == NULL)
+                attr->la_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0);
+                if (attr->la_eadata == NULL)
                         RETURN(-EFAULT);
-                r->rr_eadatalen = req->rq_reqmsg->buflens[offset + 2];
+                attr->la_eadatalen = req->rq_reqmsg->buflens[offset + 2];
         }
         RETURN(0);
 }
@@ -315,8 +314,7 @@ int mdt_reint_unpack(struct mdt_thread_info *info,
                 CERROR("Unexpected opcode %d\n", opcode);
                 RETURN(-EFAULT);
         }
-
-        info->mti_rr.rr_opcode = opcode;
+        info->mti_attr.la_opcode = opcode;
         rc = mdt_reint_unpackers[opcode](info, req, offset);
 
         RETURN(rc);
index c82931c..56fe263 100644 (file)
@@ -51,15 +51,17 @@ static int mdt_md_mkdir(struct mdt_thread_info *info, struct lustre_handle *lock
         lh->mlh_mode = LCK_PW;
 
         parent = mdt_object_find_lock(info->mti_ctxt,
-                                      mdt, info->mti_rr.rr_fid1, lh, MDS_INODELOCK_UPDATE);
+                                      mdt, info->mti_attr.la_fid1, lh, MDS_INODELOCK_UPDATE);
         if (IS_ERR(parent))
                 return PTR_ERR(parent);
 
-        child = mdt_object_find(info->mti_ctxt, mdt, info->mti_rr.rr_fid2);
+        child = mdt_object_find(info->mti_ctxt, mdt, info->mti_attr.la_fid2);
         if (!IS_ERR(child)) {
                 struct md_object *next = mdt_object_child(parent);
 
-                result = next->mo_ops->moo_mkdir(info->mti_ctxt, next, info->mti_rr.rr_name,
+                result = next->mo_ops->moo_mkdir(info->mti_ctxt, 
+                                                 &info->mti_attr,
+                                                 next, info->mti_attr.la_name,
                                                  mdt_object_child(child));
                 mdt_object_put(info->mti_ctxt, child);
         } else
@@ -84,7 +86,7 @@ static int mdt_reint_create(struct mdt_thread_info *info,
         int rc;
         ENTRY;
 
-        switch (info->mti_rr.rr_mode & S_IFMT) {
+        switch (info->mti_attr.la_mode & S_IFMT) {
         case S_IFREG:{
                 rc = -EOPNOTSUPP;
                 break;
@@ -153,15 +155,13 @@ static mdt_reinter reinters[REINT_MAX] = {
         [REINT_OPEN] = mdt_reint_open
 };
 
-int mdt_reint_rec(struct mdt_thread_info *info, 
+int mdt_reint_rec(struct mdt_thread_info *info,
                   struct lustre_handle *lockh)
 {
         int rc;
         ENTRY;
-        /* checked by unpacker */
-        LASSERT(info->mti_rr.rr_opcode < REINT_MAX && reinters[info->mti_rr.rr_opcode] != NULL);
 
-        rc = reinters[info->mti_rr.rr_opcode] (info, lockh);
+        rc = reinters[info->mti_attr.la_opcode] (info, lockh);
 
         RETURN(rc);
 }