mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
![Steve Dickson](/assets/img/avatar_default.png)
This patch adds three trace points to the status routines in the sunrpc state machine. The goal of these trace points is to give an Admin the ability to check on binding status or connection status to see if there is a potential problem. Signed-off-by: Steve Dickson <steved@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
177 lines
3.8 KiB
C
177 lines
3.8 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM sunrpc
|
|
|
|
#if !defined(_TRACE_SUNRPC_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_SUNRPC_H
|
|
|
|
#include <linux/sunrpc/sched.h>
|
|
#include <linux/sunrpc/clnt.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
DECLARE_EVENT_CLASS(rpc_task_status,
|
|
|
|
TP_PROTO(struct rpc_task *task),
|
|
|
|
TP_ARGS(task),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(const struct rpc_task *, task)
|
|
__field(const struct rpc_clnt *, clnt)
|
|
__field(int, status)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->task = task;
|
|
__entry->clnt = task->tk_client;
|
|
__entry->status = task->tk_status;
|
|
),
|
|
|
|
TP_printk("task:%p@%p, status %d",__entry->task, __entry->clnt, __entry->status)
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_status, rpc_call_status,
|
|
TP_PROTO(struct rpc_task *task),
|
|
|
|
TP_ARGS(task)
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_status, rpc_bind_status,
|
|
TP_PROTO(struct rpc_task *task),
|
|
|
|
TP_ARGS(task)
|
|
);
|
|
|
|
TRACE_EVENT(rpc_connect_status,
|
|
TP_PROTO(struct rpc_task *task, int status),
|
|
|
|
TP_ARGS(task, status),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(const struct rpc_task *, task)
|
|
__field(const struct rpc_clnt *, clnt)
|
|
__field(int, status)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->task = task;
|
|
__entry->clnt = task->tk_client;
|
|
__entry->status = status;
|
|
),
|
|
|
|
TP_printk("task:%p@%p, status %d",__entry->task, __entry->clnt, __entry->status)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(rpc_task_running,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
|
|
|
TP_ARGS(clnt, task, action),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(const struct rpc_clnt *, clnt)
|
|
__field(const struct rpc_task *, task)
|
|
__field(const void *, action)
|
|
__field(unsigned long, runstate)
|
|
__field(int, status)
|
|
__field(unsigned short, flags)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->clnt = clnt;
|
|
__entry->task = task;
|
|
__entry->action = action;
|
|
__entry->runstate = task->tk_runstate;
|
|
__entry->status = task->tk_status;
|
|
__entry->flags = task->tk_flags;
|
|
),
|
|
|
|
TP_printk("task:%p@%p flags=%4.4x state=%4.4lx status=%d action=%pf",
|
|
__entry->task,
|
|
__entry->clnt,
|
|
__entry->flags,
|
|
__entry->runstate,
|
|
__entry->status,
|
|
__entry->action
|
|
)
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_running, rpc_task_begin,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
|
|
|
TP_ARGS(clnt, task, action)
|
|
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_running, rpc_task_run_action,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
|
|
|
TP_ARGS(clnt, task, action)
|
|
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_running, rpc_task_complete,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
|
|
|
TP_ARGS(clnt, task, action)
|
|
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(rpc_task_queued,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
|
|
|
|
TP_ARGS(clnt, task, q),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(const struct rpc_clnt *, clnt)
|
|
__field(const struct rpc_task *, task)
|
|
__field(unsigned long, timeout)
|
|
__field(unsigned long, runstate)
|
|
__field(int, status)
|
|
__field(unsigned short, flags)
|
|
__string(q_name, rpc_qname(q))
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->clnt = clnt;
|
|
__entry->task = task;
|
|
__entry->timeout = task->tk_timeout;
|
|
__entry->runstate = task->tk_runstate;
|
|
__entry->status = task->tk_status;
|
|
__entry->flags = task->tk_flags;
|
|
__assign_str(q_name, rpc_qname(q));
|
|
),
|
|
|
|
TP_printk("task:%p@%p flags=%4.4x state=%4.4lx status=%d timeout=%lu queue=%s",
|
|
__entry->task,
|
|
__entry->clnt,
|
|
__entry->flags,
|
|
__entry->runstate,
|
|
__entry->status,
|
|
__entry->timeout,
|
|
__get_str(q_name)
|
|
)
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_queued, rpc_task_sleep,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
|
|
|
|
TP_ARGS(clnt, task, q)
|
|
|
|
);
|
|
|
|
DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
|
|
|
|
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
|
|
|
|
TP_ARGS(clnt, task, q)
|
|
|
|
);
|
|
|
|
#endif /* _TRACE_SUNRPC_H */
|
|
|
|
#include <trace/define_trace.h>
|