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);
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;
{
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++) {
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 */
*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);
}
}
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)
struct obd_device *obd = mdd2obd_dev(mdd);
int rc;
ENTRY;
-
+
LASSERT(mdd != NULL);
LASSERT(obd != NULL);
#if 0
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);
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 */
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;
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);
/* 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 = {
break;
}
} while (result == 0);
-
+
return result;
}