Whamcloud - gitweb
Branch: b_new_cmd
authorwangdi <wangdi>
Fri, 20 Oct 2006 07:30:41 +0000 (07:30 +0000)
committerwangdi <wangdi>
Fri, 20 Oct 2006 07:30:41 +0000 (07:30 +0000)
1) move mdd credits to mdd device
2) compute unlink on lsm stripe count, not ost count.
3) refresh ma valid in mdt layer, before call cmm/mdd api

lustre/mdd/mdd_dir.c
lustre/mdd/mdd_handler.c
lustre/mdd/mdd_internal.h
lustre/mdd/mdd_lov.c
lustre/mdd/mdd_lproc.c
lustre/mdd/mdd_object.c
lustre/mdd/mdd_trans.c
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_reint.c

index f11d5d5..e4972af 100644 (file)
@@ -379,7 +379,7 @@ static int mdd_link(const struct lu_env *env, struct md_object *tgt_obj,
         int rc;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_LINK_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_LINK_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -512,7 +512,10 @@ static int mdd_unlink(const struct lu_env *env,
         int rc, is_dir;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_UNLINK_OP);
+        rc = mdd_log_txn_param_build(env, mdd_cobj, ma, MDD_TXN_UNLINK_OP);
+        if (rc)
+                RETURN(rc);
+        
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -595,11 +598,12 @@ static int mdd_name_insert(const struct lu_env *env,
                            int isdir)
 {
         struct mdd_object *mdd_obj = md2mdd_obj(pobj);
+        struct mdd_device *mdd = mdo2mdd(pobj);
         struct thandle *handle;
         int rc;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_INDEX_INSERT_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_INDEX_INSERT_OP);
         handle = mdd_trans_start(env, mdo2mdd(pobj));
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -657,7 +661,7 @@ static int mdd_name_remove(const struct lu_env *env,
         int rc;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_INDEX_DELETE_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_INDEX_DELETE_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -714,7 +718,7 @@ static int mdd_rename_tgt(const struct lu_env *env,
         int rc;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_RENAME_TGT_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_RENAME_TGT_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -802,7 +806,7 @@ static int mdd_create_data(const struct lu_env *env,
         if (rc)
                 RETURN(rc);
 
-        mdd_txn_param_build(env, MDD_TXN_CREATE_DATA_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_CREATE_DATA_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(rc = PTR_ERR(handle));
@@ -1043,7 +1047,7 @@ static int mdd_create(const struct lu_env *env,
                         RETURN(rc);
         }
 
-        mdd_txn_param_build(env, MDD_TXN_MKDIR_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_MKDIR_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -1263,7 +1267,7 @@ static int mdd_rename(const struct lu_env *env,
         if (tobj)
                 mdd_tobj = md2mdd_obj(tobj);
 
-        mdd_txn_param_build(env, MDD_TXN_RENAME_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_RENAME_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
index e40ed11..73738fa 100644 (file)
@@ -112,6 +112,9 @@ int mdd_iattr_get(const struct lu_env *env, struct mdd_object *mdd_obj,
         int rc = 0;
         ENTRY;
 
+        if (ma->ma_valid & MA_INODE)
+                RETURN(0);
+
         rc = mdd_la_get(env, mdd_obj, &ma->ma_attr,
                           mdd_object_capa(env, mdd_obj));
         if (rc == 0)
@@ -126,6 +129,9 @@ static int __mdd_lmm_get(const struct lu_env *env,
         int rc;
         ENTRY;
 
+        if (ma->ma_valid & MA_LOV)
+                RETURN(0);
+
         LASSERT(ma->ma_lmm != NULL && ma->ma_lmm_size > 0);
         rc = mdd_get_md(env, mdd_obj, ma->ma_lmm, &ma->ma_lmm_size,
                         MDS_LOV_MD_NAME);
@@ -136,12 +142,26 @@ static int __mdd_lmm_get(const struct lu_env *env,
         RETURN(rc);
 }
 
+int mdd_lmm_get_locked(const struct lu_env *env, struct mdd_object *mdd_obj,
+                       struct md_attr *ma)
+{
+        int rc;
+        ENTRY;
+
+        mdd_read_lock(env, mdd_obj);
+        rc = __mdd_lmm_get(env, mdd_obj, ma);
+        mdd_read_unlock(env, mdd_obj);
+        RETURN(rc);
+}
+
 /* get lmv EA only*/
 static int __mdd_lmv_get(const struct lu_env *env,
                          struct mdd_object *mdd_obj, struct md_attr *ma)
 {
         int rc;
 
+        if (ma->ma_valid & MA_LMV)
+                RETURN(0);
         rc = mdd_get_md(env, mdd_obj, ma->ma_lmv, &ma->ma_lmv_size,
                         MDS_LMV_MD_NAME);
         if (rc > 0) {
@@ -562,7 +582,7 @@ static int mdd_attr_set(const struct lu_env *env, struct md_object *obj,
         struct lu_attr *la_copy = &mdd_env_info(env)->mti_la_for_fix;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_ATTR_SET_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_ATTR_SET_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -681,7 +701,7 @@ static int mdd_xattr_set(const struct lu_env *env, struct md_object *obj,
         if (rc)
                 RETURN(rc);
 
-        mdd_txn_param_build(env, MDD_TXN_XATTR_SET_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -731,7 +751,7 @@ int mdd_xattr_del(const struct lu_env *env, struct md_object *obj,
         if (rc)
                 RETURN(rc);
 
-        mdd_txn_param_build(env, MDD_TXN_XATTR_SET_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -755,7 +775,10 @@ static int mdd_ref_del(const struct lu_env *env, struct md_object *obj,
         int rc;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_UNLINK_OP);
+        rc = mdd_log_txn_param_build(env, mdd_obj, ma, MDD_TXN_UNLINK_OP);
+        if (rc)
+                RETURN(rc);
+
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(-ENOMEM);
@@ -824,7 +847,7 @@ static int mdd_object_create(const struct lu_env *env,
         if (rc)
                 RETURN(rc);
 
-        mdd_txn_param_build(env, MDD_TXN_OBJECT_CREATE_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_OBJECT_CREATE_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
@@ -894,7 +917,7 @@ static int mdd_ref_add(const struct lu_env *env,
         int rc;
         ENTRY;
 
-        mdd_txn_param_build(env, MDD_TXN_XATTR_SET_OP);
+        mdd_txn_param_build(env, mdd, MDD_TXN_XATTR_SET_OP);
         handle = mdd_trans_start(env, mdd);
         if (IS_ERR(handle))
                 RETURN(-ENOMEM);
index 0bb1f30..80f1c65 100644 (file)
 #include <linux/sched.h>
 #include <linux/capability.h>
 
-struct dt_device;
+enum mdd_txn_op {
+        MDD_TXN_OBJECT_DESTROY_OP = 0,
+        MDD_TXN_OBJECT_CREATE_OP,
+        MDD_TXN_ATTR_SET_OP,
+        MDD_TXN_XATTR_SET_OP,
+        MDD_TXN_INDEX_INSERT_OP,
+        MDD_TXN_INDEX_DELETE_OP,
+        MDD_TXN_LINK_OP,
+        MDD_TXN_UNLINK_OP,
+        MDD_TXN_RENAME_OP,
+        MDD_TXN_RENAME_TGT_OP,
+        MDD_TXN_CREATE_DATA_OP,
+        MDD_TXN_MKDIR_OP,
+        MDD_TXN_LAST_OP
+};
+
+struct mdd_txn_op_descr {
+        enum mdd_txn_op mod_op;
+        unsigned int    mod_credits;
+};
 
 struct mdd_device {
         struct md_device                 mdd_md_dev;
@@ -47,6 +66,7 @@ struct mdd_device {
         struct dt_txn_callback           mdd_txn_cb;
         cfs_proc_dir_entry_t            *mdd_proc_entry;
         struct lprocfs_stats            *mdd_stats;
+        struct mdd_txn_op_descr          mdd_tod[MDD_TXN_LAST_OP];
 };
 
 enum mod_flags {
@@ -126,6 +146,8 @@ int mdd_attr_set_internal_locked(const struct lu_env *env,
                                  struct mdd_object *o,
                                  const struct lu_attr *attr,
                                  struct thandle *handle);
+int mdd_lmm_get_locked(const struct lu_env *env, struct mdd_object *mdd_obj,
+                       struct md_attr *ma);
 /* mdd_dir.c */
 int mdd_unlink_sanity_check(const struct lu_env *env, struct mdd_object *pobj,
                             struct mdd_object *cobj, struct md_attr *ma);
@@ -182,23 +204,11 @@ extern struct md_dir_operations    mdd_dir_ops;
 extern struct md_object_operations mdd_obj_ops;
 
 /* mdd_trans.c */
-enum mdd_txn_op {
-        MDD_TXN_OBJECT_DESTROY_OP,
-        MDD_TXN_OBJECT_CREATE_OP,
-        MDD_TXN_ATTR_SET_OP,
-        MDD_TXN_XATTR_SET_OP,
-        MDD_TXN_INDEX_INSERT_OP,
-        MDD_TXN_INDEX_DELETE_OP,
-        MDD_TXN_LINK_OP,
-        MDD_TXN_UNLINK_OP,
-        MDD_TXN_RENAME_OP,
-        MDD_TXN_RENAME_TGT_OP,
-        MDD_TXN_CREATE_DATA_OP,
-        MDD_TXN_MKDIR_OP
-};
+void mdd_txn_param_build(const struct lu_env *env, struct mdd_device *mdd,
+                         enum mdd_txn_op);
+int mdd_log_txn_param_build(const struct lu_env *env, struct mdd_object *obj,
+                            struct md_attr *ma, enum mdd_txn_op);
 
-void mdd_txn_param_build(const struct lu_env *env, enum mdd_txn_op op);
-        
 static inline void mdd_object_put(const struct lu_env *env,
                                   struct mdd_object *o)
 {
@@ -207,17 +217,18 @@ static inline void mdd_object_put(const struct lu_env *env,
 
 struct thandle* mdd_trans_start(const struct lu_env *env,
                                        struct mdd_device *);
-void mdd_trans_stop(const struct lu_env *env, struct mdd_device *mdd, 
+
+void mdd_trans_stop(const struct lu_env *env, struct mdd_device *mdd,
                     int rc, struct thandle *handle);
-int mdd_txn_start_cb(const struct lu_env *env, struct txn_param *param, 
+
+int mdd_txn_start_cb(const struct lu_env *env, struct txn_param *param,
                      void *cookie);
 
-int mdd_txn_stop_cb(const struct lu_env *env, struct thandle *txn, 
+int mdd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
                     void *cookie);
 
-int mdd_txn_commit_cb(const struct lu_env *env, struct thandle *txn, 
+int mdd_txn_commit_cb(const struct lu_env *env, struct thandle *txn,
                       void *cookie);
-
 /* mdd_device.c */
 struct lu_object *mdd_object_alloc(const struct lu_env *env,
                                    const struct lu_object_header *hdr,
index 3559d11..951308d 100644 (file)
@@ -58,10 +58,6 @@ static int mdd_lov_update(struct obd_device *host,
         upcall_dev = mdd->mdd_md_dev.md_upcall.mu_upcall_dev;
 
         rc = upcall_dev->md_upcall.mu_upcall(NULL, upcall_dev, MD_LOV_SYNC);
-        if (rc)
-                RETURN(rc);
-        
-        rc = mdd_txn_init_credits(NULL, mdd);
         
         RETURN(rc);
 }
index 021da3a..36f8522 100644 (file)
@@ -134,5 +134,3 @@ void mdd_lproc_time_end(struct mdd_device *mdd, struct timeval *start, int op)
                 lprocfs_counter_add(mdd->mdd_stats, op, timediff);
         return;
 }
-
-
index 5a5390f..392d13f 100644 (file)
@@ -148,7 +148,8 @@ static void mdd_object_delete(const struct lu_env *env,
                 return;
 
         if (test_bit(LU_OBJECT_ORPHAN, &o->lo_header->loh_flags)) {
-                mdd_txn_param_build(env, MDD_TXN_INDEX_DELETE_OP);
+                mdd_txn_param_build(env, lu2mdd_dev(o->lo_dev),
+                                    MDD_TXN_INDEX_DELETE_OP);
                 handle = mdd_trans_start(env, lu2mdd_dev(o->lo_dev));
                 if (IS_ERR(handle))
                         CERROR("Cannot get thandle\n");
index cc76cdd..f24b2ec 100644 (file)
 
 #include "mdd_internal.h"
 
-
-struct mdd_txn_op_descr {
-        enum mdd_txn_op mod_op;
-        unsigned int    mod_credits;
-};
-
-enum {
-        MDD_TXN_OBJECT_DESTROY_CREDITS = 0,
-        MDD_TXN_OBJECT_CREATE_CREDITS = 0,
-        MDD_TXN_ATTR_SET_CREDITS = 0,
-        MDD_TXN_XATTR_SET_CREDITS = 0,
-        MDD_TXN_INDEX_INSERT_CREDITS = 0,
-        MDD_TXN_INDEX_DELETE_CREDITS = 0,
-        MDD_TXN_LINK_CREDITS = 0,
-        MDD_TXN_UNLINK_CREDITS = 0,
-        MDD_TXN_RENAME_CREDITS = 0,
-        MDD_TXN_RENAME_TGT_CREDITS = 0,
-        MDD_TXN_CREATE_DATA_CREDITS = 0,
-        MDD_TXN_MKDIR_CREDITS = 0
-};
-
-#define DEFINE_MDD_TXN_OP_ARRAY(opname, base)   \
-[opname ## _OP - base ## _OP]= {                \
-        .mod_op      = opname ## _OP,           \
-        .mod_credits = opname ## _CREDITS,      \
-}
-
-/*
- * number of blocks to reserve for particular operations. Should be function
- * of ... something. Stub for now.
- */
-
-#define DEFINE_MDD_TXN_OP_DESC(opname)          \
-        DEFINE_MDD_TXN_OP_ARRAY(opname, MDD_TXN_OBJECT_DESTROY)
-
-static struct mdd_txn_op_descr mdd_txn_descrs[] = {
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_OBJECT_DESTROY),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_OBJECT_CREATE),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_ATTR_SET),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_XATTR_SET),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_INDEX_INSERT),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_INDEX_DELETE),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_LINK),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_UNLINK),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_RENAME),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_RENAME_TGT),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_CREATE_DATA),
-        DEFINE_MDD_TXN_OP_DESC(MDD_TXN_MKDIR)
-};
-
 int mdd_txn_start_cb(const struct lu_env *env, struct txn_param *param, 
                      void *cookie)
 {
@@ -116,112 +66,114 @@ int mdd_txn_commit_cb(const struct lu_env *env, struct thandle *txn,
         return 0;
 }
 
-void mdd_txn_param_build(const struct lu_env *env, enum mdd_txn_op op)
+static int dto_txn_credits[DTO_NR];
+void mdd_txn_param_build(const struct lu_env *env, struct mdd_device *mdd,
+                         enum mdd_txn_op op)
 {
-        LASSERT(0 <= op && op < ARRAY_SIZE(mdd_txn_descrs));
+        LASSERT(0 <= op && op < MDD_TXN_LAST_OP);
 
-        mdd_env_info(env)->mti_param.tp_credits =
-                mdd_txn_descrs[op].mod_credits;
+        mdd_env_info(env)->mti_param.tp_credits = mdd->mdd_tod[op].mod_credits;
 }
 
-static int mdd_credit_get(const struct lu_env *env, struct mdd_device *mdd,
-                          int op)
+int mdd_log_txn_param_build(const struct lu_env *env, struct mdd_object *obj,
+                            struct md_attr *ma, enum mdd_txn_op op)
 {
-        int credits;
-        credits = mdd_child_ops(mdd)->dt_credit_get(env, mdd->mdd_child,
-                                                    op);
-        LASSERT(credits > 0);
-        return credits;
+        struct mdd_device *mdd = mdo2mdd(&obj->mod_obj);
+        int rc, log_credits;
+        
+        mdd_txn_param_build(env, mdd, op);
+        
+        LASSERT(op == MDD_TXN_UNLINK_OP || op == MDD_TXN_RENAME_OP);
+        rc = mdd_lmm_get_locked(env, obj, ma);
+        if (rc || !(ma->ma_valid & MA_LOV))
+                RETURN(rc);
+        
+        log_credits = le32_to_cpu(ma->ma_lmm->lmm_stripe_count) * 
+                      dto_txn_credits[DTO_LOG_REC];
+
+        mdd_env_info(env)->mti_param.tp_credits += log_credits; 
+        
+        RETURN(rc);
 }
 
-/* XXX: we should calculate it by lsm count, not ost count. */
-int mdd_txn_init_credits(const struct lu_env *env, struct mdd_device *mdd)
+static void mdd_txn_init_dto_credits(const struct lu_env *env, 
+                                     struct mdd_device *mdd, int *dto_credits)
 {
-        struct mds_obd *mds = &mdd->mdd_obd_dev->u.mds;
-        int ost_count = mds->mds_lov_desc.ld_tgt_count;
-
-        int index_create_credits;
-        int index_delete_credits;
+        int op, credits;
+        for (op = DTO_INDEX_INSERT; op < DTO_NR; op++) { 
+                credits = mdd_child_ops(mdd)->dt_credit_get(env, mdd->mdd_child,
+                                                            op);
+                LASSERT(credits > 0);
+                dto_txn_credits[op] = credits;
+        }
+}
 
-        int xattr_credits;
-        int log_credits;
-        int create_credits;
-        int destroy_credits;
-        int attr_credits;
-        int num_entries;
-        int i;
+int mdd_txn_init_credits(const struct lu_env *env, struct mdd_device *mdd)
+{
+        int op;
 
         /* Init credits for each ops. */
-        num_entries = ARRAY_SIZE(mdd_txn_descrs);
-        LASSERT(num_entries > 0);
-
-        /* Init the basic credits from osd layer. */
-        index_create_credits = mdd_credit_get(env, mdd, DTO_INDEX_INSERT);
-        index_delete_credits = mdd_credit_get(env, mdd, DTO_INDEX_DELETE);
-        log_credits = mdd_credit_get(env, mdd, DTO_LOG_REC);
-        attr_credits = mdd_credit_get(env, mdd, DTO_ATTR_SET);
-        xattr_credits = mdd_credit_get(env, mdd, DTO_XATTR_SET);
-        create_credits = mdd_credit_get(env, mdd, DTO_OBJECT_CREATE);
-        destroy_credits = mdd_credit_get(env, mdd, DTO_OBJECT_DELETE);
+        mdd_txn_init_dto_credits(env, mdd, dto_txn_credits);
 
         /* Calculate the mdd credits. */
-        for (i = 0; i < num_entries; i++) {
-                int opcode = mdd_txn_descrs[i].mod_op;
-                int *c = &mdd_txn_descrs[i].mod_credits;
-                switch(opcode) {
+        for (op = MDD_TXN_OBJECT_DESTROY_OP; op < MDD_TXN_LAST_OP; op++) {
+                int *c = &mdd->mdd_tod[op].mod_credits;
+                int *dt = dto_txn_credits;
+                mdd->mdd_tod[op].mod_op = op;
+                switch(op) {
                         case MDD_TXN_OBJECT_DESTROY_OP:
-                                *c = destroy_credits;
+                                *c = dt[DTO_OBJECT_DELETE];
                                 break;
                         case MDD_TXN_OBJECT_CREATE_OP:
                                 /* OI_INSERT + CREATE OBJECT */
-                                *c = index_create_credits + create_credits;
+                                *c = dt[DTO_INDEX_INSERT] +
+                                        dt[DTO_OBJECT_CREATE];
                                 break;
                         case MDD_TXN_ATTR_SET_OP:
                                 /* ATTR set + XATTR(lsm, lmv) set */
-                                *c = attr_credits + xattr_credits;
+                                *c = dt[DTO_ATTR_SET] + dt[DTO_XATTR_SET];
                                 break;
                         case MDD_TXN_XATTR_SET_OP:
-                                *c = xattr_credits;
+                                *c = dt[DTO_XATTR_SET];
                                 break;
                         case MDD_TXN_INDEX_INSERT_OP:
-                                *c = index_create_credits;
+                                *c = dt[DTO_INDEX_INSERT];
                                 break;
                         case MDD_TXN_INDEX_DELETE_OP:
-                                *c = index_delete_credits;
+                                *c = dt[DTO_INDEX_DELETE];
                                 break;
                         case MDD_TXN_LINK_OP:
-                                *c = index_create_credits;
+                                *c = dt[DTO_INDEX_INSERT];
                                 break;
                         case MDD_TXN_UNLINK_OP:
                                 /* delete index + Unlink log */
-                                *c = index_delete_credits +
-                                        log_credits * ost_count;
+                                *c = dt[DTO_INDEX_DELETE]; 
                                 break;
                         case MDD_TXN_RENAME_OP:
                                 /* 2 delete index + 1 insert + Unlink log */
-                                *c = 2 * index_delete_credits +
-                                        index_create_credits +
-                                        log_credits * ost_count;
+                                *c = 2 * dt[DTO_INDEX_DELETE] +
+                                        dt[DTO_INDEX_INSERT]; 
                                 break;
                         case MDD_TXN_RENAME_TGT_OP:
                                 /* index insert + index delete */
-                                *c = index_delete_credits +
-                                        index_create_credits;
+                                *c = dt[DTO_INDEX_DELETE] + 
+                                     dt[DTO_INDEX_INSERT];
                                 break;
                         case MDD_TXN_CREATE_DATA_OP:
                                 /* same as set xattr(lsm) */
-                                *c = xattr_credits;
+                                *c = dt[DTO_XATTR_SET];
                                 break;
                         case MDD_TXN_MKDIR_OP:
-                                /* INDEX INSERT + OI INSERT + CREATE_OBJECT_CREDITS
+                                /* INDEX INSERT + OI INSERT + 
+                                 * CREATE_OBJECT_CREDITS
                                  * SET_MD CREDITS is already counted in
                                  * CREATE_OBJECT CREDITS
                                  */
-                                 *c = 2 * index_create_credits + create_credits;
+                                 *c = 2 * dt[DTO_INDEX_INSERT] + 
+                                         dt[DTO_OBJECT_CREATE];
                                 break;
                         default:
-                                CERROR("Invalid op %d init its credit\n",
-                                       opcode);
+                                CERROR("Invalid op %d init its credit\n", op);
                                 LBUG();
                 }
         }
@@ -242,5 +194,3 @@ void mdd_trans_stop(const struct lu_env *env, struct mdd_device *mdd,
         handle->th_result = result;
         mdd_child_ops(mdd)->dt_trans_stop(env, handle);
 }
-
-
index f6463b6..585dc83 100644 (file)
@@ -306,6 +306,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
                 ma->ma_lmm_size = req_capsule_get_size(pill, &RMF_MDT_MD,
                                                              RCL_SERVER);
         }
+        ma->ma_valid = 0;
         rc = mo_attr_get(env, next, ma);
         if (rc == -EREMOTE) {
                 /* This object is located on remote node.*/
@@ -1272,6 +1273,7 @@ static int mdt_sync(struct mdt_thread_info *info)
 
                                 next = mdt_object_child(info->mti_object);
                                 info->mti_attr.ma_need = MA_INODE;
+                                info->mti_attr.ma_valid = 0;
                                 rc = mo_attr_get(info->mti_env, next,
                                                  &info->mti_attr);
                                 if (rc == 0) {
@@ -3935,7 +3937,7 @@ static int mdt_destroy_export(struct obd_export *export)
         if (ma->ma_lmm == NULL || ma->ma_cookie == NULL)
                 GOTO(out, rc = -ENOMEM);
         ma->ma_need = MA_LOV | MA_COOKIE;
-
+        ma->ma_valid = 0;
         /* Close any open files (which may also cause orphan unlinking). */
         spin_lock(&med->med_open_lock);
         while (!list_empty(&med->med_open_head)) {
@@ -3956,6 +3958,7 @@ static int mdt_destroy_export(struct obd_export *export)
                 ma->ma_lmm_size = lmm_size;
                 ma->ma_cookie_size = cookie_size;
                 ma->ma_need = MA_LOV | MA_COOKIE;
+                ma->ma_valid = 0;
         }
         spin_unlock(&med->med_open_lock);
         info->mti_mdt = NULL;
index 87067b6..186ffeb 100644 (file)
@@ -85,6 +85,7 @@ static int mdt_create_data(struct mdt_thread_info *info,
                 RETURN(0);
 
         ma->ma_need = MA_INODE | MA_LOV;
+        ma->ma_valid = 0;
         rc = mdo_create_data(info->mti_env,
                              p ? mdt_object_child(p) : NULL,
                              mdt_object_child(o), spec, ma);
@@ -545,6 +546,7 @@ void mdt_reconstruct_open(struct mdt_thread_info *info,
         ma->ma_lmm_size = req_capsule_get_size(&info->mti_pill, &RMF_MDT_MD,
                                                RCL_SERVER);
         ma->ma_need = MA_INODE | MA_LOV;
+        ma->ma_valid = 0;
 
         mdt_req_from_mcd(req, med->med_mcd);
         mdt_set_disposition(info, ldlm_rep, mcd->mcd_last_data);
@@ -729,6 +731,7 @@ int mdt_reint_open(struct mdt_thread_info *info, struct mdt_lock_handle *lhc)
         ma->ma_lmm_size = req_capsule_get_size(&info->mti_pill, &RMF_MDT_MD,
                                                RCL_SERVER);
         ma->ma_need = MA_INODE | MA_LOV;
+        ma->ma_valid = 0;
 
         LASSERT(info->mti_pill.rc_fmt == &RQF_LDLM_INTENT_OPEN);
         ldlm_rep = req_capsule_server_get(&info->mti_pill, &RMF_DLM_REP);
@@ -905,6 +908,7 @@ finish_open:
         if (result != 0 && created) {
                 int rc2;
                 ma->ma_need = 0;
+                ma->ma_valid = 0;
                 ma->ma_cookie_size = 0;
                 rc2 = mdo_unlink(info->mti_env,
                                  mdt_object_child(parent),
@@ -1031,6 +1035,7 @@ int mdt_close(struct mdt_thread_info *info)
                                                           &RMF_LOGCOOKIES,
                                                           RCL_SERVER);
                 ma->ma_need = MA_INODE | MA_LOV | MA_COOKIE;
+                ma->ma_valid = 0;
                 repbody->eadatasize = 0;
                 repbody->aclsize = 0;
         } else
@@ -1108,6 +1113,7 @@ int mdt_done_writing(struct mdt_thread_info *info)
 
                 /* Set EPOCH CLOSE flag if not set by client. */
                 info->mti_epoch->flags |= MF_EPOCH_CLOSE;
+                info->mti_attr.ma_valid = 0;
                 rc = mdt_mfd_close(info, mfd);
         }
         RETURN(rc);
index bed8558..2182ccd 100644 (file)
@@ -75,6 +75,7 @@ static int mdt_md_create(struct mdt_thread_info *info)
                 struct md_object *next = mdt_object_child(parent);
 
                 ma->ma_need = MA_INODE;
+                ma->ma_valid = 0;
                 mdt_fail_write(info->mti_env, info->mti_mdt->mdt_bottom,
                                OBD_FAIL_MDS_REINT_CREATE_WRITE);
 
@@ -115,6 +116,7 @@ static int mdt_md_mkobj(struct mdt_thread_info *info)
                 struct md_object *next = mdt_object_child(o);
 
                 ma->ma_need = MA_INODE;
+                ma->ma_valid = 0;
                 /* Cross-ref create can encounter already created obj in case
                  * of recovery, just get attr in that case */
                 if (mdt_object_exists(o) == 1) {
@@ -281,6 +283,7 @@ static int mdt_reint_setattr(struct mdt_thread_info *info,
         }
 
         ma->ma_need = MA_INODE;
+        ma->ma_valid = 0;
         next = mdt_object_child(mo);
         rc = mo_attr_get(info->mti_env, next, ma);
         if (rc != 0)
@@ -342,7 +345,6 @@ static int mdt_reint_create(struct mdt_thread_info *info,
         RETURN(rc);
 }
 
-
 static int mdt_reint_unlink(struct mdt_thread_info *info,
                             struct mdt_lock_handle *lhc)
 {
@@ -390,7 +392,7 @@ static int mdt_reint_unlink(struct mdt_thread_info *info,
                                                   &RMF_LOGCOOKIES,
                                                   RCL_SERVER);
         ma->ma_need = MA_INODE | MA_LOV | MA_COOKIE;
-
+        ma->ma_valid = 0;
         if (!ma->ma_lmm || !ma->ma_cookie)
                 GOTO(out_unlock_parent, rc = -EINVAL);
 
@@ -435,6 +437,7 @@ static int mdt_reint_unlink(struct mdt_thread_info *info,
          * whether need MA_LOV and MA_COOKIE.
          */
         ma->ma_need = MA_INODE;
+        ma->ma_valid = 0;
         mdt_set_capainfo(info, 1, child_fid, BYPASS_CAPA);
         rc = mdo_unlink(info->mti_env, mdt_object_child(mp),
                         mdt_object_child(mc), rr->rr_name, ma);
@@ -798,6 +801,7 @@ static int mdt_reint_rename(struct mdt_thread_info *info,
                 GOTO(out_unlock_new, rc = -EINVAL);
 
         ma->ma_need = MA_INODE | MA_LOV | MA_COOKIE;
+        ma->ma_valid = 0;
 
         mdt_fail_write(info->mti_env, info->mti_mdt->mdt_bottom,
                        OBD_FAIL_MDS_REINT_RENAME_WRITE);