Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5753cba1 authored by Steve Dickson's avatar Steve Dickson Committed by Trond Myklebust
Browse files

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: default avatarSteve Dickson <steved@redhat.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 85c0d24f
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -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),
+4 −0
Original line number Diff line number Diff line
@@ -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: