From 0150f17d07f97e76afd85bc17affc4f1b5a8a409 Mon Sep 17 00:00:00 2001 From: nikita Date: Sun, 15 Oct 2006 00:53:21 +0000 Subject: [PATCH] dt/osd: cleanup of txn credit constants handling. --- lustre/include/dt_object.h | 20 ++++++++++-- lustre/include/lu_object.h | 10 ------ lustre/mdd/mdd_handler.c | 77 +++++++++++++++++++++++++++------------------- lustre/osd/osd_handler.c | 76 ++++++++++++++++++--------------------------- 4 files changed, 94 insertions(+), 89 deletions(-) diff --git a/lustre/include/dt_object.h b/lustre/include/dt_object.h index 833e42e..6b029ee 100644 --- a/lustre/include/dt_object.h +++ b/lustre/include/dt_object.h @@ -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 { diff --git a/lustre/include/lu_object.h b/lustre/include/lu_object.h index 65f23d2..ab2de0b 100644 --- a/lustre/include/lu_object.h +++ b/lustre/include/lu_object.h @@ -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 */ diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 7883e9a..0ac548f 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -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); diff --git a/lustre/osd/osd_handler.c b/lustre/osd/osd_handler.c index e5a9f4d..9623329 100644 --- a/lustre/osd/osd_handler.c +++ b/lustre/osd/osd_handler.c @@ -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; } -- 1.8.3.1