Loading fs/nfsd/nfs4callback.c +4 −5 Original line number Diff line number Diff line Loading @@ -1165,6 +1165,8 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback if (!cb->cb_holds_slot) goto need_restart; /* This is the operation status code for CB_SEQUENCE */ trace_nfsd_cb_seq_status(task, cb); switch (cb->cb_seq_status) { case 0: /* Loading Loading @@ -1210,13 +1212,10 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback break; default: nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); dprintk("%s: unprocessed error %d\n", __func__, cb->cb_seq_status); } nfsd41_cb_release_slot(cb); dprintk("%s: freed slot, new seqid=%d\n", __func__, clp->cl_cb_session->se_cb_seq_nr); trace_nfsd_cb_free_slot(task, cb); if (RPC_SIGNALLED(task)) goto need_restart; Loading fs/nfsd/trace.h +82 −0 Original line number Diff line number Diff line Loading @@ -9,8 +9,10 @@ #define _NFSD_TRACE_H #include <linux/tracepoint.h> #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/xprt.h> #include <trace/misc/nfs.h> #include <trace/misc/sunrpc.h> #include "export.h" #include "nfsfh.h" Loading Loading @@ -1440,6 +1442,86 @@ TRACE_EVENT(nfsd_cb_setup_err, __entry->error) ); TRACE_EVENT(nfsd_cb_seq_status, TP_PROTO( const struct rpc_task *task, const struct nfsd4_callback *cb ), TP_ARGS(task, cb), TP_STRUCT__entry( __field(unsigned int, task_id) __field(unsigned int, client_id) __field(u32, cl_boot) __field(u32, cl_id) __field(u32, seqno) __field(u32, reserved) __field(int, tk_status) __field(int, seq_status) ), TP_fast_assign( const struct nfs4_client *clp = cb->cb_clp; const struct nfsd4_session *session = clp->cl_cb_session; const struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)&session->se_sessionid; __entry->task_id = task->tk_pid; __entry->client_id = task->tk_client ? task->tk_client->cl_clid : -1; __entry->cl_boot = sid->clientid.cl_boot; __entry->cl_id = sid->clientid.cl_id; __entry->seqno = sid->sequence; __entry->reserved = sid->reserved; __entry->tk_status = task->tk_status; __entry->seq_status = cb->cb_seq_status; ), TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " sessionid=%08x:%08x:%08x:%08x tk_status=%d seq_status=%d\n", __entry->task_id, __entry->client_id, __entry->cl_boot, __entry->cl_id, __entry->seqno, __entry->reserved, __entry->tk_status, __entry->seq_status ) ); TRACE_EVENT(nfsd_cb_free_slot, TP_PROTO( const struct rpc_task *task, const struct nfsd4_callback *cb ), TP_ARGS(task, cb), TP_STRUCT__entry( __field(unsigned int, task_id) __field(unsigned int, client_id) __field(u32, cl_boot) __field(u32, cl_id) __field(u32, seqno) __field(u32, reserved) __field(u32, slot_seqno) ), TP_fast_assign( const struct nfs4_client *clp = cb->cb_clp; const struct nfsd4_session *session = clp->cl_cb_session; const struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)&session->se_sessionid; __entry->task_id = task->tk_pid; __entry->client_id = task->tk_client ? task->tk_client->cl_clid : -1; __entry->cl_boot = sid->clientid.cl_boot; __entry->cl_id = sid->clientid.cl_id; __entry->seqno = sid->sequence; __entry->reserved = sid->reserved; __entry->slot_seqno = session->se_cb_seq_nr; ), TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " sessionid=%08x:%08x:%08x:%08x new slot seqno=%u\n", __entry->task_id, __entry->client_id, __entry->cl_boot, __entry->cl_id, __entry->seqno, __entry->reserved, __entry->slot_seqno ) ); TRACE_EVENT_CONDITION(nfsd_cb_recall, TP_PROTO( const struct nfs4_stid *stid Loading Loading
fs/nfsd/nfs4callback.c +4 −5 Original line number Diff line number Diff line Loading @@ -1165,6 +1165,8 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback if (!cb->cb_holds_slot) goto need_restart; /* This is the operation status code for CB_SEQUENCE */ trace_nfsd_cb_seq_status(task, cb); switch (cb->cb_seq_status) { case 0: /* Loading Loading @@ -1210,13 +1212,10 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback break; default: nfsd4_mark_cb_fault(cb->cb_clp, cb->cb_seq_status); dprintk("%s: unprocessed error %d\n", __func__, cb->cb_seq_status); } nfsd41_cb_release_slot(cb); dprintk("%s: freed slot, new seqid=%d\n", __func__, clp->cl_cb_session->se_cb_seq_nr); trace_nfsd_cb_free_slot(task, cb); if (RPC_SIGNALLED(task)) goto need_restart; Loading
fs/nfsd/trace.h +82 −0 Original line number Diff line number Diff line Loading @@ -9,8 +9,10 @@ #define _NFSD_TRACE_H #include <linux/tracepoint.h> #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/xprt.h> #include <trace/misc/nfs.h> #include <trace/misc/sunrpc.h> #include "export.h" #include "nfsfh.h" Loading Loading @@ -1440,6 +1442,86 @@ TRACE_EVENT(nfsd_cb_setup_err, __entry->error) ); TRACE_EVENT(nfsd_cb_seq_status, TP_PROTO( const struct rpc_task *task, const struct nfsd4_callback *cb ), TP_ARGS(task, cb), TP_STRUCT__entry( __field(unsigned int, task_id) __field(unsigned int, client_id) __field(u32, cl_boot) __field(u32, cl_id) __field(u32, seqno) __field(u32, reserved) __field(int, tk_status) __field(int, seq_status) ), TP_fast_assign( const struct nfs4_client *clp = cb->cb_clp; const struct nfsd4_session *session = clp->cl_cb_session; const struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)&session->se_sessionid; __entry->task_id = task->tk_pid; __entry->client_id = task->tk_client ? task->tk_client->cl_clid : -1; __entry->cl_boot = sid->clientid.cl_boot; __entry->cl_id = sid->clientid.cl_id; __entry->seqno = sid->sequence; __entry->reserved = sid->reserved; __entry->tk_status = task->tk_status; __entry->seq_status = cb->cb_seq_status; ), TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " sessionid=%08x:%08x:%08x:%08x tk_status=%d seq_status=%d\n", __entry->task_id, __entry->client_id, __entry->cl_boot, __entry->cl_id, __entry->seqno, __entry->reserved, __entry->tk_status, __entry->seq_status ) ); TRACE_EVENT(nfsd_cb_free_slot, TP_PROTO( const struct rpc_task *task, const struct nfsd4_callback *cb ), TP_ARGS(task, cb), TP_STRUCT__entry( __field(unsigned int, task_id) __field(unsigned int, client_id) __field(u32, cl_boot) __field(u32, cl_id) __field(u32, seqno) __field(u32, reserved) __field(u32, slot_seqno) ), TP_fast_assign( const struct nfs4_client *clp = cb->cb_clp; const struct nfsd4_session *session = clp->cl_cb_session; const struct nfsd4_sessionid *sid = (struct nfsd4_sessionid *)&session->se_sessionid; __entry->task_id = task->tk_pid; __entry->client_id = task->tk_client ? task->tk_client->cl_clid : -1; __entry->cl_boot = sid->clientid.cl_boot; __entry->cl_id = sid->clientid.cl_id; __entry->seqno = sid->sequence; __entry->reserved = sid->reserved; __entry->slot_seqno = session->se_cb_seq_nr; ), TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " sessionid=%08x:%08x:%08x:%08x new slot seqno=%u\n", __entry->task_id, __entry->client_id, __entry->cl_boot, __entry->cl_id, __entry->seqno, __entry->reserved, __entry->slot_seqno ) ); TRACE_EVENT_CONDITION(nfsd_cb_recall, TP_PROTO( const struct nfs4_stid *stid Loading