1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM sunrpc
4 
5 #if !defined(_TRACE_SUNRPC_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_SUNRPC_H
7 
8 #include <linux/sunrpc/sched.h>
9 #include <linux/sunrpc/clnt.h>
10 #include <linux/sunrpc/svc.h>
11 #include <linux/sunrpc/xprtsock.h>
12 #include <linux/sunrpc/svc_xprt.h>
13 #include <net/tcp_states.h>
14 #include <linux/net.h>
15 #include <linux/tracepoint.h>
16 
17 DECLARE_EVENT_CLASS(rpc_task_status,
18 
19 	TP_PROTO(const struct rpc_task *task),
20 
21 	TP_ARGS(task),
22 
23 	TP_STRUCT__entry(
24 		__field(unsigned int, task_id)
25 		__field(unsigned int, client_id)
26 		__field(int, status)
27 	),
28 
29 	TP_fast_assign(
30 		__entry->task_id = task->tk_pid;
31 		__entry->client_id = task->tk_client->cl_clid;
32 		__entry->status = task->tk_status;
33 	),
34 
35 	TP_printk("task:%u@%u status=%d",
36 		__entry->task_id, __entry->client_id,
37 		__entry->status)
38 );
39 #define DEFINE_RPC_STATUS_EVENT(name) \
40 	DEFINE_EVENT(rpc_task_status, rpc_##name##_status, \
41 			TP_PROTO( \
42 				const struct rpc_task *task \
43 			), \
44 			TP_ARGS(task))
45 
46 DEFINE_RPC_STATUS_EVENT(call);
47 DEFINE_RPC_STATUS_EVENT(bind);
48 DEFINE_RPC_STATUS_EVENT(connect);
49 
50 TRACE_EVENT(rpc_request,
51 	TP_PROTO(const struct rpc_task *task),
52 
53 	TP_ARGS(task),
54 
55 	TP_STRUCT__entry(
56 		__field(unsigned int, task_id)
57 		__field(unsigned int, client_id)
58 		__field(int, version)
59 		__field(bool, async)
60 		__string(progname, task->tk_client->cl_program->name)
61 		__string(procname, rpc_proc_name(task))
62 	),
63 
64 	TP_fast_assign(
65 		__entry->task_id = task->tk_pid;
66 		__entry->client_id = task->tk_client->cl_clid;
67 		__entry->version = task->tk_client->cl_vers;
68 		__entry->async = RPC_IS_ASYNC(task);
69 		__assign_str(progname, task->tk_client->cl_program->name)
70 		__assign_str(procname, rpc_proc_name(task))
71 	),
72 
73 	TP_printk("task:%u@%u %sv%d %s (%ssync)",
74 		__entry->task_id, __entry->client_id,
75 		__get_str(progname), __entry->version,
76 		__get_str(procname), __entry->async ? "a": ""
77 		)
78 );
79 
80 TRACE_DEFINE_ENUM(RPC_TASK_ASYNC);
81 TRACE_DEFINE_ENUM(RPC_TASK_SWAPPER);
82 TRACE_DEFINE_ENUM(RPC_CALL_MAJORSEEN);
83 TRACE_DEFINE_ENUM(RPC_TASK_ROOTCREDS);
84 TRACE_DEFINE_ENUM(RPC_TASK_DYNAMIC);
85 TRACE_DEFINE_ENUM(RPC_TASK_SOFT);
86 TRACE_DEFINE_ENUM(RPC_TASK_SOFTCONN);
87 TRACE_DEFINE_ENUM(RPC_TASK_SENT);
88 TRACE_DEFINE_ENUM(RPC_TASK_TIMEOUT);
89 TRACE_DEFINE_ENUM(RPC_TASK_NOCONNECT);
90 TRACE_DEFINE_ENUM(RPC_TASK_NO_RETRANS_TIMEOUT);
91 
92 #define rpc_show_task_flags(flags)					\
93 	__print_flags(flags, "|",					\
94 		{ RPC_TASK_ASYNC, "ASYNC" },				\
95 		{ RPC_TASK_SWAPPER, "SWAPPER" },			\
96 		{ RPC_CALL_MAJORSEEN, "MAJORSEEN" },			\
97 		{ RPC_TASK_ROOTCREDS, "ROOTCREDS" },			\
98 		{ RPC_TASK_DYNAMIC, "DYNAMIC" },			\
99 		{ RPC_TASK_SOFT, "SOFT" },				\
100 		{ RPC_TASK_SOFTCONN, "SOFTCONN" },			\
101 		{ RPC_TASK_SENT, "SENT" },				\
102 		{ RPC_TASK_TIMEOUT, "TIMEOUT" },			\
103 		{ RPC_TASK_NOCONNECT, "NOCONNECT" },			\
104 		{ RPC_TASK_NO_RETRANS_TIMEOUT, "NORTO" })
105 
106 TRACE_DEFINE_ENUM(RPC_TASK_RUNNING);
107 TRACE_DEFINE_ENUM(RPC_TASK_QUEUED);
108 TRACE_DEFINE_ENUM(RPC_TASK_ACTIVE);
109 TRACE_DEFINE_ENUM(RPC_TASK_NEED_XMIT);
110 TRACE_DEFINE_ENUM(RPC_TASK_NEED_RECV);
111 TRACE_DEFINE_ENUM(RPC_TASK_MSG_PIN_WAIT);
112 TRACE_DEFINE_ENUM(RPC_TASK_SIGNALLED);
113 
114 #define rpc_show_runstate(flags)					\
115 	__print_flags(flags, "|",					\
116 		{ (1UL << RPC_TASK_RUNNING), "RUNNING" },		\
117 		{ (1UL << RPC_TASK_QUEUED), "QUEUED" },			\
118 		{ (1UL << RPC_TASK_ACTIVE), "ACTIVE" },			\
119 		{ (1UL << RPC_TASK_NEED_XMIT), "NEED_XMIT" },		\
120 		{ (1UL << RPC_TASK_NEED_RECV), "NEED_RECV" },		\
121 		{ (1UL << RPC_TASK_MSG_PIN_WAIT), "MSG_PIN_WAIT" },	\
122 		{ (1UL << RPC_TASK_SIGNALLED), "SIGNALLED" })
123 
124 DECLARE_EVENT_CLASS(rpc_task_running,
125 
126 	TP_PROTO(const struct rpc_task *task, const void *action),
127 
128 	TP_ARGS(task, action),
129 
130 	TP_STRUCT__entry(
131 		__field(unsigned int, task_id)
132 		__field(unsigned int, client_id)
133 		__field(const void *, action)
134 		__field(unsigned long, runstate)
135 		__field(int, status)
136 		__field(unsigned short, flags)
137 		),
138 
139 	TP_fast_assign(
140 		__entry->client_id = task->tk_client ?
141 				     task->tk_client->cl_clid : -1;
142 		__entry->task_id = task->tk_pid;
143 		__entry->action = action;
144 		__entry->runstate = task->tk_runstate;
145 		__entry->status = task->tk_status;
146 		__entry->flags = task->tk_flags;
147 		),
148 
149 	TP_printk("task:%u@%d flags=%s runstate=%s status=%d action=%ps",
150 		__entry->task_id, __entry->client_id,
151 		rpc_show_task_flags(__entry->flags),
152 		rpc_show_runstate(__entry->runstate),
153 		__entry->status,
154 		__entry->action
155 		)
156 );
157 #define DEFINE_RPC_RUNNING_EVENT(name) \
158 	DEFINE_EVENT(rpc_task_running, rpc_task_##name, \
159 			TP_PROTO( \
160 				const struct rpc_task *task, \
161 				const void *action \
162 			), \
163 			TP_ARGS(task, action))
164 
165 DEFINE_RPC_RUNNING_EVENT(begin);
166 DEFINE_RPC_RUNNING_EVENT(run_action);
167 DEFINE_RPC_RUNNING_EVENT(complete);
168 
169 DECLARE_EVENT_CLASS(rpc_task_queued,
170 
171 	TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
172 
173 	TP_ARGS(task, q),
174 
175 	TP_STRUCT__entry(
176 		__field(unsigned int, task_id)
177 		__field(unsigned int, client_id)
178 		__field(unsigned long, timeout)
179 		__field(unsigned long, runstate)
180 		__field(int, status)
181 		__field(unsigned short, flags)
182 		__string(q_name, rpc_qname(q))
183 		),
184 
185 	TP_fast_assign(
186 		__entry->client_id = task->tk_client ?
187 				     task->tk_client->cl_clid : -1;
188 		__entry->task_id = task->tk_pid;
189 		__entry->timeout = rpc_task_timeout(task);
190 		__entry->runstate = task->tk_runstate;
191 		__entry->status = task->tk_status;
192 		__entry->flags = task->tk_flags;
193 		__assign_str(q_name, rpc_qname(q));
194 		),
195 
196 	TP_printk("task:%u@%d flags=%s runstate=%s status=%d timeout=%lu queue=%s",
197 		__entry->task_id, __entry->client_id,
198 		rpc_show_task_flags(__entry->flags),
199 		rpc_show_runstate(__entry->runstate),
200 		__entry->status,
201 		__entry->timeout,
202 		__get_str(q_name)
203 		)
204 );
205 #define DEFINE_RPC_QUEUED_EVENT(name) \
206 	DEFINE_EVENT(rpc_task_queued, rpc_task_##name, \
207 			TP_PROTO( \
208 				const struct rpc_task *task, \
209 				const struct rpc_wait_queue *q \
210 			), \
211 			TP_ARGS(task, q))
212 
213 DEFINE_RPC_QUEUED_EVENT(sleep);
214 DEFINE_RPC_QUEUED_EVENT(wakeup);
215 
216 DECLARE_EVENT_CLASS(rpc_failure,
217 
218 	TP_PROTO(const struct rpc_task *task),
219 
220 	TP_ARGS(task),
221 
222 	TP_STRUCT__entry(
223 		__field(unsigned int, task_id)
224 		__field(unsigned int, client_id)
225 	),
226 
227 	TP_fast_assign(
228 		__entry->task_id = task->tk_pid;
229 		__entry->client_id = task->tk_client->cl_clid;
230 	),
231 
232 	TP_printk("task:%u@%u",
233 		__entry->task_id, __entry->client_id)
234 );
235 
236 #define DEFINE_RPC_FAILURE(name)					\
237 	DEFINE_EVENT(rpc_failure, rpc_bad_##name,			\
238 			TP_PROTO(					\
239 				const struct rpc_task *task		\
240 			),						\
241 			TP_ARGS(task))
242 
243 DEFINE_RPC_FAILURE(callhdr);
244 DEFINE_RPC_FAILURE(verifier);
245 
246 DECLARE_EVENT_CLASS(rpc_reply_event,
247 
248 	TP_PROTO(
249 		const struct rpc_task *task
250 	),
251 
252 	TP_ARGS(task),
253 
254 	TP_STRUCT__entry(
255 		__field(unsigned int, task_id)
256 		__field(unsigned int, client_id)
257 		__field(u32, xid)
258 		__string(progname, task->tk_client->cl_program->name)
259 		__field(u32, version)
260 		__string(procname, rpc_proc_name(task))
261 		__string(servername, task->tk_xprt->servername)
262 	),
263 
264 	TP_fast_assign(
265 		__entry->task_id = task->tk_pid;
266 		__entry->client_id = task->tk_client->cl_clid;
267 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
268 		__assign_str(progname, task->tk_client->cl_program->name)
269 		__entry->version = task->tk_client->cl_vers;
270 		__assign_str(procname, rpc_proc_name(task))
271 		__assign_str(servername, task->tk_xprt->servername)
272 	),
273 
274 	TP_printk("task:%u@%d server=%s xid=0x%08x %sv%d %s",
275 		__entry->task_id, __entry->client_id, __get_str(servername),
276 		__entry->xid, __get_str(progname), __entry->version,
277 		__get_str(procname))
278 )
279 
280 #define DEFINE_RPC_REPLY_EVENT(name)					\
281 	DEFINE_EVENT(rpc_reply_event, rpc__##name,			\
282 			TP_PROTO(					\
283 				const struct rpc_task *task		\
284 			),						\
285 			TP_ARGS(task))
286 
287 DEFINE_RPC_REPLY_EVENT(prog_unavail);
288 DEFINE_RPC_REPLY_EVENT(prog_mismatch);
289 DEFINE_RPC_REPLY_EVENT(proc_unavail);
290 DEFINE_RPC_REPLY_EVENT(garbage_args);
291 DEFINE_RPC_REPLY_EVENT(unparsable);
292 DEFINE_RPC_REPLY_EVENT(mismatch);
293 DEFINE_RPC_REPLY_EVENT(stale_creds);
294 DEFINE_RPC_REPLY_EVENT(bad_creds);
295 DEFINE_RPC_REPLY_EVENT(auth_tooweak);
296 
297 TRACE_EVENT(rpc_stats_latency,
298 
299 	TP_PROTO(
300 		const struct rpc_task *task,
301 		ktime_t backlog,
302 		ktime_t rtt,
303 		ktime_t execute
304 	),
305 
306 	TP_ARGS(task, backlog, rtt, execute),
307 
308 	TP_STRUCT__entry(
309 		__field(unsigned int, task_id)
310 		__field(unsigned int, client_id)
311 		__field(u32, xid)
312 		__field(int, version)
313 		__string(progname, task->tk_client->cl_program->name)
314 		__string(procname, rpc_proc_name(task))
315 		__field(unsigned long, backlog)
316 		__field(unsigned long, rtt)
317 		__field(unsigned long, execute)
318 	),
319 
320 	TP_fast_assign(
321 		__entry->client_id = task->tk_client->cl_clid;
322 		__entry->task_id = task->tk_pid;
323 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
324 		__entry->version = task->tk_client->cl_vers;
325 		__assign_str(progname, task->tk_client->cl_program->name)
326 		__assign_str(procname, rpc_proc_name(task))
327 		__entry->backlog = ktime_to_us(backlog);
328 		__entry->rtt = ktime_to_us(rtt);
329 		__entry->execute = ktime_to_us(execute);
330 	),
331 
332 	TP_printk("task:%u@%d xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu",
333 		__entry->task_id, __entry->client_id, __entry->xid,
334 		__get_str(progname), __entry->version, __get_str(procname),
335 		__entry->backlog, __entry->rtt, __entry->execute)
336 );
337 
338 TRACE_EVENT(rpc_xdr_overflow,
339 	TP_PROTO(
340 		const struct xdr_stream *xdr,
341 		size_t requested
342 	),
343 
344 	TP_ARGS(xdr, requested),
345 
346 	TP_STRUCT__entry(
347 		__field(unsigned int, task_id)
348 		__field(unsigned int, client_id)
349 		__field(int, version)
350 		__field(size_t, requested)
351 		__field(const void *, end)
352 		__field(const void *, p)
353 		__field(const void *, head_base)
354 		__field(size_t, head_len)
355 		__field(const void *, tail_base)
356 		__field(size_t, tail_len)
357 		__field(unsigned int, page_len)
358 		__field(unsigned int, len)
359 		__string(progname,
360 			 xdr->rqst->rq_task->tk_client->cl_program->name)
361 		__string(procedure,
362 			 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
363 	),
364 
365 	TP_fast_assign(
366 		if (xdr->rqst) {
367 			const struct rpc_task *task = xdr->rqst->rq_task;
368 
369 			__entry->task_id = task->tk_pid;
370 			__entry->client_id = task->tk_client->cl_clid;
371 			__assign_str(progname,
372 				     task->tk_client->cl_program->name)
373 			__entry->version = task->tk_client->cl_vers;
374 			__assign_str(procedure, task->tk_msg.rpc_proc->p_name)
375 		} else {
376 			__entry->task_id = 0;
377 			__entry->client_id = 0;
378 			__assign_str(progname, "unknown")
379 			__entry->version = 0;
380 			__assign_str(procedure, "unknown")
381 		}
382 		__entry->requested = requested;
383 		__entry->end = xdr->end;
384 		__entry->p = xdr->p;
385 		__entry->head_base = xdr->buf->head[0].iov_base,
386 		__entry->head_len = xdr->buf->head[0].iov_len,
387 		__entry->page_len = xdr->buf->page_len,
388 		__entry->tail_base = xdr->buf->tail[0].iov_base,
389 		__entry->tail_len = xdr->buf->tail[0].iov_len,
390 		__entry->len = xdr->buf->len;
391 	),
392 
393 	TP_printk(
394 		"task:%u@%u %sv%d %s requested=%zu p=%p end=%p xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
395 		__entry->task_id, __entry->client_id,
396 		__get_str(progname), __entry->version, __get_str(procedure),
397 		__entry->requested, __entry->p, __entry->end,
398 		__entry->head_base, __entry->head_len,
399 		__entry->page_len,
400 		__entry->tail_base, __entry->tail_len,
401 		__entry->len
402 	)
403 );
404 
405 TRACE_EVENT(rpc_xdr_alignment,
406 	TP_PROTO(
407 		const struct xdr_stream *xdr,
408 		size_t offset,
409 		unsigned int copied
410 	),
411 
412 	TP_ARGS(xdr, offset, copied),
413 
414 	TP_STRUCT__entry(
415 		__field(unsigned int, task_id)
416 		__field(unsigned int, client_id)
417 		__field(int, version)
418 		__field(size_t, offset)
419 		__field(unsigned int, copied)
420 		__field(const void *, head_base)
421 		__field(size_t, head_len)
422 		__field(const void *, tail_base)
423 		__field(size_t, tail_len)
424 		__field(unsigned int, page_len)
425 		__field(unsigned int, len)
426 		__string(progname,
427 			 xdr->rqst->rq_task->tk_client->cl_program->name)
428 		__string(procedure,
429 			 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
430 	),
431 
432 	TP_fast_assign(
433 		const struct rpc_task *task = xdr->rqst->rq_task;
434 
435 		__entry->task_id = task->tk_pid;
436 		__entry->client_id = task->tk_client->cl_clid;
437 		__assign_str(progname,
438 			     task->tk_client->cl_program->name)
439 		__entry->version = task->tk_client->cl_vers;
440 		__assign_str(procedure, task->tk_msg.rpc_proc->p_name)
441 
442 		__entry->offset = offset;
443 		__entry->copied = copied;
444 		__entry->head_base = xdr->buf->head[0].iov_base,
445 		__entry->head_len = xdr->buf->head[0].iov_len,
446 		__entry->page_len = xdr->buf->page_len,
447 		__entry->tail_base = xdr->buf->tail[0].iov_base,
448 		__entry->tail_len = xdr->buf->tail[0].iov_len,
449 		__entry->len = xdr->buf->len;
450 	),
451 
452 	TP_printk(
453 		"task:%u@%u %sv%d %s offset=%zu copied=%u xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
454 		__entry->task_id, __entry->client_id,
455 		__get_str(progname), __entry->version, __get_str(procedure),
456 		__entry->offset, __entry->copied,
457 		__entry->head_base, __entry->head_len,
458 		__entry->page_len,
459 		__entry->tail_base, __entry->tail_len,
460 		__entry->len
461 	)
462 );
463 
464 TRACE_EVENT(rpc_reply_pages,
465 	TP_PROTO(
466 		const struct rpc_rqst *req
467 	),
468 
469 	TP_ARGS(req),
470 
471 	TP_STRUCT__entry(
472 		__field(unsigned int, task_id)
473 		__field(unsigned int, client_id)
474 		__field(const void *, head_base)
475 		__field(size_t, head_len)
476 		__field(const void *, tail_base)
477 		__field(size_t, tail_len)
478 		__field(unsigned int, page_len)
479 	),
480 
481 	TP_fast_assign(
482 		__entry->task_id = req->rq_task->tk_pid;
483 		__entry->client_id = req->rq_task->tk_client->cl_clid;
484 
485 		__entry->head_base = req->rq_rcv_buf.head[0].iov_base;
486 		__entry->head_len = req->rq_rcv_buf.head[0].iov_len;
487 		__entry->page_len = req->rq_rcv_buf.page_len;
488 		__entry->tail_base = req->rq_rcv_buf.tail[0].iov_base;
489 		__entry->tail_len = req->rq_rcv_buf.tail[0].iov_len;
490 	),
491 
492 	TP_printk(
493 		"task:%u@%u xdr=[%p,%zu]/%u/[%p,%zu]\n",
494 		__entry->task_id, __entry->client_id,
495 		__entry->head_base, __entry->head_len,
496 		__entry->page_len,
497 		__entry->tail_base, __entry->tail_len
498 	)
499 );
500 
501 /*
502  * First define the enums in the below macros to be exported to userspace
503  * via TRACE_DEFINE_ENUM().
504  */
505 #undef EM
506 #undef EMe
507 #define EM(a, b)	TRACE_DEFINE_ENUM(a);
508 #define EMe(a, b)	TRACE_DEFINE_ENUM(a);
509 
510 #define RPC_SHOW_SOCKET				\
511 	EM( SS_FREE, "FREE" )			\
512 	EM( SS_UNCONNECTED, "UNCONNECTED" )	\
513 	EM( SS_CONNECTING, "CONNECTING," )	\
514 	EM( SS_CONNECTED, "CONNECTED," )	\
515 	EMe(SS_DISCONNECTING, "DISCONNECTING" )
516 
517 #define rpc_show_socket_state(state) \
518 	__print_symbolic(state, RPC_SHOW_SOCKET)
519 
520 RPC_SHOW_SOCKET
521 
522 #define RPC_SHOW_SOCK				\
523 	EM( TCP_ESTABLISHED, "ESTABLISHED" )	\
524 	EM( TCP_SYN_SENT, "SYN_SENT" )		\
525 	EM( TCP_SYN_RECV, "SYN_RECV" )		\
526 	EM( TCP_FIN_WAIT1, "FIN_WAIT1" )	\
527 	EM( TCP_FIN_WAIT2, "FIN_WAIT2" )	\
528 	EM( TCP_TIME_WAIT, "TIME_WAIT" )	\
529 	EM( TCP_CLOSE, "CLOSE" )		\
530 	EM( TCP_CLOSE_WAIT, "CLOSE_WAIT" )	\
531 	EM( TCP_LAST_ACK, "LAST_ACK" )		\
532 	EM( TCP_LISTEN, "LISTEN" )		\
533 	EMe( TCP_CLOSING, "CLOSING" )
534 
535 #define rpc_show_sock_state(state) \
536 	__print_symbolic(state, RPC_SHOW_SOCK)
537 
538 RPC_SHOW_SOCK
539 
540 /*
541  * Now redefine the EM() and EMe() macros to map the enums to the strings
542  * that will be printed in the output.
543  */
544 #undef EM
545 #undef EMe
546 #define EM(a, b)	{a, b},
547 #define EMe(a, b)	{a, b}
548 
549 DECLARE_EVENT_CLASS(xs_socket_event,
550 
551 		TP_PROTO(
552 			struct rpc_xprt *xprt,
553 			struct socket *socket
554 		),
555 
556 		TP_ARGS(xprt, socket),
557 
558 		TP_STRUCT__entry(
559 			__field(unsigned int, socket_state)
560 			__field(unsigned int, sock_state)
561 			__field(unsigned long long, ino)
562 			__string(dstaddr,
563 				xprt->address_strings[RPC_DISPLAY_ADDR])
564 			__string(dstport,
565 				xprt->address_strings[RPC_DISPLAY_PORT])
566 		),
567 
568 		TP_fast_assign(
569 			struct inode *inode = SOCK_INODE(socket);
570 			__entry->socket_state = socket->state;
571 			__entry->sock_state = socket->sk->sk_state;
572 			__entry->ino = (unsigned long long)inode->i_ino;
573 			__assign_str(dstaddr,
574 				xprt->address_strings[RPC_DISPLAY_ADDR]);
575 			__assign_str(dstport,
576 				xprt->address_strings[RPC_DISPLAY_PORT]);
577 		),
578 
579 		TP_printk(
580 			"socket:[%llu] dstaddr=%s/%s "
581 			"state=%u (%s) sk_state=%u (%s)",
582 			__entry->ino, __get_str(dstaddr), __get_str(dstport),
583 			__entry->socket_state,
584 			rpc_show_socket_state(__entry->socket_state),
585 			__entry->sock_state,
586 			rpc_show_sock_state(__entry->sock_state)
587 		)
588 );
589 #define DEFINE_RPC_SOCKET_EVENT(name) \
590 	DEFINE_EVENT(xs_socket_event, name, \
591 			TP_PROTO( \
592 				struct rpc_xprt *xprt, \
593 				struct socket *socket \
594 			), \
595 			TP_ARGS(xprt, socket))
596 
597 DECLARE_EVENT_CLASS(xs_socket_event_done,
598 
599 		TP_PROTO(
600 			struct rpc_xprt *xprt,
601 			struct socket *socket,
602 			int error
603 		),
604 
605 		TP_ARGS(xprt, socket, error),
606 
607 		TP_STRUCT__entry(
608 			__field(int, error)
609 			__field(unsigned int, socket_state)
610 			__field(unsigned int, sock_state)
611 			__field(unsigned long long, ino)
612 			__string(dstaddr,
613 				xprt->address_strings[RPC_DISPLAY_ADDR])
614 			__string(dstport,
615 				xprt->address_strings[RPC_DISPLAY_PORT])
616 		),
617 
618 		TP_fast_assign(
619 			struct inode *inode = SOCK_INODE(socket);
620 			__entry->socket_state = socket->state;
621 			__entry->sock_state = socket->sk->sk_state;
622 			__entry->ino = (unsigned long long)inode->i_ino;
623 			__entry->error = error;
624 			__assign_str(dstaddr,
625 				xprt->address_strings[RPC_DISPLAY_ADDR]);
626 			__assign_str(dstport,
627 				xprt->address_strings[RPC_DISPLAY_PORT]);
628 		),
629 
630 		TP_printk(
631 			"error=%d socket:[%llu] dstaddr=%s/%s "
632 			"state=%u (%s) sk_state=%u (%s)",
633 			__entry->error,
634 			__entry->ino, __get_str(dstaddr), __get_str(dstport),
635 			__entry->socket_state,
636 			rpc_show_socket_state(__entry->socket_state),
637 			__entry->sock_state,
638 			rpc_show_sock_state(__entry->sock_state)
639 		)
640 );
641 #define DEFINE_RPC_SOCKET_EVENT_DONE(name) \
642 	DEFINE_EVENT(xs_socket_event_done, name, \
643 			TP_PROTO( \
644 				struct rpc_xprt *xprt, \
645 				struct socket *socket, \
646 				int error \
647 			), \
648 			TP_ARGS(xprt, socket, error))
649 
650 DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
651 DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
652 DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
653 DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
654 DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
655 DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
656 
657 DECLARE_EVENT_CLASS(rpc_xprt_event,
658 	TP_PROTO(
659 		const struct rpc_xprt *xprt,
660 		__be32 xid,
661 		int status
662 	),
663 
664 	TP_ARGS(xprt, xid, status),
665 
666 	TP_STRUCT__entry(
667 		__field(u32, xid)
668 		__field(int, status)
669 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
670 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
671 	),
672 
673 	TP_fast_assign(
674 		__entry->xid = be32_to_cpu(xid);
675 		__entry->status = status;
676 		__assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
677 		__assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
678 	),
679 
680 	TP_printk("peer=[%s]:%s xid=0x%08x status=%d", __get_str(addr),
681 			__get_str(port), __entry->xid,
682 			__entry->status)
683 );
684 #define DEFINE_RPC_XPRT_EVENT(name) \
685 	DEFINE_EVENT(rpc_xprt_event, xprt_##name, \
686 			TP_PROTO( \
687 				const struct rpc_xprt *xprt, \
688 				__be32 xid, \
689 				int status \
690 			), \
691 			TP_ARGS(xprt, xid, status))
692 
693 DEFINE_RPC_XPRT_EVENT(timer);
694 DEFINE_RPC_XPRT_EVENT(lookup_rqst);
695 DEFINE_RPC_XPRT_EVENT(complete_rqst);
696 
697 TRACE_EVENT(xprt_transmit,
698 	TP_PROTO(
699 		const struct rpc_rqst *rqst,
700 		int status
701 	),
702 
703 	TP_ARGS(rqst, status),
704 
705 	TP_STRUCT__entry(
706 		__field(unsigned int, task_id)
707 		__field(unsigned int, client_id)
708 		__field(u32, xid)
709 		__field(u32, seqno)
710 		__field(int, status)
711 	),
712 
713 	TP_fast_assign(
714 		__entry->task_id = rqst->rq_task->tk_pid;
715 		__entry->client_id = rqst->rq_task->tk_client ?
716 			rqst->rq_task->tk_client->cl_clid : -1;
717 		__entry->xid = be32_to_cpu(rqst->rq_xid);
718 		__entry->seqno = rqst->rq_seqno;
719 		__entry->status = status;
720 	),
721 
722 	TP_printk(
723 		"task:%u@%u xid=0x%08x seqno=%u status=%d",
724 		__entry->task_id, __entry->client_id, __entry->xid,
725 		__entry->seqno, __entry->status)
726 );
727 
728 TRACE_EVENT(xprt_enq_xmit,
729 	TP_PROTO(
730 		const struct rpc_task *task,
731 		int stage
732 	),
733 
734 	TP_ARGS(task, stage),
735 
736 	TP_STRUCT__entry(
737 		__field(unsigned int, task_id)
738 		__field(unsigned int, client_id)
739 		__field(u32, xid)
740 		__field(u32, seqno)
741 		__field(int, stage)
742 	),
743 
744 	TP_fast_assign(
745 		__entry->task_id = task->tk_pid;
746 		__entry->client_id = task->tk_client ?
747 			task->tk_client->cl_clid : -1;
748 		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
749 		__entry->seqno = task->tk_rqstp->rq_seqno;
750 		__entry->stage = stage;
751 	),
752 
753 	TP_printk(
754 		"task:%u@%u xid=0x%08x seqno=%u stage=%d",
755 		__entry->task_id, __entry->client_id, __entry->xid,
756 		__entry->seqno, __entry->stage)
757 );
758 
759 TRACE_EVENT(xprt_ping,
760 	TP_PROTO(const struct rpc_xprt *xprt, int status),
761 
762 	TP_ARGS(xprt, status),
763 
764 	TP_STRUCT__entry(
765 		__field(int, status)
766 		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
767 		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
768 	),
769 
770 	TP_fast_assign(
771 		__entry->status = status;
772 		__assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
773 		__assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
774 	),
775 
776 	TP_printk("peer=[%s]:%s status=%d",
777 			__get_str(addr), __get_str(port), __entry->status)
778 );
779 
780 TRACE_EVENT(xs_stream_read_data,
781 	TP_PROTO(struct rpc_xprt *xprt, ssize_t err, size_t total),
782 
783 	TP_ARGS(xprt, err, total),
784 
785 	TP_STRUCT__entry(
786 		__field(ssize_t, err)
787 		__field(size_t, total)
788 		__string(addr, xprt ? xprt->address_strings[RPC_DISPLAY_ADDR] :
789 				"(null)")
790 		__string(port, xprt ? xprt->address_strings[RPC_DISPLAY_PORT] :
791 				"(null)")
792 	),
793 
794 	TP_fast_assign(
795 		__entry->err = err;
796 		__entry->total = total;
797 		__assign_str(addr, xprt ?
798 			xprt->address_strings[RPC_DISPLAY_ADDR] : "(null)");
799 		__assign_str(port, xprt ?
800 			xprt->address_strings[RPC_DISPLAY_PORT] : "(null)");
801 	),
802 
803 	TP_printk("peer=[%s]:%s err=%zd total=%zu", __get_str(addr),
804 			__get_str(port), __entry->err, __entry->total)
805 );
806 
807 TRACE_EVENT(xs_stream_read_request,
808 	TP_PROTO(struct sock_xprt *xs),
809 
810 	TP_ARGS(xs),
811 
812 	TP_STRUCT__entry(
813 		__string(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR])
814 		__string(port, xs->xprt.address_strings[RPC_DISPLAY_PORT])
815 		__field(u32, xid)
816 		__field(unsigned long, copied)
817 		__field(unsigned int, reclen)
818 		__field(unsigned int, offset)
819 	),
820 
821 	TP_fast_assign(
822 		__assign_str(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR]);
823 		__assign_str(port, xs->xprt.address_strings[RPC_DISPLAY_PORT]);
824 		__entry->xid = be32_to_cpu(xs->recv.xid);
825 		__entry->copied = xs->recv.copied;
826 		__entry->reclen = xs->recv.len;
827 		__entry->offset = xs->recv.offset;
828 	),
829 
830 	TP_printk("peer=[%s]:%s xid=0x%08x copied=%lu reclen=%u offset=%u",
831 			__get_str(addr), __get_str(port), __entry->xid,
832 			__entry->copied, __entry->reclen, __entry->offset)
833 );
834 
835 #define show_rqstp_flags(flags)						\
836 	__print_flags(flags, "|",					\
837 		{ (1UL << RQ_SECURE),		"RQ_SECURE"},		\
838 		{ (1UL << RQ_LOCAL),		"RQ_LOCAL"},		\
839 		{ (1UL << RQ_USEDEFERRAL),	"RQ_USEDEFERRAL"},	\
840 		{ (1UL << RQ_DROPME),		"RQ_DROPME"},		\
841 		{ (1UL << RQ_SPLICE_OK),	"RQ_SPLICE_OK"},	\
842 		{ (1UL << RQ_VICTIM),		"RQ_VICTIM"},		\
843 		{ (1UL << RQ_BUSY),		"RQ_BUSY"})
844 
845 TRACE_EVENT(svc_recv,
846 	TP_PROTO(struct svc_rqst *rqst, int len),
847 
848 	TP_ARGS(rqst, len),
849 
850 	TP_STRUCT__entry(
851 		__field(u32, xid)
852 		__field(int, len)
853 		__field(unsigned long, flags)
854 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
855 	),
856 
857 	TP_fast_assign(
858 		__entry->xid = be32_to_cpu(rqst->rq_xid);
859 		__entry->len = len;
860 		__entry->flags = rqst->rq_flags;
861 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
862 	),
863 
864 	TP_printk("addr=%s xid=0x%08x len=%d flags=%s",
865 			__get_str(addr), __entry->xid, __entry->len,
866 			show_rqstp_flags(__entry->flags))
867 );
868 
869 TRACE_EVENT(svc_process,
870 	TP_PROTO(const struct svc_rqst *rqst, const char *name),
871 
872 	TP_ARGS(rqst, name),
873 
874 	TP_STRUCT__entry(
875 		__field(u32, xid)
876 		__field(u32, vers)
877 		__field(u32, proc)
878 		__string(service, name)
879 		__string(addr, rqst->rq_xprt ?
880 			 rqst->rq_xprt->xpt_remotebuf : "(null)")
881 	),
882 
883 	TP_fast_assign(
884 		__entry->xid = be32_to_cpu(rqst->rq_xid);
885 		__entry->vers = rqst->rq_vers;
886 		__entry->proc = rqst->rq_proc;
887 		__assign_str(service, name);
888 		__assign_str(addr, rqst->rq_xprt ?
889 			     rqst->rq_xprt->xpt_remotebuf : "(null)");
890 	),
891 
892 	TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%u",
893 			__get_str(addr), __entry->xid,
894 			__get_str(service), __entry->vers, __entry->proc)
895 );
896 
897 DECLARE_EVENT_CLASS(svc_rqst_event,
898 
899 	TP_PROTO(
900 		const struct svc_rqst *rqst
901 	),
902 
903 	TP_ARGS(rqst),
904 
905 	TP_STRUCT__entry(
906 		__field(u32, xid)
907 		__field(unsigned long, flags)
908 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
909 	),
910 
911 	TP_fast_assign(
912 		__entry->xid = be32_to_cpu(rqst->rq_xid);
913 		__entry->flags = rqst->rq_flags;
914 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
915 	),
916 
917 	TP_printk("addr=%s xid=0x%08x flags=%s",
918 			__get_str(addr), __entry->xid,
919 			show_rqstp_flags(__entry->flags))
920 );
921 #define DEFINE_SVC_RQST_EVENT(name) \
922 	DEFINE_EVENT(svc_rqst_event, svc_##name, \
923 			TP_PROTO( \
924 				const struct svc_rqst *rqst \
925 			), \
926 			TP_ARGS(rqst))
927 
928 DEFINE_SVC_RQST_EVENT(defer);
929 DEFINE_SVC_RQST_EVENT(drop);
930 
931 DECLARE_EVENT_CLASS(svc_rqst_status,
932 
933 	TP_PROTO(struct svc_rqst *rqst, int status),
934 
935 	TP_ARGS(rqst, status),
936 
937 	TP_STRUCT__entry(
938 		__field(u32, xid)
939 		__field(int, status)
940 		__field(unsigned long, flags)
941 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
942 	),
943 
944 	TP_fast_assign(
945 		__entry->xid = be32_to_cpu(rqst->rq_xid);
946 		__entry->status = status;
947 		__entry->flags = rqst->rq_flags;
948 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
949 	),
950 
951 	TP_printk("addr=%s xid=0x%08x status=%d flags=%s",
952 		  __get_str(addr), __entry->xid,
953 		  __entry->status, show_rqstp_flags(__entry->flags))
954 );
955 
956 DEFINE_EVENT(svc_rqst_status, svc_send,
957 	TP_PROTO(struct svc_rqst *rqst, int status),
958 	TP_ARGS(rqst, status));
959 
960 #define show_svc_xprt_flags(flags)					\
961 	__print_flags(flags, "|",					\
962 		{ (1UL << XPT_BUSY),		"XPT_BUSY"},		\
963 		{ (1UL << XPT_CONN),		"XPT_CONN"},		\
964 		{ (1UL << XPT_CLOSE),		"XPT_CLOSE"},		\
965 		{ (1UL << XPT_DATA),		"XPT_DATA"},		\
966 		{ (1UL << XPT_TEMP),		"XPT_TEMP"},		\
967 		{ (1UL << XPT_DEAD),		"XPT_DEAD"},		\
968 		{ (1UL << XPT_CHNGBUF),		"XPT_CHNGBUF"},		\
969 		{ (1UL << XPT_DEFERRED),	"XPT_DEFERRED"},	\
970 		{ (1UL << XPT_OLD),		"XPT_OLD"},		\
971 		{ (1UL << XPT_LISTENER),	"XPT_LISTENER"},	\
972 		{ (1UL << XPT_CACHE_AUTH),	"XPT_CACHE_AUTH"},	\
973 		{ (1UL << XPT_LOCAL),		"XPT_LOCAL"},		\
974 		{ (1UL << XPT_KILL_TEMP),	"XPT_KILL_TEMP"},	\
975 		{ (1UL << XPT_CONG_CTRL),	"XPT_CONG_CTRL"})
976 
977 TRACE_EVENT(svc_xprt_do_enqueue,
978 	TP_PROTO(struct svc_xprt *xprt, struct svc_rqst *rqst),
979 
980 	TP_ARGS(xprt, rqst),
981 
982 	TP_STRUCT__entry(
983 		__field(struct svc_xprt *, xprt)
984 		__field(int, pid)
985 		__field(unsigned long, flags)
986 		__string(addr, xprt->xpt_remotebuf)
987 	),
988 
989 	TP_fast_assign(
990 		__entry->xprt = xprt;
991 		__entry->pid = rqst? rqst->rq_task->pid : 0;
992 		__entry->flags = xprt->xpt_flags;
993 		__assign_str(addr, xprt->xpt_remotebuf);
994 	),
995 
996 	TP_printk("xprt=%p addr=%s pid=%d flags=%s",
997 			__entry->xprt, __get_str(addr),
998 			__entry->pid, show_svc_xprt_flags(__entry->flags))
999 );
1000 
1001 DECLARE_EVENT_CLASS(svc_xprt_event,
1002 	TP_PROTO(struct svc_xprt *xprt),
1003 
1004 	TP_ARGS(xprt),
1005 
1006 	TP_STRUCT__entry(
1007 		__field(struct svc_xprt *, xprt)
1008 		__field(unsigned long, flags)
1009 		__string(addr, xprt->xpt_remotebuf)
1010 	),
1011 
1012 	TP_fast_assign(
1013 		__entry->xprt = xprt;
1014 		__entry->flags = xprt->xpt_flags;
1015 		__assign_str(addr, xprt->xpt_remotebuf);
1016 	),
1017 
1018 	TP_printk("xprt=%p addr=%s flags=%s",
1019 			__entry->xprt, __get_str(addr),
1020 			show_svc_xprt_flags(__entry->flags))
1021 );
1022 
1023 DEFINE_EVENT(svc_xprt_event, svc_xprt_no_write_space,
1024 	TP_PROTO(struct svc_xprt *xprt),
1025 	TP_ARGS(xprt));
1026 
1027 TRACE_EVENT(svc_xprt_dequeue,
1028 	TP_PROTO(struct svc_rqst *rqst),
1029 
1030 	TP_ARGS(rqst),
1031 
1032 	TP_STRUCT__entry(
1033 		__field(struct svc_xprt *, xprt)
1034 		__field(unsigned long, flags)
1035 		__field(unsigned long, wakeup)
1036 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1037 	),
1038 
1039 	TP_fast_assign(
1040 		__entry->xprt = rqst->rq_xprt;
1041 		__entry->flags = rqst->rq_xprt->xpt_flags;
1042 		__entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
1043 							rqst->rq_qtime));
1044 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1045 	),
1046 
1047 	TP_printk("xprt=%p addr=%s flags=%s wakeup-us=%lu",
1048 			__entry->xprt, __get_str(addr),
1049 			show_svc_xprt_flags(__entry->flags),
1050 			__entry->wakeup)
1051 );
1052 
1053 TRACE_EVENT(svc_wake_up,
1054 	TP_PROTO(int pid),
1055 
1056 	TP_ARGS(pid),
1057 
1058 	TP_STRUCT__entry(
1059 		__field(int, pid)
1060 	),
1061 
1062 	TP_fast_assign(
1063 		__entry->pid = pid;
1064 	),
1065 
1066 	TP_printk("pid=%d", __entry->pid)
1067 );
1068 
1069 TRACE_EVENT(svc_handle_xprt,
1070 	TP_PROTO(struct svc_xprt *xprt, int len),
1071 
1072 	TP_ARGS(xprt, len),
1073 
1074 	TP_STRUCT__entry(
1075 		__field(struct svc_xprt *, xprt)
1076 		__field(int, len)
1077 		__field(unsigned long, flags)
1078 		__string(addr, xprt->xpt_remotebuf)
1079 	),
1080 
1081 	TP_fast_assign(
1082 		__entry->xprt = xprt;
1083 		__entry->len = len;
1084 		__entry->flags = xprt->xpt_flags;
1085 		__assign_str(addr, xprt->xpt_remotebuf);
1086 	),
1087 
1088 	TP_printk("xprt=%p addr=%s len=%d flags=%s",
1089 		__entry->xprt, __get_str(addr),
1090 		__entry->len, show_svc_xprt_flags(__entry->flags))
1091 );
1092 
1093 TRACE_EVENT(svc_stats_latency,
1094 	TP_PROTO(const struct svc_rqst *rqst),
1095 
1096 	TP_ARGS(rqst),
1097 
1098 	TP_STRUCT__entry(
1099 		__field(u32, xid)
1100 		__field(unsigned long, execute)
1101 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1102 	),
1103 
1104 	TP_fast_assign(
1105 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1106 		__entry->execute = ktime_to_us(ktime_sub(ktime_get(),
1107 							 rqst->rq_stime));
1108 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1109 	),
1110 
1111 	TP_printk("addr=%s xid=0x%08x execute-us=%lu",
1112 		__get_str(addr), __entry->xid, __entry->execute)
1113 );
1114 
1115 DECLARE_EVENT_CLASS(svc_deferred_event,
1116 	TP_PROTO(
1117 		const struct svc_deferred_req *dr
1118 	),
1119 
1120 	TP_ARGS(dr),
1121 
1122 	TP_STRUCT__entry(
1123 		__field(u32, xid)
1124 		__string(addr, dr->xprt->xpt_remotebuf)
1125 	),
1126 
1127 	TP_fast_assign(
1128 		__entry->xid = be32_to_cpu(*(__be32 *)(dr->args +
1129 						       (dr->xprt_hlen>>2)));
1130 		__assign_str(addr, dr->xprt->xpt_remotebuf);
1131 	),
1132 
1133 	TP_printk("addr=%s xid=0x%08x", __get_str(addr), __entry->xid)
1134 );
1135 #define DEFINE_SVC_DEFERRED_EVENT(name) \
1136 	DEFINE_EVENT(svc_deferred_event, svc_##name##_deferred, \
1137 			TP_PROTO( \
1138 				const struct svc_deferred_req *dr \
1139 			), \
1140 			TP_ARGS(dr))
1141 
1142 DEFINE_SVC_DEFERRED_EVENT(drop);
1143 DEFINE_SVC_DEFERRED_EVENT(revisit);
1144 
1145 #endif /* _TRACE_SUNRPC_H */
1146 
1147 #include <trace/define_trace.h>
1148