struct ptlrpc_request *req = NULL;
const char *pv = value;
char *fullname;
+ ktime_t kstart = ktime_get();
u64 valid;
int rc;
ENTRY;
/* When setxattr() is called with a size of 0 the value is
* unconditionally replaced by "". When removexattr() is
* called we get a NULL value and XATTR_REPLACE for flags. */
- if (!value && flags == XATTR_REPLACE) {
- ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_REMOVEXATTR, 1);
+ if (!value && flags == XATTR_REPLACE)
valid = OBD_MD_FLXATTRRM;
- } else {
- ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_SETXATTR, 1);
+ else
valid = OBD_MD_FLXATTR;
- }
/* FIXME: enable IMA when the conditions are ready */
if (handler->flags == XATTR_SECURITY_T &&
if (rc) {
if (rc == -EOPNOTSUPP && handler->flags == XATTR_USER_T) {
LCONSOLE_INFO("Disabling user_xattr feature because it is not supported on the server\n");
- sbi->ll_flags &= ~LL_SBI_USER_XATTR;
- }
+ sbi->ll_flags &= ~LL_SBI_USER_XATTR;
+ }
RETURN(rc);
- }
+ }
+
+ ptlrpc_req_finished(req);
+
+ ll_stats_ops_tally(ll_i2sbi(inode), valid == OBD_MD_FLXATTRRM ?
+ LPROC_LL_REMOVEXATTR : LPROC_LL_SETXATTR,
+ ktime_us_delta(ktime_get(), kstart));
- ptlrpc_req_finished(req);
RETURN(0);
}
const char *name, const void *value, size_t size,
int flags)
{
+ ktime_t kstart = ktime_get();
+ int op_type = flags == XATTR_REPLACE ? LPROC_LL_REMOVEXATTR :
+ LPROC_LL_SETXATTR;
+ int rc;
+
LASSERT(inode);
LASSERT(name);
/* lustre/trusted.lov.xxx would be passed through xattr API */
if (!strcmp(name, "lov")) {
- int op_type = flags == XATTR_REPLACE ? LPROC_LL_REMOVEXATTR :
- LPROC_LL_SETXATTR;
-
- ll_stats_ops_tally(ll_i2sbi(inode), op_type, 1);
-
- return ll_setstripe_ea(dentry, (struct lov_user_md *)value,
+ rc = ll_setstripe_ea(dentry, (struct lov_user_md *)value,
size);
+ ll_stats_ops_tally(ll_i2sbi(inode), op_type,
+ ktime_us_delta(ktime_get(), kstart));
+ return rc;
} else if (!strcmp(name, "lma") || !strcmp(name, "link")) {
- int op_type = flags == XATTR_REPLACE ? LPROC_LL_REMOVEXATTR :
- LPROC_LL_SETXATTR;
-
- ll_stats_ops_tally(ll_i2sbi(inode), op_type, 1);
+ ll_stats_ops_tally(ll_i2sbi(inode), op_type,
+ ktime_us_delta(ktime_get(), kstart));
return 0;
}
const char *name, void *buffer, size_t size)
{
struct ll_sb_info *sbi = ll_i2sbi(inode);
+ ktime_t kstart = ktime_get();
char *fullname;
int rc;
ENTRY;
- ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_GETXATTR, 1);
-
rc = xattr_type_filter(sbi, handler);
if (rc)
RETURN(rc);
rc = ll_xattr_list(inode, fullname, handler->flags, buffer, size,
OBD_MD_FLXATTR);
kfree(fullname);
+ ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_GETXATTR,
+ ktime_us_delta(ktime_get(), kstart));
+
RETURN(rc);
}
RETURN(rc);
} else if (S_ISDIR(inode->i_mode)) {
struct ptlrpc_request *req = NULL;
+ struct ptlrpc_request *root_req = NULL;
struct lov_mds_md *lmm = NULL;
int lmm_size = 0;
- rc = ll_dir_getstripe(inode, (void **)&lmm, &lmm_size,
- &req, 0);
+ rc = ll_dir_getstripe_default(inode, (void **)&lmm, &lmm_size,
+ &req, &root_req, 0);
if (rc < 0)
GOTO(out_req, rc);
out_req:
if (req)
ptlrpc_req_finished(req);
+ if (root_req)
+ ptlrpc_req_finished(root_req);
RETURN(rc);
} else {
{
struct inode *inode = dentry->d_inode;
struct ll_sb_info *sbi = ll_i2sbi(inode);
+ ktime_t kstart = ktime_get();
char *xattr_name;
ssize_t rc, rc2;
size_t len, rem;
CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
PFID(ll_inode2fid(inode)), inode);
- ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_LISTXATTR, 1);
-
rc = ll_xattr_list(inode, NULL, XATTR_OTHER_T, buffer, size,
OBD_MD_FLXATTRLS);
if (rc < 0)
* exists.
*/
if (!size)
- RETURN(rc + sizeof(XATTR_LUSTRE_LOV));
+ goto out;
xattr_name = buffer;
rem = rc;
memcpy(buffer + rc, XATTR_LUSTRE_LOV, sizeof(XATTR_LUSTRE_LOV));
+out:
+ ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_LISTXATTR,
+ ktime_us_delta(ktime_get(), kstart));
+
RETURN(rc + sizeof(XATTR_LUSTRE_LOV));
}