Whamcloud - gitweb
(1) store intent_disposition in mdt_thread_info, for mdt_update_last_rcvd to write...
authorhuanghua <huanghua>
Wed, 30 Aug 2006 11:17:05 +0000 (11:17 +0000)
committerhuanghua <huanghua>
Wed, 30 Aug 2006 11:17:05 +0000 (11:17 +0000)
(2) change req_capsule_has_field() to check server and client;
(3) add some modules into module install scripts.

lustre/include/lustre_req_layout.h
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_internal.h
lustre/mdt/mdt_lib.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_recovery.c
lustre/mdt/mdt_xattr.c
lustre/ptlrpc/layout.c
lustre/tests/test-framework.sh
lustre/utils/module_setup.sh

index 15bc66b..44b876f 100644 (file)
@@ -77,9 +77,11 @@ int req_capsule_get_size(const struct req_capsule *pill,
 void req_capsule_extend(struct req_capsule *pill, const struct req_format *fmt);
 
 int req_capsule_has_field(const struct req_capsule *pill,
-                          const struct req_msg_field *field);
+                          const struct req_msg_field *field,
+                          enum req_location loc);
 int req_capsule_field_present(const struct req_capsule *pill,
-                              const struct req_msg_field *field);
+                              const struct req_msg_field *field,
+                              enum req_location loc);
 
 int  req_layout_init(void);
 void req_layout_fini(void);
index bba781a..e8acce1 100644 (file)
@@ -125,6 +125,22 @@ static int mdt_unpack_req_pack_rep(struct mdt_thread_info *info, __u32 flags);
 
 static struct lu_object_operations mdt_obj_ops;
 
+int mdt_get_disposition(struct ldlm_reply *rep, int flag)
+{
+        if (!rep)
+                return 0;
+        return (rep->lock_policy_res1 & flag);
+}
+
+void mdt_set_disposition(struct mdt_thread_info *info,
+                                struct ldlm_reply *rep, int flag)
+{
+        if (info)
+                info->mti_opdata |= flag;
+        if (rep)
+                rep->lock_policy_res1 |= flag;
+}
+
 
 static int mdt_getstatus(struct mdt_thread_info *info)
 {
@@ -366,10 +382,10 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info,
         CDEBUG(D_INODE, "getattr with lock for "DFID"/%s, ldlm_rep = %p\n",
                         PFID(mdt_object_fid(parent)), name, ldlm_rep);
 
-        intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD);
+        mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_EXECD);
         if (strlen(name) == 0) {
                 /* only getattr on the child. parent is on another node. */
-                intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+                mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
                 child = parent;
                 CDEBUG(D_INODE, "partial getattr_name child_fid = "DFID
                                ", ldlm_rep=%p\n",
@@ -398,10 +414,10 @@ static int mdt_getattr_name_lock(struct mdt_thread_info *info,
         result = mdo_lookup(info->mti_ctxt, next, name, child_fid);
         if (result != 0) {
                 if (result == -ENOENT)
-                        intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
+                        mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_NEG);
                 GOTO(out_parent, result);
         } else
-                intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+                mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
         /*
          *step 3: find the child object by fid & lock it.
          *        regardless if it is local or remote.
@@ -1079,7 +1095,7 @@ static int mdt_unpack_req_pack_rep(struct mdt_thread_info *info, __u32 flags)
         ENTRY;
         pill = &info->mti_pill;
 
-        if (req_capsule_has_field(pill, &RMF_MDT_BODY))
+        if (req_capsule_has_field(pill, &RMF_MDT_BODY, RCL_CLIENT))
                 result = mdt_body_unpack(info, flags);
         else
                 result = 0;
@@ -1427,21 +1443,6 @@ static int mdt_readpage_handle(struct ptlrpc_request *req)
         return mdt_handle_common(req, mdt_readpage_handlers);
 }
 
-/*Please move these functions from mds to mdt*/
-int intent_disposition(struct ldlm_reply *rep, int flag)
-{
-        if (!rep)
-                return 0;
-        return (rep->lock_policy_res1 & flag);
-}
-
-void intent_set_disposition(struct ldlm_reply *rep, int flag)
-{
-        if (!rep)
-                return;
-        rep->lock_policy_res1 |= flag;
-}
-
 enum mdt_it_code {
         MDT_IT_OPEN,
         MDT_IT_OCREAT,
@@ -1561,15 +1562,15 @@ static int mdt_intent_getattr(enum mdt_it_code opcode,
         if (rc)
                 RETURN(rc);
         ldlm_rep = req_capsule_server_get(&info->mti_pill, &RMF_DLM_REP);
-        intent_set_disposition(ldlm_rep, DISP_IT_EXECD);
+        mdt_set_disposition(info, ldlm_rep, DISP_IT_EXECD);
 
         ldlm_rep->lock_policy_res2 =
                 mdt_getattr_name_lock(info, lhc, child_bits, ldlm_rep);
         mdt_shrink_reply(info, DLM_REPLY_REC_OFF + 1);
 
-        if (intent_disposition(ldlm_rep, DISP_LOOKUP_NEG))
+        if (mdt_get_disposition(ldlm_rep, DISP_LOOKUP_NEG))
                 ldlm_rep->lock_policy_res2 = 0;
-        if (!intent_disposition(ldlm_rep, DISP_LOOKUP_POS) ||
+        if (!mdt_get_disposition(ldlm_rep, DISP_LOOKUP_POS) ||
                     ldlm_rep->lock_policy_res2) {
                 RETURN(ELDLM_LOCK_ABORTED);
         }
@@ -1652,7 +1653,7 @@ static int mdt_intent_reint(enum mdt_it_code opcode,
                 RETURN(-EFAULT);
         rep->lock_policy_res2 = rc;
 
-        intent_set_disposition(rep, DISP_IT_EXECD);
+        mdt_set_disposition(info, rep, DISP_IT_EXECD);
         
         mdt_finish_reply(info, rc);
 
index 3d5ac81..8d4929a 100644 (file)
@@ -269,8 +269,13 @@ struct mdt_thread_info {
         __u64                      mti_transno;
         __u32                      mti_trans_flags;
 
+        /* opdata for mdt_open(), has the same as ldlm_reply:lock_policy_res1.
+         * mdt_update_last_rcvd() stores this value onto disk for recovery
+         * when mdt_trans_stop_cb() is called. 
+         */
+        __u64                      mti_opdata;
 
-        /* temporary stuff used by thread to save stack comsuption.
+        /* temporary stuff used by thread to save stack consumption. 
          * if something is in a union, make sure they do not conflict */ 
 
         struct lu_fid              mti_tmp_fid1;
@@ -330,6 +335,10 @@ static inline const struct lu_fid *mdt_object_fid(struct mdt_object *o)
         return lu_object_fid(&o->mot_obj.mo_lu);
 }
 
+int mdt_get_disposition(struct ldlm_reply *rep, int flag);
+void mdt_set_disposition(struct mdt_thread_info *info,
+                        struct ldlm_reply *rep, int flag);
+
 int mdt_object_lock(struct mdt_thread_info *,
                     struct mdt_object *,
                     struct mdt_lock_handle *,
index b0b41d2..630e255 100644 (file)
@@ -189,13 +189,13 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info)
         la->la_mtime = rec->sa_mtime;
         ma->ma_valid = MA_INODE;
 
-        if (req_capsule_field_present(pill, &RMF_EADATA)) {
+        if (req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
                 ma->ma_lmm = req_capsule_client_get(pill, &RMF_EADATA);
                 ma->ma_lmm_size = req_capsule_get_size(pill, &RMF_EADATA,
                                                        RCL_CLIENT);
                 ma->ma_valid |= MA_LOV;
         }
-        if (req_capsule_field_present(pill, &RMF_LOGCOOKIES)) {
+        if (req_capsule_field_present(pill, &RMF_LOGCOOKIES, RCL_CLIENT)) {
                 ma->ma_cookie = req_capsule_client_get(pill,
                                                        &RMF_LOGCOOKIES);
                 ma->ma_cookie_size = req_capsule_get_size(pill,
@@ -237,7 +237,8 @@ static int mdt_create_unpack(struct mdt_thread_info *info)
                         info->mti_spec.u.sp_pfid = rr->rr_fid1;
                 } else if (S_ISLNK(attr->la_mode)) {
                         const char *tgt = NULL;
-                        if (req_capsule_field_present(pill, &RMF_SYMTGT)) {
+                        if (req_capsule_field_present(pill, &RMF_SYMTGT, 
+                                                      RCL_CLIENT)) {
                                 tgt = req_capsule_client_get(pill,
                                                              &RMF_SYMTGT);
                                 info->mti_spec.u.sp_symname = tgt;
@@ -363,7 +364,7 @@ static int mdt_open_unpack(struct mdt_thread_info *info)
         } else
                 result = -EFAULT;
 
-        if (req_capsule_field_present(pill, &RMF_EADATA)) {
+        if (req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
                 struct md_create_spec *sp = &info->mti_spec;
                 sp->u.sp_ea.eadata = req_capsule_client_get(pill,
                                                             &RMF_EADATA);
index 5eb92ba..ef8f804 100644 (file)
@@ -212,7 +212,7 @@ static int mdt_mfd_open(struct mdt_thread_info *info,
                 RETURN(0);
         }
 
-        intent_set_disposition(rep, DISP_OPEN_OPEN);
+        mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
         /* we need to return the existing object's fid back, so it is done
          * here, after preparing the reply */
         if (!created && (flags & MDS_OPEN_EXCL) && (flags & MDS_OPEN_CREAT))
@@ -337,9 +337,9 @@ static int mdt_open_by_fid(struct mdt_thread_info* info,
                         else
                                 rc = PTR_ERR(th);
                         if (rc == 0) {
-                                intent_set_disposition(rep, DISP_LOOKUP_EXECD);
-                                intent_set_disposition(rep, DISP_LOOKUP_POS);
-                                intent_set_disposition(rep, DISP_OPEN_OPEN);
+                                mdt_set_disposition(info, rep, DISP_LOOKUP_EXECD);
+                                mdt_set_disposition(info, rep, DISP_LOOKUP_POS);
+                                mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
                                 rc = mdt_mfd_open(info, NULL, o, flags, 0, rep);
                         }
                 } 
@@ -468,10 +468,10 @@ int mdt_open(struct mdt_thread_info *info)
         if (MDT_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK))
                 RETURN(-ENOMEM);
 
-        intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD);
+        mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_EXECD);
         if (rr->rr_name[0] == 0) {
                 /* this is cross-ref open */
-                intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+                mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
                 result = mdt_cross_open(info, rr->rr_fid1, ldlm_rep, create_flags);
                 RETURN(result);
         }
@@ -492,7 +492,7 @@ int mdt_open(struct mdt_thread_info *info)
                 GOTO(out_parent, result);
 
         if (result == -ENOENT || result == -ESTALE) {
-                intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
+                mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_NEG);
                 if (result == -ESTALE) {
                         /*ESTALE means the parent is a dead(unlinked) dir,
                          *so it should return -ENOENT to in accordance
@@ -504,7 +504,7 @@ int mdt_open(struct mdt_thread_info *info)
                 *child_fid = *info->mti_rr.rr_fid2;
                 /* new object will be created. see the following */
         } else {
-                intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+                mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
                 /* check for O_EXCL is moved to the mdt_mfd_open, we need to
                  * return FID back in that case */
         }
@@ -515,7 +515,7 @@ int mdt_open(struct mdt_thread_info *info)
 
         if (result == -ENOENT) {
                 /* not found and with MDS_OPEN_CREAT: let's create it */
-                intent_set_disposition(ldlm_rep, DISP_OPEN_CREATE);
+                mdt_set_disposition(info, ldlm_rep, DISP_OPEN_CREATE);
                 result = mdo_create(info->mti_ctxt,
                                     mdt_object_child(parent),
                                     rr->rr_name,
index 3cf8fb2..8557633 100644 (file)
@@ -528,9 +528,8 @@ static int mdt_update_last_rcvd(struct mdt_thread_info *mti,
                 mcd->mcd_last_result = cpu_to_le32(rc);
                 /*XXX: save intent_disposition in mdt_thread_info?
                  * also there is bug - intent_dispostion is __u64,
-                 * see struct ldlm_reply->lock_policy_res1;
-                mcd->mcd_last_data = cpu_to_le32(op_data);
-                 */
+                 * see struct ldlm_reply->lock_policy_res1; */
+                 mcd->mcd_last_data = cpu_to_le32(mti->mti_opdata);
         }
         if (off <= 0) {
                 CERROR("client idx %d has offset %lld\n", med->med_lr_idx, off);
index c8a7b70..694042d 100644 (file)
@@ -210,7 +210,7 @@ int mdt_setxattr(struct mdt_thread_info *info)
 
         if ((valid & OBD_MD_FLXATTR) == OBD_MD_FLXATTR) {
                 char * xattr;
-                if (!req_capsule_field_present(pill, &RMF_EADATA)) {
+                if (!req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
                         CERROR("no xattr data supplied\n");
                         GOTO(out_unlock, rc = -EFAULT);
                 }
index fb6e441..6c872ed 100644 (file)
@@ -858,21 +858,24 @@ void req_capsule_extend(struct req_capsule *pill, const struct req_format *fmt)
 EXPORT_SYMBOL(req_capsule_extend);
 
 int req_capsule_has_field(const struct req_capsule *pill,
-                          const struct req_msg_field *field)
+                          const struct req_msg_field *field,
+                          enum req_location loc)
 {
-        return field->rmf_offset[pill->rc_fmt->rf_idx][pill->rc_loc ^ 1];
+        LASSERT(loc == RCL_SERVER || loc == RCL_CLIENT);
+
+        return field->rmf_offset[pill->rc_fmt->rf_idx][loc];
 }
 EXPORT_SYMBOL(req_capsule_has_field);
 
 int req_capsule_field_present(const struct req_capsule *pill,
-                              const struct req_msg_field *field)
+                              const struct req_msg_field *field,
+                              enum req_location loc)
 {
-        int loc;
         int offset;
 
-        LASSERT(req_capsule_has_field(pill, field));
+        LASSERT(loc == RCL_SERVER || loc == RCL_CLIENT);
+        LASSERT(req_capsule_has_field(pill, field, loc));
 
-        loc = pill->rc_loc ^ 1;
         offset = __req_capsule_offset(pill, field, loc);
         return lustre_msg_bufcount(__req_msg(pill, loc)) > offset;
 }
index 4474ace..8993b68 100644 (file)
@@ -120,6 +120,14 @@ load_modules() {
     load_module llite/lustre
     load_module mgc/mgc
     load_module mgs/mgs
+    load_module quota/lquota
+    load_module quota/quotacheck_test
+    load_module quota/quotactl_test
+    load_module obdclass/llog_test
+    load_module obdecho/obdecho
+    load_module ldiskfs/quotafmt_test
+
+
     rm -f $TMP/ogdb-`hostname`
     $LCTL modules > $TMP/ogdb-`hostname`
     # 'mount' doesn't look in $PATH, just sbin
index 5cddcf3..8d11978 100755 (executable)
@@ -17,30 +17,38 @@ fi
 
 echo "Copying modules from local build dir to "$MDIR
 
-cp -u ../../lnet/libcfs/libcfs.$EXT $MDIR
 cp -u ../../lnet/lnet/lnet.$EXT $MDIR
+cp -u ../../lnet/libcfs/libcfs.$EXT $MDIR
 cp -u ../../lnet/klnds/socklnd/ksocklnd.$EXT $MDIR
-cp -u ../lvfs/lvfs.$EXT $MDIR
-cp -u ../obdclass/obdclass.$EXT $MDIR
-cp -u ../ptlrpc/ptlrpc.$EXT $MDIR
-cp -u ../mdc/mdc.$EXT $MDIR
-cp -u ../osc/osc.$EXT $MDIR
-cp -u ../mdt/mdt.$EXT $MDIR
-cp -u ../cmm/cmm.$EXT $MDIR
-cp -u ../mdd/mdd.$EXT $MDIR
-cp -u ../osd/osd.$EXT $MDIR
-cp -u ../fld/fld.$EXT $MDIR
-cp -u ../fid/fid.$EXT $MDIR
-cp -u ../lmv/lmv.$EXT $MDIR
-cp -u ../lov/lov.$EXT $MDIR
-cp -u ../mds/mds.$EXT $MDIR
-cp -u ../lvfs/$FSFLT.$EXT $MDIR
-[ $KVER == "26" ] && cp -u ../ldiskfs/ldiskfs.$EXT $MDIR
-cp -u ../ost/ost.$EXT $MDIR
-cp -u ../obdfilter/obdfilter.$EXT $MDIR
-cp -u ../llite/lustre.$EXT $MDIR
-cp -u ../mgc/mgc.$EXT $MDIR
-cp -u ../mgs/mgs.$EXT $MDIR
+cp -u ../../lnet/tests/pingcli.$EXT $MDIR
+cp -u ../../lnet/tests/pingsrv.$EXT $MDIR
+cp -u ../../lustre/mgs/mgs.$EXT $MDIR
+cp -u ../../lustre/quota/lquota.$EXT $MDIR
+cp -u ../../lustre/quota/quotacheck_test.$EXT $MDIR
+cp -u ../../lustre/quota/quotactl_test.$EXT $MDIR
+cp -u ../../lustre/ptlrpc/ptlrpc.$EXT $MDIR
+cp -u ../../lustre/fld/fld.$EXT $MDIR
+cp -u ../../lustre/lov/lov.$EXT $MDIR
+cp -u ../../lustre/mdc/mdc.$EXT $MDIR
+cp -u ../../lustre/llite/lustre.$EXT $MDIR
+cp -u ../../lustre/obdclass/llog_test.$EXT $MDIR
+cp -u ../../lustre/obdclass/obdclass.$EXT $MDIR
+cp -u ../../lustre/mdt/mdt.$EXT $MDIR
+cp -u ../../lustre/fid/fid.$EXT $MDIR
+cp -u ../../lustre/mds/mds.$EXT $MDIR
+cp -u ../../lustre/osd/osd.$EXT $MDIR
+cp -u ../../lustre/obdecho/obdecho.$EXT $MDIR
+cp -u ../../lustre/obdfilter/obdfilter.$EXT $MDIR
+cp -u ../../lustre/cmm/cmm.$EXT $MDIR
+cp -u ../../lustre/ldiskfs/ldiskfs.$EXT $MDIR
+cp -u ../../lustre/ldiskfs/quotafmt_test.$EXT $MDIR
+cp -u ../../lustre/mdd/mdd.$EXT $MDIR
+cp -u ../../lustre/osc/osc.$EXT $MDIR
+cp -u ../../lustre/ost/ost.$EXT $MDIR
+cp -u ../../lustre/mgc/mgc.$EXT $MDIR
+cp -u ../../lustre/lvfs/fsfilt_ldiskfs.$EXT $MDIR
+cp -u ../../lustre/lvfs/lvfs.$EXT $MDIR
+cp -u ../../lustre/lmv/lmv.$EXT $MDIR
 
 # prevent warnings on my uml
 rm -f /lib/modules/`uname -r`/modules.*