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