dev_t rdev)
{
struct qstr *name = &dchild->d_name;
+ ktime_t kstart = ktime_get();
int err;
ENTRY;
}
if (!err)
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_MKNOD, 1);
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_MKNOD,
+ ktime_us_delta(ktime_get(), kstart));
RETURN(err);
}
static int ll_create_nd(struct inode *dir, struct dentry *dentry,
umode_t mode, bool want_excl)
{
+ ktime_t kstart = ktime_get();
int rc;
CFS_FAIL_TIMEOUT(OBD_FAIL_LLITE_CREATE_FILE_PAUSE, cfs_fail_val);
* volatile file name, so we use ll_mknod() here. */
rc = ll_mknod(dir, dentry, mode, 0);
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_CREATE, 1);
-
CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s, unhashed %d\n",
dentry->d_name.len, dentry->d_name.name, d_unhashed(dentry));
+ if (!rc)
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_CREATE,
+ ktime_us_delta(ktime_get(), kstart));
+
return rc;
}
#else /* !HAVE_IOP_ATOMIC_OPEN */
{
struct ll_dentry_data *lld = ll_d2d(dentry);
struct lookup_intent *it = NULL;
+ ktime_t kstart = ktime_get();
int rc;
CFS_FAIL_TIMEOUT(OBD_FAIL_LLITE_CREATE_FILE_PAUSE, cfs_fail_val);
filp = lookup_instantiate_filp(nd, dentry, NULL);
if (IS_ERR(filp))
rc = PTR_ERR(filp);
- }
+ }
out:
- ll_intent_release(it);
- OBD_FREE(it, sizeof(*it));
+ ll_intent_release(it);
+ OBD_FREE(it, sizeof(*it));
- if (!rc)
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_CREATE, 1);
+ if (!rc)
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_CREATE,
+ ktime_us_delta(ktime_get(), kstart));
- return rc;
+ return rc;
}
#endif /* HAVE_IOP_ATOMIC_OPEN */
const char *oldpath)
{
struct qstr *name = &dchild->d_name;
+ ktime_t kstart = ktime_get();
int err;
ENTRY;
err = ll_new_node(dir, dchild, oldpath, S_IFLNK | S_IRWXUGO, 0,
LUSTRE_OPC_SYMLINK);
- if (!err)
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_SYMLINK, 1);
+ if (!err)
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_SYMLINK,
+ ktime_us_delta(ktime_get(), kstart));
- RETURN(err);
+ RETURN(err);
}
static int ll_link(struct dentry *old_dentry, struct inode *dir,
struct ll_sb_info *sbi = ll_i2sbi(dir);
struct ptlrpc_request *request = NULL;
struct md_op_data *op_data;
+ ktime_t kstart = ktime_get();
int err;
ENTRY;
"target=%.*s\n", PFID(ll_inode2fid(src)), src,
PFID(ll_inode2fid(dir)), dir, name->len, name->name);
- op_data = ll_prep_md_op_data(NULL, src, dir, name->name, name->len,
- 0, LUSTRE_OPC_ANY, NULL);
- if (IS_ERR(op_data))
- RETURN(PTR_ERR(op_data));
+ op_data = ll_prep_md_op_data(NULL, src, dir, name->name, name->len,
+ 0, LUSTRE_OPC_ANY, NULL);
+ if (IS_ERR(op_data))
+ RETURN(PTR_ERR(op_data));
- err = md_link(sbi->ll_md_exp, op_data, &request);
- ll_finish_md_op_data(op_data);
- if (err)
- GOTO(out, err);
+ err = md_link(sbi->ll_md_exp, op_data, &request);
+ ll_finish_md_op_data(op_data);
+ if (err)
+ GOTO(out, err);
- ll_update_times(request, dir);
- ll_stats_ops_tally(sbi, LPROC_LL_LINK, 1);
- EXIT;
+ ll_update_times(request, dir);
+ ll_stats_ops_tally(sbi, LPROC_LL_LINK,
+ ktime_us_delta(ktime_get(), kstart));
+ EXIT;
out:
- ptlrpc_req_finished(request);
- RETURN(err);
+ ptlrpc_req_finished(request);
+ RETURN(err);
}
static int ll_mkdir(struct inode *dir, struct dentry *dchild, ll_umode_t mode)
{
struct qstr *name = &dchild->d_name;
- int err;
- ENTRY;
+ ktime_t kstart = ktime_get();
+ int err;
+ ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s, dir="DFID"(%p)\n",
name->len, name->name, PFID(ll_inode2fid(dir)), dir);
err = ll_new_node(dir, dchild, NULL, mode, 0, LUSTRE_OPC_MKDIR);
if (err == 0)
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_MKDIR, 1);
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_MKDIR,
+ ktime_us_delta(ktime_get(), kstart));
RETURN(err);
}
static int ll_rmdir(struct inode *dir, struct dentry *dchild)
{
struct qstr *name = &dchild->d_name;
- struct ptlrpc_request *request = NULL;
- struct md_op_data *op_data;
- int rc;
- ENTRY;
+ struct ptlrpc_request *request = NULL;
+ struct md_op_data *op_data;
+ ktime_t kstart = ktime_get();
+ int rc;
+
+ ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s, dir="DFID"(%p)\n",
name->len, name->name, PFID(ll_inode2fid(dir)), dir);
op_data->op_fid3 = *ll_inode2fid(dchild->d_inode);
op_data->op_fid2 = op_data->op_fid3;
- rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request);
- ll_finish_md_op_data(op_data);
- if (rc == 0) {
- ll_update_times(request, dir);
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_RMDIR, 1);
- }
+ rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request);
+ ll_finish_md_op_data(op_data);
+ if (!rc)
+ ll_update_times(request, dir);
- ptlrpc_req_finished(request);
- RETURN(rc);
+ ptlrpc_req_finished(request);
+ if (!rc)
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_RMDIR,
+ ktime_us_delta(ktime_get(), kstart));
+ RETURN(rc);
}
/**
{
struct ptlrpc_request *request = NULL;
struct md_op_data *op_data;
+ ktime_t kstart = ktime_get();
int rc;
ENTRY;
op_data->op_cli_flags |= CLI_RM_ENTRY;
rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request);
ll_finish_md_op_data(op_data);
- if (rc == 0) {
+ if (!rc)
ll_update_times(request, dir);
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_RMDIR, 1);
- }
ptlrpc_req_finished(request);
+ if (!rc)
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_RMDIR,
+ ktime_us_delta(ktime_get(), kstart));
RETURN(rc);
}
struct ptlrpc_request *request = NULL;
struct md_op_data *op_data;
struct mdt_body *body;
+ ktime_t kstart = ktime_get();
int rc;
+
ENTRY;
+
CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s, dir="DFID"(%p)\n",
name->len, name->name, PFID(ll_inode2fid(dir)), dir);
set_nlink(dchild->d_inode, body->mbo_nlink);
ll_update_times(request, dir);
- ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_UNLINK, 1);
out:
ptlrpc_req_finished(request);
+ if (!rc)
+ ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_UNLINK,
+ ktime_us_delta(ktime_get(), kstart));
RETURN(rc);
}
struct ptlrpc_request *request = NULL;
struct ll_sb_info *sbi = ll_i2sbi(src);
struct md_op_data *op_data;
+ ktime_t kstart = ktime_get();
int err;
ENTRY;
if (tgt_dchild->d_inode != NULL)
op_data->op_fid4 = *ll_inode2fid(tgt_dchild->d_inode);
- err = md_rename(sbi->ll_md_exp, op_data,
- src_name->name, src_name->len,
- tgt_name->name, tgt_name->len, &request);
- ll_finish_md_op_data(op_data);
- if (!err) {
- ll_update_times(request, src);
- ll_update_times(request, tgt);
- ll_stats_ops_tally(sbi, LPROC_LL_RENAME, 1);
- }
+ err = md_rename(sbi->ll_md_exp, op_data,
+ src_name->name, src_name->len,
+ tgt_name->name, tgt_name->len, &request);
+ ll_finish_md_op_data(op_data);
+ if (!err) {
+ ll_update_times(request, src);
+ ll_update_times(request, tgt);
+ }
- ptlrpc_req_finished(request);
+ ptlrpc_req_finished(request);
- if (err == 0)
+ if (!err) {
d_move(src_dchild, tgt_dchild);
+ ll_stats_ops_tally(sbi, LPROC_LL_RENAME,
+ ktime_us_delta(ktime_get(), kstart));
+ }
RETURN(err);
}