ENTRY;
#ifdef HAVE_SPLIT_SUPPORT
- if(cd->cmm_tgt_count == 0)
+ if (cd->cmm_tgt_count == 0)
lu2cml_obj(lo)->clo_split = CMM_SPLIT_DENIED;
else
lu2cml_obj(lo)->clo_split = CMM_SPLIT_UNKNOWN;
enum {
LPROC_MDD_OPEN = 0,
LPROC_MDD_CREATE,
+ LPROC_MDD_CREATE_OBJ,
LPROC_MDD_INDEX_INSERT,
LPROC_MDD_INDEX_DELETE,
LPROC_MDD_SET_MD,
LPROC_MDD_UNLINK_LOG,
LPROC_MDD_LOV_CREATE,
LPROC_MDD_LOOKUP,
+ LPROC_MDD_TRANS_START,
+ LPROC_MDD_TRANS_STOP,
+ LPROC_MDD_ATTR_GET,
+ LPROC_MDD_ATTR_SET,
LPROC_MDD_LAST
};
LPROCFS_CNTR_AVGMINMAX, "open", "time");
lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_CREATE,
LPROCFS_CNTR_AVGMINMAX, "create", "time");
+ lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_CREATE_OBJ,
+ LPROCFS_CNTR_AVGMINMAX, "create_obj", "time");
lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_INDEX_INSERT,
LPROCFS_CNTR_AVGMINMAX, "index_insert", "time");
lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_INDEX_DELETE,
LPROCFS_CNTR_AVGMINMAX, "get_md", "time");
lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_LOOKUP,
LPROCFS_CNTR_AVGMINMAX, "lookup", "time");
- EXIT;
+ lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_TRANS_START,
+ LPROCFS_CNTR_AVGMINMAX, "trans_start", "time");
+ lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_TRANS_STOP,
+ LPROCFS_CNTR_AVGMINMAX, "trans_stop", "time");
+ lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_ATTR_GET,
+ LPROCFS_CNTR_AVGMINMAX, "attr_get", "time");
+ lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_ATTR_SET,
+ LPROCFS_CNTR_AVGMINMAX, "attr_set", "time");
+ EXIT;
cleanup:
if (rc) {
lprocfs_free_stats(stats);
struct mdd_object *mdd_obj,
struct md_attr *ma)
{
+ struct mdd_device *mdd = mdo2mdd(&mdd_obj->mod_obj);
+ struct timeval start;
int rc = 0;
ENTRY;
-
+
+ mdd_lprocfs_time_start(mdd, &start, LPROC_MDD_ATTR_GET);
if (ma->ma_need & MA_INODE)
rc = mdd_iattr_get(env, mdd_obj, ma);
#endif
CDEBUG(D_INODE, "after getattr rc = %d, ma_valid = "LPX64"\n",
rc, ma->ma_valid);
+ mdd_lprocfs_time_end(mdd, &start, LPROC_MDD_ATTR_GET);
RETURN(rc);
}
int rc;
ENTRY;
-
LASSERT(lu_object_exists(&obj->mo_lu));
next = mdd_object_child(mdd_obj);
struct mdd_object *obj, struct md_attr *ma,
struct thandle *handle)
{
+ struct mdd_device *mdd = mdo2mdd(&obj->mod_obj);
struct dt_object *next;
struct lu_attr *attr = &ma->ma_attr;
+ struct timeval start;
int rc;
ENTRY;
+ mdd_lprocfs_time_start(mdd, &start, LPROC_MDD_CREATE_OBJ);
+
if (!lu_object_exists(mdd2lu_obj(obj))) {
next = mdd_object_child(obj);
rc = next->do_ops->do_create(env, next, attr, handle);
rc = -EEXIST;
LASSERT(ergo(rc == 0, lu_object_exists(mdd2lu_obj(obj))));
-
+ mdd_lprocfs_time_end(mdd, &start, LPROC_MDD_CREATE_OBJ);
RETURN(rc);
}
const struct lu_attr *attr, struct thandle *handle,
const int needacl)
{
+ struct mdd_device *mdd = mdo2mdd(&o->mod_obj);
struct dt_object *next;
+ struct timeval start;
int rc;
+ mdd_lprocfs_time_start(mdd, &start, LPROC_MDD_ATTR_SET);
LASSERT(lu_object_exists(mdd2lu_obj(o)));
next = mdd_object_child(o);
rc = next->do_ops->do_attr_set(env, next, attr, handle,
if (!rc && (attr->la_valid & LA_MODE) && needacl)
rc = mdd_acl_chmod(env, o, attr->la_mode, handle);
#endif
+ mdd_lprocfs_time_end(mdd, &start, LPROC_MDD_ATTR_SET);
return rc;
}
struct mdd_device *mdd)
{
struct txn_param *p = &mdd_env_info(env)->mti_param;
+ struct timeval start;
+ struct thandle *th;
- return mdd_child_ops(mdd)->dt_trans_start(env, mdd->mdd_child, p);
+ mdd_lprocfs_time_start(mdd, &start, LPROC_MDD_TRANS_START);
+ th = mdd_child_ops(mdd)->dt_trans_start(env, mdd->mdd_child, p);
+ mdd_lprocfs_time_end(mdd, &start, LPROC_MDD_TRANS_START);
+ return th;
}
void mdd_trans_stop(const struct lu_env *env, struct mdd_device *mdd,
int result, struct thandle *handle)
{
+ struct timeval start;
handle->th_result = result;
+ mdd_lprocfs_time_start(mdd, &start, LPROC_MDD_TRANS_STOP);
mdd_child_ops(mdd)->dt_trans_stop(env, handle);
+ mdd_lprocfs_time_end(mdd, &start, LPROC_MDD_TRANS_STOP);
}