NFSv4.1: Add tracepoints for debugging test_stateid events

Add tracepoints to detect issues with the TEST_STATEID operation.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Trond Myklebust 2013-08-20 21:59:40 -04:00
parent 2f92ae343e
commit 08cb47faa4
2 changed files with 52 additions and 0 deletions

View File

@ -1950,6 +1950,7 @@ static void nfs41_clear_delegation_stateid(struct nfs4_state *state)
cred = get_rpccred(delegation->cred); cred = get_rpccred(delegation->cred);
rcu_read_unlock(); rcu_read_unlock();
status = nfs41_test_stateid(server, stateid, cred); status = nfs41_test_stateid(server, stateid, cred);
trace_nfs4_test_delegation_stateid(state, NULL, status);
} else } else
rcu_read_unlock(); rcu_read_unlock();
@ -1992,6 +1993,7 @@ static int nfs41_check_open_stateid(struct nfs4_state *state)
return -NFS4ERR_BAD_STATEID; return -NFS4ERR_BAD_STATEID;
status = nfs41_test_stateid(server, stateid, cred); status = nfs41_test_stateid(server, stateid, cred);
trace_nfs4_test_open_stateid(state, NULL, status);
if (status != NFS_OK) { if (status != NFS_OK) {
/* Free the stateid unless the server explicitly /* Free the stateid unless the server explicitly
* informs us the stateid is unrecognized. */ * informs us the stateid is unrecognized. */
@ -5472,6 +5474,7 @@ static int nfs41_check_expired_locks(struct nfs4_state *state)
status = nfs41_test_stateid(server, status = nfs41_test_stateid(server,
&lsp->ls_stateid, &lsp->ls_stateid,
cred); cred);
trace_nfs4_test_lock_stateid(state, lsp, status);
if (status != NFS_OK) { if (status != NFS_OK) {
/* Free the stateid unless the server /* Free the stateid unless the server
* informs us the stateid is unrecognized. */ * informs us the stateid is unrecognized. */

View File

@ -638,6 +638,55 @@ TRACE_EVENT(nfs4_delegreturn_exit,
) )
); );
#ifdef CONFIG_NFS_V4_1
DECLARE_EVENT_CLASS(nfs4_test_stateid_event,
TP_PROTO(
const struct nfs4_state *state,
const struct nfs4_lock_state *lsp,
int error
),
TP_ARGS(state, lsp, error),
TP_STRUCT__entry(
__field(int, error)
__field(dev_t, dev)
__field(u32, fhandle)
__field(u64, fileid)
),
TP_fast_assign(
const struct inode *inode = state->inode;
__entry->error = error;
__entry->dev = inode->i_sb->s_dev;
__entry->fileid = NFS_FILEID(inode);
__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
),
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_TEST_STATEID_EVENT(name) \
DEFINE_EVENT(nfs4_test_stateid_event, name, \
TP_PROTO( \
const struct nfs4_state *state, \
const struct nfs4_lock_state *lsp, \
int error \
), \
TP_ARGS(state, lsp, error))
DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_delegation_stateid);
DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_open_stateid);
DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_lock_stateid);
#endif /* CONFIG_NFS_V4_1 */
DECLARE_EVENT_CLASS(nfs4_lookup_event, DECLARE_EVENT_CLASS(nfs4_lookup_event,
TP_PROTO( TP_PROTO(
const struct inode *dir, const struct inode *dir,