xref: /linux/include/trace/events/sunrpc.h (revision 36ec807b627b4c0a0a382f0ae48eac7187d14b2b)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
282b0a4c3STrond Myklebust #undef TRACE_SYSTEM
382b0a4c3STrond Myklebust #define TRACE_SYSTEM sunrpc
482b0a4c3STrond Myklebust 
582b0a4c3STrond Myklebust #if !defined(_TRACE_SUNRPC_H) || defined(TRACE_HEADER_MULTI_READ)
682b0a4c3STrond Myklebust #define _TRACE_SUNRPC_H
782b0a4c3STrond Myklebust 
882b0a4c3STrond Myklebust #include <linux/sunrpc/sched.h>
982b0a4c3STrond Myklebust #include <linux/sunrpc/clnt.h>
10860a0d9eSJeff Layton #include <linux/sunrpc/svc.h>
111a867a08SJeff Layton #include <linux/sunrpc/xprtsock.h>
1283a712e0SJeff Layton #include <linux/sunrpc/svc_xprt.h>
1340b5ea0cSTrond Myklebust #include <net/tcp_states.h>
1440b5ea0cSTrond Myklebust #include <linux/net.h>
1582b0a4c3STrond Myklebust #include <linux/tracepoint.h>
1682b0a4c3STrond Myklebust 
17247c01ffSChuck Lever #include <trace/misc/sunrpc.h>
18b4776a34SChuck Lever 
19998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_STREAM);
20998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_DGRAM);
21998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_RAW);
22998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_RDM);
23998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_SEQPACKET);
24998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_DCCP);
25998024deSChuck Lever TRACE_DEFINE_ENUM(SOCK_PACKET);
26998024deSChuck Lever 
27998024deSChuck Lever #define show_socket_type(type)					\
28998024deSChuck Lever 	__print_symbolic(type,					\
29998024deSChuck Lever 		{ SOCK_STREAM,		"STREAM" },		\
30998024deSChuck Lever 		{ SOCK_DGRAM,		"DGRAM" },		\
31998024deSChuck Lever 		{ SOCK_RAW,		"RAW" },		\
32998024deSChuck Lever 		{ SOCK_RDM,		"RDM" },		\
33998024deSChuck Lever 		{ SOCK_SEQPACKET,	"SEQPACKET" },		\
34998024deSChuck Lever 		{ SOCK_DCCP,		"DCCP" },		\
35998024deSChuck Lever 		{ SOCK_PACKET,		"PACKET" })
36998024deSChuck Lever 
37998024deSChuck Lever /* This list is known to be incomplete, add new enums as needed. */
38998024deSChuck Lever TRACE_DEFINE_ENUM(AF_UNSPEC);
39998024deSChuck Lever TRACE_DEFINE_ENUM(AF_UNIX);
40998024deSChuck Lever TRACE_DEFINE_ENUM(AF_LOCAL);
41998024deSChuck Lever TRACE_DEFINE_ENUM(AF_INET);
42998024deSChuck Lever TRACE_DEFINE_ENUM(AF_INET6);
43998024deSChuck Lever 
44998024deSChuck Lever #define rpc_show_address_family(family)				\
45998024deSChuck Lever 	__print_symbolic(family,				\
46998024deSChuck Lever 		{ AF_UNSPEC,		"AF_UNSPEC" },		\
47998024deSChuck Lever 		{ AF_UNIX,		"AF_UNIX" },		\
48998024deSChuck Lever 		{ AF_LOCAL,		"AF_LOCAL" },		\
49998024deSChuck Lever 		{ AF_INET,		"AF_INET" },		\
50998024deSChuck Lever 		{ AF_INET6,		"AF_INET6" })
51998024deSChuck Lever 
52c509f15aSChuck Lever DECLARE_EVENT_CLASS(rpc_xdr_buf_class,
53b20dfc3fSChuck Lever 	TP_PROTO(
54c509f15aSChuck Lever 		const struct rpc_task *task,
55b20dfc3fSChuck Lever 		const struct xdr_buf *xdr
56b20dfc3fSChuck Lever 	),
57b20dfc3fSChuck Lever 
58c509f15aSChuck Lever 	TP_ARGS(task, xdr),
59b20dfc3fSChuck Lever 
60b20dfc3fSChuck Lever 	TP_STRUCT__entry(
61c509f15aSChuck Lever 		__field(unsigned int, task_id)
62c509f15aSChuck Lever 		__field(unsigned int, client_id)
63b20dfc3fSChuck Lever 		__field(const void *, head_base)
64b20dfc3fSChuck Lever 		__field(size_t, head_len)
65b20dfc3fSChuck Lever 		__field(const void *, tail_base)
66b20dfc3fSChuck Lever 		__field(size_t, tail_len)
6735940a58SChuck Lever 		__field(unsigned int, page_base)
68b20dfc3fSChuck Lever 		__field(unsigned int, page_len)
69b20dfc3fSChuck Lever 		__field(unsigned int, msg_len)
70b20dfc3fSChuck Lever 	),
71b20dfc3fSChuck Lever 
72b20dfc3fSChuck Lever 	TP_fast_assign(
73c509f15aSChuck Lever 		__entry->task_id = task->tk_pid;
74c3213d26SScott Mayhew 		__entry->client_id = task->tk_client ?
75c3213d26SScott Mayhew 				     task->tk_client->cl_clid : -1;
76b20dfc3fSChuck Lever 		__entry->head_base = xdr->head[0].iov_base;
77b20dfc3fSChuck Lever 		__entry->head_len = xdr->head[0].iov_len;
78b20dfc3fSChuck Lever 		__entry->tail_base = xdr->tail[0].iov_base;
79b20dfc3fSChuck Lever 		__entry->tail_len = xdr->tail[0].iov_len;
8035940a58SChuck Lever 		__entry->page_base = xdr->page_base;
81b20dfc3fSChuck Lever 		__entry->page_len = xdr->page_len;
82b20dfc3fSChuck Lever 		__entry->msg_len = xdr->len;
83b20dfc3fSChuck Lever 	),
84b20dfc3fSChuck Lever 
85b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
8638764c73SLinus Torvalds 		  " head=[%p,%zu] page=%u(%u) tail=[%p,%zu] len=%u",
87c509f15aSChuck Lever 		__entry->task_id, __entry->client_id,
8835940a58SChuck Lever 		__entry->head_base, __entry->head_len,
8935940a58SChuck Lever 		__entry->page_len, __entry->page_base,
9035940a58SChuck Lever 		__entry->tail_base, __entry->tail_len,
9135940a58SChuck Lever 		__entry->msg_len
92b20dfc3fSChuck Lever 	)
93b20dfc3fSChuck Lever );
94b20dfc3fSChuck Lever 
95c509f15aSChuck Lever #define DEFINE_RPCXDRBUF_EVENT(name)					\
96c509f15aSChuck Lever 		DEFINE_EVENT(rpc_xdr_buf_class,				\
97c509f15aSChuck Lever 				rpc_xdr_##name,				\
98b20dfc3fSChuck Lever 				TP_PROTO(				\
99c509f15aSChuck Lever 					const struct rpc_task *task,	\
100b20dfc3fSChuck Lever 					const struct xdr_buf *xdr	\
101b20dfc3fSChuck Lever 				),					\
102c509f15aSChuck Lever 				TP_ARGS(task, xdr))
103b20dfc3fSChuck Lever 
104c509f15aSChuck Lever DEFINE_RPCXDRBUF_EVENT(sendto);
105c509f15aSChuck Lever DEFINE_RPCXDRBUF_EVENT(recvfrom);
106c509f15aSChuck Lever DEFINE_RPCXDRBUF_EVENT(reply_pages);
107c509f15aSChuck Lever 
108b20dfc3fSChuck Lever 
10942aad0d7SChuck Lever DECLARE_EVENT_CLASS(rpc_clnt_class,
11042aad0d7SChuck Lever 	TP_PROTO(
11142aad0d7SChuck Lever 		const struct rpc_clnt *clnt
11242aad0d7SChuck Lever 	),
11342aad0d7SChuck Lever 
11442aad0d7SChuck Lever 	TP_ARGS(clnt),
11542aad0d7SChuck Lever 
11642aad0d7SChuck Lever 	TP_STRUCT__entry(
11742aad0d7SChuck Lever 		__field(unsigned int, client_id)
11842aad0d7SChuck Lever 	),
11942aad0d7SChuck Lever 
12042aad0d7SChuck Lever 	TP_fast_assign(
12142aad0d7SChuck Lever 		__entry->client_id = clnt->cl_clid;
12242aad0d7SChuck Lever 	),
12342aad0d7SChuck Lever 
124b4776a34SChuck Lever 	TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER, __entry->client_id)
12542aad0d7SChuck Lever );
12642aad0d7SChuck Lever 
12742aad0d7SChuck Lever #define DEFINE_RPC_CLNT_EVENT(name)					\
12842aad0d7SChuck Lever 		DEFINE_EVENT(rpc_clnt_class,				\
12942aad0d7SChuck Lever 				rpc_clnt_##name,			\
13042aad0d7SChuck Lever 				TP_PROTO(				\
13142aad0d7SChuck Lever 					const struct rpc_clnt *clnt	\
13242aad0d7SChuck Lever 				),					\
13342aad0d7SChuck Lever 				TP_ARGS(clnt))
13442aad0d7SChuck Lever 
13542aad0d7SChuck Lever DEFINE_RPC_CLNT_EVENT(free);
13642aad0d7SChuck Lever DEFINE_RPC_CLNT_EVENT(killall);
13742aad0d7SChuck Lever DEFINE_RPC_CLNT_EVENT(shutdown);
13842aad0d7SChuck Lever DEFINE_RPC_CLNT_EVENT(release);
13942aad0d7SChuck Lever DEFINE_RPC_CLNT_EVENT(replace_xprt);
14042aad0d7SChuck Lever DEFINE_RPC_CLNT_EVENT(replace_xprt_err);
14142aad0d7SChuck Lever 
14297d1c83cSChuck Lever TRACE_DEFINE_ENUM(RPC_XPRTSEC_NONE);
14397d1c83cSChuck Lever TRACE_DEFINE_ENUM(RPC_XPRTSEC_TLS_X509);
14497d1c83cSChuck Lever 
14597d1c83cSChuck Lever #define rpc_show_xprtsec_policy(policy)					\
14697d1c83cSChuck Lever 	__print_symbolic(policy,					\
14797d1c83cSChuck Lever 		{ RPC_XPRTSEC_NONE,		"none" },		\
14897d1c83cSChuck Lever 		{ RPC_XPRTSEC_TLS_ANON,		"tls-anon" },		\
14997d1c83cSChuck Lever 		{ RPC_XPRTSEC_TLS_X509,		"tls-x509" })
15097d1c83cSChuck Lever 
15197d1c83cSChuck Lever #define rpc_show_create_flags(flags)					\
15297d1c83cSChuck Lever 	__print_flags(flags, "|",					\
15397d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_HARDRTRY,	"HARDRTRY" },		\
15497d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_AUTOBIND,	"AUTOBIND" },		\
15597d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_NONPRIVPORT,	"NONPRIVPORT" },	\
15697d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_NOPING,	"NOPING" },		\
15797d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_DISCRTRY,	"DISCRTRY" },		\
15897d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_QUIET,	"QUIET" },		\
15997d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_INFINITE_SLOTS,			\
16097d1c83cSChuck Lever 						"INFINITE_SLOTS" },	\
16197d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_NO_IDLE_TIMEOUT,			\
16297d1c83cSChuck Lever 						"NO_IDLE_TIMEOUT" },	\
16397d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT,			\
16497d1c83cSChuck Lever 						"NO_RETRANS_TIMEOUT" },	\
16597d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_SOFTERR,	"SOFTERR" },		\
16697d1c83cSChuck Lever 		{ RPC_CLNT_CREATE_REUSEPORT,	"REUSEPORT" })
16797d1c83cSChuck Lever 
16842aad0d7SChuck Lever TRACE_EVENT(rpc_clnt_new,
16942aad0d7SChuck Lever 	TP_PROTO(
17042aad0d7SChuck Lever 		const struct rpc_clnt *clnt,
17142aad0d7SChuck Lever 		const struct rpc_xprt *xprt,
17297d1c83cSChuck Lever 		const struct rpc_create_args *args
17342aad0d7SChuck Lever 	),
17442aad0d7SChuck Lever 
17597d1c83cSChuck Lever 	TP_ARGS(clnt, xprt, args),
17642aad0d7SChuck Lever 
17742aad0d7SChuck Lever 	TP_STRUCT__entry(
17842aad0d7SChuck Lever 		__field(unsigned int, client_id)
17997d1c83cSChuck Lever 		__field(unsigned long, xprtsec)
18097d1c83cSChuck Lever 		__field(unsigned long, flags)
18197d1c83cSChuck Lever 		__string(program, clnt->cl_program->name)
18297d1c83cSChuck Lever 		__string(server, xprt->servername)
18342aad0d7SChuck Lever 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
18442aad0d7SChuck Lever 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
18542aad0d7SChuck Lever 	),
18642aad0d7SChuck Lever 
18742aad0d7SChuck Lever 	TP_fast_assign(
18842aad0d7SChuck Lever 		__entry->client_id = clnt->cl_clid;
18997d1c83cSChuck Lever 		__entry->xprtsec = args->xprtsec.policy;
19097d1c83cSChuck Lever 		__entry->flags = args->flags;
191*2c92ca84SSteven Rostedt (Google) 		__assign_str(program);
192*2c92ca84SSteven Rostedt (Google) 		__assign_str(server);
193*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
194*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
19542aad0d7SChuck Lever 	),
19642aad0d7SChuck Lever 
19797d1c83cSChuck Lever 	TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER " peer=[%s]:%s"
19897d1c83cSChuck Lever 		" program=%s server=%s xprtsec=%s flags=%s",
19942aad0d7SChuck Lever 		__entry->client_id, __get_str(addr), __get_str(port),
20097d1c83cSChuck Lever 		__get_str(program), __get_str(server),
20197d1c83cSChuck Lever 		rpc_show_xprtsec_policy(__entry->xprtsec),
20297d1c83cSChuck Lever 		rpc_show_create_flags(__entry->flags)
20397d1c83cSChuck Lever 	)
20442aad0d7SChuck Lever );
20542aad0d7SChuck Lever 
20642aad0d7SChuck Lever TRACE_EVENT(rpc_clnt_new_err,
20742aad0d7SChuck Lever 	TP_PROTO(
20842aad0d7SChuck Lever 		const char *program,
20942aad0d7SChuck Lever 		const char *server,
21042aad0d7SChuck Lever 		int error
21142aad0d7SChuck Lever 	),
21242aad0d7SChuck Lever 
21342aad0d7SChuck Lever 	TP_ARGS(program, server, error),
21442aad0d7SChuck Lever 
21542aad0d7SChuck Lever 	TP_STRUCT__entry(
21642aad0d7SChuck Lever 		__field(int, error)
21742aad0d7SChuck Lever 		__string(program, program)
21842aad0d7SChuck Lever 		__string(server, server)
21942aad0d7SChuck Lever 	),
22042aad0d7SChuck Lever 
22142aad0d7SChuck Lever 	TP_fast_assign(
22242aad0d7SChuck Lever 		__entry->error = error;
223*2c92ca84SSteven Rostedt (Google) 		__assign_str(program);
224*2c92ca84SSteven Rostedt (Google) 		__assign_str(server);
22542aad0d7SChuck Lever 	),
22642aad0d7SChuck Lever 
22742aad0d7SChuck Lever 	TP_printk("program=%s server=%s error=%d",
22842aad0d7SChuck Lever 		__get_str(program), __get_str(server), __entry->error)
22942aad0d7SChuck Lever );
23042aad0d7SChuck Lever 
23142aad0d7SChuck Lever TRACE_EVENT(rpc_clnt_clone_err,
23242aad0d7SChuck Lever 	TP_PROTO(
23342aad0d7SChuck Lever 		const struct rpc_clnt *clnt,
23442aad0d7SChuck Lever 		int error
23542aad0d7SChuck Lever 	),
23642aad0d7SChuck Lever 
23742aad0d7SChuck Lever 	TP_ARGS(clnt, error),
23842aad0d7SChuck Lever 
23942aad0d7SChuck Lever 	TP_STRUCT__entry(
24042aad0d7SChuck Lever 		__field(unsigned int, client_id)
24142aad0d7SChuck Lever 		__field(int, error)
24242aad0d7SChuck Lever 	),
24342aad0d7SChuck Lever 
24442aad0d7SChuck Lever 	TP_fast_assign(
24542aad0d7SChuck Lever 		__entry->client_id = clnt->cl_clid;
24642aad0d7SChuck Lever 		__entry->error = error;
24742aad0d7SChuck Lever 	),
24842aad0d7SChuck Lever 
249b4776a34SChuck Lever 	TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER " error=%d",
250b4776a34SChuck Lever 		__entry->client_id, __entry->error)
25142aad0d7SChuck Lever );
25242aad0d7SChuck Lever 
253dc5820bdSChuck Lever 
254dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_OK);
255dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_BADCRED);
256dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_REJECTEDCRED);
257dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_BADVERF);
258dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_REJECTEDVERF);
259dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_TOOWEAK);
260dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPCSEC_GSS_CREDPROBLEM);
261dc5820bdSChuck Lever TRACE_DEFINE_ENUM(RPCSEC_GSS_CTXPROBLEM);
262dc5820bdSChuck Lever 
2635753cba1SSteve Dickson #define rpc_show_auth_stat(status)					\
264c435da68SChuck Lever 	__print_symbolic(status,					\
265c435da68SChuck Lever 		{ RPC_AUTH_OK,			"AUTH_OK" },		\
266c435da68SChuck Lever 		{ RPC_AUTH_BADCRED,		"BADCRED" },		\
267c435da68SChuck Lever 		{ RPC_AUTH_REJECTEDCRED,	"REJECTEDCRED" },	\
268c435da68SChuck Lever 		{ RPC_AUTH_BADVERF,		"BADVERF" },		\
269c435da68SChuck Lever 		{ RPC_AUTH_REJECTEDVERF,	"REJECTEDVERF" },	\
270c435da68SChuck Lever 		{ RPC_AUTH_TOOWEAK,		"TOOWEAK" },		\
271c435da68SChuck Lever 		{ RPCSEC_GSS_CREDPROBLEM,	"GSS_CREDPROBLEM" },	\
272c435da68SChuck Lever 		{ RPCSEC_GSS_CTXPROBLEM,	"GSS_CTXPROBLEM" })	\
273c435da68SChuck Lever 
274c435da68SChuck Lever DECLARE_EVENT_CLASS(rpc_task_status,
275c435da68SChuck Lever 
276c435da68SChuck Lever 	TP_PROTO(const struct rpc_task *task),
277c435da68SChuck Lever 
278c435da68SChuck Lever 	TP_ARGS(task),
279c435da68SChuck Lever 
280c435da68SChuck Lever 	TP_STRUCT__entry(
281c435da68SChuck Lever 		__field(unsigned int, task_id)
282c435da68SChuck Lever 		__field(unsigned int, client_id)
283c435da68SChuck Lever 		__field(int, status)
284c435da68SChuck Lever 	),
285c435da68SChuck Lever 
286c435da68SChuck Lever 	TP_fast_assign(
287c435da68SChuck Lever 		__entry->task_id = task->tk_pid;
288c435da68SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
289c435da68SChuck Lever 		__entry->status = task->tk_status;
290c435da68SChuck Lever 	),
291c435da68SChuck Lever 
292b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " status=%d",
29382b0a4c3STrond Myklebust 		__entry->task_id, __entry->client_id,
29482b0a4c3STrond Myklebust 		__entry->status)
29582b0a4c3STrond Myklebust );
29682b0a4c3STrond Myklebust #define DEFINE_RPC_STATUS_EVENT(name) \
29782b0a4c3STrond Myklebust 	DEFINE_EVENT(rpc_task_status, rpc_##name##_status, \
29882b0a4c3STrond Myklebust 			TP_PROTO( \
29982b0a4c3STrond Myklebust 				const struct rpc_task *task \
30082b0a4c3STrond Myklebust 			), \
30182b0a4c3STrond Myklebust 			TP_ARGS(task))
30282b0a4c3STrond Myklebust 
30382b0a4c3STrond Myklebust DEFINE_RPC_STATUS_EVENT(call);
30482b0a4c3STrond Myklebust DEFINE_RPC_STATUS_EVENT(connect);
305914cdcc7SChuck Lever DEFINE_RPC_STATUS_EVENT(timeout);
3067c8099f6SChuck Lever DEFINE_RPC_STATUS_EVENT(retry_refresh);
3077c8099f6SChuck Lever DEFINE_RPC_STATUS_EVENT(refresh);
30882b0a4c3STrond Myklebust 
309c435da68SChuck Lever TRACE_EVENT(rpc_request,
310c435da68SChuck Lever 	TP_PROTO(const struct rpc_task *task),
311c435da68SChuck Lever 
312c435da68SChuck Lever 	TP_ARGS(task),
313c435da68SChuck Lever 
314c435da68SChuck Lever 	TP_STRUCT__entry(
315c435da68SChuck Lever 		__field(unsigned int, task_id)
316c435da68SChuck Lever 		__field(unsigned int, client_id)
317c435da68SChuck Lever 		__field(int, version)
318c435da68SChuck Lever 		__field(bool, async)
319c435da68SChuck Lever 		__string(progname, task->tk_client->cl_program->name)
320c435da68SChuck Lever 		__string(procname, rpc_proc_name(task))
321c435da68SChuck Lever 	),
322c435da68SChuck Lever 
323c435da68SChuck Lever 	TP_fast_assign(
324c435da68SChuck Lever 		__entry->task_id = task->tk_pid;
325c435da68SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
326c435da68SChuck Lever 		__entry->version = task->tk_client->cl_vers;
327c435da68SChuck Lever 		__entry->async = RPC_IS_ASYNC(task);
328*2c92ca84SSteven Rostedt (Google) 		__assign_str(progname);
329*2c92ca84SSteven Rostedt (Google) 		__assign_str(procname);
330c435da68SChuck Lever 	),
331c435da68SChuck Lever 
332b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " %sv%d %s (%ssync)",
333c435da68SChuck Lever 		__entry->task_id, __entry->client_id,
334c435da68SChuck Lever 		__get_str(progname), __entry->version,
335c435da68SChuck Lever 		__get_str(procname), __entry->async ? "a": ""
336c435da68SChuck Lever 		)
337c435da68SChuck Lever );
338c435da68SChuck Lever 
3396f701383SChuck Lever #define rpc_show_task_flags(flags)					\
3406f701383SChuck Lever 	__print_flags(flags, "|",					\
3416f701383SChuck Lever 		{ RPC_TASK_ASYNC, "ASYNC" },				\
3426f701383SChuck Lever 		{ RPC_TASK_SWAPPER, "SWAPPER" },			\
343f9d091cfSChuck Lever 		{ RPC_TASK_MOVEABLE, "MOVEABLE" },			\
3447a34c8e0SChuck Lever 		{ RPC_TASK_NULLCREDS, "NULLCREDS" },			\
3456f701383SChuck Lever 		{ RPC_CALL_MAJORSEEN, "MAJORSEEN" },			\
3466f701383SChuck Lever 		{ RPC_TASK_DYNAMIC, "DYNAMIC" },			\
3477a34c8e0SChuck Lever 		{ RPC_TASK_NO_ROUND_ROBIN, "NO_ROUND_ROBIN" },		\
3486f701383SChuck Lever 		{ RPC_TASK_SOFT, "SOFT" },				\
3496f701383SChuck Lever 		{ RPC_TASK_SOFTCONN, "SOFTCONN" },			\
3506f701383SChuck Lever 		{ RPC_TASK_SENT, "SENT" },				\
3516f701383SChuck Lever 		{ RPC_TASK_TIMEOUT, "TIMEOUT" },			\
3526f701383SChuck Lever 		{ RPC_TASK_NOCONNECT, "NOCONNECT" },			\
3537a34c8e0SChuck Lever 		{ RPC_TASK_NO_RETRANS_TIMEOUT, "NORTO" },		\
3547a34c8e0SChuck Lever 		{ RPC_TASK_CRED_NOREF, "CRED_NOREF" })
3556f701383SChuck Lever 
3566f701383SChuck Lever #define rpc_show_runstate(flags)					\
3576f701383SChuck Lever 	__print_flags(flags, "|",					\
3586f701383SChuck Lever 		{ (1UL << RPC_TASK_RUNNING), "RUNNING" },		\
3596f701383SChuck Lever 		{ (1UL << RPC_TASK_QUEUED), "QUEUED" },			\
3606f701383SChuck Lever 		{ (1UL << RPC_TASK_ACTIVE), "ACTIVE" },			\
3616f701383SChuck Lever 		{ (1UL << RPC_TASK_NEED_XMIT), "NEED_XMIT" },		\
3626f701383SChuck Lever 		{ (1UL << RPC_TASK_NEED_RECV), "NEED_RECV" },		\
363ae67bd38STrond Myklebust 		{ (1UL << RPC_TASK_MSG_PIN_WAIT), "MSG_PIN_WAIT" },	\
364ae67bd38STrond Myklebust 		{ (1UL << RPC_TASK_SIGNALLED), "SIGNALLED" })
3656f701383SChuck Lever 
36682b0a4c3STrond Myklebust DECLARE_EVENT_CLASS(rpc_task_running,
36782b0a4c3STrond Myklebust 
368e671edb9SChuck Lever 	TP_PROTO(const struct rpc_task *task, const void *action),
36982b0a4c3STrond Myklebust 
370e671edb9SChuck Lever 	TP_ARGS(task, action),
37182b0a4c3STrond Myklebust 
37282b0a4c3STrond Myklebust 	TP_STRUCT__entry(
37392cb6c5bSTrond Myklebust 		__field(unsigned int, task_id)
37492cb6c5bSTrond Myklebust 		__field(unsigned int, client_id)
37582b0a4c3STrond Myklebust 		__field(const void *, action)
37682b0a4c3STrond Myklebust 		__field(unsigned long, runstate)
37782b0a4c3STrond Myklebust 		__field(int, status)
37882b0a4c3STrond Myklebust 		__field(unsigned short, flags)
37982b0a4c3STrond Myklebust 		),
38082b0a4c3STrond Myklebust 
38182b0a4c3STrond Myklebust 	TP_fast_assign(
382e671edb9SChuck Lever 		__entry->client_id = task->tk_client ?
383e671edb9SChuck Lever 				     task->tk_client->cl_clid : -1;
38492cb6c5bSTrond Myklebust 		__entry->task_id = task->tk_pid;
38582b0a4c3STrond Myklebust 		__entry->action = action;
38682b0a4c3STrond Myklebust 		__entry->runstate = task->tk_runstate;
38782b0a4c3STrond Myklebust 		__entry->status = task->tk_status;
38882b0a4c3STrond Myklebust 		__entry->flags = task->tk_flags;
38982b0a4c3STrond Myklebust 		),
39082b0a4c3STrond Myklebust 
391b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
392b4776a34SChuck Lever 		  " flags=%s runstate=%s status=%d action=%ps",
39392cb6c5bSTrond Myklebust 		__entry->task_id, __entry->client_id,
3946f701383SChuck Lever 		rpc_show_task_flags(__entry->flags),
3956f701383SChuck Lever 		rpc_show_runstate(__entry->runstate),
39682b0a4c3STrond Myklebust 		__entry->status,
39782b0a4c3STrond Myklebust 		__entry->action
39882b0a4c3STrond Myklebust 		)
39982b0a4c3STrond Myklebust );
400dc5820bdSChuck Lever #define DEFINE_RPC_RUNNING_EVENT(name) \
401dc5820bdSChuck Lever 	DEFINE_EVENT(rpc_task_running, rpc_task_##name, \
402dc5820bdSChuck Lever 			TP_PROTO( \
403dc5820bdSChuck Lever 				const struct rpc_task *task, \
404dc5820bdSChuck Lever 				const void *action \
405dc5820bdSChuck Lever 			), \
406dc5820bdSChuck Lever 			TP_ARGS(task, action))
40782b0a4c3STrond Myklebust 
408dc5820bdSChuck Lever DEFINE_RPC_RUNNING_EVENT(begin);
409dc5820bdSChuck Lever DEFINE_RPC_RUNNING_EVENT(run_action);
4101466c221SChuck Lever DEFINE_RPC_RUNNING_EVENT(sync_sleep);
4111466c221SChuck Lever DEFINE_RPC_RUNNING_EVENT(sync_wake);
412dc5820bdSChuck Lever DEFINE_RPC_RUNNING_EVENT(complete);
413721a1d38SChuck Lever DEFINE_RPC_RUNNING_EVENT(timeout);
414abf8af78SChuck Lever DEFINE_RPC_RUNNING_EVENT(signalled);
415a264abadSChuck Lever DEFINE_RPC_RUNNING_EVENT(end);
416b40887e1SChuck Lever DEFINE_RPC_RUNNING_EVENT(call_done);
41782b0a4c3STrond Myklebust 
41882b0a4c3STrond Myklebust DECLARE_EVENT_CLASS(rpc_task_queued,
41982b0a4c3STrond Myklebust 
420e671edb9SChuck Lever 	TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
42182b0a4c3STrond Myklebust 
422e671edb9SChuck Lever 	TP_ARGS(task, q),
42382b0a4c3STrond Myklebust 
42482b0a4c3STrond Myklebust 	TP_STRUCT__entry(
42592cb6c5bSTrond Myklebust 		__field(unsigned int, task_id)
42692cb6c5bSTrond Myklebust 		__field(unsigned int, client_id)
42782b0a4c3STrond Myklebust 		__field(unsigned long, timeout)
42882b0a4c3STrond Myklebust 		__field(unsigned long, runstate)
42982b0a4c3STrond Myklebust 		__field(int, status)
43082b0a4c3STrond Myklebust 		__field(unsigned short, flags)
43185c0d24fSTrond Myklebust 		__string(q_name, rpc_qname(q))
43282b0a4c3STrond Myklebust 		),
43382b0a4c3STrond Myklebust 
43482b0a4c3STrond Myklebust 	TP_fast_assign(
435e671edb9SChuck Lever 		__entry->client_id = task->tk_client ?
436e671edb9SChuck Lever 				     task->tk_client->cl_clid : -1;
43792cb6c5bSTrond Myklebust 		__entry->task_id = task->tk_pid;
4385efd1876STrond Myklebust 		__entry->timeout = rpc_task_timeout(task);
43982b0a4c3STrond Myklebust 		__entry->runstate = task->tk_runstate;
44082b0a4c3STrond Myklebust 		__entry->status = task->tk_status;
44182b0a4c3STrond Myklebust 		__entry->flags = task->tk_flags;
442*2c92ca84SSteven Rostedt (Google) 		__assign_str(q_name);
44382b0a4c3STrond Myklebust 		),
44482b0a4c3STrond Myklebust 
445b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
446b4776a34SChuck Lever 		  " flags=%s runstate=%s status=%d timeout=%lu queue=%s",
44792cb6c5bSTrond Myklebust 		__entry->task_id, __entry->client_id,
4486f701383SChuck Lever 		rpc_show_task_flags(__entry->flags),
4496f701383SChuck Lever 		rpc_show_runstate(__entry->runstate),
45082b0a4c3STrond Myklebust 		__entry->status,
45182b0a4c3STrond Myklebust 		__entry->timeout,
45285c0d24fSTrond Myklebust 		__get_str(q_name)
45382b0a4c3STrond Myklebust 		)
45482b0a4c3STrond Myklebust );
455dc5820bdSChuck Lever #define DEFINE_RPC_QUEUED_EVENT(name) \
456dc5820bdSChuck Lever 	DEFINE_EVENT(rpc_task_queued, rpc_task_##name, \
457dc5820bdSChuck Lever 			TP_PROTO( \
458dc5820bdSChuck Lever 				const struct rpc_task *task, \
459dc5820bdSChuck Lever 				const struct rpc_wait_queue *q \
460dc5820bdSChuck Lever 			), \
461dc5820bdSChuck Lever 			TP_ARGS(task, q))
46282b0a4c3STrond Myklebust 
463dc5820bdSChuck Lever DEFINE_RPC_QUEUED_EVENT(sleep);
464dc5820bdSChuck Lever DEFINE_RPC_QUEUED_EVENT(wakeup);
46582b0a4c3STrond Myklebust 
466e8680a24SChuck Lever DECLARE_EVENT_CLASS(rpc_failure,
467e8680a24SChuck Lever 
468e8680a24SChuck Lever 	TP_PROTO(const struct rpc_task *task),
469e8680a24SChuck Lever 
470e8680a24SChuck Lever 	TP_ARGS(task),
471e8680a24SChuck Lever 
472e8680a24SChuck Lever 	TP_STRUCT__entry(
473e8680a24SChuck Lever 		__field(unsigned int, task_id)
474e8680a24SChuck Lever 		__field(unsigned int, client_id)
475e8680a24SChuck Lever 	),
476e8680a24SChuck Lever 
477e8680a24SChuck Lever 	TP_fast_assign(
478e8680a24SChuck Lever 		__entry->task_id = task->tk_pid;
479e8680a24SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
480e8680a24SChuck Lever 	),
481e8680a24SChuck Lever 
482b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER,
483e8680a24SChuck Lever 		__entry->task_id, __entry->client_id)
484e8680a24SChuck Lever );
485e8680a24SChuck Lever 
486e8680a24SChuck Lever #define DEFINE_RPC_FAILURE(name)					\
487e8680a24SChuck Lever 	DEFINE_EVENT(rpc_failure, rpc_bad_##name,			\
488e8680a24SChuck Lever 			TP_PROTO(					\
489e8680a24SChuck Lever 				const struct rpc_task *task		\
490e8680a24SChuck Lever 			),						\
491e8680a24SChuck Lever 			TP_ARGS(task))
492e8680a24SChuck Lever 
493e8680a24SChuck Lever DEFINE_RPC_FAILURE(callhdr);
4947f5667a5SChuck Lever DEFINE_RPC_FAILURE(verifier);
4957f5667a5SChuck Lever 
4967f5667a5SChuck Lever DECLARE_EVENT_CLASS(rpc_reply_event,
4977f5667a5SChuck Lever 
4987f5667a5SChuck Lever 	TP_PROTO(
4997f5667a5SChuck Lever 		const struct rpc_task *task
5007f5667a5SChuck Lever 	),
5017f5667a5SChuck Lever 
5027f5667a5SChuck Lever 	TP_ARGS(task),
5037f5667a5SChuck Lever 
5047f5667a5SChuck Lever 	TP_STRUCT__entry(
5057f5667a5SChuck Lever 		__field(unsigned int, task_id)
5067f5667a5SChuck Lever 		__field(unsigned int, client_id)
5077f5667a5SChuck Lever 		__field(u32, xid)
5087f5667a5SChuck Lever 		__string(progname, task->tk_client->cl_program->name)
5097f5667a5SChuck Lever 		__field(u32, version)
5107f5667a5SChuck Lever 		__string(procname, rpc_proc_name(task))
5117f5667a5SChuck Lever 		__string(servername, task->tk_xprt->servername)
5127f5667a5SChuck Lever 	),
5137f5667a5SChuck Lever 
5147f5667a5SChuck Lever 	TP_fast_assign(
5157f5667a5SChuck Lever 		__entry->task_id = task->tk_pid;
5167f5667a5SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
5177f5667a5SChuck Lever 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
518*2c92ca84SSteven Rostedt (Google) 		__assign_str(progname);
5197f5667a5SChuck Lever 		__entry->version = task->tk_client->cl_vers;
520*2c92ca84SSteven Rostedt (Google) 		__assign_str(procname);
521*2c92ca84SSteven Rostedt (Google) 		__assign_str(servername);
5227f5667a5SChuck Lever 	),
5237f5667a5SChuck Lever 
524b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
525b4776a34SChuck Lever 		  " server=%s xid=0x%08x %sv%d %s",
5267f5667a5SChuck Lever 		__entry->task_id, __entry->client_id, __get_str(servername),
5277f5667a5SChuck Lever 		__entry->xid, __get_str(progname), __entry->version,
5287f5667a5SChuck Lever 		__get_str(procname))
5297f5667a5SChuck Lever )
5307f5667a5SChuck Lever 
5317f5667a5SChuck Lever #define DEFINE_RPC_REPLY_EVENT(name)					\
5327f5667a5SChuck Lever 	DEFINE_EVENT(rpc_reply_event, rpc__##name,			\
5337f5667a5SChuck Lever 			TP_PROTO(					\
5347f5667a5SChuck Lever 				const struct rpc_task *task		\
5357f5667a5SChuck Lever 			),						\
5367f5667a5SChuck Lever 			TP_ARGS(task))
5377f5667a5SChuck Lever 
5387f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(prog_unavail);
5397f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(prog_mismatch);
5407f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(proc_unavail);
5417f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(garbage_args);
5427f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(unparsable);
5437f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(mismatch);
5447f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(stale_creds);
5457f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(bad_creds);
5467f5667a5SChuck Lever DEFINE_RPC_REPLY_EVENT(auth_tooweak);
547e8680a24SChuck Lever 
54842ebfc2cSChuck Lever #define DEFINE_RPCB_ERROR_EVENT(name)					\
54942ebfc2cSChuck Lever 	DEFINE_EVENT(rpc_reply_event, rpcb_##name##_err,		\
55042ebfc2cSChuck Lever 			TP_PROTO(					\
55142ebfc2cSChuck Lever 				const struct rpc_task *task		\
55242ebfc2cSChuck Lever 			),						\
55342ebfc2cSChuck Lever 			TP_ARGS(task))
55442ebfc2cSChuck Lever 
55542ebfc2cSChuck Lever DEFINE_RPCB_ERROR_EVENT(prog_unavail);
55642ebfc2cSChuck Lever DEFINE_RPCB_ERROR_EVENT(timeout);
55742ebfc2cSChuck Lever DEFINE_RPCB_ERROR_EVENT(bind_version);
55842ebfc2cSChuck Lever DEFINE_RPCB_ERROR_EVENT(unreachable);
55942ebfc2cSChuck Lever DEFINE_RPCB_ERROR_EVENT(unrecognized);
56042ebfc2cSChuck Lever 
56106e234c6SChuck Lever TRACE_EVENT(rpc_buf_alloc,
56206e234c6SChuck Lever 	TP_PROTO(
56306e234c6SChuck Lever 		const struct rpc_task *task,
56406e234c6SChuck Lever 		int status
56506e234c6SChuck Lever 	),
56606e234c6SChuck Lever 
56706e234c6SChuck Lever 	TP_ARGS(task, status),
56806e234c6SChuck Lever 
56906e234c6SChuck Lever 	TP_STRUCT__entry(
57006e234c6SChuck Lever 		__field(unsigned int, task_id)
57106e234c6SChuck Lever 		__field(unsigned int, client_id)
57206e234c6SChuck Lever 		__field(size_t, callsize)
57306e234c6SChuck Lever 		__field(size_t, recvsize)
57406e234c6SChuck Lever 		__field(int, status)
57506e234c6SChuck Lever 	),
57606e234c6SChuck Lever 
57706e234c6SChuck Lever 	TP_fast_assign(
57806e234c6SChuck Lever 		__entry->task_id = task->tk_pid;
57906e234c6SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
58006e234c6SChuck Lever 		__entry->callsize = task->tk_rqstp->rq_callsize;
58106e234c6SChuck Lever 		__entry->recvsize = task->tk_rqstp->rq_rcvsize;
58206e234c6SChuck Lever 		__entry->status = status;
58306e234c6SChuck Lever 	),
58406e234c6SChuck Lever 
585b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
586b4776a34SChuck Lever 		  " callsize=%zu recvsize=%zu status=%d",
58706e234c6SChuck Lever 		__entry->task_id, __entry->client_id,
58806e234c6SChuck Lever 		__entry->callsize, __entry->recvsize, __entry->status
58906e234c6SChuck Lever 	)
59006e234c6SChuck Lever );
59106e234c6SChuck Lever 
5920125ecbbSChuck Lever TRACE_EVENT(rpc_call_rpcerror,
5930125ecbbSChuck Lever 	TP_PROTO(
5940125ecbbSChuck Lever 		const struct rpc_task *task,
5950125ecbbSChuck Lever 		int tk_status,
5960125ecbbSChuck Lever 		int rpc_status
5970125ecbbSChuck Lever 	),
5980125ecbbSChuck Lever 
5990125ecbbSChuck Lever 	TP_ARGS(task, tk_status, rpc_status),
6000125ecbbSChuck Lever 
6010125ecbbSChuck Lever 	TP_STRUCT__entry(
6020125ecbbSChuck Lever 		__field(unsigned int, task_id)
6030125ecbbSChuck Lever 		__field(unsigned int, client_id)
6040125ecbbSChuck Lever 		__field(int, tk_status)
6050125ecbbSChuck Lever 		__field(int, rpc_status)
6060125ecbbSChuck Lever 	),
6070125ecbbSChuck Lever 
6080125ecbbSChuck Lever 	TP_fast_assign(
6090125ecbbSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
6100125ecbbSChuck Lever 		__entry->task_id = task->tk_pid;
6110125ecbbSChuck Lever 		__entry->tk_status = tk_status;
6120125ecbbSChuck Lever 		__entry->rpc_status = rpc_status;
6130125ecbbSChuck Lever 	),
6140125ecbbSChuck Lever 
615b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
616b4776a34SChuck Lever 		  " tk_status=%d rpc_status=%d",
6170125ecbbSChuck Lever 		__entry->task_id, __entry->client_id,
6180125ecbbSChuck Lever 		__entry->tk_status, __entry->rpc_status)
6190125ecbbSChuck Lever );
6200125ecbbSChuck Lever 
62140bf7eb3SChuck Lever TRACE_EVENT(rpc_stats_latency,
62240bf7eb3SChuck Lever 
62340bf7eb3SChuck Lever 	TP_PROTO(
62440bf7eb3SChuck Lever 		const struct rpc_task *task,
62540bf7eb3SChuck Lever 		ktime_t backlog,
62640bf7eb3SChuck Lever 		ktime_t rtt,
62740bf7eb3SChuck Lever 		ktime_t execute
62840bf7eb3SChuck Lever 	),
62940bf7eb3SChuck Lever 
63040bf7eb3SChuck Lever 	TP_ARGS(task, backlog, rtt, execute),
63140bf7eb3SChuck Lever 
63240bf7eb3SChuck Lever 	TP_STRUCT__entry(
63398eb6cf2SChuck Lever 		__field(unsigned int, task_id)
63498eb6cf2SChuck Lever 		__field(unsigned int, client_id)
63540bf7eb3SChuck Lever 		__field(u32, xid)
63640bf7eb3SChuck Lever 		__field(int, version)
63740bf7eb3SChuck Lever 		__string(progname, task->tk_client->cl_program->name)
63840bf7eb3SChuck Lever 		__string(procname, rpc_proc_name(task))
63940bf7eb3SChuck Lever 		__field(unsigned long, backlog)
64040bf7eb3SChuck Lever 		__field(unsigned long, rtt)
64140bf7eb3SChuck Lever 		__field(unsigned long, execute)
6426e21eda4SOlga Kornievskaia 		__field(u32, xprt_id)
64340bf7eb3SChuck Lever 	),
64440bf7eb3SChuck Lever 
64540bf7eb3SChuck Lever 	TP_fast_assign(
64698eb6cf2SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
64798eb6cf2SChuck Lever 		__entry->task_id = task->tk_pid;
64840bf7eb3SChuck Lever 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
64940bf7eb3SChuck Lever 		__entry->version = task->tk_client->cl_vers;
650*2c92ca84SSteven Rostedt (Google) 		__assign_str(progname);
651*2c92ca84SSteven Rostedt (Google) 		__assign_str(procname);
65240bf7eb3SChuck Lever 		__entry->backlog = ktime_to_us(backlog);
65340bf7eb3SChuck Lever 		__entry->rtt = ktime_to_us(rtt);
65440bf7eb3SChuck Lever 		__entry->execute = ktime_to_us(execute);
6556e21eda4SOlga Kornievskaia 		__entry->xprt_id = task->tk_xprt->id;
65640bf7eb3SChuck Lever 	),
65740bf7eb3SChuck Lever 
658b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
6596e21eda4SOlga Kornievskaia 		  " xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu"
6606e21eda4SOlga Kornievskaia 		  " xprt_id=%d",
66198eb6cf2SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
66240bf7eb3SChuck Lever 		__get_str(progname), __entry->version, __get_str(procname),
6636e21eda4SOlga Kornievskaia 		__entry->backlog, __entry->rtt, __entry->execute,
6646e21eda4SOlga Kornievskaia 		__entry->xprt_id)
66540bf7eb3SChuck Lever );
66640bf7eb3SChuck Lever 
6675582863fSChuck Lever TRACE_EVENT(rpc_xdr_overflow,
6685582863fSChuck Lever 	TP_PROTO(
6695582863fSChuck Lever 		const struct xdr_stream *xdr,
6705582863fSChuck Lever 		size_t requested
6715582863fSChuck Lever 	),
6725582863fSChuck Lever 
6735582863fSChuck Lever 	TP_ARGS(xdr, requested),
6745582863fSChuck Lever 
6755582863fSChuck Lever 	TP_STRUCT__entry(
6765582863fSChuck Lever 		__field(unsigned int, task_id)
6775582863fSChuck Lever 		__field(unsigned int, client_id)
6785582863fSChuck Lever 		__field(int, version)
6795582863fSChuck Lever 		__field(size_t, requested)
6805582863fSChuck Lever 		__field(const void *, end)
6815582863fSChuck Lever 		__field(const void *, p)
6825582863fSChuck Lever 		__field(const void *, head_base)
6835582863fSChuck Lever 		__field(size_t, head_len)
6845582863fSChuck Lever 		__field(const void *, tail_base)
6855582863fSChuck Lever 		__field(size_t, tail_len)
6865582863fSChuck Lever 		__field(unsigned int, page_len)
6875582863fSChuck Lever 		__field(unsigned int, len)
688d321ff58SChuck Lever 		__string(progname, xdr->rqst ?
689d321ff58SChuck Lever 			 xdr->rqst->rq_task->tk_client->cl_program->name : "unknown")
690d321ff58SChuck Lever 		__string(procedure, xdr->rqst ?
691d321ff58SChuck Lever 			 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name : "unknown")
6925582863fSChuck Lever 	),
6935582863fSChuck Lever 
6945582863fSChuck Lever 	TP_fast_assign(
6955582863fSChuck Lever 		if (xdr->rqst) {
6965582863fSChuck Lever 			const struct rpc_task *task = xdr->rqst->rq_task;
6975582863fSChuck Lever 
6985582863fSChuck Lever 			__entry->task_id = task->tk_pid;
6995582863fSChuck Lever 			__entry->client_id = task->tk_client->cl_clid;
700*2c92ca84SSteven Rostedt (Google) 			__assign_str(progname);
7015582863fSChuck Lever 			__entry->version = task->tk_client->cl_vers;
702*2c92ca84SSteven Rostedt (Google) 			__assign_str(procedure);
7035582863fSChuck Lever 		} else {
704b4776a34SChuck Lever 			__entry->task_id = -1;
705b4776a34SChuck Lever 			__entry->client_id = -1;
706*2c92ca84SSteven Rostedt (Google) 			__assign_str(progname);
7075582863fSChuck Lever 			__entry->version = 0;
708*2c92ca84SSteven Rostedt (Google) 			__assign_str(procedure);
7095582863fSChuck Lever 		}
7105582863fSChuck Lever 		__entry->requested = requested;
7115582863fSChuck Lever 		__entry->end = xdr->end;
7125582863fSChuck Lever 		__entry->p = xdr->p;
7135582863fSChuck Lever 		__entry->head_base = xdr->buf->head[0].iov_base,
7145582863fSChuck Lever 		__entry->head_len = xdr->buf->head[0].iov_len,
7155582863fSChuck Lever 		__entry->page_len = xdr->buf->page_len,
7165582863fSChuck Lever 		__entry->tail_base = xdr->buf->tail[0].iov_base,
7175582863fSChuck Lever 		__entry->tail_len = xdr->buf->tail[0].iov_len,
7185582863fSChuck Lever 		__entry->len = xdr->buf->len;
7195582863fSChuck Lever 	),
7205582863fSChuck Lever 
721b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
722b4776a34SChuck Lever 		  " %sv%d %s requested=%zu p=%p end=%p xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
7235582863fSChuck Lever 		__entry->task_id, __entry->client_id,
7245582863fSChuck Lever 		__get_str(progname), __entry->version, __get_str(procedure),
7255582863fSChuck Lever 		__entry->requested, __entry->p, __entry->end,
7265582863fSChuck Lever 		__entry->head_base, __entry->head_len,
7275582863fSChuck Lever 		__entry->page_len,
7285582863fSChuck Lever 		__entry->tail_base, __entry->tail_len,
7295582863fSChuck Lever 		__entry->len
7305582863fSChuck Lever 	)
7315582863fSChuck Lever );
7325582863fSChuck Lever 
7337be9cea3SChuck Lever TRACE_EVENT(rpc_xdr_alignment,
7347be9cea3SChuck Lever 	TP_PROTO(
7357be9cea3SChuck Lever 		const struct xdr_stream *xdr,
7367be9cea3SChuck Lever 		size_t offset,
7377be9cea3SChuck Lever 		unsigned int copied
7387be9cea3SChuck Lever 	),
7397be9cea3SChuck Lever 
7407be9cea3SChuck Lever 	TP_ARGS(xdr, offset, copied),
7417be9cea3SChuck Lever 
7427be9cea3SChuck Lever 	TP_STRUCT__entry(
7437be9cea3SChuck Lever 		__field(unsigned int, task_id)
7447be9cea3SChuck Lever 		__field(unsigned int, client_id)
7457be9cea3SChuck Lever 		__field(int, version)
7467be9cea3SChuck Lever 		__field(size_t, offset)
7477be9cea3SChuck Lever 		__field(unsigned int, copied)
7487be9cea3SChuck Lever 		__field(const void *, head_base)
7497be9cea3SChuck Lever 		__field(size_t, head_len)
7507be9cea3SChuck Lever 		__field(const void *, tail_base)
7517be9cea3SChuck Lever 		__field(size_t, tail_len)
7527be9cea3SChuck Lever 		__field(unsigned int, page_len)
7537be9cea3SChuck Lever 		__field(unsigned int, len)
7547be9cea3SChuck Lever 		__string(progname,
7557be9cea3SChuck Lever 			 xdr->rqst->rq_task->tk_client->cl_program->name)
7567be9cea3SChuck Lever 		__string(procedure,
7577be9cea3SChuck Lever 			 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
7587be9cea3SChuck Lever 	),
7597be9cea3SChuck Lever 
7607be9cea3SChuck Lever 	TP_fast_assign(
7617be9cea3SChuck Lever 		const struct rpc_task *task = xdr->rqst->rq_task;
7627be9cea3SChuck Lever 
7637be9cea3SChuck Lever 		__entry->task_id = task->tk_pid;
7647be9cea3SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
765*2c92ca84SSteven Rostedt (Google) 		__assign_str(progname);
7667be9cea3SChuck Lever 		__entry->version = task->tk_client->cl_vers;
767*2c92ca84SSteven Rostedt (Google) 		__assign_str(procedure);
7687be9cea3SChuck Lever 
7697be9cea3SChuck Lever 		__entry->offset = offset;
7707be9cea3SChuck Lever 		__entry->copied = copied;
7717be9cea3SChuck Lever 		__entry->head_base = xdr->buf->head[0].iov_base,
7727be9cea3SChuck Lever 		__entry->head_len = xdr->buf->head[0].iov_len,
7737be9cea3SChuck Lever 		__entry->page_len = xdr->buf->page_len,
7747be9cea3SChuck Lever 		__entry->tail_base = xdr->buf->tail[0].iov_base,
7757be9cea3SChuck Lever 		__entry->tail_len = xdr->buf->tail[0].iov_len,
7767be9cea3SChuck Lever 		__entry->len = xdr->buf->len;
7777be9cea3SChuck Lever 	),
7787be9cea3SChuck Lever 
779b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
780b4776a34SChuck Lever 		  " %sv%d %s offset=%zu copied=%u xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
7817be9cea3SChuck Lever 		__entry->task_id, __entry->client_id,
7827be9cea3SChuck Lever 		__get_str(progname), __entry->version, __get_str(procedure),
7837be9cea3SChuck Lever 		__entry->offset, __entry->copied,
7847be9cea3SChuck Lever 		__entry->head_base, __entry->head_len,
7857be9cea3SChuck Lever 		__entry->page_len,
7867be9cea3SChuck Lever 		__entry->tail_base, __entry->tail_len,
7877be9cea3SChuck Lever 		__entry->len
7887be9cea3SChuck Lever 	)
7897be9cea3SChuck Lever );
7907be9cea3SChuck Lever 
7916ba16eefSSteven Rostedt (Red Hat) /*
7926ba16eefSSteven Rostedt (Red Hat)  * First define the enums in the below macros to be exported to userspace
7936ba16eefSSteven Rostedt (Red Hat)  * via TRACE_DEFINE_ENUM().
7946ba16eefSSteven Rostedt (Red Hat)  */
7956ba16eefSSteven Rostedt (Red Hat) #undef EM
7966ba16eefSSteven Rostedt (Red Hat) #undef EMe
7976ba16eefSSteven Rostedt (Red Hat) #define EM(a, b)	TRACE_DEFINE_ENUM(a);
7986ba16eefSSteven Rostedt (Red Hat) #define EMe(a, b)	TRACE_DEFINE_ENUM(a);
7996ba16eefSSteven Rostedt (Red Hat) 
8006ba16eefSSteven Rostedt (Red Hat) #define RPC_SHOW_SOCKET				\
8016ba16eefSSteven Rostedt (Red Hat) 	EM( SS_FREE, "FREE" )			\
8026ba16eefSSteven Rostedt (Red Hat) 	EM( SS_UNCONNECTED, "UNCONNECTED" )	\
80382909dc5SChuck Lever 	EM( SS_CONNECTING, "CONNECTING" )	\
80482909dc5SChuck Lever 	EM( SS_CONNECTED, "CONNECTED" )		\
8056ba16eefSSteven Rostedt (Red Hat) 	EMe( SS_DISCONNECTING, "DISCONNECTING" )
8066ba16eefSSteven Rostedt (Red Hat) 
80740b5ea0cSTrond Myklebust #define rpc_show_socket_state(state) \
8086ba16eefSSteven Rostedt (Red Hat) 	__print_symbolic(state, RPC_SHOW_SOCKET)
8096ba16eefSSteven Rostedt (Red Hat) 
8106ba16eefSSteven Rostedt (Red Hat) RPC_SHOW_SOCKET
8116ba16eefSSteven Rostedt (Red Hat) 
8126ba16eefSSteven Rostedt (Red Hat) #define RPC_SHOW_SOCK				\
8136ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_ESTABLISHED, "ESTABLISHED" )	\
8146ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_SYN_SENT, "SYN_SENT" )		\
8156ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_SYN_RECV, "SYN_RECV" )		\
8166ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_FIN_WAIT1, "FIN_WAIT1" )	\
8176ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_FIN_WAIT2, "FIN_WAIT2" )	\
8186ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_TIME_WAIT, "TIME_WAIT" )	\
8196ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_CLOSE, "CLOSE" )		\
8206ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_CLOSE_WAIT, "CLOSE_WAIT" )	\
8216ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_LAST_ACK, "LAST_ACK" )		\
8226ba16eefSSteven Rostedt (Red Hat) 	EM( TCP_LISTEN, "LISTEN" )		\
8236ba16eefSSteven Rostedt (Red Hat) 	EMe( TCP_CLOSING, "CLOSING" )
82440b5ea0cSTrond Myklebust 
82540b5ea0cSTrond Myklebust #define rpc_show_sock_state(state) \
8266ba16eefSSteven Rostedt (Red Hat) 	__print_symbolic(state, RPC_SHOW_SOCK)
8276ba16eefSSteven Rostedt (Red Hat) 
8286ba16eefSSteven Rostedt (Red Hat) RPC_SHOW_SOCK
8296ba16eefSSteven Rostedt (Red Hat) 
8304b0c359bSPierguido Lambri 
8314b0c359bSPierguido Lambri #include <trace/events/net_probe_common.h>
8324b0c359bSPierguido Lambri 
8336ba16eefSSteven Rostedt (Red Hat) /*
8346ba16eefSSteven Rostedt (Red Hat)  * Now redefine the EM() and EMe() macros to map the enums to the strings
8356ba16eefSSteven Rostedt (Red Hat)  * that will be printed in the output.
8366ba16eefSSteven Rostedt (Red Hat)  */
8376ba16eefSSteven Rostedt (Red Hat) #undef EM
8386ba16eefSSteven Rostedt (Red Hat) #undef EMe
8396ba16eefSSteven Rostedt (Red Hat) #define EM(a, b)	{a, b},
8406ba16eefSSteven Rostedt (Red Hat) #define EMe(a, b)	{a, b}
84140b5ea0cSTrond Myklebust 
84240b5ea0cSTrond Myklebust DECLARE_EVENT_CLASS(xs_socket_event,
84340b5ea0cSTrond Myklebust 
84440b5ea0cSTrond Myklebust 		TP_PROTO(
84540b5ea0cSTrond Myklebust 			struct rpc_xprt *xprt,
84640b5ea0cSTrond Myklebust 			struct socket *socket
84740b5ea0cSTrond Myklebust 		),
84840b5ea0cSTrond Myklebust 
84940b5ea0cSTrond Myklebust 		TP_ARGS(xprt, socket),
85040b5ea0cSTrond Myklebust 
85140b5ea0cSTrond Myklebust 		TP_STRUCT__entry(
85240b5ea0cSTrond Myklebust 			__field(unsigned int, socket_state)
85340b5ea0cSTrond Myklebust 			__field(unsigned int, sock_state)
85440b5ea0cSTrond Myklebust 			__field(unsigned long long, ino)
8554b0c359bSPierguido Lambri 			__array(__u8, saddr, sizeof(struct sockaddr_in6))
8564b0c359bSPierguido Lambri 			__array(__u8, daddr, sizeof(struct sockaddr_in6))
85740b5ea0cSTrond Myklebust 		),
85840b5ea0cSTrond Myklebust 
85940b5ea0cSTrond Myklebust 		TP_fast_assign(
86040b5ea0cSTrond Myklebust 			struct inode *inode = SOCK_INODE(socket);
8614b0c359bSPierguido Lambri 			const struct sock *sk = socket->sk;
8624b0c359bSPierguido Lambri 			const struct inet_sock *inet = inet_sk(sk);
8634b0c359bSPierguido Lambri 
8644b0c359bSPierguido Lambri 			memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
8654b0c359bSPierguido Lambri 			memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
8664b0c359bSPierguido Lambri 
8674b0c359bSPierguido Lambri 			TP_STORE_ADDR_PORTS(__entry, inet, sk);
8684b0c359bSPierguido Lambri 
86940b5ea0cSTrond Myklebust 			__entry->socket_state = socket->state;
87040b5ea0cSTrond Myklebust 			__entry->sock_state = socket->sk->sk_state;
87140b5ea0cSTrond Myklebust 			__entry->ino = (unsigned long long)inode->i_ino;
8724b0c359bSPierguido Lambri 
87340b5ea0cSTrond Myklebust 		),
87440b5ea0cSTrond Myklebust 
87540b5ea0cSTrond Myklebust 		TP_printk(
8764b0c359bSPierguido Lambri 			"socket:[%llu] srcaddr=%pISpc dstaddr=%pISpc "
87740b5ea0cSTrond Myklebust 			"state=%u (%s) sk_state=%u (%s)",
8784b0c359bSPierguido Lambri 			__entry->ino,
8794b0c359bSPierguido Lambri 			__entry->saddr,
8804b0c359bSPierguido Lambri 			__entry->daddr,
88140b5ea0cSTrond Myklebust 			__entry->socket_state,
88240b5ea0cSTrond Myklebust 			rpc_show_socket_state(__entry->socket_state),
88340b5ea0cSTrond Myklebust 			__entry->sock_state,
88440b5ea0cSTrond Myklebust 			rpc_show_sock_state(__entry->sock_state)
88540b5ea0cSTrond Myklebust 		)
88640b5ea0cSTrond Myklebust );
88740b5ea0cSTrond Myklebust #define DEFINE_RPC_SOCKET_EVENT(name) \
88840b5ea0cSTrond Myklebust 	DEFINE_EVENT(xs_socket_event, name, \
88940b5ea0cSTrond Myklebust 			TP_PROTO( \
89040b5ea0cSTrond Myklebust 				struct rpc_xprt *xprt, \
89140b5ea0cSTrond Myklebust 				struct socket *socket \
89240b5ea0cSTrond Myklebust 			), \
89340b5ea0cSTrond Myklebust 			TP_ARGS(xprt, socket))
89440b5ea0cSTrond Myklebust 
89540b5ea0cSTrond Myklebust DECLARE_EVENT_CLASS(xs_socket_event_done,
89640b5ea0cSTrond Myklebust 
89740b5ea0cSTrond Myklebust 		TP_PROTO(
89840b5ea0cSTrond Myklebust 			struct rpc_xprt *xprt,
89940b5ea0cSTrond Myklebust 			struct socket *socket,
90040b5ea0cSTrond Myklebust 			int error
90140b5ea0cSTrond Myklebust 		),
90240b5ea0cSTrond Myklebust 
90340b5ea0cSTrond Myklebust 		TP_ARGS(xprt, socket, error),
90440b5ea0cSTrond Myklebust 
90540b5ea0cSTrond Myklebust 		TP_STRUCT__entry(
90640b5ea0cSTrond Myklebust 			__field(int, error)
90740b5ea0cSTrond Myklebust 			__field(unsigned int, socket_state)
90840b5ea0cSTrond Myklebust 			__field(unsigned int, sock_state)
90940b5ea0cSTrond Myklebust 			__field(unsigned long long, ino)
9104b0c359bSPierguido Lambri 			__array(__u8, saddr, sizeof(struct sockaddr_in6))
9114b0c359bSPierguido Lambri 			__array(__u8, daddr, sizeof(struct sockaddr_in6))
91240b5ea0cSTrond Myklebust 		),
91340b5ea0cSTrond Myklebust 
91440b5ea0cSTrond Myklebust 		TP_fast_assign(
91540b5ea0cSTrond Myklebust 			struct inode *inode = SOCK_INODE(socket);
9164b0c359bSPierguido Lambri 			const struct sock *sk = socket->sk;
9174b0c359bSPierguido Lambri 			const struct inet_sock *inet = inet_sk(sk);
9184b0c359bSPierguido Lambri 
9194b0c359bSPierguido Lambri 			memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
9204b0c359bSPierguido Lambri 			memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
9214b0c359bSPierguido Lambri 
9224b0c359bSPierguido Lambri 			TP_STORE_ADDR_PORTS(__entry, inet, sk);
9234b0c359bSPierguido Lambri 
92440b5ea0cSTrond Myklebust 			__entry->socket_state = socket->state;
92540b5ea0cSTrond Myklebust 			__entry->sock_state = socket->sk->sk_state;
92640b5ea0cSTrond Myklebust 			__entry->ino = (unsigned long long)inode->i_ino;
92740b5ea0cSTrond Myklebust 			__entry->error = error;
92840b5ea0cSTrond Myklebust 		),
92940b5ea0cSTrond Myklebust 
93040b5ea0cSTrond Myklebust 		TP_printk(
9314b0c359bSPierguido Lambri 			"error=%d socket:[%llu] srcaddr=%pISpc dstaddr=%pISpc "
93240b5ea0cSTrond Myklebust 			"state=%u (%s) sk_state=%u (%s)",
93340b5ea0cSTrond Myklebust 			__entry->error,
9344b0c359bSPierguido Lambri 			__entry->ino,
9354b0c359bSPierguido Lambri 			__entry->saddr,
9364b0c359bSPierguido Lambri 			__entry->daddr,
93740b5ea0cSTrond Myklebust 			__entry->socket_state,
93840b5ea0cSTrond Myklebust 			rpc_show_socket_state(__entry->socket_state),
93940b5ea0cSTrond Myklebust 			__entry->sock_state,
94040b5ea0cSTrond Myklebust 			rpc_show_sock_state(__entry->sock_state)
94140b5ea0cSTrond Myklebust 		)
94240b5ea0cSTrond Myklebust );
94340b5ea0cSTrond Myklebust #define DEFINE_RPC_SOCKET_EVENT_DONE(name) \
94440b5ea0cSTrond Myklebust 	DEFINE_EVENT(xs_socket_event_done, name, \
94540b5ea0cSTrond Myklebust 			TP_PROTO( \
94640b5ea0cSTrond Myklebust 				struct rpc_xprt *xprt, \
94740b5ea0cSTrond Myklebust 				struct socket *socket, \
94840b5ea0cSTrond Myklebust 				int error \
94940b5ea0cSTrond Myklebust 			), \
95040b5ea0cSTrond Myklebust 			TP_ARGS(xprt, socket, error))
95140b5ea0cSTrond Myklebust 
95240b5ea0cSTrond Myklebust DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
95340b5ea0cSTrond Myklebust DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
954e8353c76STrond Myklebust DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
95540b5ea0cSTrond Myklebust DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
95640b5ea0cSTrond Myklebust DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
95740b5ea0cSTrond Myklebust DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
95840b5ea0cSTrond Myklebust 
959015747d2SChuck Lever TRACE_EVENT(rpc_socket_nospace,
960015747d2SChuck Lever 	TP_PROTO(
961015747d2SChuck Lever 		const struct rpc_rqst *rqst,
962015747d2SChuck Lever 		const struct sock_xprt *transport
963015747d2SChuck Lever 	),
964015747d2SChuck Lever 
965015747d2SChuck Lever 	TP_ARGS(rqst, transport),
966015747d2SChuck Lever 
967015747d2SChuck Lever 	TP_STRUCT__entry(
968015747d2SChuck Lever 		__field(unsigned int, task_id)
969015747d2SChuck Lever 		__field(unsigned int, client_id)
970015747d2SChuck Lever 		__field(unsigned int, total)
971015747d2SChuck Lever 		__field(unsigned int, remaining)
972015747d2SChuck Lever 	),
973015747d2SChuck Lever 
974015747d2SChuck Lever 	TP_fast_assign(
975015747d2SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
976015747d2SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
977015747d2SChuck Lever 		__entry->total = rqst->rq_slen;
978015747d2SChuck Lever 		__entry->remaining = rqst->rq_slen - transport->xmit.offset;
979015747d2SChuck Lever 	),
980015747d2SChuck Lever 
981b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
982b4776a34SChuck Lever 		  " total=%u remaining=%u",
983015747d2SChuck Lever 		__entry->task_id, __entry->client_id,
984015747d2SChuck Lever 		__entry->total, __entry->remaining
985015747d2SChuck Lever 	)
986015747d2SChuck Lever );
987015747d2SChuck Lever 
98894afd9c4SChuck Lever #define rpc_show_xprt_state(x)						\
98994afd9c4SChuck Lever 	__print_flags(x, "|",						\
99076497b1aSChuck Lever 		{ BIT(XPRT_LOCKED),		"LOCKED" },		\
99176497b1aSChuck Lever 		{ BIT(XPRT_CONNECTED),		"CONNECTED" },		\
99276497b1aSChuck Lever 		{ BIT(XPRT_CONNECTING),		"CONNECTING" },		\
99376497b1aSChuck Lever 		{ BIT(XPRT_CLOSE_WAIT),		"CLOSE_WAIT" },		\
99476497b1aSChuck Lever 		{ BIT(XPRT_BOUND),		"BOUND" },		\
99576497b1aSChuck Lever 		{ BIT(XPRT_BINDING),		"BINDING" },		\
99676497b1aSChuck Lever 		{ BIT(XPRT_CLOSING),		"CLOSING" },		\
99776497b1aSChuck Lever 		{ BIT(XPRT_OFFLINE),		"OFFLINE" },		\
99876497b1aSChuck Lever 		{ BIT(XPRT_REMOVE),		"REMOVE" },		\
99976497b1aSChuck Lever 		{ BIT(XPRT_CONGESTED),		"CONGESTED" },		\
100076497b1aSChuck Lever 		{ BIT(XPRT_CWND_WAIT),		"CWND_WAIT" },		\
1001aed28b7aSChuck Lever 		{ BIT(XPRT_WRITE_SPACE),	"WRITE_SPACE" },	\
1002aed28b7aSChuck Lever 		{ BIT(XPRT_SND_IS_COOKIE),	"SND_IS_COOKIE" })
100394afd9c4SChuck Lever 
1004911813d7SChuck Lever DECLARE_EVENT_CLASS(rpc_xprt_lifetime_class,
1005911813d7SChuck Lever 	TP_PROTO(
1006911813d7SChuck Lever 		const struct rpc_xprt *xprt
1007911813d7SChuck Lever 	),
1008911813d7SChuck Lever 
1009911813d7SChuck Lever 	TP_ARGS(xprt),
1010911813d7SChuck Lever 
1011911813d7SChuck Lever 	TP_STRUCT__entry(
101294afd9c4SChuck Lever 		__field(unsigned long, state)
1013911813d7SChuck Lever 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1014911813d7SChuck Lever 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1015911813d7SChuck Lever 	),
1016911813d7SChuck Lever 
1017911813d7SChuck Lever 	TP_fast_assign(
101894afd9c4SChuck Lever 		__entry->state = xprt->state;
1019*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1020*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
1021911813d7SChuck Lever 	),
1022911813d7SChuck Lever 
102394afd9c4SChuck Lever 	TP_printk("peer=[%s]:%s state=%s",
102494afd9c4SChuck Lever 		__get_str(addr), __get_str(port),
102594afd9c4SChuck Lever 		rpc_show_xprt_state(__entry->state))
1026911813d7SChuck Lever );
1027911813d7SChuck Lever 
1028911813d7SChuck Lever #define DEFINE_RPC_XPRT_LIFETIME_EVENT(name) \
1029911813d7SChuck Lever 	DEFINE_EVENT(rpc_xprt_lifetime_class, \
1030911813d7SChuck Lever 			xprt_##name, \
1031911813d7SChuck Lever 			TP_PROTO( \
1032911813d7SChuck Lever 				const struct rpc_xprt *xprt \
1033911813d7SChuck Lever 			), \
1034911813d7SChuck Lever 			TP_ARGS(xprt))
1035911813d7SChuck Lever 
1036911813d7SChuck Lever DEFINE_RPC_XPRT_LIFETIME_EVENT(create);
1037db0a86c4SChuck Lever DEFINE_RPC_XPRT_LIFETIME_EVENT(connect);
1038911813d7SChuck Lever DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_auto);
1039911813d7SChuck Lever DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_done);
1040911813d7SChuck Lever DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_force);
1041911813d7SChuck Lever DEFINE_RPC_XPRT_LIFETIME_EVENT(destroy);
1042911813d7SChuck Lever 
10433705ad64SJeff Layton DECLARE_EVENT_CLASS(rpc_xprt_event,
1044dc5820bdSChuck Lever 	TP_PROTO(
1045dc5820bdSChuck Lever 		const struct rpc_xprt *xprt,
1046dc5820bdSChuck Lever 		__be32 xid,
1047dc5820bdSChuck Lever 		int status
1048dc5820bdSChuck Lever 	),
10493705ad64SJeff Layton 
10503705ad64SJeff Layton 	TP_ARGS(xprt, xid, status),
10513705ad64SJeff Layton 
10523705ad64SJeff Layton 	TP_STRUCT__entry(
1053a30ccf1aSChuck Lever 		__field(u32, xid)
10543705ad64SJeff Layton 		__field(int, status)
10553705ad64SJeff Layton 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
10563705ad64SJeff Layton 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
10573705ad64SJeff Layton 	),
10583705ad64SJeff Layton 
10593705ad64SJeff Layton 	TP_fast_assign(
1060a30ccf1aSChuck Lever 		__entry->xid = be32_to_cpu(xid);
10613705ad64SJeff Layton 		__entry->status = status;
1062*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1063*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
10643705ad64SJeff Layton 	),
10653705ad64SJeff Layton 
1066a30ccf1aSChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x status=%d", __get_str(addr),
1067a30ccf1aSChuck Lever 			__get_str(port), __entry->xid,
10683705ad64SJeff Layton 			__entry->status)
10693705ad64SJeff Layton );
1070dc5820bdSChuck Lever #define DEFINE_RPC_XPRT_EVENT(name) \
1071dc5820bdSChuck Lever 	DEFINE_EVENT(rpc_xprt_event, xprt_##name, \
1072dc5820bdSChuck Lever 			TP_PROTO( \
1073dc5820bdSChuck Lever 				const struct rpc_xprt *xprt, \
1074dc5820bdSChuck Lever 				__be32 xid, \
1075dc5820bdSChuck Lever 				int status \
1076dc5820bdSChuck Lever 			), \
1077dc5820bdSChuck Lever 			TP_ARGS(xprt, xid, status))
10783705ad64SJeff Layton 
1079dc5820bdSChuck Lever DEFINE_RPC_XPRT_EVENT(timer);
1080dc5820bdSChuck Lever DEFINE_RPC_XPRT_EVENT(lookup_rqst);
10813705ad64SJeff Layton 
10820c77668dSChuck Lever TRACE_EVENT(xprt_transmit,
10830c77668dSChuck Lever 	TP_PROTO(
10840c77668dSChuck Lever 		const struct rpc_rqst *rqst,
10850c77668dSChuck Lever 		int status
10860c77668dSChuck Lever 	),
10870c77668dSChuck Lever 
10880c77668dSChuck Lever 	TP_ARGS(rqst, status),
10890c77668dSChuck Lever 
10900c77668dSChuck Lever 	TP_STRUCT__entry(
10910c77668dSChuck Lever 		__field(unsigned int, task_id)
10920c77668dSChuck Lever 		__field(unsigned int, client_id)
10930c77668dSChuck Lever 		__field(u32, xid)
10940c77668dSChuck Lever 		__field(u32, seqno)
10950c77668dSChuck Lever 		__field(int, status)
10960c77668dSChuck Lever 	),
10970c77668dSChuck Lever 
10980c77668dSChuck Lever 	TP_fast_assign(
10990c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1100f87b543aSOlga Kornievskaia 		__entry->client_id = rqst->rq_task->tk_client ?
1101f87b543aSOlga Kornievskaia 			rqst->rq_task->tk_client->cl_clid : -1;
11020c77668dSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
11030c77668dSChuck Lever 		__entry->seqno = rqst->rq_seqno;
11040c77668dSChuck Lever 		__entry->status = status;
11050c77668dSChuck Lever 	),
11060c77668dSChuck Lever 
1107b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1108b4776a34SChuck Lever 		  " xid=0x%08x seqno=%u status=%d",
11090c77668dSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11100c77668dSChuck Lever 		__entry->seqno, __entry->status)
11110c77668dSChuck Lever );
11120c77668dSChuck Lever 
1113e936a597SChuck Lever TRACE_EVENT(xprt_retransmit,
1114e936a597SChuck Lever 	TP_PROTO(
1115e936a597SChuck Lever 		const struct rpc_rqst *rqst
1116e936a597SChuck Lever 	),
1117e936a597SChuck Lever 
1118e936a597SChuck Lever 	TP_ARGS(rqst),
1119e936a597SChuck Lever 
1120e936a597SChuck Lever 	TP_STRUCT__entry(
1121e936a597SChuck Lever 		__field(unsigned int, task_id)
1122e936a597SChuck Lever 		__field(unsigned int, client_id)
1123e936a597SChuck Lever 		__field(u32, xid)
1124e936a597SChuck Lever 		__field(int, ntrans)
1125e936a597SChuck Lever 		__field(int, version)
1126be17b8caSChuck Lever 		__field(unsigned long, timeout)
1127e936a597SChuck Lever 		__string(progname,
1128e936a597SChuck Lever 			 rqst->rq_task->tk_client->cl_program->name)
1129be630b91SChuck Lever 		__string(procname, rpc_proc_name(rqst->rq_task))
1130e936a597SChuck Lever 	),
1131e936a597SChuck Lever 
1132e936a597SChuck Lever 	TP_fast_assign(
1133e936a597SChuck Lever 		struct rpc_task *task = rqst->rq_task;
1134e936a597SChuck Lever 
1135e936a597SChuck Lever 		__entry->task_id = task->tk_pid;
1136e936a597SChuck Lever 		__entry->client_id = task->tk_client ?
1137e936a597SChuck Lever 			task->tk_client->cl_clid : -1;
1138e936a597SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1139e936a597SChuck Lever 		__entry->ntrans = rqst->rq_ntrans;
1140be17b8caSChuck Lever 		__entry->timeout = task->tk_timeout;
1141*2c92ca84SSteven Rostedt (Google) 		__assign_str(progname);
1142e936a597SChuck Lever 		__entry->version = task->tk_client->cl_vers;
1143*2c92ca84SSteven Rostedt (Google) 		__assign_str(procname);
1144e936a597SChuck Lever 	),
1145e936a597SChuck Lever 
1146b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1147b4776a34SChuck Lever 		  " xid=0x%08x %sv%d %s ntrans=%d timeout=%lu",
1148e936a597SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1149be630b91SChuck Lever 		__get_str(progname), __entry->version, __get_str(procname),
1150be17b8caSChuck Lever 		__entry->ntrans, __entry->timeout
1151be630b91SChuck Lever 	)
1152e936a597SChuck Lever );
1153e936a597SChuck Lever 
1154a25a4cb3SChuck Lever TRACE_EVENT(xprt_ping,
1155a25a4cb3SChuck Lever 	TP_PROTO(const struct rpc_xprt *xprt, int status),
1156a25a4cb3SChuck Lever 
1157a25a4cb3SChuck Lever 	TP_ARGS(xprt, status),
1158a25a4cb3SChuck Lever 
1159a25a4cb3SChuck Lever 	TP_STRUCT__entry(
1160a25a4cb3SChuck Lever 		__field(int, status)
1161a25a4cb3SChuck Lever 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1162a25a4cb3SChuck Lever 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1163a25a4cb3SChuck Lever 	),
1164a25a4cb3SChuck Lever 
1165a25a4cb3SChuck Lever 	TP_fast_assign(
1166a25a4cb3SChuck Lever 		__entry->status = status;
1167*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1168*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
1169a25a4cb3SChuck Lever 	),
1170a25a4cb3SChuck Lever 
1171a25a4cb3SChuck Lever 	TP_printk("peer=[%s]:%s status=%d",
1172a25a4cb3SChuck Lever 			__get_str(addr), __get_str(port), __entry->status)
1173a25a4cb3SChuck Lever );
1174a25a4cb3SChuck Lever 
1175bf7ca707SChuck Lever DECLARE_EVENT_CLASS(xprt_writelock_event,
1176bf7ca707SChuck Lever 	TP_PROTO(
1177bf7ca707SChuck Lever 		const struct rpc_xprt *xprt, const struct rpc_task *task
1178bf7ca707SChuck Lever 	),
1179bf7ca707SChuck Lever 
1180bf7ca707SChuck Lever 	TP_ARGS(xprt, task),
1181bf7ca707SChuck Lever 
1182bf7ca707SChuck Lever 	TP_STRUCT__entry(
1183bf7ca707SChuck Lever 		__field(unsigned int, task_id)
1184bf7ca707SChuck Lever 		__field(unsigned int, client_id)
1185bf7ca707SChuck Lever 		__field(unsigned int, snd_task_id)
1186bf7ca707SChuck Lever 	),
1187bf7ca707SChuck Lever 
1188bf7ca707SChuck Lever 	TP_fast_assign(
1189bf7ca707SChuck Lever 		if (task) {
1190bf7ca707SChuck Lever 			__entry->task_id = task->tk_pid;
1191bf7ca707SChuck Lever 			__entry->client_id = task->tk_client ?
1192bf7ca707SChuck Lever 					     task->tk_client->cl_clid : -1;
1193bf7ca707SChuck Lever 		} else {
1194bf7ca707SChuck Lever 			__entry->task_id = -1;
1195bf7ca707SChuck Lever 			__entry->client_id = -1;
1196bf7ca707SChuck Lever 		}
1197aed28b7aSChuck Lever 		if (xprt->snd_task &&
1198aed28b7aSChuck Lever 		    !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
1199aed28b7aSChuck Lever 			__entry->snd_task_id = xprt->snd_task->tk_pid;
1200aed28b7aSChuck Lever 		else
1201aed28b7aSChuck Lever 			__entry->snd_task_id = -1;
1202bf7ca707SChuck Lever 	),
1203bf7ca707SChuck Lever 
1204b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1205b4776a34SChuck Lever 		  " snd_task:" SUNRPC_TRACE_PID_SPECIFIER,
1206bf7ca707SChuck Lever 			__entry->task_id, __entry->client_id,
1207bf7ca707SChuck Lever 			__entry->snd_task_id)
1208bf7ca707SChuck Lever );
1209bf7ca707SChuck Lever 
1210bf7ca707SChuck Lever #define DEFINE_WRITELOCK_EVENT(name) \
1211bf7ca707SChuck Lever 	DEFINE_EVENT(xprt_writelock_event, xprt_##name, \
1212bf7ca707SChuck Lever 			TP_PROTO( \
1213bf7ca707SChuck Lever 				const struct rpc_xprt *xprt, \
1214bf7ca707SChuck Lever 				const struct rpc_task *task \
1215bf7ca707SChuck Lever 			), \
1216bf7ca707SChuck Lever 			TP_ARGS(xprt, task))
1217bf7ca707SChuck Lever 
1218bf7ca707SChuck Lever DEFINE_WRITELOCK_EVENT(reserve_xprt);
1219bf7ca707SChuck Lever DEFINE_WRITELOCK_EVENT(release_xprt);
1220bf7ca707SChuck Lever 
1221bf7ca707SChuck Lever DECLARE_EVENT_CLASS(xprt_cong_event,
1222bf7ca707SChuck Lever 	TP_PROTO(
1223bf7ca707SChuck Lever 		const struct rpc_xprt *xprt, const struct rpc_task *task
1224bf7ca707SChuck Lever 	),
1225bf7ca707SChuck Lever 
1226bf7ca707SChuck Lever 	TP_ARGS(xprt, task),
1227bf7ca707SChuck Lever 
1228bf7ca707SChuck Lever 	TP_STRUCT__entry(
1229bf7ca707SChuck Lever 		__field(unsigned int, task_id)
1230bf7ca707SChuck Lever 		__field(unsigned int, client_id)
1231bf7ca707SChuck Lever 		__field(unsigned int, snd_task_id)
1232bf7ca707SChuck Lever 		__field(unsigned long, cong)
1233bf7ca707SChuck Lever 		__field(unsigned long, cwnd)
1234bf7ca707SChuck Lever 		__field(bool, wait)
1235bf7ca707SChuck Lever 	),
1236bf7ca707SChuck Lever 
1237bf7ca707SChuck Lever 	TP_fast_assign(
1238bf7ca707SChuck Lever 		if (task) {
1239bf7ca707SChuck Lever 			__entry->task_id = task->tk_pid;
1240bf7ca707SChuck Lever 			__entry->client_id = task->tk_client ?
1241bf7ca707SChuck Lever 					     task->tk_client->cl_clid : -1;
1242bf7ca707SChuck Lever 		} else {
1243bf7ca707SChuck Lever 			__entry->task_id = -1;
1244bf7ca707SChuck Lever 			__entry->client_id = -1;
1245bf7ca707SChuck Lever 		}
1246aed28b7aSChuck Lever 		if (xprt->snd_task &&
1247aed28b7aSChuck Lever 		    !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
1248aed28b7aSChuck Lever 			__entry->snd_task_id = xprt->snd_task->tk_pid;
1249aed28b7aSChuck Lever 		else
1250aed28b7aSChuck Lever 			__entry->snd_task_id = -1;
1251aed28b7aSChuck Lever 
1252bf7ca707SChuck Lever 		__entry->cong = xprt->cong;
1253bf7ca707SChuck Lever 		__entry->cwnd = xprt->cwnd;
1254bf7ca707SChuck Lever 		__entry->wait = test_bit(XPRT_CWND_WAIT, &xprt->state);
1255bf7ca707SChuck Lever 	),
1256bf7ca707SChuck Lever 
1257b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1258b4776a34SChuck Lever 		  " snd_task:" SUNRPC_TRACE_PID_SPECIFIER
1259b4776a34SChuck Lever 		  " cong=%lu cwnd=%lu%s",
1260bf7ca707SChuck Lever 			__entry->task_id, __entry->client_id,
1261bf7ca707SChuck Lever 			__entry->snd_task_id, __entry->cong, __entry->cwnd,
1262bf7ca707SChuck Lever 			__entry->wait ? " (wait)" : "")
1263bf7ca707SChuck Lever );
1264bf7ca707SChuck Lever 
1265bf7ca707SChuck Lever #define DEFINE_CONG_EVENT(name) \
1266bf7ca707SChuck Lever 	DEFINE_EVENT(xprt_cong_event, xprt_##name, \
1267bf7ca707SChuck Lever 			TP_PROTO( \
1268bf7ca707SChuck Lever 				const struct rpc_xprt *xprt, \
1269bf7ca707SChuck Lever 				const struct rpc_task *task \
1270bf7ca707SChuck Lever 			), \
1271bf7ca707SChuck Lever 			TP_ARGS(xprt, task))
1272bf7ca707SChuck Lever 
1273bf7ca707SChuck Lever DEFINE_CONG_EVENT(reserve_cong);
1274bf7ca707SChuck Lever DEFINE_CONG_EVENT(release_cong);
1275bf7ca707SChuck Lever DEFINE_CONG_EVENT(get_cong);
1276bf7ca707SChuck Lever DEFINE_CONG_EVENT(put_cong);
1277bf7ca707SChuck Lever 
127809d2ba0cSChuck Lever TRACE_EVENT(xprt_reserve,
127909d2ba0cSChuck Lever 	TP_PROTO(
128009d2ba0cSChuck Lever 		const struct rpc_rqst *rqst
128109d2ba0cSChuck Lever 	),
128209d2ba0cSChuck Lever 
128309d2ba0cSChuck Lever 	TP_ARGS(rqst),
128409d2ba0cSChuck Lever 
128509d2ba0cSChuck Lever 	TP_STRUCT__entry(
128609d2ba0cSChuck Lever 		__field(unsigned int, task_id)
128709d2ba0cSChuck Lever 		__field(unsigned int, client_id)
128809d2ba0cSChuck Lever 		__field(u32, xid)
128909d2ba0cSChuck Lever 	),
129009d2ba0cSChuck Lever 
129109d2ba0cSChuck Lever 	TP_fast_assign(
129209d2ba0cSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
129309d2ba0cSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
129409d2ba0cSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
129509d2ba0cSChuck Lever 	),
129609d2ba0cSChuck Lever 
1297b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x",
129809d2ba0cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
129909d2ba0cSChuck Lever 	)
130009d2ba0cSChuck Lever );
130109d2ba0cSChuck Lever 
1302f67939e4SChuck Lever TRACE_EVENT(xs_data_ready,
1303f67939e4SChuck Lever 	TP_PROTO(
1304f67939e4SChuck Lever 		const struct rpc_xprt *xprt
1305f67939e4SChuck Lever 	),
1306f67939e4SChuck Lever 
1307f67939e4SChuck Lever 	TP_ARGS(xprt),
1308f67939e4SChuck Lever 
1309f67939e4SChuck Lever 	TP_STRUCT__entry(
1310f67939e4SChuck Lever 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1311f67939e4SChuck Lever 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1312f67939e4SChuck Lever 	),
1313f67939e4SChuck Lever 
1314f67939e4SChuck Lever 	TP_fast_assign(
1315*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1316*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
1317f67939e4SChuck Lever 	),
1318f67939e4SChuck Lever 
1319f67939e4SChuck Lever 	TP_printk("peer=[%s]:%s", __get_str(addr), __get_str(port))
1320f67939e4SChuck Lever );
1321f67939e4SChuck Lever 
1322c50b8ee0STrond Myklebust TRACE_EVENT(xs_stream_read_data,
1323c50b8ee0STrond Myklebust 	TP_PROTO(struct rpc_xprt *xprt, ssize_t err, size_t total),
13243705ad64SJeff Layton 
13253705ad64SJeff Layton 	TP_ARGS(xprt, err, total),
13263705ad64SJeff Layton 
13273705ad64SJeff Layton 	TP_STRUCT__entry(
1328c50b8ee0STrond Myklebust 		__field(ssize_t, err)
1329c50b8ee0STrond Myklebust 		__field(size_t, total)
13303705ad64SJeff Layton 		__string(addr, xprt ? xprt->address_strings[RPC_DISPLAY_ADDR] :
133170a6ed55SSteven Rostedt (Google) 				EVENT_NULL_STR)
13323705ad64SJeff Layton 		__string(port, xprt ? xprt->address_strings[RPC_DISPLAY_PORT] :
133370a6ed55SSteven Rostedt (Google) 				EVENT_NULL_STR)
13343705ad64SJeff Layton 	),
13353705ad64SJeff Layton 
13363705ad64SJeff Layton 	TP_fast_assign(
13373705ad64SJeff Layton 		__entry->err = err;
13383705ad64SJeff Layton 		__entry->total = total;
1339*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1340*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
13413705ad64SJeff Layton 	),
13423705ad64SJeff Layton 
1343c50b8ee0STrond Myklebust 	TP_printk("peer=[%s]:%s err=%zd total=%zu", __get_str(addr),
13443705ad64SJeff Layton 			__get_str(port), __entry->err, __entry->total)
13453705ad64SJeff Layton );
13463705ad64SJeff Layton 
1347c50b8ee0STrond Myklebust TRACE_EVENT(xs_stream_read_request,
13481a867a08SJeff Layton 	TP_PROTO(struct sock_xprt *xs),
13491a867a08SJeff Layton 
13501a867a08SJeff Layton 	TP_ARGS(xs),
13511a867a08SJeff Layton 
13521a867a08SJeff Layton 	TP_STRUCT__entry(
13531a867a08SJeff Layton 		__string(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR])
13541a867a08SJeff Layton 		__string(port, xs->xprt.address_strings[RPC_DISPLAY_PORT])
1355a30ccf1aSChuck Lever 		__field(u32, xid)
13561a867a08SJeff Layton 		__field(unsigned long, copied)
13571a867a08SJeff Layton 		__field(unsigned int, reclen)
1358c50b8ee0STrond Myklebust 		__field(unsigned int, offset)
13591a867a08SJeff Layton 	),
13601a867a08SJeff Layton 
13611a867a08SJeff Layton 	TP_fast_assign(
1362*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1363*2c92ca84SSteven Rostedt (Google) 		__assign_str(port);
1364d1109aa5STrond Myklebust 		__entry->xid = be32_to_cpu(xs->recv.xid);
1365d1109aa5STrond Myklebust 		__entry->copied = xs->recv.copied;
1366d1109aa5STrond Myklebust 		__entry->reclen = xs->recv.len;
1367d1109aa5STrond Myklebust 		__entry->offset = xs->recv.offset;
13681a867a08SJeff Layton 	),
13691a867a08SJeff Layton 
1370c50b8ee0STrond Myklebust 	TP_printk("peer=[%s]:%s xid=0x%08x copied=%lu reclen=%u offset=%u",
1371a30ccf1aSChuck Lever 			__get_str(addr), __get_str(port), __entry->xid,
13721a867a08SJeff Layton 			__entry->copied, __entry->reclen, __entry->offset)
13731a867a08SJeff Layton );
13741a867a08SJeff Layton 
1375e465cc3fSChuck Lever TRACE_EVENT(rpcb_getport,
1376e465cc3fSChuck Lever 	TP_PROTO(
1377e465cc3fSChuck Lever 		const struct rpc_clnt *clnt,
1378e465cc3fSChuck Lever 		const struct rpc_task *task,
1379e465cc3fSChuck Lever 		unsigned int bind_version
1380e465cc3fSChuck Lever 	),
1381e465cc3fSChuck Lever 
1382e465cc3fSChuck Lever 	TP_ARGS(clnt, task, bind_version),
1383e465cc3fSChuck Lever 
1384e465cc3fSChuck Lever 	TP_STRUCT__entry(
1385e465cc3fSChuck Lever 		__field(unsigned int, task_id)
1386e465cc3fSChuck Lever 		__field(unsigned int, client_id)
1387e465cc3fSChuck Lever 		__field(unsigned int, program)
1388e465cc3fSChuck Lever 		__field(unsigned int, version)
1389e465cc3fSChuck Lever 		__field(int, protocol)
1390e465cc3fSChuck Lever 		__field(unsigned int, bind_version)
1391e465cc3fSChuck Lever 		__string(servername, task->tk_xprt->servername)
1392e465cc3fSChuck Lever 	),
1393e465cc3fSChuck Lever 
1394e465cc3fSChuck Lever 	TP_fast_assign(
1395e465cc3fSChuck Lever 		__entry->task_id = task->tk_pid;
1396e465cc3fSChuck Lever 		__entry->client_id = clnt->cl_clid;
1397e465cc3fSChuck Lever 		__entry->program = clnt->cl_prog;
1398e465cc3fSChuck Lever 		__entry->version = clnt->cl_vers;
1399e465cc3fSChuck Lever 		__entry->protocol = task->tk_xprt->prot;
1400e465cc3fSChuck Lever 		__entry->bind_version = bind_version;
1401*2c92ca84SSteven Rostedt (Google) 		__assign_str(servername);
1402e465cc3fSChuck Lever 	),
1403e465cc3fSChuck Lever 
1404b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1405b4776a34SChuck Lever 		  " server=%s program=%u version=%u protocol=%d bind_version=%u",
1406e465cc3fSChuck Lever 		__entry->task_id, __entry->client_id, __get_str(servername),
1407e465cc3fSChuck Lever 		__entry->program, __entry->version, __entry->protocol,
1408e465cc3fSChuck Lever 		__entry->bind_version
1409e465cc3fSChuck Lever 	)
1410e465cc3fSChuck Lever );
1411c509f15aSChuck Lever 
1412ac1ae534SChuck Lever TRACE_EVENT(rpcb_setport,
1413ac1ae534SChuck Lever 	TP_PROTO(
1414ac1ae534SChuck Lever 		const struct rpc_task *task,
1415ac1ae534SChuck Lever 		int status,
1416ac1ae534SChuck Lever 		unsigned short port
1417ac1ae534SChuck Lever 	),
1418ac1ae534SChuck Lever 
1419ac1ae534SChuck Lever 	TP_ARGS(task, status, port),
1420ac1ae534SChuck Lever 
1421ac1ae534SChuck Lever 	TP_STRUCT__entry(
1422ac1ae534SChuck Lever 		__field(unsigned int, task_id)
1423ac1ae534SChuck Lever 		__field(unsigned int, client_id)
1424ac1ae534SChuck Lever 		__field(int, status)
1425ac1ae534SChuck Lever 		__field(unsigned short, port)
1426ac1ae534SChuck Lever 	),
1427ac1ae534SChuck Lever 
1428ac1ae534SChuck Lever 	TP_fast_assign(
1429ac1ae534SChuck Lever 		__entry->task_id = task->tk_pid;
1430ac1ae534SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1431ac1ae534SChuck Lever 		__entry->status = status;
1432ac1ae534SChuck Lever 		__entry->port = port;
1433ac1ae534SChuck Lever 	),
1434ac1ae534SChuck Lever 
1435b4776a34SChuck Lever 	TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " status=%d port=%u",
1436ac1ae534SChuck Lever 		__entry->task_id, __entry->client_id,
1437ac1ae534SChuck Lever 		__entry->status, __entry->port
1438ac1ae534SChuck Lever 	)
1439ac1ae534SChuck Lever );
1440ac1ae534SChuck Lever 
1441c3adcc7dSChuck Lever TRACE_EVENT(pmap_register,
1442c3adcc7dSChuck Lever 	TP_PROTO(
1443c3adcc7dSChuck Lever 		u32 program,
1444c3adcc7dSChuck Lever 		u32 version,
1445c3adcc7dSChuck Lever 		int protocol,
1446c3adcc7dSChuck Lever 		unsigned short port
1447c3adcc7dSChuck Lever 	),
1448c3adcc7dSChuck Lever 
1449c3adcc7dSChuck Lever 	TP_ARGS(program, version, protocol, port),
1450c3adcc7dSChuck Lever 
1451c3adcc7dSChuck Lever 	TP_STRUCT__entry(
1452c3adcc7dSChuck Lever 		__field(unsigned int, program)
1453c3adcc7dSChuck Lever 		__field(unsigned int, version)
1454c3adcc7dSChuck Lever 		__field(int, protocol)
1455c3adcc7dSChuck Lever 		__field(unsigned int, port)
1456c3adcc7dSChuck Lever 	),
1457c3adcc7dSChuck Lever 
1458c3adcc7dSChuck Lever 	TP_fast_assign(
1459c3adcc7dSChuck Lever 		__entry->program = program;
1460c3adcc7dSChuck Lever 		__entry->version = version;
1461c3adcc7dSChuck Lever 		__entry->protocol = protocol;
1462c3adcc7dSChuck Lever 		__entry->port = port;
1463c3adcc7dSChuck Lever 	),
1464c3adcc7dSChuck Lever 
1465c3adcc7dSChuck Lever 	TP_printk("program=%u version=%u protocol=%d port=%u",
1466c3adcc7dSChuck Lever 		__entry->program, __entry->version,
1467c3adcc7dSChuck Lever 		__entry->protocol, __entry->port
1468c3adcc7dSChuck Lever 	)
1469c3adcc7dSChuck Lever );
1470c3adcc7dSChuck Lever 
1471c3adcc7dSChuck Lever TRACE_EVENT(rpcb_register,
1472c3adcc7dSChuck Lever 	TP_PROTO(
1473c3adcc7dSChuck Lever 		u32 program,
1474c3adcc7dSChuck Lever 		u32 version,
1475c3adcc7dSChuck Lever 		const char *addr,
1476c3adcc7dSChuck Lever 		const char *netid
1477c3adcc7dSChuck Lever 	),
1478c3adcc7dSChuck Lever 
1479c3adcc7dSChuck Lever 	TP_ARGS(program, version, addr, netid),
1480c3adcc7dSChuck Lever 
1481c3adcc7dSChuck Lever 	TP_STRUCT__entry(
1482c3adcc7dSChuck Lever 		__field(unsigned int, program)
1483c3adcc7dSChuck Lever 		__field(unsigned int, version)
1484c3adcc7dSChuck Lever 		__string(addr, addr)
1485c3adcc7dSChuck Lever 		__string(netid, netid)
1486c3adcc7dSChuck Lever 	),
1487c3adcc7dSChuck Lever 
1488c3adcc7dSChuck Lever 	TP_fast_assign(
1489c3adcc7dSChuck Lever 		__entry->program = program;
1490c3adcc7dSChuck Lever 		__entry->version = version;
1491*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
1492*2c92ca84SSteven Rostedt (Google) 		__assign_str(netid);
1493c3adcc7dSChuck Lever 	),
1494c3adcc7dSChuck Lever 
1495c3adcc7dSChuck Lever 	TP_printk("program=%u version=%u addr=%s netid=%s",
1496c3adcc7dSChuck Lever 		__entry->program, __entry->version,
1497c3adcc7dSChuck Lever 		__get_str(addr), __get_str(netid)
1498c3adcc7dSChuck Lever 	)
1499c3adcc7dSChuck Lever );
1500c3adcc7dSChuck Lever 
1501c3adcc7dSChuck Lever TRACE_EVENT(rpcb_unregister,
1502c3adcc7dSChuck Lever 	TP_PROTO(
1503c3adcc7dSChuck Lever 		u32 program,
1504c3adcc7dSChuck Lever 		u32 version,
1505c3adcc7dSChuck Lever 		const char *netid
1506c3adcc7dSChuck Lever 	),
1507c3adcc7dSChuck Lever 
1508c3adcc7dSChuck Lever 	TP_ARGS(program, version, netid),
1509c3adcc7dSChuck Lever 
1510c3adcc7dSChuck Lever 	TP_STRUCT__entry(
1511c3adcc7dSChuck Lever 		__field(unsigned int, program)
1512c3adcc7dSChuck Lever 		__field(unsigned int, version)
1513c3adcc7dSChuck Lever 		__string(netid, netid)
1514c3adcc7dSChuck Lever 	),
1515c3adcc7dSChuck Lever 
1516c3adcc7dSChuck Lever 	TP_fast_assign(
1517c3adcc7dSChuck Lever 		__entry->program = program;
1518c3adcc7dSChuck Lever 		__entry->version = version;
1519*2c92ca84SSteven Rostedt (Google) 		__assign_str(netid);
1520c3adcc7dSChuck Lever 	),
1521c3adcc7dSChuck Lever 
1522c3adcc7dSChuck Lever 	TP_printk("program=%u version=%u netid=%s",
1523c3adcc7dSChuck Lever 		__entry->program, __entry->version, __get_str(netid)
1524c3adcc7dSChuck Lever 	)
1525c3adcc7dSChuck Lever );
1526c3adcc7dSChuck Lever 
152775eb6af7SChuck Lever /**
152875eb6af7SChuck Lever  ** RPC-over-TLS tracepoints
152975eb6af7SChuck Lever  **/
153075eb6af7SChuck Lever 
153175eb6af7SChuck Lever DECLARE_EVENT_CLASS(rpc_tls_class,
153275eb6af7SChuck Lever 	TP_PROTO(
153375eb6af7SChuck Lever 		const struct rpc_clnt *clnt,
153475eb6af7SChuck Lever 		const struct rpc_xprt *xprt
153575eb6af7SChuck Lever 	),
153675eb6af7SChuck Lever 
153775eb6af7SChuck Lever 	TP_ARGS(clnt, xprt),
153875eb6af7SChuck Lever 
153975eb6af7SChuck Lever 	TP_STRUCT__entry(
154075eb6af7SChuck Lever 		__field(unsigned long, requested_policy)
154175eb6af7SChuck Lever 		__field(u32, version)
154275eb6af7SChuck Lever 		__string(servername, xprt->servername)
154375eb6af7SChuck Lever 		__string(progname, clnt->cl_program->name)
154475eb6af7SChuck Lever 	),
154575eb6af7SChuck Lever 
154675eb6af7SChuck Lever 	TP_fast_assign(
154775eb6af7SChuck Lever 		__entry->requested_policy = clnt->cl_xprtsec.policy;
154875eb6af7SChuck Lever 		__entry->version = clnt->cl_vers;
1549*2c92ca84SSteven Rostedt (Google) 		__assign_str(servername);
1550*2c92ca84SSteven Rostedt (Google) 		__assign_str(progname);
155175eb6af7SChuck Lever 	),
155275eb6af7SChuck Lever 
155375eb6af7SChuck Lever 	TP_printk("server=%s %sv%u requested_policy=%s",
155475eb6af7SChuck Lever 		__get_str(servername), __get_str(progname), __entry->version,
155575eb6af7SChuck Lever 		rpc_show_xprtsec_policy(__entry->requested_policy)
155675eb6af7SChuck Lever 	)
155775eb6af7SChuck Lever );
155875eb6af7SChuck Lever 
155975eb6af7SChuck Lever #define DEFINE_RPC_TLS_EVENT(name) \
156075eb6af7SChuck Lever 	DEFINE_EVENT(rpc_tls_class, rpc_tls_##name, \
156175eb6af7SChuck Lever 			TP_PROTO( \
156275eb6af7SChuck Lever 				const struct rpc_clnt *clnt, \
156375eb6af7SChuck Lever 				const struct rpc_xprt *xprt \
156475eb6af7SChuck Lever 			), \
156575eb6af7SChuck Lever 			TP_ARGS(clnt, xprt))
156675eb6af7SChuck Lever 
156775eb6af7SChuck Lever DEFINE_RPC_TLS_EVENT(unavailable);
156875eb6af7SChuck Lever DEFINE_RPC_TLS_EVENT(not_started);
156975eb6af7SChuck Lever 
157075eb6af7SChuck Lever 
15715f39d271SChuck Lever /* Record an xdr_buf containing a fully-formed RPC message */
15725f39d271SChuck Lever DECLARE_EVENT_CLASS(svc_xdr_msg_class,
1573c509f15aSChuck Lever 	TP_PROTO(
1574c509f15aSChuck Lever 		const struct xdr_buf *xdr
1575c509f15aSChuck Lever 	),
1576c509f15aSChuck Lever 
15775f39d271SChuck Lever 	TP_ARGS(xdr),
1578c509f15aSChuck Lever 
1579c509f15aSChuck Lever 	TP_STRUCT__entry(
1580c509f15aSChuck Lever 		__field(u32, xid)
1581c509f15aSChuck Lever 		__field(const void *, head_base)
1582c509f15aSChuck Lever 		__field(size_t, head_len)
1583c509f15aSChuck Lever 		__field(const void *, tail_base)
1584c509f15aSChuck Lever 		__field(size_t, tail_len)
1585c509f15aSChuck Lever 		__field(unsigned int, page_len)
1586c509f15aSChuck Lever 		__field(unsigned int, msg_len)
1587c509f15aSChuck Lever 	),
1588c509f15aSChuck Lever 
1589c509f15aSChuck Lever 	TP_fast_assign(
15905f39d271SChuck Lever 		__be32 *p = (__be32 *)xdr->head[0].iov_base;
15915f39d271SChuck Lever 
15925f39d271SChuck Lever 		__entry->xid = be32_to_cpu(*p);
15935f39d271SChuck Lever 		__entry->head_base = p;
15945f39d271SChuck Lever 		__entry->head_len = xdr->head[0].iov_len;
15955f39d271SChuck Lever 		__entry->tail_base = xdr->tail[0].iov_base;
15965f39d271SChuck Lever 		__entry->tail_len = xdr->tail[0].iov_len;
15975f39d271SChuck Lever 		__entry->page_len = xdr->page_len;
15985f39d271SChuck Lever 		__entry->msg_len = xdr->len;
15995f39d271SChuck Lever 	),
16005f39d271SChuck Lever 
16015f39d271SChuck Lever 	TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
16025f39d271SChuck Lever 		__entry->xid,
16035f39d271SChuck Lever 		__entry->head_base, __entry->head_len, __entry->page_len,
16045f39d271SChuck Lever 		__entry->tail_base, __entry->tail_len, __entry->msg_len
16055f39d271SChuck Lever 	)
16065f39d271SChuck Lever );
16075f39d271SChuck Lever 
16085f39d271SChuck Lever #define DEFINE_SVCXDRMSG_EVENT(name)					\
16095f39d271SChuck Lever 		DEFINE_EVENT(svc_xdr_msg_class,				\
16105f39d271SChuck Lever 				svc_xdr_##name,				\
16115f39d271SChuck Lever 				TP_PROTO(				\
16125f39d271SChuck Lever 					const struct xdr_buf *xdr	\
16135f39d271SChuck Lever 				),					\
16145f39d271SChuck Lever 				TP_ARGS(xdr))
16155f39d271SChuck Lever 
16165f39d271SChuck Lever DEFINE_SVCXDRMSG_EVENT(recvfrom);
16175f39d271SChuck Lever 
16185f39d271SChuck Lever /* Record an xdr_buf containing arbitrary data, tagged with an XID */
16195f39d271SChuck Lever DECLARE_EVENT_CLASS(svc_xdr_buf_class,
16205f39d271SChuck Lever 	TP_PROTO(
16215f39d271SChuck Lever 		__be32 xid,
16225f39d271SChuck Lever 		const struct xdr_buf *xdr
16235f39d271SChuck Lever 	),
16245f39d271SChuck Lever 
16255f39d271SChuck Lever 	TP_ARGS(xid, xdr),
16265f39d271SChuck Lever 
16275f39d271SChuck Lever 	TP_STRUCT__entry(
16285f39d271SChuck Lever 		__field(u32, xid)
16295f39d271SChuck Lever 		__field(const void *, head_base)
16305f39d271SChuck Lever 		__field(size_t, head_len)
16315f39d271SChuck Lever 		__field(const void *, tail_base)
16325f39d271SChuck Lever 		__field(size_t, tail_len)
163335940a58SChuck Lever 		__field(unsigned int, page_base)
16345f39d271SChuck Lever 		__field(unsigned int, page_len)
16355f39d271SChuck Lever 		__field(unsigned int, msg_len)
16365f39d271SChuck Lever 	),
16375f39d271SChuck Lever 
16385f39d271SChuck Lever 	TP_fast_assign(
16395f39d271SChuck Lever 		__entry->xid = be32_to_cpu(xid);
1640c509f15aSChuck Lever 		__entry->head_base = xdr->head[0].iov_base;
1641c509f15aSChuck Lever 		__entry->head_len = xdr->head[0].iov_len;
1642c509f15aSChuck Lever 		__entry->tail_base = xdr->tail[0].iov_base;
1643c509f15aSChuck Lever 		__entry->tail_len = xdr->tail[0].iov_len;
164435940a58SChuck Lever 		__entry->page_base = xdr->page_base;
1645c509f15aSChuck Lever 		__entry->page_len = xdr->page_len;
1646c509f15aSChuck Lever 		__entry->msg_len = xdr->len;
1647c509f15aSChuck Lever 	),
1648c509f15aSChuck Lever 
164935940a58SChuck Lever 	TP_printk("xid=0x%08x head=[%p,%zu] page=%u(%u) tail=[%p,%zu] len=%u",
1650c509f15aSChuck Lever 		__entry->xid,
165135940a58SChuck Lever 		__entry->head_base, __entry->head_len,
165235940a58SChuck Lever 		__entry->page_len, __entry->page_base,
165335940a58SChuck Lever 		__entry->tail_base, __entry->tail_len,
165435940a58SChuck Lever 		__entry->msg_len
1655c509f15aSChuck Lever 	)
1656c509f15aSChuck Lever );
1657c509f15aSChuck Lever 
1658c509f15aSChuck Lever #define DEFINE_SVCXDRBUF_EVENT(name)					\
1659c509f15aSChuck Lever 		DEFINE_EVENT(svc_xdr_buf_class,				\
1660c509f15aSChuck Lever 				svc_xdr_##name,				\
1661c509f15aSChuck Lever 				TP_PROTO(				\
16625f39d271SChuck Lever 					__be32 xid,			\
1663c509f15aSChuck Lever 					const struct xdr_buf *xdr	\
1664c509f15aSChuck Lever 				),					\
16655f39d271SChuck Lever 				TP_ARGS(xid, xdr))
1666c509f15aSChuck Lever 
1667c509f15aSChuck Lever DEFINE_SVCXDRBUF_EVENT(sendto);
1668c509f15aSChuck Lever 
1669a68d5a50SChuck Lever /*
1670a68d5a50SChuck Lever  * from include/linux/sunrpc/svc.h
1671a68d5a50SChuck Lever  */
1672a68d5a50SChuck Lever #define SVC_RQST_FLAG_LIST						\
1673a68d5a50SChuck Lever 	svc_rqst_flag(SECURE)						\
1674a68d5a50SChuck Lever 	svc_rqst_flag(LOCAL)						\
1675a68d5a50SChuck Lever 	svc_rqst_flag(USEDEFERRAL)					\
1676a68d5a50SChuck Lever 	svc_rqst_flag(DROPME)						\
1677a68d5a50SChuck Lever 	svc_rqst_flag(VICTIM)						\
16789082e1d9SChuck Lever 	svc_rqst_flag_end(DATA)
1679a68d5a50SChuck Lever 
1680a68d5a50SChuck Lever #undef svc_rqst_flag
1681a68d5a50SChuck Lever #undef svc_rqst_flag_end
1682a68d5a50SChuck Lever #define svc_rqst_flag(x)	TRACE_DEFINE_ENUM(RQ_##x);
1683a68d5a50SChuck Lever #define svc_rqst_flag_end(x)	TRACE_DEFINE_ENUM(RQ_##x);
1684a68d5a50SChuck Lever 
1685a68d5a50SChuck Lever SVC_RQST_FLAG_LIST
1686a68d5a50SChuck Lever 
1687a68d5a50SChuck Lever #undef svc_rqst_flag
1688a68d5a50SChuck Lever #undef svc_rqst_flag_end
1689a68d5a50SChuck Lever #define svc_rqst_flag(x)	{ BIT(RQ_##x), #x },
1690a68d5a50SChuck Lever #define svc_rqst_flag_end(x)	{ BIT(RQ_##x), #x }
1691a68d5a50SChuck Lever 
16924d152e2cSJeff Layton #define show_rqstp_flags(flags)						\
1693a68d5a50SChuck Lever 		__print_flags(flags, "|", SVC_RQST_FLAG_LIST)
16944d152e2cSJeff Layton 
1695d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_GARBAGE);
1696d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_SYSERR);
1697d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_VALID);
1698d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_NEGATIVE);
1699d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_OK);
1700d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_DROP);
1701d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_CLOSE);
1702d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_DENIED);
1703d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_PENDING);
1704d88ff958SChuck Lever TRACE_DEFINE_ENUM(SVC_COMPLETE);
1705d88ff958SChuck Lever 
170678c542f9SChuck Lever #define show_svc_auth_status(status)			\
1707ff27e9f7SChuck Lever 	__print_symbolic(status,			\
1708ff27e9f7SChuck Lever 		{ SVC_GARBAGE,	"SVC_GARBAGE" },	\
1709ff27e9f7SChuck Lever 		{ SVC_SYSERR,	"SVC_SYSERR" },		\
1710ff27e9f7SChuck Lever 		{ SVC_VALID,	"SVC_VALID" },		\
1711ff27e9f7SChuck Lever 		{ SVC_NEGATIVE,	"SVC_NEGATIVE" },	\
1712ff27e9f7SChuck Lever 		{ SVC_OK,	"SVC_OK" },		\
1713ff27e9f7SChuck Lever 		{ SVC_DROP,	"SVC_DROP" },		\
1714ff27e9f7SChuck Lever 		{ SVC_CLOSE,	"SVC_CLOSE" },		\
1715ff27e9f7SChuck Lever 		{ SVC_DENIED,	"SVC_DENIED" },		\
1716ff27e9f7SChuck Lever 		{ SVC_PENDING,	"SVC_PENDING" },	\
1717ff27e9f7SChuck Lever 		{ SVC_COMPLETE,	"SVC_COMPLETE" })
1718ff27e9f7SChuck Lever 
171970a60cbfSChuck Lever #define SVC_RQST_ENDPOINT_FIELDS(r) \
172070a60cbfSChuck Lever 		__sockaddr(server, (r)->rq_xprt->xpt_locallen) \
172170a60cbfSChuck Lever 		__sockaddr(client, (r)->rq_xprt->xpt_remotelen) \
172270a60cbfSChuck Lever 		__field(unsigned int, netns_ino) \
172370a60cbfSChuck Lever 		__field(u32, xid)
172470a60cbfSChuck Lever 
172570a60cbfSChuck Lever #define SVC_RQST_ENDPOINT_ASSIGNMENTS(r) \
172670a60cbfSChuck Lever 		do { \
172770a60cbfSChuck Lever 			struct svc_xprt *xprt = (r)->rq_xprt; \
172870a60cbfSChuck Lever 			__assign_sockaddr(server, &xprt->xpt_local, \
172970a60cbfSChuck Lever 					  xprt->xpt_locallen); \
173070a60cbfSChuck Lever 			__assign_sockaddr(client, &xprt->xpt_remote, \
173170a60cbfSChuck Lever 					  xprt->xpt_remotelen); \
173270a60cbfSChuck Lever 			__entry->netns_ino = xprt->xpt_net->ns.inum; \
173370a60cbfSChuck Lever 			__entry->xid = be32_to_cpu((r)->rq_xid); \
173470a60cbfSChuck Lever 		} while (0)
173570a60cbfSChuck Lever 
173670a60cbfSChuck Lever #define SVC_RQST_ENDPOINT_FORMAT \
173770a60cbfSChuck Lever 		"xid=0x%08x server=%pISpc client=%pISpc"
173870a60cbfSChuck Lever 
173970a60cbfSChuck Lever #define SVC_RQST_ENDPOINT_VARARGS \
174070a60cbfSChuck Lever 		__entry->xid, __get_sockaddr(server), __get_sockaddr(client)
174170a60cbfSChuck Lever 
1742c65d9df0SChuck Lever TRACE_EVENT_CONDITION(svc_authenticate,
174378c542f9SChuck Lever 	TP_PROTO(
174478c542f9SChuck Lever 		const struct svc_rqst *rqst,
174578c542f9SChuck Lever 		enum svc_auth_status auth_res
174678c542f9SChuck Lever 	),
1747ff27e9f7SChuck Lever 
1748438623a0SChuck Lever 	TP_ARGS(rqst, auth_res),
1749ff27e9f7SChuck Lever 
1750c65d9df0SChuck Lever 	TP_CONDITION(auth_res != SVC_OK && auth_res != SVC_COMPLETE),
1751c65d9df0SChuck Lever 
1752ff27e9f7SChuck Lever 	TP_STRUCT__entry(
175370a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_FIELDS(rqst)
175470a60cbfSChuck Lever 
1755ff27e9f7SChuck Lever 		__field(unsigned long, svc_status)
1756ff27e9f7SChuck Lever 		__field(unsigned long, auth_stat)
1757ff27e9f7SChuck Lever 	),
1758ff27e9f7SChuck Lever 
1759ff27e9f7SChuck Lever 	TP_fast_assign(
176070a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
176170a60cbfSChuck Lever 
1762ff27e9f7SChuck Lever 		__entry->svc_status = auth_res;
1763438623a0SChuck Lever 		__entry->auth_stat = be32_to_cpu(rqst->rq_auth_stat);
1764ff27e9f7SChuck Lever 	),
1765ff27e9f7SChuck Lever 
176670a60cbfSChuck Lever 	TP_printk(SVC_RQST_ENDPOINT_FORMAT
176770a60cbfSChuck Lever 		" auth_res=%s auth_stat=%s",
176870a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_VARARGS,
176978c542f9SChuck Lever 		show_svc_auth_status(__entry->svc_status),
1770ff27e9f7SChuck Lever 		rpc_show_auth_stat(__entry->auth_stat))
1771ff27e9f7SChuck Lever );
1772ff27e9f7SChuck Lever 
17730b9547bfSChuck Lever TRACE_EVENT(svc_process,
17740b9547bfSChuck Lever 	TP_PROTO(const struct svc_rqst *rqst, const char *name),
17750b9547bfSChuck Lever 
17760b9547bfSChuck Lever 	TP_ARGS(rqst, name),
17770b9547bfSChuck Lever 
17780b9547bfSChuck Lever 	TP_STRUCT__entry(
17790b9547bfSChuck Lever 		__field(u32, xid)
17800b9547bfSChuck Lever 		__field(u32, vers)
17810b9547bfSChuck Lever 		__field(u32, proc)
17820b9547bfSChuck Lever 		__string(service, name)
17835c117207SChuck Lever 		__string(procedure, svc_proc_name(rqst))
1784d4b09acfSVasily Averin 		__string(addr, rqst->rq_xprt ?
178570a6ed55SSteven Rostedt (Google) 			 rqst->rq_xprt->xpt_remotebuf : EVENT_NULL_STR)
17860b9547bfSChuck Lever 	),
17870b9547bfSChuck Lever 
17880b9547bfSChuck Lever 	TP_fast_assign(
17890b9547bfSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
17900b9547bfSChuck Lever 		__entry->vers = rqst->rq_vers;
17910b9547bfSChuck Lever 		__entry->proc = rqst->rq_proc;
1792*2c92ca84SSteven Rostedt (Google) 		__assign_str(service);
1793*2c92ca84SSteven Rostedt (Google) 		__assign_str(procedure);
1794*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
17950b9547bfSChuck Lever 	),
17960b9547bfSChuck Lever 
179789ff8749SChuck Lever 	TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%s",
17980b9547bfSChuck Lever 			__get_str(addr), __entry->xid,
179989ff8749SChuck Lever 			__get_str(service), __entry->vers,
180089ff8749SChuck Lever 			__get_str(procedure)
180189ff8749SChuck Lever 	)
18020b9547bfSChuck Lever );
18030b9547bfSChuck Lever 
1804104f6351STrond Myklebust DECLARE_EVENT_CLASS(svc_rqst_event,
1805dc5820bdSChuck Lever 	TP_PROTO(
1806dc5820bdSChuck Lever 		const struct svc_rqst *rqst
1807dc5820bdSChuck Lever 	),
1808104f6351STrond Myklebust 
1809104f6351STrond Myklebust 	TP_ARGS(rqst),
1810104f6351STrond Myklebust 
1811104f6351STrond Myklebust 	TP_STRUCT__entry(
181270a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_FIELDS(rqst)
181370a60cbfSChuck Lever 
1814104f6351STrond Myklebust 		__field(unsigned long, flags)
1815104f6351STrond Myklebust 	),
1816104f6351STrond Myklebust 
1817104f6351STrond Myklebust 	TP_fast_assign(
181870a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
181970a60cbfSChuck Lever 
1820104f6351STrond Myklebust 		__entry->flags = rqst->rq_flags;
1821104f6351STrond Myklebust 	),
1822104f6351STrond Myklebust 
182370a60cbfSChuck Lever 	TP_printk(SVC_RQST_ENDPOINT_FORMAT " flags=%s",
182470a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_VARARGS,
1825104f6351STrond Myklebust 		show_rqstp_flags(__entry->flags))
1826104f6351STrond Myklebust );
1827dc5820bdSChuck Lever #define DEFINE_SVC_RQST_EVENT(name) \
1828dc5820bdSChuck Lever 	DEFINE_EVENT(svc_rqst_event, svc_##name, \
1829dc5820bdSChuck Lever 			TP_PROTO( \
1830dc5820bdSChuck Lever 				const struct svc_rqst *rqst \
1831dc5820bdSChuck Lever 			), \
1832dc5820bdSChuck Lever 			TP_ARGS(rqst))
1833104f6351STrond Myklebust 
1834dc5820bdSChuck Lever DEFINE_SVC_RQST_EVENT(defer);
1835dc5820bdSChuck Lever DEFINE_SVC_RQST_EVENT(drop);
1836104f6351STrond Myklebust 
1837860a0d9eSJeff Layton DECLARE_EVENT_CLASS(svc_rqst_status,
183870a60cbfSChuck Lever 	TP_PROTO(
183970a60cbfSChuck Lever 		const struct svc_rqst *rqst,
184070a60cbfSChuck Lever 		int status
184170a60cbfSChuck Lever 	),
1842860a0d9eSJeff Layton 
1843860a0d9eSJeff Layton 	TP_ARGS(rqst, status),
1844860a0d9eSJeff Layton 
1845860a0d9eSJeff Layton 	TP_STRUCT__entry(
184670a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_FIELDS(rqst)
184770a60cbfSChuck Lever 
1848860a0d9eSJeff Layton 		__field(int, status)
18494d152e2cSJeff Layton 		__field(unsigned long, flags)
1850860a0d9eSJeff Layton 	),
1851860a0d9eSJeff Layton 
1852860a0d9eSJeff Layton 	TP_fast_assign(
185370a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
185470a60cbfSChuck Lever 
1855860a0d9eSJeff Layton 		__entry->status = status;
18564d152e2cSJeff Layton 		__entry->flags = rqst->rq_flags;
1857860a0d9eSJeff Layton 	),
1858860a0d9eSJeff Layton 
185970a60cbfSChuck Lever 	TP_printk(SVC_RQST_ENDPOINT_FORMAT " status=%d flags=%s",
186070a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_VARARGS,
18614d152e2cSJeff Layton 		__entry->status, show_rqstp_flags(__entry->flags))
1862860a0d9eSJeff Layton );
1863860a0d9eSJeff Layton 
1864860a0d9eSJeff Layton DEFINE_EVENT(svc_rqst_status, svc_send,
186570a60cbfSChuck Lever 	TP_PROTO(const struct svc_rqst *rqst, int status),
1866860a0d9eSJeff Layton 	TP_ARGS(rqst, status));
1867860a0d9eSJeff Layton 
18680f516248SChuck Lever TRACE_EVENT(svc_replace_page_err,
18690f516248SChuck Lever 	TP_PROTO(const struct svc_rqst *rqst),
18700f516248SChuck Lever 
18710f516248SChuck Lever 	TP_ARGS(rqst),
18720f516248SChuck Lever 	TP_STRUCT__entry(
18730f516248SChuck Lever 		SVC_RQST_ENDPOINT_FIELDS(rqst)
18740f516248SChuck Lever 
18750f516248SChuck Lever 		__field(const void *, begin)
18760f516248SChuck Lever 		__field(const void *, respages)
18770f516248SChuck Lever 		__field(const void *, nextpage)
18780f516248SChuck Lever 	),
18790f516248SChuck Lever 
18800f516248SChuck Lever 	TP_fast_assign(
18810f516248SChuck Lever 		SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
18820f516248SChuck Lever 
18830f516248SChuck Lever 		__entry->begin = rqst->rq_pages;
18840f516248SChuck Lever 		__entry->respages = rqst->rq_respages;
18850f516248SChuck Lever 		__entry->nextpage = rqst->rq_next_page;
18860f516248SChuck Lever 	),
18870f516248SChuck Lever 
18880f516248SChuck Lever 	TP_printk(SVC_RQST_ENDPOINT_FORMAT " begin=%p respages=%p nextpage=%p",
18890f516248SChuck Lever 		SVC_RQST_ENDPOINT_VARARGS,
18900f516248SChuck Lever 		__entry->begin, __entry->respages, __entry->nextpage)
18910f516248SChuck Lever );
18920f516248SChuck Lever 
189370a60cbfSChuck Lever TRACE_EVENT(svc_stats_latency,
189470a60cbfSChuck Lever 	TP_PROTO(
189570a60cbfSChuck Lever 		const struct svc_rqst *rqst
189670a60cbfSChuck Lever 	),
189770a60cbfSChuck Lever 
189870a60cbfSChuck Lever 	TP_ARGS(rqst),
189970a60cbfSChuck Lever 
190070a60cbfSChuck Lever 	TP_STRUCT__entry(
190170a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_FIELDS(rqst)
190270a60cbfSChuck Lever 
190370a60cbfSChuck Lever 		__field(unsigned long, execute)
190470a60cbfSChuck Lever 		__string(procedure, svc_proc_name(rqst))
190570a60cbfSChuck Lever 	),
190670a60cbfSChuck Lever 
190770a60cbfSChuck Lever 	TP_fast_assign(
190870a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
190970a60cbfSChuck Lever 
191070a60cbfSChuck Lever 		__entry->execute = ktime_to_us(ktime_sub(ktime_get(),
191170a60cbfSChuck Lever 							 rqst->rq_stime));
1912*2c92ca84SSteven Rostedt (Google) 		__assign_str(procedure);
191370a60cbfSChuck Lever 	),
191470a60cbfSChuck Lever 
191570a60cbfSChuck Lever 	TP_printk(SVC_RQST_ENDPOINT_FORMAT " proc=%s execute-us=%lu",
191670a60cbfSChuck Lever 		SVC_RQST_ENDPOINT_VARARGS,
191770a60cbfSChuck Lever 		__get_str(procedure), __entry->execute)
191870a60cbfSChuck Lever );
191970a60cbfSChuck Lever 
1920d75e490fSChuck Lever /*
1921d75e490fSChuck Lever  * from include/linux/sunrpc/svc_xprt.h
1922d75e490fSChuck Lever  */
1923d75e490fSChuck Lever #define SVC_XPRT_FLAG_LIST						\
1924d75e490fSChuck Lever 	svc_xprt_flag(BUSY)						\
1925d75e490fSChuck Lever 	svc_xprt_flag(CONN)						\
1926d75e490fSChuck Lever 	svc_xprt_flag(CLOSE)						\
1927d75e490fSChuck Lever 	svc_xprt_flag(DATA)						\
1928d75e490fSChuck Lever 	svc_xprt_flag(TEMP)						\
1929d75e490fSChuck Lever 	svc_xprt_flag(DEAD)						\
1930d75e490fSChuck Lever 	svc_xprt_flag(CHNGBUF)						\
1931d75e490fSChuck Lever 	svc_xprt_flag(DEFERRED)						\
1932d75e490fSChuck Lever 	svc_xprt_flag(OLD)						\
1933d75e490fSChuck Lever 	svc_xprt_flag(LISTENER)						\
1934d75e490fSChuck Lever 	svc_xprt_flag(CACHE_AUTH)					\
1935d75e490fSChuck Lever 	svc_xprt_flag(LOCAL)						\
1936d75e490fSChuck Lever 	svc_xprt_flag(KILL_TEMP)					\
1937d75e490fSChuck Lever 	svc_xprt_flag(CONG_CTRL)					\
1938d75e490fSChuck Lever 	svc_xprt_flag(HANDSHAKE)					\
1939d75e490fSChuck Lever 	svc_xprt_flag(TLS_SESSION)					\
1940d75e490fSChuck Lever 	svc_xprt_flag_end(PEER_AUTH)
1941d75e490fSChuck Lever 
1942d75e490fSChuck Lever #undef svc_xprt_flag
1943d75e490fSChuck Lever #undef svc_xprt_flag_end
1944d75e490fSChuck Lever #define svc_xprt_flag(x)	TRACE_DEFINE_ENUM(XPT_##x);
1945d75e490fSChuck Lever #define svc_xprt_flag_end(x)	TRACE_DEFINE_ENUM(XPT_##x);
1946d75e490fSChuck Lever 
1947d75e490fSChuck Lever SVC_XPRT_FLAG_LIST
1948d75e490fSChuck Lever 
1949d75e490fSChuck Lever #undef svc_xprt_flag
1950d75e490fSChuck Lever #undef svc_xprt_flag_end
1951d75e490fSChuck Lever #define svc_xprt_flag(x)	{ BIT(XPT_##x), #x },
1952d75e490fSChuck Lever #define svc_xprt_flag_end(x)	{ BIT(XPT_##x), #x }
1953d75e490fSChuck Lever 
195483a712e0SJeff Layton #define show_svc_xprt_flags(flags)					\
1955d75e490fSChuck Lever 	__print_flags(flags, "|", SVC_XPRT_FLAG_LIST)
195683a712e0SJeff Layton 
19574b8f380eSChuck Lever TRACE_EVENT(svc_xprt_create_err,
19584b8f380eSChuck Lever 	TP_PROTO(
19594b8f380eSChuck Lever 		const char *program,
19604b8f380eSChuck Lever 		const char *protocol,
19614b8f380eSChuck Lever 		struct sockaddr *sap,
1962dc6c6fb3SChuck Lever 		size_t salen,
19634b8f380eSChuck Lever 		const struct svc_xprt *xprt
19644b8f380eSChuck Lever 	),
19654b8f380eSChuck Lever 
1966dc6c6fb3SChuck Lever 	TP_ARGS(program, protocol, sap, salen, xprt),
19674b8f380eSChuck Lever 
19684b8f380eSChuck Lever 	TP_STRUCT__entry(
19694b8f380eSChuck Lever 		__field(long, error)
19704b8f380eSChuck Lever 		__string(program, program)
19714b8f380eSChuck Lever 		__string(protocol, protocol)
197226ce14e7SChuck Lever 		__sockaddr(addr, salen)
19734b8f380eSChuck Lever 	),
19744b8f380eSChuck Lever 
19754b8f380eSChuck Lever 	TP_fast_assign(
19764b8f380eSChuck Lever 		__entry->error = PTR_ERR(xprt);
1977*2c92ca84SSteven Rostedt (Google) 		__assign_str(program);
1978*2c92ca84SSteven Rostedt (Google) 		__assign_str(protocol);
197926ce14e7SChuck Lever 		__assign_sockaddr(addr, sap, salen);
19804b8f380eSChuck Lever 	),
19814b8f380eSChuck Lever 
19824b8f380eSChuck Lever 	TP_printk("addr=%pISpc program=%s protocol=%s error=%ld",
198326ce14e7SChuck Lever 		__get_sockaddr(addr), __get_str(program), __get_str(protocol),
19844b8f380eSChuck Lever 		__entry->error)
19854b8f380eSChuck Lever );
19864b8f380eSChuck Lever 
1987aca3ed79SChuck Lever #define SVC_XPRT_ENDPOINT_FIELDS(x) \
1988aca3ed79SChuck Lever 		__sockaddr(server, (x)->xpt_locallen) \
1989aca3ed79SChuck Lever 		__sockaddr(client, (x)->xpt_remotelen) \
1990aca3ed79SChuck Lever 		__field(unsigned long, flags) \
1991aca3ed79SChuck Lever 		__field(unsigned int, netns_ino)
1992aca3ed79SChuck Lever 
1993aca3ed79SChuck Lever #define SVC_XPRT_ENDPOINT_ASSIGNMENTS(x) \
1994aca3ed79SChuck Lever 		do { \
1995aca3ed79SChuck Lever 			__assign_sockaddr(server, &(x)->xpt_local, \
1996aca3ed79SChuck Lever 					  (x)->xpt_locallen); \
1997aca3ed79SChuck Lever 			__assign_sockaddr(client, &(x)->xpt_remote, \
1998aca3ed79SChuck Lever 					  (x)->xpt_remotelen); \
1999aca3ed79SChuck Lever 			__entry->flags = (x)->xpt_flags; \
2000aca3ed79SChuck Lever 			__entry->netns_ino = (x)->xpt_net->ns.inum; \
2001aca3ed79SChuck Lever 		} while (0)
2002aca3ed79SChuck Lever 
2003aca3ed79SChuck Lever #define SVC_XPRT_ENDPOINT_FORMAT \
2004aca3ed79SChuck Lever 		"server=%pISpc client=%pISpc flags=%s"
2005aca3ed79SChuck Lever 
2006aca3ed79SChuck Lever #define SVC_XPRT_ENDPOINT_VARARGS \
2007aca3ed79SChuck Lever 		__get_sockaddr(server), __get_sockaddr(client), \
2008aca3ed79SChuck Lever 		show_svc_xprt_flags(__entry->flags)
2009aca3ed79SChuck Lever 
20105089f3d9SChuck Lever TRACE_EVENT(svc_xprt_enqueue,
2011aca3ed79SChuck Lever 	TP_PROTO(
2012aca3ed79SChuck Lever 		const struct svc_xprt *xprt,
201382e5d82aSChuck Lever 		unsigned long flags
2014aca3ed79SChuck Lever 	),
201583a712e0SJeff Layton 
201682e5d82aSChuck Lever 	TP_ARGS(xprt, flags),
201783a712e0SJeff Layton 
201883a712e0SJeff Layton 	TP_STRUCT__entry(
2019aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_FIELDS(xprt)
202083a712e0SJeff Layton 	),
202183a712e0SJeff Layton 
202283a712e0SJeff Layton 	TP_fast_assign(
202382e5d82aSChuck Lever 		__assign_sockaddr(server, &xprt->xpt_local,
202482e5d82aSChuck Lever 				  xprt->xpt_locallen);
202582e5d82aSChuck Lever 		__assign_sockaddr(client, &xprt->xpt_remote,
202682e5d82aSChuck Lever 				  xprt->xpt_remotelen);
202782e5d82aSChuck Lever 		__entry->flags = flags;
202882e5d82aSChuck Lever 		__entry->netns_ino = xprt->xpt_net->ns.inum;
202983a712e0SJeff Layton 	),
203083a712e0SJeff Layton 
203182e5d82aSChuck Lever 	TP_printk(SVC_XPRT_ENDPOINT_FORMAT, SVC_XPRT_ENDPOINT_VARARGS)
2032aca3ed79SChuck Lever );
2033aca3ed79SChuck Lever 
2034aca3ed79SChuck Lever TRACE_EVENT(svc_xprt_dequeue,
2035aca3ed79SChuck Lever 	TP_PROTO(
2036aca3ed79SChuck Lever 		const struct svc_rqst *rqst
2037aca3ed79SChuck Lever 	),
2038aca3ed79SChuck Lever 
2039aca3ed79SChuck Lever 	TP_ARGS(rqst),
2040aca3ed79SChuck Lever 
2041aca3ed79SChuck Lever 	TP_STRUCT__entry(
2042aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_FIELDS(rqst->rq_xprt)
2043aca3ed79SChuck Lever 
2044aca3ed79SChuck Lever 		__field(unsigned long, wakeup)
2045aca3ed79SChuck Lever 	),
2046aca3ed79SChuck Lever 
2047aca3ed79SChuck Lever 	TP_fast_assign(
2048aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_ASSIGNMENTS(rqst->rq_xprt);
2049aca3ed79SChuck Lever 
2050aca3ed79SChuck Lever 		__entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
2051aca3ed79SChuck Lever 							rqst->rq_qtime));
2052aca3ed79SChuck Lever 	),
2053aca3ed79SChuck Lever 
2054aca3ed79SChuck Lever 	TP_printk(SVC_XPRT_ENDPOINT_FORMAT " wakeup-us=%lu",
2055aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_VARARGS, __entry->wakeup)
205683a712e0SJeff Layton );
205783a712e0SJeff Layton 
205882ea2d76STrond Myklebust DECLARE_EVENT_CLASS(svc_xprt_event,
2059aca3ed79SChuck Lever 	TP_PROTO(
2060aca3ed79SChuck Lever 		const struct svc_xprt *xprt
2061aca3ed79SChuck Lever 	),
206283a712e0SJeff Layton 
206383a712e0SJeff Layton 	TP_ARGS(xprt),
206483a712e0SJeff Layton 
206583a712e0SJeff Layton 	TP_STRUCT__entry(
2066aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_FIELDS(xprt)
206783a712e0SJeff Layton 	),
206883a712e0SJeff Layton 
206983a712e0SJeff Layton 	TP_fast_assign(
2070aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_ASSIGNMENTS(xprt);
207183a712e0SJeff Layton 	),
207283a712e0SJeff Layton 
2073aca3ed79SChuck Lever 	TP_printk(SVC_XPRT_ENDPOINT_FORMAT, SVC_XPRT_ENDPOINT_VARARGS)
207483a712e0SJeff Layton );
207583a712e0SJeff Layton 
207611bbb0f7SChuck Lever #define DEFINE_SVC_XPRT_EVENT(name) \
207711bbb0f7SChuck Lever 	DEFINE_EVENT(svc_xprt_event, svc_xprt_##name, \
207811bbb0f7SChuck Lever 			TP_PROTO( \
2079aca3ed79SChuck Lever 				const struct svc_xprt *xprt \
208011bbb0f7SChuck Lever 			), \
208111bbb0f7SChuck Lever 			TP_ARGS(xprt))
208211bbb0f7SChuck Lever 
208311bbb0f7SChuck Lever DEFINE_SVC_XPRT_EVENT(no_write_space);
208411bbb0f7SChuck Lever DEFINE_SVC_XPRT_EVENT(close);
208511bbb0f7SChuck Lever DEFINE_SVC_XPRT_EVENT(detach);
208611bbb0f7SChuck Lever DEFINE_SVC_XPRT_EVENT(free);
208711bbb0f7SChuck Lever 
2088b3cbf98eSChuck Lever #define DEFINE_SVC_TLS_EVENT(name) \
2089b3cbf98eSChuck Lever 	DEFINE_EVENT(svc_xprt_event, svc_tls_##name, \
2090b3cbf98eSChuck Lever 		TP_PROTO(const struct svc_xprt *xprt), \
2091b3cbf98eSChuck Lever 		TP_ARGS(xprt))
2092b3cbf98eSChuck Lever 
2093b3cbf98eSChuck Lever DEFINE_SVC_TLS_EVENT(start);
2094b3cbf98eSChuck Lever DEFINE_SVC_TLS_EVENT(upcall);
2095b3cbf98eSChuck Lever DEFINE_SVC_TLS_EVENT(unavailable);
2096b3cbf98eSChuck Lever DEFINE_SVC_TLS_EVENT(not_started);
2097b3cbf98eSChuck Lever DEFINE_SVC_TLS_EVENT(timed_out);
2098b3cbf98eSChuck Lever 
209911bbb0f7SChuck Lever TRACE_EVENT(svc_xprt_accept,
210011bbb0f7SChuck Lever 	TP_PROTO(
210111bbb0f7SChuck Lever 		const struct svc_xprt *xprt,
210211bbb0f7SChuck Lever 		const char *service
210311bbb0f7SChuck Lever 	),
210411bbb0f7SChuck Lever 
210511bbb0f7SChuck Lever 	TP_ARGS(xprt, service),
210611bbb0f7SChuck Lever 
210711bbb0f7SChuck Lever 	TP_STRUCT__entry(
2108aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_FIELDS(xprt)
2109aca3ed79SChuck Lever 
211011bbb0f7SChuck Lever 		__string(protocol, xprt->xpt_class->xcl_name)
211111bbb0f7SChuck Lever 		__string(service, service)
211211bbb0f7SChuck Lever 	),
211311bbb0f7SChuck Lever 
211411bbb0f7SChuck Lever 	TP_fast_assign(
2115aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_ASSIGNMENTS(xprt);
2116aca3ed79SChuck Lever 
2117*2c92ca84SSteven Rostedt (Google) 		__assign_str(protocol);
2118*2c92ca84SSteven Rostedt (Google) 		__assign_str(service);
211911bbb0f7SChuck Lever 	),
212011bbb0f7SChuck Lever 
2121aca3ed79SChuck Lever 	TP_printk(SVC_XPRT_ENDPOINT_FORMAT " protocol=%s service=%s",
2122aca3ed79SChuck Lever 		SVC_XPRT_ENDPOINT_VARARGS,
2123aca3ed79SChuck Lever 		__get_str(protocol), __get_str(service)
212411bbb0f7SChuck Lever 	)
212511bbb0f7SChuck Lever );
212682ea2d76STrond Myklebust 
212783a712e0SJeff Layton TRACE_EVENT(svc_wake_up,
212883a712e0SJeff Layton 	TP_PROTO(int pid),
212983a712e0SJeff Layton 
213083a712e0SJeff Layton 	TP_ARGS(pid),
213183a712e0SJeff Layton 
213283a712e0SJeff Layton 	TP_STRUCT__entry(
213383a712e0SJeff Layton 		__field(int, pid)
213483a712e0SJeff Layton 	),
213583a712e0SJeff Layton 
213683a712e0SJeff Layton 	TP_fast_assign(
213783a712e0SJeff Layton 		__entry->pid = pid;
213883a712e0SJeff Layton 	),
213983a712e0SJeff Layton 
214083a712e0SJeff Layton 	TP_printk("pid=%d", __entry->pid)
214183a712e0SJeff Layton );
214283a712e0SJeff Layton 
214322a027e8SChuck Lever TRACE_EVENT(svc_alloc_arg_err,
214422a027e8SChuck Lever 	TP_PROTO(
214528fffa6cSChuck Lever 		unsigned int requested,
214628fffa6cSChuck Lever 		unsigned int allocated
214722a027e8SChuck Lever 	),
214822a027e8SChuck Lever 
214928fffa6cSChuck Lever 	TP_ARGS(requested, allocated),
215022a027e8SChuck Lever 
215122a027e8SChuck Lever 	TP_STRUCT__entry(
215228fffa6cSChuck Lever 		__field(unsigned int, requested)
215328fffa6cSChuck Lever 		__field(unsigned int, allocated)
215422a027e8SChuck Lever 	),
215522a027e8SChuck Lever 
215622a027e8SChuck Lever 	TP_fast_assign(
215728fffa6cSChuck Lever 		__entry->requested = requested;
215828fffa6cSChuck Lever 		__entry->allocated = allocated;
215922a027e8SChuck Lever 	),
216022a027e8SChuck Lever 
216128fffa6cSChuck Lever 	TP_printk("requested=%u allocated=%u",
216228fffa6cSChuck Lever 		__entry->requested, __entry->allocated)
216322a027e8SChuck Lever );
216422a027e8SChuck Lever 
2165104f6351STrond Myklebust DECLARE_EVENT_CLASS(svc_deferred_event,
2166dc5820bdSChuck Lever 	TP_PROTO(
2167dc5820bdSChuck Lever 		const struct svc_deferred_req *dr
2168dc5820bdSChuck Lever 	),
2169104f6351STrond Myklebust 
2170104f6351STrond Myklebust 	TP_ARGS(dr),
2171104f6351STrond Myklebust 
2172104f6351STrond Myklebust 	TP_STRUCT__entry(
21738954c5c2SChuck Lever 		__field(const void *, dr)
2174a30ccf1aSChuck Lever 		__field(u32, xid)
217545cb7955SChuck Lever 		__sockaddr(addr, dr->addrlen)
2176104f6351STrond Myklebust 	),
2177104f6351STrond Myklebust 
2178104f6351STrond Myklebust 	TP_fast_assign(
21798954c5c2SChuck Lever 		__entry->dr = dr;
2180983084b2SChuck Lever 		__entry->xid = be32_to_cpu(*(__be32 *)dr->args);
218145cb7955SChuck Lever 		__assign_sockaddr(addr, &dr->addr, dr->addrlen);
2182104f6351STrond Myklebust 	),
2183104f6351STrond Myklebust 
218445cb7955SChuck Lever 	TP_printk("addr=%pISpc dr=%p xid=0x%08x", __get_sockaddr(addr),
218545cb7955SChuck Lever 		__entry->dr, __entry->xid)
2186104f6351STrond Myklebust );
21878954c5c2SChuck Lever 
2188dc5820bdSChuck Lever #define DEFINE_SVC_DEFERRED_EVENT(name) \
21898954c5c2SChuck Lever 	DEFINE_EVENT(svc_deferred_event, svc_defer_##name, \
2190dc5820bdSChuck Lever 			TP_PROTO( \
2191dc5820bdSChuck Lever 				const struct svc_deferred_req *dr \
2192dc5820bdSChuck Lever 			), \
2193dc5820bdSChuck Lever 			TP_ARGS(dr))
2194104f6351STrond Myklebust 
2195dc5820bdSChuck Lever DEFINE_SVC_DEFERRED_EVENT(drop);
21968954c5c2SChuck Lever DEFINE_SVC_DEFERRED_EVENT(queue);
21978954c5c2SChuck Lever DEFINE_SVC_DEFERRED_EVENT(recv);
2198dc5820bdSChuck Lever 
2199c42bebcaSChuck Lever DECLARE_EVENT_CLASS(svcsock_lifetime_class,
2200998024deSChuck Lever 	TP_PROTO(
2201c42bebcaSChuck Lever 		const void *svsk,
2202998024deSChuck Lever 		const struct socket *socket
2203998024deSChuck Lever 	),
2204c42bebcaSChuck Lever 	TP_ARGS(svsk, socket),
2205998024deSChuck Lever 	TP_STRUCT__entry(
2206c42bebcaSChuck Lever 		__field(unsigned int, netns_ino)
2207c42bebcaSChuck Lever 		__field(const void *, svsk)
2208c42bebcaSChuck Lever 		__field(const void *, sk)
2209998024deSChuck Lever 		__field(unsigned long, type)
2210998024deSChuck Lever 		__field(unsigned long, family)
2211c42bebcaSChuck Lever 		__field(unsigned long, state)
2212998024deSChuck Lever 	),
2213998024deSChuck Lever 	TP_fast_assign(
2214c42bebcaSChuck Lever 		struct sock *sk = socket->sk;
2215998024deSChuck Lever 
2216c42bebcaSChuck Lever 		__entry->netns_ino = sock_net(sk)->ns.inum;
2217c42bebcaSChuck Lever 		__entry->svsk = svsk;
2218c42bebcaSChuck Lever 		__entry->sk = sk;
2219c42bebcaSChuck Lever 		__entry->type = socket->type;
2220c42bebcaSChuck Lever 		__entry->family = sk->sk_family;
2221c42bebcaSChuck Lever 		__entry->state = sk->sk_state;
2222c42bebcaSChuck Lever 	),
2223c42bebcaSChuck Lever 	TP_printk("svsk=%p type=%s family=%s%s",
2224c42bebcaSChuck Lever 		__entry->svsk, show_socket_type(__entry->type),
2225998024deSChuck Lever 		rpc_show_address_family(__entry->family),
2226c42bebcaSChuck Lever 		__entry->state == TCP_LISTEN ? " (listener)" : ""
2227998024deSChuck Lever 	)
2228998024deSChuck Lever );
2229c42bebcaSChuck Lever #define DEFINE_SVCSOCK_LIFETIME_EVENT(name) \
2230c42bebcaSChuck Lever 	DEFINE_EVENT(svcsock_lifetime_class, name, \
2231c42bebcaSChuck Lever 		TP_PROTO( \
2232c42bebcaSChuck Lever 			const void *svsk, \
2233c42bebcaSChuck Lever 			const struct socket *socket \
2234c42bebcaSChuck Lever 		), \
2235c42bebcaSChuck Lever 		TP_ARGS(svsk, socket))
2236c42bebcaSChuck Lever 
2237c42bebcaSChuck Lever DEFINE_SVCSOCK_LIFETIME_EVENT(svcsock_new);
2238c42bebcaSChuck Lever DEFINE_SVCSOCK_LIFETIME_EVENT(svcsock_free);
2239998024deSChuck Lever 
2240a5cda73eSChuck Lever TRACE_EVENT(svcsock_marker,
2241a5cda73eSChuck Lever 	TP_PROTO(
2242a5cda73eSChuck Lever 		const struct svc_xprt *xprt,
2243a5cda73eSChuck Lever 		__be32 marker
2244a5cda73eSChuck Lever 	),
2245a5cda73eSChuck Lever 
2246a5cda73eSChuck Lever 	TP_ARGS(xprt, marker),
2247a5cda73eSChuck Lever 
2248a5cda73eSChuck Lever 	TP_STRUCT__entry(
2249a5cda73eSChuck Lever 		__field(unsigned int, length)
2250a5cda73eSChuck Lever 		__field(bool, last)
2251a5cda73eSChuck Lever 		__string(addr, xprt->xpt_remotebuf)
2252a5cda73eSChuck Lever 	),
2253a5cda73eSChuck Lever 
2254a5cda73eSChuck Lever 	TP_fast_assign(
2255a5cda73eSChuck Lever 		__entry->length = be32_to_cpu(marker) & RPC_FRAGMENT_SIZE_MASK;
2256a5cda73eSChuck Lever 		__entry->last = be32_to_cpu(marker) & RPC_LAST_STREAM_FRAGMENT;
2257*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
2258a5cda73eSChuck Lever 	),
2259a5cda73eSChuck Lever 
2260a5cda73eSChuck Lever 	TP_printk("addr=%s length=%u%s", __get_str(addr),
2261a5cda73eSChuck Lever 		__entry->length, __entry->last ? " (last)" : "")
2262a5cda73eSChuck Lever );
2263a5cda73eSChuck Lever 
2264998024deSChuck Lever DECLARE_EVENT_CLASS(svcsock_class,
2265998024deSChuck Lever 	TP_PROTO(
2266998024deSChuck Lever 		const struct svc_xprt *xprt,
2267998024deSChuck Lever 		ssize_t result
2268998024deSChuck Lever 	),
2269998024deSChuck Lever 
2270998024deSChuck Lever 	TP_ARGS(xprt, result),
2271998024deSChuck Lever 
2272998024deSChuck Lever 	TP_STRUCT__entry(
2273998024deSChuck Lever 		__field(ssize_t, result)
2274998024deSChuck Lever 		__field(unsigned long, flags)
2275998024deSChuck Lever 		__string(addr, xprt->xpt_remotebuf)
2276998024deSChuck Lever 	),
2277998024deSChuck Lever 
2278998024deSChuck Lever 	TP_fast_assign(
2279998024deSChuck Lever 		__entry->result = result;
2280998024deSChuck Lever 		__entry->flags = xprt->xpt_flags;
2281*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
2282998024deSChuck Lever 	),
2283998024deSChuck Lever 
2284998024deSChuck Lever 	TP_printk("addr=%s result=%zd flags=%s", __get_str(addr),
2285998024deSChuck Lever 		__entry->result, show_svc_xprt_flags(__entry->flags)
2286998024deSChuck Lever 	)
2287998024deSChuck Lever );
2288998024deSChuck Lever 
2289998024deSChuck Lever #define DEFINE_SVCSOCK_EVENT(name) \
2290998024deSChuck Lever 	DEFINE_EVENT(svcsock_class, svcsock_##name, \
2291998024deSChuck Lever 			TP_PROTO( \
2292998024deSChuck Lever 				const struct svc_xprt *xprt, \
2293998024deSChuck Lever 				ssize_t result \
2294998024deSChuck Lever 			), \
2295998024deSChuck Lever 			TP_ARGS(xprt, result))
2296998024deSChuck Lever 
2297998024deSChuck Lever DEFINE_SVCSOCK_EVENT(udp_send);
2298fff1ebb2SChuck Lever DEFINE_SVCSOCK_EVENT(udp_recv);
2299fff1ebb2SChuck Lever DEFINE_SVCSOCK_EVENT(udp_recv_err);
2300998024deSChuck Lever DEFINE_SVCSOCK_EVENT(tcp_send);
23017dae1dd7SChuck Lever DEFINE_SVCSOCK_EVENT(tcp_recv);
23026be8c594SChuck Lever DEFINE_SVCSOCK_EVENT(tcp_recv_eagain);
23036be8c594SChuck Lever DEFINE_SVCSOCK_EVENT(tcp_recv_err);
2304998024deSChuck Lever DEFINE_SVCSOCK_EVENT(data_ready);
2305998024deSChuck Lever DEFINE_SVCSOCK_EVENT(write_space);
2306998024deSChuck Lever 
23076be8c594SChuck Lever TRACE_EVENT(svcsock_tcp_recv_short,
23086be8c594SChuck Lever 	TP_PROTO(
23096be8c594SChuck Lever 		const struct svc_xprt *xprt,
23106be8c594SChuck Lever 		u32 expected,
23116be8c594SChuck Lever 		u32 received
23126be8c594SChuck Lever 	),
23136be8c594SChuck Lever 
23146be8c594SChuck Lever 	TP_ARGS(xprt, expected, received),
23156be8c594SChuck Lever 
23166be8c594SChuck Lever 	TP_STRUCT__entry(
23176be8c594SChuck Lever 		__field(u32, expected)
23186be8c594SChuck Lever 		__field(u32, received)
23196be8c594SChuck Lever 		__field(unsigned long, flags)
23206be8c594SChuck Lever 		__string(addr, xprt->xpt_remotebuf)
23216be8c594SChuck Lever 	),
23226be8c594SChuck Lever 
23236be8c594SChuck Lever 	TP_fast_assign(
23246be8c594SChuck Lever 		__entry->expected = expected;
23256be8c594SChuck Lever 		__entry->received = received;
23266be8c594SChuck Lever 		__entry->flags = xprt->xpt_flags;
2327*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
23286be8c594SChuck Lever 	),
23296be8c594SChuck Lever 
23306be8c594SChuck Lever 	TP_printk("addr=%s flags=%s expected=%u received=%u",
23316be8c594SChuck Lever 		__get_str(addr), show_svc_xprt_flags(__entry->flags),
23326be8c594SChuck Lever 		__entry->expected, __entry->received
23336be8c594SChuck Lever 	)
23346be8c594SChuck Lever );
23356be8c594SChuck Lever 
2336a0469f46SChuck Lever TRACE_EVENT(svcsock_tcp_state,
2337a0469f46SChuck Lever 	TP_PROTO(
2338a0469f46SChuck Lever 		const struct svc_xprt *xprt,
2339a0469f46SChuck Lever 		const struct socket *socket
2340a0469f46SChuck Lever 	),
2341a0469f46SChuck Lever 
2342a0469f46SChuck Lever 	TP_ARGS(xprt, socket),
2343a0469f46SChuck Lever 
2344a0469f46SChuck Lever 	TP_STRUCT__entry(
2345a0469f46SChuck Lever 		__field(unsigned long, socket_state)
2346a0469f46SChuck Lever 		__field(unsigned long, sock_state)
2347a0469f46SChuck Lever 		__field(unsigned long, flags)
2348a0469f46SChuck Lever 		__string(addr, xprt->xpt_remotebuf)
2349a0469f46SChuck Lever 	),
2350a0469f46SChuck Lever 
2351a0469f46SChuck Lever 	TP_fast_assign(
2352a0469f46SChuck Lever 		__entry->socket_state = socket->state;
2353a0469f46SChuck Lever 		__entry->sock_state = socket->sk->sk_state;
2354a0469f46SChuck Lever 		__entry->flags = xprt->xpt_flags;
2355*2c92ca84SSteven Rostedt (Google) 		__assign_str(addr);
2356a0469f46SChuck Lever 	),
2357a0469f46SChuck Lever 
2358a0469f46SChuck Lever 	TP_printk("addr=%s state=%s sk_state=%s flags=%s", __get_str(addr),
2359a0469f46SChuck Lever 		rpc_show_socket_state(__entry->socket_state),
2360a0469f46SChuck Lever 		rpc_show_sock_state(__entry->sock_state),
2361a0469f46SChuck Lever 		show_svc_xprt_flags(__entry->flags)
2362a0469f46SChuck Lever 	)
2363a0469f46SChuck Lever );
2364a0469f46SChuck Lever 
2365a0469f46SChuck Lever DECLARE_EVENT_CLASS(svcsock_accept_class,
2366a0469f46SChuck Lever 	TP_PROTO(
2367a0469f46SChuck Lever 		const struct svc_xprt *xprt,
2368a0469f46SChuck Lever 		const char *service,
2369a0469f46SChuck Lever 		long status
2370a0469f46SChuck Lever 	),
2371a0469f46SChuck Lever 
2372a0469f46SChuck Lever 	TP_ARGS(xprt, service, status),
2373a0469f46SChuck Lever 
2374a0469f46SChuck Lever 	TP_STRUCT__entry(
2375a0469f46SChuck Lever 		__field(long, status)
2376a0469f46SChuck Lever 		__string(service, service)
237716720861SChuck Lever 		__field(unsigned int, netns_ino)
2378a0469f46SChuck Lever 	),
2379a0469f46SChuck Lever 
2380a0469f46SChuck Lever 	TP_fast_assign(
2381a0469f46SChuck Lever 		__entry->status = status;
2382*2c92ca84SSteven Rostedt (Google) 		__assign_str(service);
238316720861SChuck Lever 		__entry->netns_ino = xprt->xpt_net->ns.inum;
2384a0469f46SChuck Lever 	),
2385a0469f46SChuck Lever 
238616720861SChuck Lever 	TP_printk("addr=listener service=%s status=%ld",
238716720861SChuck Lever 		__get_str(service), __entry->status
2388a0469f46SChuck Lever 	)
2389a0469f46SChuck Lever );
2390a0469f46SChuck Lever 
2391a0469f46SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
2392a0469f46SChuck Lever 	DEFINE_EVENT(svcsock_accept_class, svcsock_##name##_err, \
2393a0469f46SChuck Lever 			TP_PROTO( \
2394a0469f46SChuck Lever 				const struct svc_xprt *xprt, \
2395a0469f46SChuck Lever 				const char *service, \
2396a0469f46SChuck Lever 				long status \
2397a0469f46SChuck Lever 			), \
2398a0469f46SChuck Lever 			TP_ARGS(xprt, service, status))
2399a0469f46SChuck Lever 
2400a0469f46SChuck Lever DEFINE_ACCEPT_EVENT(accept);
2401a0469f46SChuck Lever DEFINE_ACCEPT_EVENT(getpeername);
2402a0469f46SChuck Lever 
240378a947f5STrond Myklebust DECLARE_EVENT_CLASS(cache_event,
240478a947f5STrond Myklebust 	TP_PROTO(
240578a947f5STrond Myklebust 		const struct cache_detail *cd,
240678a947f5STrond Myklebust 		const struct cache_head *h
240778a947f5STrond Myklebust 	),
240878a947f5STrond Myklebust 
240978a947f5STrond Myklebust 	TP_ARGS(cd, h),
241078a947f5STrond Myklebust 
241178a947f5STrond Myklebust 	TP_STRUCT__entry(
241278a947f5STrond Myklebust 		__field(const struct cache_head *, h)
241378a947f5STrond Myklebust 		__string(name, cd->name)
241478a947f5STrond Myklebust 	),
241578a947f5STrond Myklebust 
241678a947f5STrond Myklebust 	TP_fast_assign(
241778a947f5STrond Myklebust 		__entry->h = h;
2418*2c92ca84SSteven Rostedt (Google) 		__assign_str(name);
241978a947f5STrond Myklebust 	),
242078a947f5STrond Myklebust 
242178a947f5STrond Myklebust 	TP_printk("cache=%s entry=%p", __get_str(name), __entry->h)
242278a947f5STrond Myklebust );
242378a947f5STrond Myklebust #define DEFINE_CACHE_EVENT(name) \
242478a947f5STrond Myklebust 	DEFINE_EVENT(cache_event, name, \
242578a947f5STrond Myklebust 			TP_PROTO( \
242678a947f5STrond Myklebust 				const struct cache_detail *cd, \
242778a947f5STrond Myklebust 				const struct cache_head *h \
242878a947f5STrond Myklebust 			), \
242978a947f5STrond Myklebust 			TP_ARGS(cd, h))
243078a947f5STrond Myklebust DEFINE_CACHE_EVENT(cache_entry_expired);
243178a947f5STrond Myklebust DEFINE_CACHE_EVENT(cache_entry_upcall);
243278a947f5STrond Myklebust DEFINE_CACHE_EVENT(cache_entry_update);
243378a947f5STrond Myklebust DEFINE_CACHE_EVENT(cache_entry_make_negative);
243478a947f5STrond Myklebust DEFINE_CACHE_EVENT(cache_entry_no_listener);
243578a947f5STrond Myklebust 
2436b4af5932SChuck Lever DECLARE_EVENT_CLASS(register_class,
2437b4af5932SChuck Lever 	TP_PROTO(
2438b4af5932SChuck Lever 		const char *program,
2439b4af5932SChuck Lever 		const u32 version,
2440b4af5932SChuck Lever 		const int family,
2441b4af5932SChuck Lever 		const unsigned short protocol,
2442b4af5932SChuck Lever 		const unsigned short port,
2443b4af5932SChuck Lever 		int error
2444b4af5932SChuck Lever 	),
2445b4af5932SChuck Lever 
2446b4af5932SChuck Lever 	TP_ARGS(program, version, family, protocol, port, error),
2447b4af5932SChuck Lever 
2448b4af5932SChuck Lever 	TP_STRUCT__entry(
2449b4af5932SChuck Lever 		__field(u32, version)
2450b4af5932SChuck Lever 		__field(unsigned long, family)
2451b4af5932SChuck Lever 		__field(unsigned short, protocol)
2452b4af5932SChuck Lever 		__field(unsigned short, port)
2453b4af5932SChuck Lever 		__field(int, error)
2454b4af5932SChuck Lever 		__string(program, program)
2455b4af5932SChuck Lever 	),
2456b4af5932SChuck Lever 
2457b4af5932SChuck Lever 	TP_fast_assign(
2458b4af5932SChuck Lever 		__entry->version = version;
2459b4af5932SChuck Lever 		__entry->family = family;
2460b4af5932SChuck Lever 		__entry->protocol = protocol;
2461b4af5932SChuck Lever 		__entry->port = port;
2462b4af5932SChuck Lever 		__entry->error = error;
2463*2c92ca84SSteven Rostedt (Google) 		__assign_str(program);
2464b4af5932SChuck Lever 	),
2465b4af5932SChuck Lever 
2466b4af5932SChuck Lever 	TP_printk("program=%sv%u proto=%s port=%u family=%s error=%d",
2467b4af5932SChuck Lever 		__get_str(program), __entry->version,
2468b4af5932SChuck Lever 		__entry->protocol == IPPROTO_UDP ? "udp" : "tcp",
2469b4af5932SChuck Lever 		__entry->port, rpc_show_address_family(__entry->family),
2470b4af5932SChuck Lever 		__entry->error
2471b4af5932SChuck Lever 	)
2472b4af5932SChuck Lever );
2473b4af5932SChuck Lever 
2474b4af5932SChuck Lever #define DEFINE_REGISTER_EVENT(name) \
2475b4af5932SChuck Lever 	DEFINE_EVENT(register_class, svc_##name, \
2476b4af5932SChuck Lever 			TP_PROTO( \
2477b4af5932SChuck Lever 				const char *program, \
2478b4af5932SChuck Lever 				const u32 version, \
2479b4af5932SChuck Lever 				const int family, \
2480b4af5932SChuck Lever 				const unsigned short protocol, \
2481b4af5932SChuck Lever 				const unsigned short port, \
2482b4af5932SChuck Lever 				int error \
2483b4af5932SChuck Lever 			), \
2484b4af5932SChuck Lever 			TP_ARGS(program, version, family, protocol, \
2485b4af5932SChuck Lever 				port, error))
2486b4af5932SChuck Lever 
2487b4af5932SChuck Lever DEFINE_REGISTER_EVENT(register);
2488b4af5932SChuck Lever DEFINE_REGISTER_EVENT(noregister);
2489b4af5932SChuck Lever 
2490b4af5932SChuck Lever TRACE_EVENT(svc_unregister,
2491b4af5932SChuck Lever 	TP_PROTO(
2492b4af5932SChuck Lever 		const char *program,
2493b4af5932SChuck Lever 		const u32 version,
2494b4af5932SChuck Lever 		int error
2495b4af5932SChuck Lever 	),
2496b4af5932SChuck Lever 
2497b4af5932SChuck Lever 	TP_ARGS(program, version, error),
2498b4af5932SChuck Lever 
2499b4af5932SChuck Lever 	TP_STRUCT__entry(
2500b4af5932SChuck Lever 		__field(u32, version)
2501b4af5932SChuck Lever 		__field(int, error)
2502b4af5932SChuck Lever 		__string(program, program)
2503b4af5932SChuck Lever 	),
2504b4af5932SChuck Lever 
2505b4af5932SChuck Lever 	TP_fast_assign(
2506b4af5932SChuck Lever 		__entry->version = version;
2507b4af5932SChuck Lever 		__entry->error = error;
2508*2c92ca84SSteven Rostedt (Google) 		__assign_str(program);
2509b4af5932SChuck Lever 	),
2510b4af5932SChuck Lever 
2511b4af5932SChuck Lever 	TP_printk("program=%sv%u error=%d",
2512b4af5932SChuck Lever 		__get_str(program), __entry->version, __entry->error
2513b4af5932SChuck Lever 	)
2514b4af5932SChuck Lever );
2515b4af5932SChuck Lever 
251682b0a4c3STrond Myklebust #endif /* _TRACE_SUNRPC_H */
251782b0a4c3STrond Myklebust 
251882b0a4c3STrond Myklebust #include <trace/define_trace.h>
2519