diff --git a/lustre/include/dt_object.h b/lustre/include/dt_object.h index 5eff04c4b25dfe9736dab6e4d25222bf12b7c369..563adc16ef057787d174195dbcf4f5942593d30a 100644 --- a/lustre/include/dt_object.h +++ b/lustre/include/dt_object.h @@ -71,6 +71,8 @@ enum dt_txn_op { DTO_ATTR_SET, DTO_XATTR_SET, DTO_LOG_REC, /* XXX temporary: dt layer knows nothing about llog. */ + DTO_WRITE_BASE, + DTO_WRITE_BLOCK, DTO_NR }; diff --git a/lustre/mdd/mdd_trans.c b/lustre/mdd/mdd_trans.c index 3c84ee706fd2072cfa7dd59031d9545f8ffabd7f..e1b1461fe62647980281fd0da9dbfc66af10109b 100644 --- a/lustre/mdd/mdd_trans.c +++ b/lustre/mdd/mdd_trans.c @@ -44,9 +44,23 @@ #include "mdd_internal.h" +static int dto_txn_credits[DTO_NR]; + int mdd_txn_start_cb(const struct lu_env *env, struct txn_param *param, void *cookie) { + struct mdd_device *mdd = cookie; + struct obd_device *obd = mdd2obd_dev(mdd); + /* Each transaction updates lov objids, the credits should be added for + * this */ + int blk, shift = mdd->mdd_dt_conf.ddp_block_shift; + blk = ((obd->u.mds.mds_lov_desc.ld_tgt_count * sizeof(obd_id) + + (1 << shift) - 1) >> shift) + 1; + + /* add lov objids credits */ + param->tp_credits += blk * dto_txn_credits[DTO_WRITE_BLOCK] + + dto_txn_credits[DTO_WRITE_BASE]; + return 0; } @@ -66,7 +80,6 @@ int mdd_txn_commit_cb(const struct lu_env *env, struct thandle *txn, return 0; } -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) { diff --git a/lustre/osd/osd_handler.c b/lustre/osd/osd_handler.c index 8361deb4adefb87680b36f5fdd6dd25135bcab33..20965ee3a2a5898fb94ecd251595a379f8c7e60b 100644 --- a/lustre/osd/osd_handler.c +++ b/lustre/osd/osd_handler.c @@ -566,7 +566,7 @@ static int osd_statfs(const struct lu_env *env, spin_lock(&osd->od_osfs_lock); /* cache 1 second */ if (cfs_time_before_64(osd->od_osfs_age, cfs_time_shift_64(-1))) { - result = sb->s_op->statfs(sb, &osd->od_kstatfs); + result = ll_do_statfs(sb, &osd->od_kstatfs); if (likely(result == 0)) /* N.B. statfs can't really fail */ osd->od_osfs_age = cfs_time_current_64(); } @@ -811,7 +811,11 @@ static const int osd_dto_credits[DTO_NR] = { * also counted in. Do not know why? */ [DTO_XATTR_SET] = 16, - [DTO_LOG_REC] = 16 + [DTO_LOG_REC] = 16, + /* creadits for inode change during write */ + [DTO_WRITE_BASE] = 3, + /* credits for single block write */ + [DTO_WRITE_BLOCK] = 12 }; static int osd_credit_get(const struct lu_env *env, struct dt_device *d, diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index a483e3a54faa5cc97f576248df96bf1467b698c4..75b36445c54cb281702355c021d1d315e5cccd8e 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -13,8 +13,8 @@ ONLY=${ONLY:-"$*"} # These tests don't apply to mountconf MOUNTCONFSKIP="10 11 12 13 13b 14 15" -# bug number for skipped test: 13739 13710 -HEAD_EXCEPT=" 32a 32b 33" +# bug number for skipped test: 13739 +HEAD_EXCEPT=" 32a 32b " # bug number for skipped test: 13709 10510 12743 ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $MOUNTCONFSKIP $HEAD_EXCEPT 22 23 36"