Commit c1578b76 authored by Trond Myklebust's avatar Trond Myklebust

NFSv4: Add tracepoints for debugging inode manipulations

Set up basic tracepoints for debugging NFSv4 setattr, access,
readlink, readdir, get_acl set_acl get_security_label,
and set_security_label.
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 078ea3df
...@@ -2315,6 +2315,7 @@ static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred, ...@@ -2315,6 +2315,7 @@ static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
int err; int err;
do { do {
err = _nfs4_do_setattr(inode, cred, fattr, sattr, state, ilabel, olabel); err = _nfs4_do_setattr(inode, cred, fattr, sattr, state, ilabel, olabel);
trace_nfs4_setattr(inode, err);
switch (err) { switch (err) {
case -NFS4ERR_OPENMODE: case -NFS4ERR_OPENMODE:
if (!(sattr->ia_valid & ATTR_SIZE)) { if (!(sattr->ia_valid & ATTR_SIZE)) {
...@@ -3143,8 +3144,9 @@ static int nfs4_proc_access(struct inode *inode, struct nfs_access_entry *entry) ...@@ -3143,8 +3144,9 @@ static int nfs4_proc_access(struct inode *inode, struct nfs_access_entry *entry)
struct nfs4_exception exception = { }; struct nfs4_exception exception = { };
int err; int err;
do { do {
err = nfs4_handle_exception(NFS_SERVER(inode), err = _nfs4_proc_access(inode, entry);
_nfs4_proc_access(inode, entry), trace_nfs4_access(inode, err);
err = nfs4_handle_exception(NFS_SERVER(inode), err,
&exception); &exception);
} while (exception.retry); } while (exception.retry);
return err; return err;
...@@ -3197,8 +3199,9 @@ static int nfs4_proc_readlink(struct inode *inode, struct page *page, ...@@ -3197,8 +3199,9 @@ static int nfs4_proc_readlink(struct inode *inode, struct page *page,
struct nfs4_exception exception = { }; struct nfs4_exception exception = { };
int err; int err;
do { do {
err = nfs4_handle_exception(NFS_SERVER(inode), err = _nfs4_proc_readlink(inode, page, pgbase, pglen);
_nfs4_proc_readlink(inode, page, pgbase, pglen), trace_nfs4_readlink(inode, err);
err = nfs4_handle_exception(NFS_SERVER(inode), err,
&exception); &exception);
} while (exception.retry); } while (exception.retry);
return err; return err;
...@@ -3630,9 +3633,10 @@ static int nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred, ...@@ -3630,9 +3633,10 @@ static int nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
struct nfs4_exception exception = { }; struct nfs4_exception exception = { };
int err; int err;
do { do {
err = nfs4_handle_exception(NFS_SERVER(dentry->d_inode), err = _nfs4_proc_readdir(dentry, cred, cookie,
_nfs4_proc_readdir(dentry, cred, cookie, pages, count, plus);
pages, count, plus), trace_nfs4_readdir(dentry->d_inode, err);
err = nfs4_handle_exception(NFS_SERVER(dentry->d_inode), err,
&exception); &exception);
} while (exception.retry); } while (exception.retry);
return err; return err;
...@@ -4333,6 +4337,7 @@ static ssize_t nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bufl ...@@ -4333,6 +4337,7 @@ static ssize_t nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bufl
ssize_t ret; ssize_t ret;
do { do {
ret = __nfs4_get_acl_uncached(inode, buf, buflen); ret = __nfs4_get_acl_uncached(inode, buf, buflen);
trace_nfs4_get_acl(inode, ret);
if (ret >= 0) if (ret >= 0)
break; break;
ret = nfs4_handle_exception(NFS_SERVER(inode), ret, &exception); ret = nfs4_handle_exception(NFS_SERVER(inode), ret, &exception);
...@@ -4412,8 +4417,9 @@ static int nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t buflen ...@@ -4412,8 +4417,9 @@ static int nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t buflen
struct nfs4_exception exception = { }; struct nfs4_exception exception = { };
int err; int err;
do { do {
err = nfs4_handle_exception(NFS_SERVER(inode), err = __nfs4_proc_set_acl(inode, buf, buflen);
__nfs4_proc_set_acl(inode, buf, buflen), trace_nfs4_set_acl(inode, err);
err = nfs4_handle_exception(NFS_SERVER(inode), err,
&exception); &exception);
} while (exception.retry); } while (exception.retry);
return err; return err;
...@@ -4466,8 +4472,9 @@ static int nfs4_get_security_label(struct inode *inode, void *buf, ...@@ -4466,8 +4472,9 @@ static int nfs4_get_security_label(struct inode *inode, void *buf,
return -EOPNOTSUPP; return -EOPNOTSUPP;
do { do {
err = nfs4_handle_exception(NFS_SERVER(inode), err = _nfs4_get_security_label(inode, buf, buflen);
_nfs4_get_security_label(inode, buf, buflen), trace_nfs4_get_security_label(inode, err);
err = nfs4_handle_exception(NFS_SERVER(inode), err,
&exception); &exception);
} while (exception.retry); } while (exception.retry);
return err; return err;
...@@ -4519,9 +4526,10 @@ static int nfs4_do_set_security_label(struct inode *inode, ...@@ -4519,9 +4526,10 @@ static int nfs4_do_set_security_label(struct inode *inode,
int err; int err;
do { do {
err = nfs4_handle_exception(NFS_SERVER(inode), err = _nfs4_do_set_security_label(inode, ilabel,
_nfs4_do_set_security_label(inode, ilabel, fattr, olabel);
fattr, olabel), trace_nfs4_set_security_label(inode, err);
err = nfs4_handle_exception(NFS_SERVER(inode), err,
&exception); &exception);
} while (exception.retry); } while (exception.retry);
return err; return err;
......
...@@ -461,6 +461,57 @@ DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove); ...@@ -461,6 +461,57 @@ DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove);
DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations); DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations);
DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo); DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo);
DECLARE_EVENT_CLASS(nfs4_inode_event,
TP_PROTO(
const struct inode *inode,
int error
),
TP_ARGS(inode, error),
TP_STRUCT__entry(
__field(dev_t, dev)
__field(u32, fhandle)
__field(u64, fileid)
__field(int, error)
),
TP_fast_assign(
__entry->dev = inode->i_sb->s_dev;
__entry->fileid = NFS_FILEID(inode);
__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
__entry->error = error;
),
TP_printk(
"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x",
__entry->error,
show_nfsv4_errors(__entry->error),
MAJOR(__entry->dev), MINOR(__entry->dev),
(unsigned long long)__entry->fileid,
__entry->fhandle
)
);
#define DEFINE_NFS4_INODE_EVENT(name) \
DEFINE_EVENT(nfs4_inode_event, name, \
TP_PROTO( \
const struct inode *inode, \
int error \
), \
TP_ARGS(inode, error))
DEFINE_NFS4_INODE_EVENT(nfs4_setattr);
DEFINE_NFS4_INODE_EVENT(nfs4_access);
DEFINE_NFS4_INODE_EVENT(nfs4_readlink);
DEFINE_NFS4_INODE_EVENT(nfs4_readdir);
DEFINE_NFS4_INODE_EVENT(nfs4_get_acl);
DEFINE_NFS4_INODE_EVENT(nfs4_set_acl);
#ifdef CONFIG_NFS_V4_SECURITY_LABEL
DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label);
DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label);
#endif /* CONFIG_NFS_V4_SECURITY_LABEL */
#endif /* _TRACE_NFS4_H */ #endif /* _TRACE_NFS4_H */
#undef TRACE_INCLUDE_PATH #undef TRACE_INCLUDE_PATH
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment