Whamcloud - gitweb
dt/osd: cleanup of txn credit constants handling.
authornikita <nikita>
Sun, 15 Oct 2006 00:53:21 +0000 (00:53 +0000)
committernikita <nikita>
Sun, 15 Oct 2006 00:53:21 +0000 (00:53 +0000)
lustre/include/dt_object.h
lustre/include/lu_object.h
lustre/mdd/mdd_handler.c
lustre/osd/osd_handler.c

index 833e42e..6b029ee 100644 (file)
@@ -60,6 +60,22 @@ struct dt_device_param {
 };
 
 /*
+ * Basic transaction credit op
+ */
+enum dt_txn_op {
+        DTO_INDEX_INSERT,
+        DTO_INDEX_DELETE,
+        DTO_IDNEX_UPDATE,
+        DTO_OBJECT_CREATE,
+        DTO_OBJECT_DELETE,
+        DTO_ATTR_SET,
+        DTO_XATTR_SET,
+        DTO_LOG_REC, /* XXX temporary: dt layer knows nothing about llog. */
+
+        DTO_NR
+};
+
+/*
  * Operations on dt device.
  */
 struct dt_device_operations {
@@ -104,10 +120,10 @@ struct dt_device_operations {
                                    __u32 alg, struct lustre_capa_key *keys);
 
         /*
-         *  dt get credits from osd 
+         *  get transaction credits for given @op.
          */
         int (*dt_credit_get)(const struct lu_env *env, struct dt_device *dev,
-                             int op);
+                             enum dt_txn_op);
 };
 
 struct dt_index_features {
index 65f23d2..ab2de0b 100644 (file)
@@ -1023,14 +1023,4 @@ int lu_global_init(void);
  */
 void lu_global_fini(void);
 
-/*
- * Basic transaction credit op
- */
-enum lu_txn_op {
-        INSERT_IAM      = 0,
-        CREATE_OBJECT   = 1,
-        XATTR_SET       = 2,
-        LOG_REC         = 3,
-        ATTR_SET        = 4
-};
 #endif /* __LUSTRE_LU_OBJECT_H */
index 7883e9a..0ac548f 100644 (file)
@@ -148,7 +148,7 @@ spinlock_t mdd_txn_lock;
 static void mdd_txn_param_build(const struct lu_env *env, int op)
 {
         int num_entries, i;
-        
+
         /* init credits for each ops */
         num_entries = ARRAY_SIZE(mdd_txn_descrs);
         LASSERT(num_entries > 0);
@@ -157,7 +157,7 @@ static void mdd_txn_param_build(const struct lu_env *env, int op)
         for (i = 0; i < num_entries; i++) {
                 if (mdd_txn_descrs[i].mod_op == op) {
                         LASSERT(mdd_txn_descrs[i].mod_credits > 0);
-                        mdd_env_info(env)->mti_param.tp_credits = 
+                        mdd_env_info(env)->mti_param.tp_credits =
                                 mdd_txn_descrs[i].mod_credits;
                         spin_unlock(&mdd_txn_lock);
                         return;
@@ -183,20 +183,31 @@ int mdd_txn_init_credits(const struct lu_env *env, struct mdd_device *mdd)
 {
         struct mds_obd *mds = &mdd->mdd_obd_dev->u.mds;
         int ost_count = mds->mds_lov_desc.ld_tgt_count;
-        int iam_credits, xattr_credits, log_credits, create_credits;
-        int num_entries, i, attr_credits;
+
+        int index_create_credits;
+        int index_delete_credits;
+
+        int xattr_credits;
+        int log_credits;
+        int create_credits;
+        int destroy_credits;
+        int attr_credits;
+        int num_entries;
+        int i;
 
         /* Init credits for each ops. */
         num_entries = ARRAY_SIZE(mdd_txn_descrs);
         LASSERT(num_entries > 0);
 
         /* Init the basic credits from osd layer. */
-        iam_credits = mdd_credit_get(env, mdd, INSERT_IAM);
-        log_credits = mdd_credit_get(env, mdd, LOG_REC);
-        attr_credits = mdd_credit_get(env, mdd, ATTR_SET);
-        xattr_credits = mdd_credit_get(env, mdd, XATTR_SET);
-        create_credits = mdd_credit_get(env, mdd, CREATE_OBJECT);
-        
+        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);
+
         /* Calculate the mdd credits. */
         spin_lock(&mdd_txn_lock);
         for (i = 0; i < num_entries; i++) {
@@ -204,11 +215,11 @@ int mdd_txn_init_credits(const struct lu_env *env, struct mdd_device *mdd)
                 int *c = &mdd_txn_descrs[i].mod_credits;
                 switch(opcode) {
                         case MDD_TXN_OBJECT_DESTROY_OP:
-                                *c = 20;
+                                *c = destroy_credits;
                                 break;
                         case MDD_TXN_OBJECT_CREATE_OP:
                                 /* OI_INSERT + CREATE OBJECT */
-                                *c = iam_credits + create_credits; 
+                                *c = index_create_credits + create_credits;
                                 break;
                         case MDD_TXN_ATTR_SET_OP:
                                 /* ATTR set + XATTR(lsm, lmv) set */
@@ -218,36 +229,40 @@ int mdd_txn_init_credits(const struct lu_env *env, struct mdd_device *mdd)
                                 *c = xattr_credits;
                                 break;
                         case MDD_TXN_INDEX_INSERT_OP:
-                                *c = iam_credits;
+                                *c = index_create_credits;
                                 break;
                         case MDD_TXN_INDEX_DELETE_OP:
-                                *c = iam_credits;
+                                *c = index_delete_credits;
                                 break;
                         case MDD_TXN_LINK_OP:
-                                *c = iam_credits;
+                                *c = index_create_credits;
                                 break;
                         case MDD_TXN_UNLINK_OP:
-                                /* delete IAM + Unlink log */
-                                *c = iam_credits + log_credits * ost_count;
+                                /* delete index + Unlink log */
+                                *c = index_delete_credits +
+                                        log_credits * ost_count;
                                 break;
                         case MDD_TXN_RENAME_OP:
-                                /* 2 delete IAM + 1 insert + Unlink log */
-                                *c = 3 * iam_credits + log_credits * ost_count;
+                                /* 2 delete index + 1 insert + Unlink log */
+                                *c = 2 * index_delete_credits +
+                                        index_create_credits +
+                                        log_credits * ost_count;
                                 break;
                         case MDD_TXN_RENAME_TGT_OP:
-                                /* iam insert + iam delete */
-                                *c = 2 * iam_credits;
+                                /* index insert + index delete */
+                                *c = index_delete_credits +
+                                        index_create_credits;
                                 break;
                         case MDD_TXN_CREATE_DATA_OP:
                                 /* same as set xattr(lsm) */
                                 *c = xattr_credits;
                                 break;
                         case MDD_TXN_MKDIR_OP:
-                                /* IAM_INSERT + OI_INSERT + CREATE_OBJECT_CREDITS
-                                 * SET_MD CREDITS is already counted in 
-                                 * CREATE_OBJECT CREDITS 
+                                /* INDEX INSERT + OI INSERT + CREATE_OBJECT_CREDITS
+                                 * SET_MD CREDITS is already counted in
+                                 * CREATE_OBJECT CREDITS
                                  */
-                                 *c = 2 * iam_credits + create_credits;
+                                 *c = 2 * index_create_credits + create_credits;
                                 break;
                         default:
                                 spin_unlock(&mdd_txn_lock);
@@ -257,7 +272,7 @@ int mdd_txn_init_credits(const struct lu_env *env, struct mdd_device *mdd)
                 }
         }
         spin_unlock(&mdd_txn_lock);
-        RETURN(0);        
+        RETURN(0);
 }
 
 struct lu_buf *mdd_buf_get(const struct lu_env *env, void *area, ssize_t len)
@@ -955,7 +970,7 @@ static int mdd_recovery_complete(const struct lu_env *env,
         struct obd_device *obd = mdd2obd_dev(mdd);
         int rc;
         ENTRY;
-        
+
         LASSERT(mdd != NULL);
         LASSERT(obd != NULL);
 #if 0
@@ -982,7 +997,7 @@ static int mdd_recovery_complete(const struct lu_env *env,
 
         obd->obd_recovering = 0;
         obd->obd_type->typ_dt_ops->o_postrecov(obd);
-        
+
         /* XXX: orphans handling. */
         __mdd_orphan_cleanup(env, mdd);
         rc = next->ld_ops->ldo_recovery_complete(env, next);
@@ -1975,7 +1990,7 @@ static int mdd_rename_sanity_check(const struct lu_env *env,
                                 rc = -ENOTEMPTY;
                 mdd_read_unlock(env, tobj);
         }
-        
+
         RETURN(rc);
 }
 /* src object can be remote that is why we use only fid and type of object */
@@ -2038,7 +2053,7 @@ static int mdd_rename(const struct lu_env *env,
                                 mdd_object_capa(env, mdd_tpobj));
         if (rc)
                 GOTO(cleanup, rc);
-        
+
         mdd_sobj = mdd_object_find(env, mdd, lf);
         *la_copy = ma->ma_attr;
         la_copy->la_valid = LA_CTIME;
@@ -2591,7 +2606,7 @@ static int mdd_object_create(const struct lu_env *env,
                 if (rc)
                         GOTO(unlock, rc);
                 pfid = spec->u.sp_ea.fid;
-                
+
                 CWARN("Set slave ea "DFID", eadatalen %d, rc %d\n",
                       PFID(mdo2fid(mdd_obj)), spec->u.sp_ea.eadatalen, rc);
                 rc = mdd_attr_set_internal(env, mdd_obj, &ma->ma_attr, handle);
index e5a9f4d..9623329 100644 (file)
@@ -666,55 +666,39 @@ static int osd_init_capa_ctxt(const struct lu_env *env, struct dt_device *d,
 
 /* Note: we did not count into QUOTA here, If we mount with --data_journal
  * we may need more*/
-enum {
-        /* Insert/Delete IAM
-         * EXT3_INDEX_EXTRA_TRANS_BLOCKS(8) + EXT3_SINGLEDATA_TRANS_BLOCKS 8
-         * XXX Note: maybe iam need more,since iam have more level than Ext3
-         * htree
+static const int osd_dto_credits[DTO_NR] = {
+        /*
+         * Insert/Delete. IAM EXT3_INDEX_EXTRA_TRANS_BLOCKS(8) +
+         * EXT3_SINGLEDATA_TRANS_BLOCKS 8 XXX Note: maybe iam need more,since
+         * iam have more level than Ext3 htree
+         */
+        [DTO_INDEX_INSERT]  = 16,
+        [DTO_INDEX_DELETE]  = 16,
+        [DTO_IDNEX_UPDATE]  = 16,
+        /*
+         * Create a object. Same as create object in Ext3 filesystem, but did
+         * not count QUOTA i EXT3_DATA_TRANS_BLOCKS(12) +
+         * INDEX_EXTRA_BLOCKS(8) + 3(inode bits,groups, GDT)
          */
-        INSERT_IAM_CREDITS  = 16,
-
-        /* Create a object
-         * Same as create object in Ext3 filesystem, but did not count QUOTA i
-         * EXT3_DATA_TRANS_BLOCKS(12) + INDEX_EXTRA_BLOCKS(8) +
-         * 3(inode bits,groups, GDT)*/
-         CREATE_OBJECT_CREDITS = 23,
-
-        /* XATTR_SET
-         * SAME AS XATTR of EXT3 EXT3_DATA_TRANS_BLOCKS
-         * XXX Note: in original MDS implmentation EXT3_INDEX_EXTRA_TRANS_BLOCKS are
-         * also counted in. Do not know why? */
-         XATTR_SET_CREDITS = 12,
-
-        /* A log rec need EXT3_INDEX_EXTRA_TRANS_BLOCKS(8) +
-         *                EXT3_SINGLEDATA_TRANS_BLOCKS(8))
+        [DTO_OBJECT_CREATE] = 23,
+        [DTO_OBJECT_DELETE] = 23,
+        /*
+         * Attr set credits 3 inode, group, GDT
          */
-        LOG_REC_CREDIT = 16,
-
-        /* Attr set credits 3 inode, group, GDT */
-        ATTR_SET_CREDITS = 3
+        [DTO_ATTR_SET]      = 3,
+        /*
+         * XATTR_SET. SAME AS XATTR of EXT3 EXT3_DATA_TRANS_BLOCKS XXX Note:
+         * in original MDS implmentation EXT3_INDEX_EXTRA_TRANS_BLOCKS are
+         * also counted in. Do not know why?
+         */
+        [DTO_XATTR_SET]     = 16,
+        [DTO_LOG_REC]       = 16
 };
-
 static int osd_credit_get(const struct lu_env *env, struct dt_device *d,
-                          int op)
-{
-        switch(op) {
-                case INSERT_IAM:
-                        return INSERT_IAM_CREDITS;
-                case CREATE_OBJECT:
-                        return CREATE_OBJECT_CREDITS;
-                case XATTR_SET:
-                        return XATTR_SET_CREDITS;
-                case LOG_REC:
-                        return LOG_REC_CREDIT;
-                case ATTR_SET:
-                        return ATTR_SET_CREDITS;
-                default:
-                        CERROR("Not recorgonized op %d", op);
-                        LBUG();
-                        return -EINVAL;
-        }
-        return (-EINVAL);
+                          enum dt_txn_op op)
+{
+        LASSERT(0 <= op && op < ARRAY_SIZE(osd_dto_credits));
+        return osd_dto_credits[op];
 }
 
 static struct dt_device_operations osd_dt_ops = {
@@ -1361,7 +1345,7 @@ static int osd_dir_page_build(const struct lu_env *env, int first,
                         break;
                 }
         } while (result == 0);
-        
+
         return result;
 }