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: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Родитель
078ea3dfe3
Коммит
c1578b769a
|
@ -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)
|
||||||
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,
|
||||||
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,
|
||||||
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
|
||||||
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
|
||||||
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,
|
||||||
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,
|
||||||
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);
|
||||||
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче