SUNRPC: Adding status trace points
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>
This commit is contained in:
parent
85c0d24f02
commit
5753cba176
2 changed files with 57 additions and 0 deletions
|
@ -8,6 +8,59 @@
|
|||
#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),
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <linux/sunrpc/rpc_pipe_fs.h>
|
||||
#include <linux/sunrpc/metrics.h>
|
||||
#include <linux/sunrpc/bc_xprt.h>
|
||||
#include <trace/events/sunrpc.h>
|
||||
|
||||
#include "sunrpc.h"
|
||||
#include "netns.h"
|
||||
|
@ -1247,6 +1248,7 @@ call_bind_status(struct rpc_task *task)
|
|||
return;
|
||||
}
|
||||
|
||||
trace_rpc_bind_status(task);
|
||||
switch (task->tk_status) {
|
||||
case -ENOMEM:
|
||||
dprintk("RPC: %5u rpcbind out of memory\n", task->tk_pid);
|
||||
|
@ -1346,6 +1348,7 @@ call_connect_status(struct rpc_task *task)
|
|||
return;
|
||||
}
|
||||
|
||||
trace_rpc_connect_status(task, status);
|
||||
switch (status) {
|
||||
/* if soft mounted, test if we've timed out */
|
||||
case -ETIMEDOUT:
|
||||
|
@ -1534,6 +1537,7 @@ call_status(struct rpc_task *task)
|
|||
return;
|
||||
}
|
||||
|
||||
trace_rpc_call_status(task);
|
||||
task->tk_status = 0;
|
||||
switch(status) {
|
||||
case -EHOSTDOWN:
|
||||
|
|
Loading…
Add table
Reference in a new issue