Merge tag 'landlock_v34' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux-2.6-microblaze.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(SOCK_STREAM);
18 TRACE_DEFINE_ENUM(SOCK_DGRAM);
19 TRACE_DEFINE_ENUM(SOCK_RAW);
20 TRACE_DEFINE_ENUM(SOCK_RDM);
21 TRACE_DEFINE_ENUM(SOCK_SEQPACKET);
22 TRACE_DEFINE_ENUM(SOCK_DCCP);
23 TRACE_DEFINE_ENUM(SOCK_PACKET);
24
25 #define show_socket_type(type)                                  \
26         __print_symbolic(type,                                  \
27                 { SOCK_STREAM,          "STREAM" },             \
28                 { SOCK_DGRAM,           "DGRAM" },              \
29                 { SOCK_RAW,             "RAW" },                \
30                 { SOCK_RDM,             "RDM" },                \
31                 { SOCK_SEQPACKET,       "SEQPACKET" },          \
32                 { SOCK_DCCP,            "DCCP" },               \
33                 { SOCK_PACKET,          "PACKET" })
34
35 /* This list is known to be incomplete, add new enums as needed. */
36 TRACE_DEFINE_ENUM(AF_UNSPEC);
37 TRACE_DEFINE_ENUM(AF_UNIX);
38 TRACE_DEFINE_ENUM(AF_LOCAL);
39 TRACE_DEFINE_ENUM(AF_INET);
40 TRACE_DEFINE_ENUM(AF_INET6);
41
42 #define rpc_show_address_family(family)                         \
43         __print_symbolic(family,                                \
44                 { AF_UNSPEC,            "AF_UNSPEC" },          \
45                 { AF_UNIX,              "AF_UNIX" },            \
46                 { AF_LOCAL,             "AF_LOCAL" },           \
47                 { AF_INET,              "AF_INET" },            \
48                 { AF_INET6,             "AF_INET6" })
49
50 DECLARE_EVENT_CLASS(rpc_xdr_buf_class,
51         TP_PROTO(
52                 const struct rpc_task *task,
53                 const struct xdr_buf *xdr
54         ),
55
56         TP_ARGS(task, xdr),
57
58         TP_STRUCT__entry(
59                 __field(unsigned int, task_id)
60                 __field(unsigned int, client_id)
61                 __field(const void *, head_base)
62                 __field(size_t, head_len)
63                 __field(const void *, tail_base)
64                 __field(size_t, tail_len)
65                 __field(unsigned int, page_len)
66                 __field(unsigned int, msg_len)
67         ),
68
69         TP_fast_assign(
70                 __entry->task_id = task->tk_pid;
71                 __entry->client_id = task->tk_client ?
72                                      task->tk_client->cl_clid : -1;
73                 __entry->head_base = xdr->head[0].iov_base;
74                 __entry->head_len = xdr->head[0].iov_len;
75                 __entry->tail_base = xdr->tail[0].iov_base;
76                 __entry->tail_len = xdr->tail[0].iov_len;
77                 __entry->page_len = xdr->page_len;
78                 __entry->msg_len = xdr->len;
79         ),
80
81         TP_printk("task:%u@%u head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
82                 __entry->task_id, __entry->client_id,
83                 __entry->head_base, __entry->head_len, __entry->page_len,
84                 __entry->tail_base, __entry->tail_len, __entry->msg_len
85         )
86 );
87
88 #define DEFINE_RPCXDRBUF_EVENT(name)                                    \
89                 DEFINE_EVENT(rpc_xdr_buf_class,                         \
90                                 rpc_xdr_##name,                         \
91                                 TP_PROTO(                               \
92                                         const struct rpc_task *task,    \
93                                         const struct xdr_buf *xdr       \
94                                 ),                                      \
95                                 TP_ARGS(task, xdr))
96
97 DEFINE_RPCXDRBUF_EVENT(sendto);
98 DEFINE_RPCXDRBUF_EVENT(recvfrom);
99 DEFINE_RPCXDRBUF_EVENT(reply_pages);
100
101
102 DECLARE_EVENT_CLASS(rpc_clnt_class,
103         TP_PROTO(
104                 const struct rpc_clnt *clnt
105         ),
106
107         TP_ARGS(clnt),
108
109         TP_STRUCT__entry(
110                 __field(unsigned int, client_id)
111         ),
112
113         TP_fast_assign(
114                 __entry->client_id = clnt->cl_clid;
115         ),
116
117         TP_printk("clid=%u", __entry->client_id)
118 );
119
120 #define DEFINE_RPC_CLNT_EVENT(name)                                     \
121                 DEFINE_EVENT(rpc_clnt_class,                            \
122                                 rpc_clnt_##name,                        \
123                                 TP_PROTO(                               \
124                                         const struct rpc_clnt *clnt     \
125                                 ),                                      \
126                                 TP_ARGS(clnt))
127
128 DEFINE_RPC_CLNT_EVENT(free);
129 DEFINE_RPC_CLNT_EVENT(killall);
130 DEFINE_RPC_CLNT_EVENT(shutdown);
131 DEFINE_RPC_CLNT_EVENT(release);
132 DEFINE_RPC_CLNT_EVENT(replace_xprt);
133 DEFINE_RPC_CLNT_EVENT(replace_xprt_err);
134
135 TRACE_EVENT(rpc_clnt_new,
136         TP_PROTO(
137                 const struct rpc_clnt *clnt,
138                 const struct rpc_xprt *xprt,
139                 const char *program,
140                 const char *server
141         ),
142
143         TP_ARGS(clnt, xprt, program, server),
144
145         TP_STRUCT__entry(
146                 __field(unsigned int, client_id)
147                 __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
148                 __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
149                 __string(program, program)
150                 __string(server, server)
151         ),
152
153         TP_fast_assign(
154                 __entry->client_id = clnt->cl_clid;
155                 __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
156                 __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
157                 __assign_str(program, program)
158                 __assign_str(server, server)
159         ),
160
161         TP_printk("client=%u peer=[%s]:%s program=%s server=%s",
162                 __entry->client_id, __get_str(addr), __get_str(port),
163                 __get_str(program), __get_str(server))
164 );
165
166 TRACE_EVENT(rpc_clnt_new_err,
167         TP_PROTO(
168                 const char *program,
169                 const char *server,
170                 int error
171         ),
172
173         TP_ARGS(program, server, error),
174
175         TP_STRUCT__entry(
176                 __field(int, error)
177                 __string(program, program)
178                 __string(server, server)
179         ),
180
181         TP_fast_assign(
182                 __entry->error = error;
183                 __assign_str(program, program)
184                 __assign_str(server, server)
185         ),
186
187         TP_printk("program=%s server=%s error=%d",
188                 __get_str(program), __get_str(server), __entry->error)
189 );
190
191 TRACE_EVENT(rpc_clnt_clone_err,
192         TP_PROTO(
193                 const struct rpc_clnt *clnt,
194                 int error
195         ),
196
197         TP_ARGS(clnt, error),
198
199         TP_STRUCT__entry(
200                 __field(unsigned int, client_id)
201                 __field(int, error)
202         ),
203
204         TP_fast_assign(
205                 __entry->client_id = clnt->cl_clid;
206                 __entry->error = error;
207         ),
208
209         TP_printk("client=%u error=%d", __entry->client_id, __entry->error)
210 );
211
212
213 TRACE_DEFINE_ENUM(RPC_AUTH_OK);
214 TRACE_DEFINE_ENUM(RPC_AUTH_BADCRED);
215 TRACE_DEFINE_ENUM(RPC_AUTH_REJECTEDCRED);
216 TRACE_DEFINE_ENUM(RPC_AUTH_BADVERF);
217 TRACE_DEFINE_ENUM(RPC_AUTH_REJECTEDVERF);
218 TRACE_DEFINE_ENUM(RPC_AUTH_TOOWEAK);
219 TRACE_DEFINE_ENUM(RPCSEC_GSS_CREDPROBLEM);
220 TRACE_DEFINE_ENUM(RPCSEC_GSS_CTXPROBLEM);
221
222 #define rpc_show_auth_stat(status)                                      \
223         __print_symbolic(status,                                        \
224                 { RPC_AUTH_OK,                  "AUTH_OK" },            \
225                 { RPC_AUTH_BADCRED,             "BADCRED" },            \
226                 { RPC_AUTH_REJECTEDCRED,        "REJECTEDCRED" },       \
227                 { RPC_AUTH_BADVERF,             "BADVERF" },            \
228                 { RPC_AUTH_REJECTEDVERF,        "REJECTEDVERF" },       \
229                 { RPC_AUTH_TOOWEAK,             "TOOWEAK" },            \
230                 { RPCSEC_GSS_CREDPROBLEM,       "GSS_CREDPROBLEM" },    \
231                 { RPCSEC_GSS_CTXPROBLEM,        "GSS_CTXPROBLEM" })     \
232
233 DECLARE_EVENT_CLASS(rpc_task_status,
234
235         TP_PROTO(const struct rpc_task *task),
236
237         TP_ARGS(task),
238
239         TP_STRUCT__entry(
240                 __field(unsigned int, task_id)
241                 __field(unsigned int, client_id)
242                 __field(int, status)
243         ),
244
245         TP_fast_assign(
246                 __entry->task_id = task->tk_pid;
247                 __entry->client_id = task->tk_client->cl_clid;
248                 __entry->status = task->tk_status;
249         ),
250
251         TP_printk("task:%u@%u status=%d",
252                 __entry->task_id, __entry->client_id,
253                 __entry->status)
254 );
255 #define DEFINE_RPC_STATUS_EVENT(name) \
256         DEFINE_EVENT(rpc_task_status, rpc_##name##_status, \
257                         TP_PROTO( \
258                                 const struct rpc_task *task \
259                         ), \
260                         TP_ARGS(task))
261
262 DEFINE_RPC_STATUS_EVENT(call);
263 DEFINE_RPC_STATUS_EVENT(connect);
264 DEFINE_RPC_STATUS_EVENT(timeout);
265 DEFINE_RPC_STATUS_EVENT(retry_refresh);
266 DEFINE_RPC_STATUS_EVENT(refresh);
267
268 TRACE_EVENT(rpc_request,
269         TP_PROTO(const struct rpc_task *task),
270
271         TP_ARGS(task),
272
273         TP_STRUCT__entry(
274                 __field(unsigned int, task_id)
275                 __field(unsigned int, client_id)
276                 __field(int, version)
277                 __field(bool, async)
278                 __string(progname, task->tk_client->cl_program->name)
279                 __string(procname, rpc_proc_name(task))
280         ),
281
282         TP_fast_assign(
283                 __entry->task_id = task->tk_pid;
284                 __entry->client_id = task->tk_client->cl_clid;
285                 __entry->version = task->tk_client->cl_vers;
286                 __entry->async = RPC_IS_ASYNC(task);
287                 __assign_str(progname, task->tk_client->cl_program->name)
288                 __assign_str(procname, rpc_proc_name(task))
289         ),
290
291         TP_printk("task:%u@%u %sv%d %s (%ssync)",
292                 __entry->task_id, __entry->client_id,
293                 __get_str(progname), __entry->version,
294                 __get_str(procname), __entry->async ? "a": ""
295                 )
296 );
297
298 TRACE_DEFINE_ENUM(RPC_TASK_ASYNC);
299 TRACE_DEFINE_ENUM(RPC_TASK_SWAPPER);
300 TRACE_DEFINE_ENUM(RPC_TASK_NULLCREDS);
301 TRACE_DEFINE_ENUM(RPC_CALL_MAJORSEEN);
302 TRACE_DEFINE_ENUM(RPC_TASK_ROOTCREDS);
303 TRACE_DEFINE_ENUM(RPC_TASK_DYNAMIC);
304 TRACE_DEFINE_ENUM(RPC_TASK_NO_ROUND_ROBIN);
305 TRACE_DEFINE_ENUM(RPC_TASK_SOFT);
306 TRACE_DEFINE_ENUM(RPC_TASK_SOFTCONN);
307 TRACE_DEFINE_ENUM(RPC_TASK_SENT);
308 TRACE_DEFINE_ENUM(RPC_TASK_TIMEOUT);
309 TRACE_DEFINE_ENUM(RPC_TASK_NOCONNECT);
310 TRACE_DEFINE_ENUM(RPC_TASK_NO_RETRANS_TIMEOUT);
311 TRACE_DEFINE_ENUM(RPC_TASK_CRED_NOREF);
312
313 #define rpc_show_task_flags(flags)                                      \
314         __print_flags(flags, "|",                                       \
315                 { RPC_TASK_ASYNC, "ASYNC" },                            \
316                 { RPC_TASK_SWAPPER, "SWAPPER" },                        \
317                 { RPC_TASK_NULLCREDS, "NULLCREDS" },                    \
318                 { RPC_CALL_MAJORSEEN, "MAJORSEEN" },                    \
319                 { RPC_TASK_ROOTCREDS, "ROOTCREDS" },                    \
320                 { RPC_TASK_DYNAMIC, "DYNAMIC" },                        \
321                 { RPC_TASK_NO_ROUND_ROBIN, "NO_ROUND_ROBIN" },          \
322                 { RPC_TASK_SOFT, "SOFT" },                              \
323                 { RPC_TASK_SOFTCONN, "SOFTCONN" },                      \
324                 { RPC_TASK_SENT, "SENT" },                              \
325                 { RPC_TASK_TIMEOUT, "TIMEOUT" },                        \
326                 { RPC_TASK_NOCONNECT, "NOCONNECT" },                    \
327                 { RPC_TASK_NO_RETRANS_TIMEOUT, "NORTO" },               \
328                 { RPC_TASK_CRED_NOREF, "CRED_NOREF" })
329
330 TRACE_DEFINE_ENUM(RPC_TASK_RUNNING);
331 TRACE_DEFINE_ENUM(RPC_TASK_QUEUED);
332 TRACE_DEFINE_ENUM(RPC_TASK_ACTIVE);
333 TRACE_DEFINE_ENUM(RPC_TASK_NEED_XMIT);
334 TRACE_DEFINE_ENUM(RPC_TASK_NEED_RECV);
335 TRACE_DEFINE_ENUM(RPC_TASK_MSG_PIN_WAIT);
336 TRACE_DEFINE_ENUM(RPC_TASK_SIGNALLED);
337
338 #define rpc_show_runstate(flags)                                        \
339         __print_flags(flags, "|",                                       \
340                 { (1UL << RPC_TASK_RUNNING), "RUNNING" },               \
341                 { (1UL << RPC_TASK_QUEUED), "QUEUED" },                 \
342                 { (1UL << RPC_TASK_ACTIVE), "ACTIVE" },                 \
343                 { (1UL << RPC_TASK_NEED_XMIT), "NEED_XMIT" },           \
344                 { (1UL << RPC_TASK_NEED_RECV), "NEED_RECV" },           \
345                 { (1UL << RPC_TASK_MSG_PIN_WAIT), "MSG_PIN_WAIT" },     \
346                 { (1UL << RPC_TASK_SIGNALLED), "SIGNALLED" })
347
348 DECLARE_EVENT_CLASS(rpc_task_running,
349
350         TP_PROTO(const struct rpc_task *task, const void *action),
351
352         TP_ARGS(task, action),
353
354         TP_STRUCT__entry(
355                 __field(unsigned int, task_id)
356                 __field(unsigned int, client_id)
357                 __field(const void *, action)
358                 __field(unsigned long, runstate)
359                 __field(int, status)
360                 __field(unsigned short, flags)
361                 ),
362
363         TP_fast_assign(
364                 __entry->client_id = task->tk_client ?
365                                      task->tk_client->cl_clid : -1;
366                 __entry->task_id = task->tk_pid;
367                 __entry->action = action;
368                 __entry->runstate = task->tk_runstate;
369                 __entry->status = task->tk_status;
370                 __entry->flags = task->tk_flags;
371                 ),
372
373         TP_printk("task:%u@%d flags=%s runstate=%s status=%d action=%ps",
374                 __entry->task_id, __entry->client_id,
375                 rpc_show_task_flags(__entry->flags),
376                 rpc_show_runstate(__entry->runstate),
377                 __entry->status,
378                 __entry->action
379                 )
380 );
381 #define DEFINE_RPC_RUNNING_EVENT(name) \
382         DEFINE_EVENT(rpc_task_running, rpc_task_##name, \
383                         TP_PROTO( \
384                                 const struct rpc_task *task, \
385                                 const void *action \
386                         ), \
387                         TP_ARGS(task, action))
388
389 DEFINE_RPC_RUNNING_EVENT(begin);
390 DEFINE_RPC_RUNNING_EVENT(run_action);
391 DEFINE_RPC_RUNNING_EVENT(sync_sleep);
392 DEFINE_RPC_RUNNING_EVENT(sync_wake);
393 DEFINE_RPC_RUNNING_EVENT(complete);
394 DEFINE_RPC_RUNNING_EVENT(timeout);
395 DEFINE_RPC_RUNNING_EVENT(signalled);
396 DEFINE_RPC_RUNNING_EVENT(end);
397
398 DECLARE_EVENT_CLASS(rpc_task_queued,
399
400         TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
401
402         TP_ARGS(task, q),
403
404         TP_STRUCT__entry(
405                 __field(unsigned int, task_id)
406                 __field(unsigned int, client_id)
407                 __field(unsigned long, timeout)
408                 __field(unsigned long, runstate)
409                 __field(int, status)
410                 __field(unsigned short, flags)
411                 __string(q_name, rpc_qname(q))
412                 ),
413
414         TP_fast_assign(
415                 __entry->client_id = task->tk_client ?
416                                      task->tk_client->cl_clid : -1;
417                 __entry->task_id = task->tk_pid;
418                 __entry->timeout = rpc_task_timeout(task);
419                 __entry->runstate = task->tk_runstate;
420                 __entry->status = task->tk_status;
421                 __entry->flags = task->tk_flags;
422                 __assign_str(q_name, rpc_qname(q));
423                 ),
424
425         TP_printk("task:%u@%d flags=%s runstate=%s status=%d timeout=%lu queue=%s",
426                 __entry->task_id, __entry->client_id,
427                 rpc_show_task_flags(__entry->flags),
428                 rpc_show_runstate(__entry->runstate),
429                 __entry->status,
430                 __entry->timeout,
431                 __get_str(q_name)
432                 )
433 );
434 #define DEFINE_RPC_QUEUED_EVENT(name) \
435         DEFINE_EVENT(rpc_task_queued, rpc_task_##name, \
436                         TP_PROTO( \
437                                 const struct rpc_task *task, \
438                                 const struct rpc_wait_queue *q \
439                         ), \
440                         TP_ARGS(task, q))
441
442 DEFINE_RPC_QUEUED_EVENT(sleep);
443 DEFINE_RPC_QUEUED_EVENT(wakeup);
444
445 DECLARE_EVENT_CLASS(rpc_failure,
446
447         TP_PROTO(const struct rpc_task *task),
448
449         TP_ARGS(task),
450
451         TP_STRUCT__entry(
452                 __field(unsigned int, task_id)
453                 __field(unsigned int, client_id)
454         ),
455
456         TP_fast_assign(
457                 __entry->task_id = task->tk_pid;
458                 __entry->client_id = task->tk_client->cl_clid;
459         ),
460
461         TP_printk("task:%u@%u",
462                 __entry->task_id, __entry->client_id)
463 );
464
465 #define DEFINE_RPC_FAILURE(name)                                        \
466         DEFINE_EVENT(rpc_failure, rpc_bad_##name,                       \
467                         TP_PROTO(                                       \
468                                 const struct rpc_task *task             \
469                         ),                                              \
470                         TP_ARGS(task))
471
472 DEFINE_RPC_FAILURE(callhdr);
473 DEFINE_RPC_FAILURE(verifier);
474
475 DECLARE_EVENT_CLASS(rpc_reply_event,
476
477         TP_PROTO(
478                 const struct rpc_task *task
479         ),
480
481         TP_ARGS(task),
482
483         TP_STRUCT__entry(
484                 __field(unsigned int, task_id)
485                 __field(unsigned int, client_id)
486                 __field(u32, xid)
487                 __string(progname, task->tk_client->cl_program->name)
488                 __field(u32, version)
489                 __string(procname, rpc_proc_name(task))
490                 __string(servername, task->tk_xprt->servername)
491         ),
492
493         TP_fast_assign(
494                 __entry->task_id = task->tk_pid;
495                 __entry->client_id = task->tk_client->cl_clid;
496                 __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
497                 __assign_str(progname, task->tk_client->cl_program->name)
498                 __entry->version = task->tk_client->cl_vers;
499                 __assign_str(procname, rpc_proc_name(task))
500                 __assign_str(servername, task->tk_xprt->servername)
501         ),
502
503         TP_printk("task:%u@%d server=%s xid=0x%08x %sv%d %s",
504                 __entry->task_id, __entry->client_id, __get_str(servername),
505                 __entry->xid, __get_str(progname), __entry->version,
506                 __get_str(procname))
507 )
508
509 #define DEFINE_RPC_REPLY_EVENT(name)                                    \
510         DEFINE_EVENT(rpc_reply_event, rpc__##name,                      \
511                         TP_PROTO(                                       \
512                                 const struct rpc_task *task             \
513                         ),                                              \
514                         TP_ARGS(task))
515
516 DEFINE_RPC_REPLY_EVENT(prog_unavail);
517 DEFINE_RPC_REPLY_EVENT(prog_mismatch);
518 DEFINE_RPC_REPLY_EVENT(proc_unavail);
519 DEFINE_RPC_REPLY_EVENT(garbage_args);
520 DEFINE_RPC_REPLY_EVENT(unparsable);
521 DEFINE_RPC_REPLY_EVENT(mismatch);
522 DEFINE_RPC_REPLY_EVENT(stale_creds);
523 DEFINE_RPC_REPLY_EVENT(bad_creds);
524 DEFINE_RPC_REPLY_EVENT(auth_tooweak);
525
526 #define DEFINE_RPCB_ERROR_EVENT(name)                                   \
527         DEFINE_EVENT(rpc_reply_event, rpcb_##name##_err,                \
528                         TP_PROTO(                                       \
529                                 const struct rpc_task *task             \
530                         ),                                              \
531                         TP_ARGS(task))
532
533 DEFINE_RPCB_ERROR_EVENT(prog_unavail);
534 DEFINE_RPCB_ERROR_EVENT(timeout);
535 DEFINE_RPCB_ERROR_EVENT(bind_version);
536 DEFINE_RPCB_ERROR_EVENT(unreachable);
537 DEFINE_RPCB_ERROR_EVENT(unrecognized);
538
539 TRACE_EVENT(rpc_buf_alloc,
540         TP_PROTO(
541                 const struct rpc_task *task,
542                 int status
543         ),
544
545         TP_ARGS(task, status),
546
547         TP_STRUCT__entry(
548                 __field(unsigned int, task_id)
549                 __field(unsigned int, client_id)
550                 __field(size_t, callsize)
551                 __field(size_t, recvsize)
552                 __field(int, status)
553         ),
554
555         TP_fast_assign(
556                 __entry->task_id = task->tk_pid;
557                 __entry->client_id = task->tk_client->cl_clid;
558                 __entry->callsize = task->tk_rqstp->rq_callsize;
559                 __entry->recvsize = task->tk_rqstp->rq_rcvsize;
560                 __entry->status = status;
561         ),
562
563         TP_printk("task:%u@%u callsize=%zu recvsize=%zu status=%d",
564                 __entry->task_id, __entry->client_id,
565                 __entry->callsize, __entry->recvsize, __entry->status
566         )
567 );
568
569 TRACE_EVENT(rpc_call_rpcerror,
570         TP_PROTO(
571                 const struct rpc_task *task,
572                 int tk_status,
573                 int rpc_status
574         ),
575
576         TP_ARGS(task, tk_status, rpc_status),
577
578         TP_STRUCT__entry(
579                 __field(unsigned int, task_id)
580                 __field(unsigned int, client_id)
581                 __field(int, tk_status)
582                 __field(int, rpc_status)
583         ),
584
585         TP_fast_assign(
586                 __entry->client_id = task->tk_client->cl_clid;
587                 __entry->task_id = task->tk_pid;
588                 __entry->tk_status = tk_status;
589                 __entry->rpc_status = rpc_status;
590         ),
591
592         TP_printk("task:%u@%u tk_status=%d rpc_status=%d",
593                 __entry->task_id, __entry->client_id,
594                 __entry->tk_status, __entry->rpc_status)
595 );
596
597 TRACE_EVENT(rpc_stats_latency,
598
599         TP_PROTO(
600                 const struct rpc_task *task,
601                 ktime_t backlog,
602                 ktime_t rtt,
603                 ktime_t execute
604         ),
605
606         TP_ARGS(task, backlog, rtt, execute),
607
608         TP_STRUCT__entry(
609                 __field(unsigned int, task_id)
610                 __field(unsigned int, client_id)
611                 __field(u32, xid)
612                 __field(int, version)
613                 __string(progname, task->tk_client->cl_program->name)
614                 __string(procname, rpc_proc_name(task))
615                 __field(unsigned long, backlog)
616                 __field(unsigned long, rtt)
617                 __field(unsigned long, execute)
618         ),
619
620         TP_fast_assign(
621                 __entry->client_id = task->tk_client->cl_clid;
622                 __entry->task_id = task->tk_pid;
623                 __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
624                 __entry->version = task->tk_client->cl_vers;
625                 __assign_str(progname, task->tk_client->cl_program->name)
626                 __assign_str(procname, rpc_proc_name(task))
627                 __entry->backlog = ktime_to_us(backlog);
628                 __entry->rtt = ktime_to_us(rtt);
629                 __entry->execute = ktime_to_us(execute);
630         ),
631
632         TP_printk("task:%u@%d xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu",
633                 __entry->task_id, __entry->client_id, __entry->xid,
634                 __get_str(progname), __entry->version, __get_str(procname),
635                 __entry->backlog, __entry->rtt, __entry->execute)
636 );
637
638 TRACE_EVENT(rpc_xdr_overflow,
639         TP_PROTO(
640                 const struct xdr_stream *xdr,
641                 size_t requested
642         ),
643
644         TP_ARGS(xdr, requested),
645
646         TP_STRUCT__entry(
647                 __field(unsigned int, task_id)
648                 __field(unsigned int, client_id)
649                 __field(int, version)
650                 __field(size_t, requested)
651                 __field(const void *, end)
652                 __field(const void *, p)
653                 __field(const void *, head_base)
654                 __field(size_t, head_len)
655                 __field(const void *, tail_base)
656                 __field(size_t, tail_len)
657                 __field(unsigned int, page_len)
658                 __field(unsigned int, len)
659                 __string(progname, xdr->rqst ?
660                          xdr->rqst->rq_task->tk_client->cl_program->name : "unknown")
661                 __string(procedure, xdr->rqst ?
662                          xdr->rqst->rq_task->tk_msg.rpc_proc->p_name : "unknown")
663         ),
664
665         TP_fast_assign(
666                 if (xdr->rqst) {
667                         const struct rpc_task *task = xdr->rqst->rq_task;
668
669                         __entry->task_id = task->tk_pid;
670                         __entry->client_id = task->tk_client->cl_clid;
671                         __assign_str(progname,
672                                      task->tk_client->cl_program->name)
673                         __entry->version = task->tk_client->cl_vers;
674                         __assign_str(procedure, task->tk_msg.rpc_proc->p_name)
675                 } else {
676                         __entry->task_id = 0;
677                         __entry->client_id = 0;
678                         __assign_str(progname, "unknown")
679                         __entry->version = 0;
680                         __assign_str(procedure, "unknown")
681                 }
682                 __entry->requested = requested;
683                 __entry->end = xdr->end;
684                 __entry->p = xdr->p;
685                 __entry->head_base = xdr->buf->head[0].iov_base,
686                 __entry->head_len = xdr->buf->head[0].iov_len,
687                 __entry->page_len = xdr->buf->page_len,
688                 __entry->tail_base = xdr->buf->tail[0].iov_base,
689                 __entry->tail_len = xdr->buf->tail[0].iov_len,
690                 __entry->len = xdr->buf->len;
691         ),
692
693         TP_printk(
694                 "task:%u@%u %sv%d %s requested=%zu p=%p end=%p xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
695                 __entry->task_id, __entry->client_id,
696                 __get_str(progname), __entry->version, __get_str(procedure),
697                 __entry->requested, __entry->p, __entry->end,
698                 __entry->head_base, __entry->head_len,
699                 __entry->page_len,
700                 __entry->tail_base, __entry->tail_len,
701                 __entry->len
702         )
703 );
704
705 TRACE_EVENT(rpc_xdr_alignment,
706         TP_PROTO(
707                 const struct xdr_stream *xdr,
708                 size_t offset,
709                 unsigned int copied
710         ),
711
712         TP_ARGS(xdr, offset, copied),
713
714         TP_STRUCT__entry(
715                 __field(unsigned int, task_id)
716                 __field(unsigned int, client_id)
717                 __field(int, version)
718                 __field(size_t, offset)
719                 __field(unsigned int, copied)
720                 __field(const void *, head_base)
721                 __field(size_t, head_len)
722                 __field(const void *, tail_base)
723                 __field(size_t, tail_len)
724                 __field(unsigned int, page_len)
725                 __field(unsigned int, len)
726                 __string(progname,
727                          xdr->rqst->rq_task->tk_client->cl_program->name)
728                 __string(procedure,
729                          xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
730         ),
731
732         TP_fast_assign(
733                 const struct rpc_task *task = xdr->rqst->rq_task;
734
735                 __entry->task_id = task->tk_pid;
736                 __entry->client_id = task->tk_client->cl_clid;
737                 __assign_str(progname,
738                              task->tk_client->cl_program->name)
739                 __entry->version = task->tk_client->cl_vers;
740                 __assign_str(procedure, task->tk_msg.rpc_proc->p_name)
741
742                 __entry->offset = offset;
743                 __entry->copied = copied;
744                 __entry->head_base = xdr->buf->head[0].iov_base,
745                 __entry->head_len = xdr->buf->head[0].iov_len,
746                 __entry->page_len = xdr->buf->page_len,
747                 __entry->tail_base = xdr->buf->tail[0].iov_base,
748                 __entry->tail_len = xdr->buf->tail[0].iov_len,
749                 __entry->len = xdr->buf->len;
750         ),
751
752         TP_printk(
753                 "task:%u@%u %sv%d %s offset=%zu copied=%u xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
754                 __entry->task_id, __entry->client_id,
755                 __get_str(progname), __entry->version, __get_str(procedure),
756                 __entry->offset, __entry->copied,
757                 __entry->head_base, __entry->head_len,
758                 __entry->page_len,
759                 __entry->tail_base, __entry->tail_len,
760                 __entry->len
761         )
762 );
763
764 /*
765  * First define the enums in the below macros to be exported to userspace
766  * via TRACE_DEFINE_ENUM().
767  */
768 #undef EM
769 #undef EMe
770 #define EM(a, b)        TRACE_DEFINE_ENUM(a);
771 #define EMe(a, b)       TRACE_DEFINE_ENUM(a);
772
773 #define RPC_SHOW_SOCKET                         \
774         EM( SS_FREE, "FREE" )                   \
775         EM( SS_UNCONNECTED, "UNCONNECTED" )     \
776         EM( SS_CONNECTING, "CONNECTING" )       \
777         EM( SS_CONNECTED, "CONNECTED" )         \
778         EMe( SS_DISCONNECTING, "DISCONNECTING" )
779
780 #define rpc_show_socket_state(state) \
781         __print_symbolic(state, RPC_SHOW_SOCKET)
782
783 RPC_SHOW_SOCKET
784
785 #define RPC_SHOW_SOCK                           \
786         EM( TCP_ESTABLISHED, "ESTABLISHED" )    \
787         EM( TCP_SYN_SENT, "SYN_SENT" )          \
788         EM( TCP_SYN_RECV, "SYN_RECV" )          \
789         EM( TCP_FIN_WAIT1, "FIN_WAIT1" )        \
790         EM( TCP_FIN_WAIT2, "FIN_WAIT2" )        \
791         EM( TCP_TIME_WAIT, "TIME_WAIT" )        \
792         EM( TCP_CLOSE, "CLOSE" )                \
793         EM( TCP_CLOSE_WAIT, "CLOSE_WAIT" )      \
794         EM( TCP_LAST_ACK, "LAST_ACK" )          \
795         EM( TCP_LISTEN, "LISTEN" )              \
796         EMe( TCP_CLOSING, "CLOSING" )
797
798 #define rpc_show_sock_state(state) \
799         __print_symbolic(state, RPC_SHOW_SOCK)
800
801 RPC_SHOW_SOCK
802
803 /*
804  * Now redefine the EM() and EMe() macros to map the enums to the strings
805  * that will be printed in the output.
806  */
807 #undef EM
808 #undef EMe
809 #define EM(a, b)        {a, b},
810 #define EMe(a, b)       {a, b}
811
812 DECLARE_EVENT_CLASS(xs_socket_event,
813
814                 TP_PROTO(
815                         struct rpc_xprt *xprt,
816                         struct socket *socket
817                 ),
818
819                 TP_ARGS(xprt, socket),
820
821                 TP_STRUCT__entry(
822                         __field(unsigned int, socket_state)
823                         __field(unsigned int, sock_state)
824                         __field(unsigned long long, ino)
825                         __string(dstaddr,
826                                 xprt->address_strings[RPC_DISPLAY_ADDR])
827                         __string(dstport,
828                                 xprt->address_strings[RPC_DISPLAY_PORT])
829                 ),
830
831                 TP_fast_assign(
832                         struct inode *inode = SOCK_INODE(socket);
833                         __entry->socket_state = socket->state;
834                         __entry->sock_state = socket->sk->sk_state;
835                         __entry->ino = (unsigned long long)inode->i_ino;
836                         __assign_str(dstaddr,
837                                 xprt->address_strings[RPC_DISPLAY_ADDR]);
838                         __assign_str(dstport,
839                                 xprt->address_strings[RPC_DISPLAY_PORT]);
840                 ),
841
842                 TP_printk(
843                         "socket:[%llu] dstaddr=%s/%s "
844                         "state=%u (%s) sk_state=%u (%s)",
845                         __entry->ino, __get_str(dstaddr), __get_str(dstport),
846                         __entry->socket_state,
847                         rpc_show_socket_state(__entry->socket_state),
848                         __entry->sock_state,
849                         rpc_show_sock_state(__entry->sock_state)
850                 )
851 );
852 #define DEFINE_RPC_SOCKET_EVENT(name) \
853         DEFINE_EVENT(xs_socket_event, name, \
854                         TP_PROTO( \
855                                 struct rpc_xprt *xprt, \
856                                 struct socket *socket \
857                         ), \
858                         TP_ARGS(xprt, socket))
859
860 DECLARE_EVENT_CLASS(xs_socket_event_done,
861
862                 TP_PROTO(
863                         struct rpc_xprt *xprt,
864                         struct socket *socket,
865                         int error
866                 ),
867
868                 TP_ARGS(xprt, socket, error),
869
870                 TP_STRUCT__entry(
871                         __field(int, error)
872                         __field(unsigned int, socket_state)
873                         __field(unsigned int, sock_state)
874                         __field(unsigned long long, ino)
875                         __string(dstaddr,
876                                 xprt->address_strings[RPC_DISPLAY_ADDR])
877                         __string(dstport,
878                                 xprt->address_strings[RPC_DISPLAY_PORT])
879                 ),
880
881                 TP_fast_assign(
882                         struct inode *inode = SOCK_INODE(socket);
883                         __entry->socket_state = socket->state;
884                         __entry->sock_state = socket->sk->sk_state;
885                         __entry->ino = (unsigned long long)inode->i_ino;
886                         __entry->error = error;
887                         __assign_str(dstaddr,
888                                 xprt->address_strings[RPC_DISPLAY_ADDR]);
889                         __assign_str(dstport,
890                                 xprt->address_strings[RPC_DISPLAY_PORT]);
891                 ),
892
893                 TP_printk(
894                         "error=%d socket:[%llu] dstaddr=%s/%s "
895                         "state=%u (%s) sk_state=%u (%s)",
896                         __entry->error,
897                         __entry->ino, __get_str(dstaddr), __get_str(dstport),
898                         __entry->socket_state,
899                         rpc_show_socket_state(__entry->socket_state),
900                         __entry->sock_state,
901                         rpc_show_sock_state(__entry->sock_state)
902                 )
903 );
904 #define DEFINE_RPC_SOCKET_EVENT_DONE(name) \
905         DEFINE_EVENT(xs_socket_event_done, name, \
906                         TP_PROTO( \
907                                 struct rpc_xprt *xprt, \
908                                 struct socket *socket, \
909                                 int error \
910                         ), \
911                         TP_ARGS(xprt, socket, error))
912
913 DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
914 DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
915 DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
916 DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
917 DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
918 DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
919
920 TRACE_EVENT(rpc_socket_nospace,
921         TP_PROTO(
922                 const struct rpc_rqst *rqst,
923                 const struct sock_xprt *transport
924         ),
925
926         TP_ARGS(rqst, transport),
927
928         TP_STRUCT__entry(
929                 __field(unsigned int, task_id)
930                 __field(unsigned int, client_id)
931                 __field(unsigned int, total)
932                 __field(unsigned int, remaining)
933         ),
934
935         TP_fast_assign(
936                 __entry->task_id = rqst->rq_task->tk_pid;
937                 __entry->client_id = rqst->rq_task->tk_client->cl_clid;
938                 __entry->total = rqst->rq_slen;
939                 __entry->remaining = rqst->rq_slen - transport->xmit.offset;
940         ),
941
942         TP_printk("task:%u@%u total=%u remaining=%u",
943                 __entry->task_id, __entry->client_id,
944                 __entry->total, __entry->remaining
945         )
946 );
947
948 TRACE_DEFINE_ENUM(XPRT_LOCKED);
949 TRACE_DEFINE_ENUM(XPRT_CONNECTED);
950 TRACE_DEFINE_ENUM(XPRT_CONNECTING);
951 TRACE_DEFINE_ENUM(XPRT_CLOSE_WAIT);
952 TRACE_DEFINE_ENUM(XPRT_BOUND);
953 TRACE_DEFINE_ENUM(XPRT_BINDING);
954 TRACE_DEFINE_ENUM(XPRT_CLOSING);
955 TRACE_DEFINE_ENUM(XPRT_CONGESTED);
956 TRACE_DEFINE_ENUM(XPRT_CWND_WAIT);
957 TRACE_DEFINE_ENUM(XPRT_WRITE_SPACE);
958
959 #define rpc_show_xprt_state(x)                                          \
960         __print_flags(x, "|",                                           \
961                 { (1UL << XPRT_LOCKED),         "LOCKED"},              \
962                 { (1UL << XPRT_CONNECTED),      "CONNECTED"},           \
963                 { (1UL << XPRT_CONNECTING),     "CONNECTING"},          \
964                 { (1UL << XPRT_CLOSE_WAIT),     "CLOSE_WAIT"},          \
965                 { (1UL << XPRT_BOUND),          "BOUND"},               \
966                 { (1UL << XPRT_BINDING),        "BINDING"},             \
967                 { (1UL << XPRT_CLOSING),        "CLOSING"},             \
968                 { (1UL << XPRT_CONGESTED),      "CONGESTED"},           \
969                 { (1UL << XPRT_CWND_WAIT),      "CWND_WAIT"},           \
970                 { (1UL << XPRT_WRITE_SPACE),    "WRITE_SPACE"})
971
972 DECLARE_EVENT_CLASS(rpc_xprt_lifetime_class,
973         TP_PROTO(
974                 const struct rpc_xprt *xprt
975         ),
976
977         TP_ARGS(xprt),
978
979         TP_STRUCT__entry(
980                 __field(unsigned long, state)
981                 __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
982                 __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
983         ),
984
985         TP_fast_assign(
986                 __entry->state = xprt->state;
987                 __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
988                 __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
989         ),
990
991         TP_printk("peer=[%s]:%s state=%s",
992                 __get_str(addr), __get_str(port),
993                 rpc_show_xprt_state(__entry->state))
994 );
995
996 #define DEFINE_RPC_XPRT_LIFETIME_EVENT(name) \
997         DEFINE_EVENT(rpc_xprt_lifetime_class, \
998                         xprt_##name, \
999                         TP_PROTO( \
1000                                 const struct rpc_xprt *xprt \
1001                         ), \
1002                         TP_ARGS(xprt))
1003
1004 DEFINE_RPC_XPRT_LIFETIME_EVENT(create);
1005 DEFINE_RPC_XPRT_LIFETIME_EVENT(connect);
1006 DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_auto);
1007 DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_done);
1008 DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_force);
1009 DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_cleanup);
1010 DEFINE_RPC_XPRT_LIFETIME_EVENT(destroy);
1011
1012 DECLARE_EVENT_CLASS(rpc_xprt_event,
1013         TP_PROTO(
1014                 const struct rpc_xprt *xprt,
1015                 __be32 xid,
1016                 int status
1017         ),
1018
1019         TP_ARGS(xprt, xid, status),
1020
1021         TP_STRUCT__entry(
1022                 __field(u32, xid)
1023                 __field(int, status)
1024                 __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1025                 __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1026         ),
1027
1028         TP_fast_assign(
1029                 __entry->xid = be32_to_cpu(xid);
1030                 __entry->status = status;
1031                 __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
1032                 __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
1033         ),
1034
1035         TP_printk("peer=[%s]:%s xid=0x%08x status=%d", __get_str(addr),
1036                         __get_str(port), __entry->xid,
1037                         __entry->status)
1038 );
1039 #define DEFINE_RPC_XPRT_EVENT(name) \
1040         DEFINE_EVENT(rpc_xprt_event, xprt_##name, \
1041                         TP_PROTO( \
1042                                 const struct rpc_xprt *xprt, \
1043                                 __be32 xid, \
1044                                 int status \
1045                         ), \
1046                         TP_ARGS(xprt, xid, status))
1047
1048 DEFINE_RPC_XPRT_EVENT(timer);
1049 DEFINE_RPC_XPRT_EVENT(lookup_rqst);
1050
1051 TRACE_EVENT(xprt_transmit,
1052         TP_PROTO(
1053                 const struct rpc_rqst *rqst,
1054                 int status
1055         ),
1056
1057         TP_ARGS(rqst, status),
1058
1059         TP_STRUCT__entry(
1060                 __field(unsigned int, task_id)
1061                 __field(unsigned int, client_id)
1062                 __field(u32, xid)
1063                 __field(u32, seqno)
1064                 __field(int, status)
1065         ),
1066
1067         TP_fast_assign(
1068                 __entry->task_id = rqst->rq_task->tk_pid;
1069                 __entry->client_id = rqst->rq_task->tk_client ?
1070                         rqst->rq_task->tk_client->cl_clid : -1;
1071                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1072                 __entry->seqno = rqst->rq_seqno;
1073                 __entry->status = status;
1074         ),
1075
1076         TP_printk(
1077                 "task:%u@%u xid=0x%08x seqno=%u status=%d",
1078                 __entry->task_id, __entry->client_id, __entry->xid,
1079                 __entry->seqno, __entry->status)
1080 );
1081
1082 TRACE_EVENT(xprt_ping,
1083         TP_PROTO(const struct rpc_xprt *xprt, int status),
1084
1085         TP_ARGS(xprt, status),
1086
1087         TP_STRUCT__entry(
1088                 __field(int, status)
1089                 __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1090                 __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1091         ),
1092
1093         TP_fast_assign(
1094                 __entry->status = status;
1095                 __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
1096                 __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
1097         ),
1098
1099         TP_printk("peer=[%s]:%s status=%d",
1100                         __get_str(addr), __get_str(port), __entry->status)
1101 );
1102
1103 DECLARE_EVENT_CLASS(xprt_writelock_event,
1104         TP_PROTO(
1105                 const struct rpc_xprt *xprt, const struct rpc_task *task
1106         ),
1107
1108         TP_ARGS(xprt, task),
1109
1110         TP_STRUCT__entry(
1111                 __field(unsigned int, task_id)
1112                 __field(unsigned int, client_id)
1113                 __field(unsigned int, snd_task_id)
1114         ),
1115
1116         TP_fast_assign(
1117                 if (task) {
1118                         __entry->task_id = task->tk_pid;
1119                         __entry->client_id = task->tk_client ?
1120                                              task->tk_client->cl_clid : -1;
1121                 } else {
1122                         __entry->task_id = -1;
1123                         __entry->client_id = -1;
1124                 }
1125                 __entry->snd_task_id = xprt->snd_task ?
1126                                         xprt->snd_task->tk_pid : -1;
1127         ),
1128
1129         TP_printk("task:%u@%u snd_task:%u",
1130                         __entry->task_id, __entry->client_id,
1131                         __entry->snd_task_id)
1132 );
1133
1134 #define DEFINE_WRITELOCK_EVENT(name) \
1135         DEFINE_EVENT(xprt_writelock_event, xprt_##name, \
1136                         TP_PROTO( \
1137                                 const struct rpc_xprt *xprt, \
1138                                 const struct rpc_task *task \
1139                         ), \
1140                         TP_ARGS(xprt, task))
1141
1142 DEFINE_WRITELOCK_EVENT(reserve_xprt);
1143 DEFINE_WRITELOCK_EVENT(release_xprt);
1144 DEFINE_WRITELOCK_EVENT(transmit_queued);
1145
1146 DECLARE_EVENT_CLASS(xprt_cong_event,
1147         TP_PROTO(
1148                 const struct rpc_xprt *xprt, const struct rpc_task *task
1149         ),
1150
1151         TP_ARGS(xprt, task),
1152
1153         TP_STRUCT__entry(
1154                 __field(unsigned int, task_id)
1155                 __field(unsigned int, client_id)
1156                 __field(unsigned int, snd_task_id)
1157                 __field(unsigned long, cong)
1158                 __field(unsigned long, cwnd)
1159                 __field(bool, wait)
1160         ),
1161
1162         TP_fast_assign(
1163                 if (task) {
1164                         __entry->task_id = task->tk_pid;
1165                         __entry->client_id = task->tk_client ?
1166                                              task->tk_client->cl_clid : -1;
1167                 } else {
1168                         __entry->task_id = -1;
1169                         __entry->client_id = -1;
1170                 }
1171                 __entry->snd_task_id = xprt->snd_task ?
1172                                         xprt->snd_task->tk_pid : -1;
1173                 __entry->cong = xprt->cong;
1174                 __entry->cwnd = xprt->cwnd;
1175                 __entry->wait = test_bit(XPRT_CWND_WAIT, &xprt->state);
1176         ),
1177
1178         TP_printk("task:%u@%u snd_task:%u cong=%lu cwnd=%lu%s",
1179                         __entry->task_id, __entry->client_id,
1180                         __entry->snd_task_id, __entry->cong, __entry->cwnd,
1181                         __entry->wait ? " (wait)" : "")
1182 );
1183
1184 #define DEFINE_CONG_EVENT(name) \
1185         DEFINE_EVENT(xprt_cong_event, xprt_##name, \
1186                         TP_PROTO( \
1187                                 const struct rpc_xprt *xprt, \
1188                                 const struct rpc_task *task \
1189                         ), \
1190                         TP_ARGS(xprt, task))
1191
1192 DEFINE_CONG_EVENT(reserve_cong);
1193 DEFINE_CONG_EVENT(release_cong);
1194 DEFINE_CONG_EVENT(get_cong);
1195 DEFINE_CONG_EVENT(put_cong);
1196
1197 TRACE_EVENT(xprt_reserve,
1198         TP_PROTO(
1199                 const struct rpc_rqst *rqst
1200         ),
1201
1202         TP_ARGS(rqst),
1203
1204         TP_STRUCT__entry(
1205                 __field(unsigned int, task_id)
1206                 __field(unsigned int, client_id)
1207                 __field(u32, xid)
1208         ),
1209
1210         TP_fast_assign(
1211                 __entry->task_id = rqst->rq_task->tk_pid;
1212                 __entry->client_id = rqst->rq_task->tk_client->cl_clid;
1213                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1214         ),
1215
1216         TP_printk("task:%u@%u xid=0x%08x",
1217                 __entry->task_id, __entry->client_id, __entry->xid
1218         )
1219 );
1220
1221 TRACE_EVENT(xs_stream_read_data,
1222         TP_PROTO(struct rpc_xprt *xprt, ssize_t err, size_t total),
1223
1224         TP_ARGS(xprt, err, total),
1225
1226         TP_STRUCT__entry(
1227                 __field(ssize_t, err)
1228                 __field(size_t, total)
1229                 __string(addr, xprt ? xprt->address_strings[RPC_DISPLAY_ADDR] :
1230                                 "(null)")
1231                 __string(port, xprt ? xprt->address_strings[RPC_DISPLAY_PORT] :
1232                                 "(null)")
1233         ),
1234
1235         TP_fast_assign(
1236                 __entry->err = err;
1237                 __entry->total = total;
1238                 __assign_str(addr, xprt ?
1239                         xprt->address_strings[RPC_DISPLAY_ADDR] : "(null)");
1240                 __assign_str(port, xprt ?
1241                         xprt->address_strings[RPC_DISPLAY_PORT] : "(null)");
1242         ),
1243
1244         TP_printk("peer=[%s]:%s err=%zd total=%zu", __get_str(addr),
1245                         __get_str(port), __entry->err, __entry->total)
1246 );
1247
1248 TRACE_EVENT(xs_stream_read_request,
1249         TP_PROTO(struct sock_xprt *xs),
1250
1251         TP_ARGS(xs),
1252
1253         TP_STRUCT__entry(
1254                 __string(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR])
1255                 __string(port, xs->xprt.address_strings[RPC_DISPLAY_PORT])
1256                 __field(u32, xid)
1257                 __field(unsigned long, copied)
1258                 __field(unsigned int, reclen)
1259                 __field(unsigned int, offset)
1260         ),
1261
1262         TP_fast_assign(
1263                 __assign_str(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR]);
1264                 __assign_str(port, xs->xprt.address_strings[RPC_DISPLAY_PORT]);
1265                 __entry->xid = be32_to_cpu(xs->recv.xid);
1266                 __entry->copied = xs->recv.copied;
1267                 __entry->reclen = xs->recv.len;
1268                 __entry->offset = xs->recv.offset;
1269         ),
1270
1271         TP_printk("peer=[%s]:%s xid=0x%08x copied=%lu reclen=%u offset=%u",
1272                         __get_str(addr), __get_str(port), __entry->xid,
1273                         __entry->copied, __entry->reclen, __entry->offset)
1274 );
1275
1276 TRACE_EVENT(rpcb_getport,
1277         TP_PROTO(
1278                 const struct rpc_clnt *clnt,
1279                 const struct rpc_task *task,
1280                 unsigned int bind_version
1281         ),
1282
1283         TP_ARGS(clnt, task, bind_version),
1284
1285         TP_STRUCT__entry(
1286                 __field(unsigned int, task_id)
1287                 __field(unsigned int, client_id)
1288                 __field(unsigned int, program)
1289                 __field(unsigned int, version)
1290                 __field(int, protocol)
1291                 __field(unsigned int, bind_version)
1292                 __string(servername, task->tk_xprt->servername)
1293         ),
1294
1295         TP_fast_assign(
1296                 __entry->task_id = task->tk_pid;
1297                 __entry->client_id = clnt->cl_clid;
1298                 __entry->program = clnt->cl_prog;
1299                 __entry->version = clnt->cl_vers;
1300                 __entry->protocol = task->tk_xprt->prot;
1301                 __entry->bind_version = bind_version;
1302                 __assign_str(servername, task->tk_xprt->servername);
1303         ),
1304
1305         TP_printk("task:%u@%u server=%s program=%u version=%u protocol=%d bind_version=%u",
1306                 __entry->task_id, __entry->client_id, __get_str(servername),
1307                 __entry->program, __entry->version, __entry->protocol,
1308                 __entry->bind_version
1309         )
1310 );
1311
1312 TRACE_EVENT(rpcb_setport,
1313         TP_PROTO(
1314                 const struct rpc_task *task,
1315                 int status,
1316                 unsigned short port
1317         ),
1318
1319         TP_ARGS(task, status, port),
1320
1321         TP_STRUCT__entry(
1322                 __field(unsigned int, task_id)
1323                 __field(unsigned int, client_id)
1324                 __field(int, status)
1325                 __field(unsigned short, port)
1326         ),
1327
1328         TP_fast_assign(
1329                 __entry->task_id = task->tk_pid;
1330                 __entry->client_id = task->tk_client->cl_clid;
1331                 __entry->status = status;
1332                 __entry->port = port;
1333         ),
1334
1335         TP_printk("task:%u@%u status=%d port=%u",
1336                 __entry->task_id, __entry->client_id,
1337                 __entry->status, __entry->port
1338         )
1339 );
1340
1341 TRACE_EVENT(pmap_register,
1342         TP_PROTO(
1343                 u32 program,
1344                 u32 version,
1345                 int protocol,
1346                 unsigned short port
1347         ),
1348
1349         TP_ARGS(program, version, protocol, port),
1350
1351         TP_STRUCT__entry(
1352                 __field(unsigned int, program)
1353                 __field(unsigned int, version)
1354                 __field(int, protocol)
1355                 __field(unsigned int, port)
1356         ),
1357
1358         TP_fast_assign(
1359                 __entry->program = program;
1360                 __entry->version = version;
1361                 __entry->protocol = protocol;
1362                 __entry->port = port;
1363         ),
1364
1365         TP_printk("program=%u version=%u protocol=%d port=%u",
1366                 __entry->program, __entry->version,
1367                 __entry->protocol, __entry->port
1368         )
1369 );
1370
1371 TRACE_EVENT(rpcb_register,
1372         TP_PROTO(
1373                 u32 program,
1374                 u32 version,
1375                 const char *addr,
1376                 const char *netid
1377         ),
1378
1379         TP_ARGS(program, version, addr, netid),
1380
1381         TP_STRUCT__entry(
1382                 __field(unsigned int, program)
1383                 __field(unsigned int, version)
1384                 __string(addr, addr)
1385                 __string(netid, netid)
1386         ),
1387
1388         TP_fast_assign(
1389                 __entry->program = program;
1390                 __entry->version = version;
1391                 __assign_str(addr, addr);
1392                 __assign_str(netid, netid);
1393         ),
1394
1395         TP_printk("program=%u version=%u addr=%s netid=%s",
1396                 __entry->program, __entry->version,
1397                 __get_str(addr), __get_str(netid)
1398         )
1399 );
1400
1401 TRACE_EVENT(rpcb_unregister,
1402         TP_PROTO(
1403                 u32 program,
1404                 u32 version,
1405                 const char *netid
1406         ),
1407
1408         TP_ARGS(program, version, netid),
1409
1410         TP_STRUCT__entry(
1411                 __field(unsigned int, program)
1412                 __field(unsigned int, version)
1413                 __string(netid, netid)
1414         ),
1415
1416         TP_fast_assign(
1417                 __entry->program = program;
1418                 __entry->version = version;
1419                 __assign_str(netid, netid);
1420         ),
1421
1422         TP_printk("program=%u version=%u netid=%s",
1423                 __entry->program, __entry->version, __get_str(netid)
1424         )
1425 );
1426
1427 /* Record an xdr_buf containing a fully-formed RPC message */
1428 DECLARE_EVENT_CLASS(svc_xdr_msg_class,
1429         TP_PROTO(
1430                 const struct xdr_buf *xdr
1431         ),
1432
1433         TP_ARGS(xdr),
1434
1435         TP_STRUCT__entry(
1436                 __field(u32, xid)
1437                 __field(const void *, head_base)
1438                 __field(size_t, head_len)
1439                 __field(const void *, tail_base)
1440                 __field(size_t, tail_len)
1441                 __field(unsigned int, page_len)
1442                 __field(unsigned int, msg_len)
1443         ),
1444
1445         TP_fast_assign(
1446                 __be32 *p = (__be32 *)xdr->head[0].iov_base;
1447
1448                 __entry->xid = be32_to_cpu(*p);
1449                 __entry->head_base = p;
1450                 __entry->head_len = xdr->head[0].iov_len;
1451                 __entry->tail_base = xdr->tail[0].iov_base;
1452                 __entry->tail_len = xdr->tail[0].iov_len;
1453                 __entry->page_len = xdr->page_len;
1454                 __entry->msg_len = xdr->len;
1455         ),
1456
1457         TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
1458                 __entry->xid,
1459                 __entry->head_base, __entry->head_len, __entry->page_len,
1460                 __entry->tail_base, __entry->tail_len, __entry->msg_len
1461         )
1462 );
1463
1464 #define DEFINE_SVCXDRMSG_EVENT(name)                                    \
1465                 DEFINE_EVENT(svc_xdr_msg_class,                         \
1466                                 svc_xdr_##name,                         \
1467                                 TP_PROTO(                               \
1468                                         const struct xdr_buf *xdr       \
1469                                 ),                                      \
1470                                 TP_ARGS(xdr))
1471
1472 DEFINE_SVCXDRMSG_EVENT(recvfrom);
1473
1474 /* Record an xdr_buf containing arbitrary data, tagged with an XID */
1475 DECLARE_EVENT_CLASS(svc_xdr_buf_class,
1476         TP_PROTO(
1477                 __be32 xid,
1478                 const struct xdr_buf *xdr
1479         ),
1480
1481         TP_ARGS(xid, xdr),
1482
1483         TP_STRUCT__entry(
1484                 __field(u32, xid)
1485                 __field(const void *, head_base)
1486                 __field(size_t, head_len)
1487                 __field(const void *, tail_base)
1488                 __field(size_t, tail_len)
1489                 __field(unsigned int, page_len)
1490                 __field(unsigned int, msg_len)
1491         ),
1492
1493         TP_fast_assign(
1494                 __entry->xid = be32_to_cpu(xid);
1495                 __entry->head_base = xdr->head[0].iov_base;
1496                 __entry->head_len = xdr->head[0].iov_len;
1497                 __entry->tail_base = xdr->tail[0].iov_base;
1498                 __entry->tail_len = xdr->tail[0].iov_len;
1499                 __entry->page_len = xdr->page_len;
1500                 __entry->msg_len = xdr->len;
1501         ),
1502
1503         TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
1504                 __entry->xid,
1505                 __entry->head_base, __entry->head_len, __entry->page_len,
1506                 __entry->tail_base, __entry->tail_len, __entry->msg_len
1507         )
1508 );
1509
1510 #define DEFINE_SVCXDRBUF_EVENT(name)                                    \
1511                 DEFINE_EVENT(svc_xdr_buf_class,                         \
1512                                 svc_xdr_##name,                         \
1513                                 TP_PROTO(                               \
1514                                         __be32 xid,                     \
1515                                         const struct xdr_buf *xdr       \
1516                                 ),                                      \
1517                                 TP_ARGS(xid, xdr))
1518
1519 DEFINE_SVCXDRBUF_EVENT(sendto);
1520
1521 /*
1522  * from include/linux/sunrpc/svc.h
1523  */
1524 #define SVC_RQST_FLAG_LIST                                              \
1525         svc_rqst_flag(SECURE)                                           \
1526         svc_rqst_flag(LOCAL)                                            \
1527         svc_rqst_flag(USEDEFERRAL)                                      \
1528         svc_rqst_flag(DROPME)                                           \
1529         svc_rqst_flag(SPLICE_OK)                                        \
1530         svc_rqst_flag(VICTIM)                                           \
1531         svc_rqst_flag(BUSY)                                             \
1532         svc_rqst_flag(DATA)                                             \
1533         svc_rqst_flag_end(AUTHERR)
1534
1535 #undef svc_rqst_flag
1536 #undef svc_rqst_flag_end
1537 #define svc_rqst_flag(x)        TRACE_DEFINE_ENUM(RQ_##x);
1538 #define svc_rqst_flag_end(x)    TRACE_DEFINE_ENUM(RQ_##x);
1539
1540 SVC_RQST_FLAG_LIST
1541
1542 #undef svc_rqst_flag
1543 #undef svc_rqst_flag_end
1544 #define svc_rqst_flag(x)        { BIT(RQ_##x), #x },
1545 #define svc_rqst_flag_end(x)    { BIT(RQ_##x), #x }
1546
1547 #define show_rqstp_flags(flags)                                         \
1548                 __print_flags(flags, "|", SVC_RQST_FLAG_LIST)
1549
1550 TRACE_DEFINE_ENUM(SVC_GARBAGE);
1551 TRACE_DEFINE_ENUM(SVC_SYSERR);
1552 TRACE_DEFINE_ENUM(SVC_VALID);
1553 TRACE_DEFINE_ENUM(SVC_NEGATIVE);
1554 TRACE_DEFINE_ENUM(SVC_OK);
1555 TRACE_DEFINE_ENUM(SVC_DROP);
1556 TRACE_DEFINE_ENUM(SVC_CLOSE);
1557 TRACE_DEFINE_ENUM(SVC_DENIED);
1558 TRACE_DEFINE_ENUM(SVC_PENDING);
1559 TRACE_DEFINE_ENUM(SVC_COMPLETE);
1560
1561 #define svc_show_status(status)                         \
1562         __print_symbolic(status,                        \
1563                 { SVC_GARBAGE,  "SVC_GARBAGE" },        \
1564                 { SVC_SYSERR,   "SVC_SYSERR" },         \
1565                 { SVC_VALID,    "SVC_VALID" },          \
1566                 { SVC_NEGATIVE, "SVC_NEGATIVE" },       \
1567                 { SVC_OK,       "SVC_OK" },             \
1568                 { SVC_DROP,     "SVC_DROP" },           \
1569                 { SVC_CLOSE,    "SVC_CLOSE" },          \
1570                 { SVC_DENIED,   "SVC_DENIED" },         \
1571                 { SVC_PENDING,  "SVC_PENDING" },        \
1572                 { SVC_COMPLETE, "SVC_COMPLETE" })
1573
1574 TRACE_EVENT(svc_authenticate,
1575         TP_PROTO(const struct svc_rqst *rqst, int auth_res, __be32 auth_stat),
1576
1577         TP_ARGS(rqst, auth_res, auth_stat),
1578
1579         TP_STRUCT__entry(
1580                 __field(u32, xid)
1581                 __field(unsigned long, svc_status)
1582                 __field(unsigned long, auth_stat)
1583         ),
1584
1585         TP_fast_assign(
1586                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1587                 __entry->svc_status = auth_res;
1588                 __entry->auth_stat = be32_to_cpu(auth_stat);
1589         ),
1590
1591         TP_printk("xid=0x%08x auth_res=%s auth_stat=%s",
1592                         __entry->xid, svc_show_status(__entry->svc_status),
1593                         rpc_show_auth_stat(__entry->auth_stat))
1594 );
1595
1596 TRACE_EVENT(svc_process,
1597         TP_PROTO(const struct svc_rqst *rqst, const char *name),
1598
1599         TP_ARGS(rqst, name),
1600
1601         TP_STRUCT__entry(
1602                 __field(u32, xid)
1603                 __field(u32, vers)
1604                 __field(u32, proc)
1605                 __string(service, name)
1606                 __string(procedure, rqst->rq_procinfo->pc_name)
1607                 __string(addr, rqst->rq_xprt ?
1608                          rqst->rq_xprt->xpt_remotebuf : "(null)")
1609         ),
1610
1611         TP_fast_assign(
1612                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1613                 __entry->vers = rqst->rq_vers;
1614                 __entry->proc = rqst->rq_proc;
1615                 __assign_str(service, name);
1616                 __assign_str(procedure, rqst->rq_procinfo->pc_name);
1617                 __assign_str(addr, rqst->rq_xprt ?
1618                              rqst->rq_xprt->xpt_remotebuf : "(null)");
1619         ),
1620
1621         TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%s",
1622                         __get_str(addr), __entry->xid,
1623                         __get_str(service), __entry->vers,
1624                         __get_str(procedure)
1625         )
1626 );
1627
1628 DECLARE_EVENT_CLASS(svc_rqst_event,
1629
1630         TP_PROTO(
1631                 const struct svc_rqst *rqst
1632         ),
1633
1634         TP_ARGS(rqst),
1635
1636         TP_STRUCT__entry(
1637                 __field(u32, xid)
1638                 __field(unsigned long, flags)
1639                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1640         ),
1641
1642         TP_fast_assign(
1643                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1644                 __entry->flags = rqst->rq_flags;
1645                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1646         ),
1647
1648         TP_printk("addr=%s xid=0x%08x flags=%s",
1649                         __get_str(addr), __entry->xid,
1650                         show_rqstp_flags(__entry->flags))
1651 );
1652 #define DEFINE_SVC_RQST_EVENT(name) \
1653         DEFINE_EVENT(svc_rqst_event, svc_##name, \
1654                         TP_PROTO( \
1655                                 const struct svc_rqst *rqst \
1656                         ), \
1657                         TP_ARGS(rqst))
1658
1659 DEFINE_SVC_RQST_EVENT(defer);
1660 DEFINE_SVC_RQST_EVENT(drop);
1661
1662 DECLARE_EVENT_CLASS(svc_rqst_status,
1663
1664         TP_PROTO(struct svc_rqst *rqst, int status),
1665
1666         TP_ARGS(rqst, status),
1667
1668         TP_STRUCT__entry(
1669                 __field(u32, xid)
1670                 __field(int, status)
1671                 __field(unsigned long, flags)
1672                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1673         ),
1674
1675         TP_fast_assign(
1676                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1677                 __entry->status = status;
1678                 __entry->flags = rqst->rq_flags;
1679                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1680         ),
1681
1682         TP_printk("addr=%s xid=0x%08x status=%d flags=%s",
1683                   __get_str(addr), __entry->xid,
1684                   __entry->status, show_rqstp_flags(__entry->flags))
1685 );
1686
1687 DEFINE_EVENT(svc_rqst_status, svc_send,
1688         TP_PROTO(struct svc_rqst *rqst, int status),
1689         TP_ARGS(rqst, status));
1690
1691 #define show_svc_xprt_flags(flags)                                      \
1692         __print_flags(flags, "|",                                       \
1693                 { (1UL << XPT_BUSY),            "XPT_BUSY"},            \
1694                 { (1UL << XPT_CONN),            "XPT_CONN"},            \
1695                 { (1UL << XPT_CLOSE),           "XPT_CLOSE"},           \
1696                 { (1UL << XPT_DATA),            "XPT_DATA"},            \
1697                 { (1UL << XPT_TEMP),            "XPT_TEMP"},            \
1698                 { (1UL << XPT_DEAD),            "XPT_DEAD"},            \
1699                 { (1UL << XPT_CHNGBUF),         "XPT_CHNGBUF"},         \
1700                 { (1UL << XPT_DEFERRED),        "XPT_DEFERRED"},        \
1701                 { (1UL << XPT_OLD),             "XPT_OLD"},             \
1702                 { (1UL << XPT_LISTENER),        "XPT_LISTENER"},        \
1703                 { (1UL << XPT_CACHE_AUTH),      "XPT_CACHE_AUTH"},      \
1704                 { (1UL << XPT_LOCAL),           "XPT_LOCAL"},           \
1705                 { (1UL << XPT_KILL_TEMP),       "XPT_KILL_TEMP"},       \
1706                 { (1UL << XPT_CONG_CTRL),       "XPT_CONG_CTRL"})
1707
1708 TRACE_EVENT(svc_xprt_create_err,
1709         TP_PROTO(
1710                 const char *program,
1711                 const char *protocol,
1712                 struct sockaddr *sap,
1713                 const struct svc_xprt *xprt
1714         ),
1715
1716         TP_ARGS(program, protocol, sap, xprt),
1717
1718         TP_STRUCT__entry(
1719                 __field(long, error)
1720                 __string(program, program)
1721                 __string(protocol, protocol)
1722                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
1723         ),
1724
1725         TP_fast_assign(
1726                 __entry->error = PTR_ERR(xprt);
1727                 __assign_str(program, program);
1728                 __assign_str(protocol, protocol);
1729                 memcpy(__entry->addr, sap, sizeof(__entry->addr));
1730         ),
1731
1732         TP_printk("addr=%pISpc program=%s protocol=%s error=%ld",
1733                 __entry->addr, __get_str(program), __get_str(protocol),
1734                 __entry->error)
1735 );
1736
1737 TRACE_EVENT(svc_xprt_do_enqueue,
1738         TP_PROTO(struct svc_xprt *xprt, struct svc_rqst *rqst),
1739
1740         TP_ARGS(xprt, rqst),
1741
1742         TP_STRUCT__entry(
1743                 __field(int, pid)
1744                 __field(unsigned long, flags)
1745                 __string(addr, xprt->xpt_remotebuf)
1746         ),
1747
1748         TP_fast_assign(
1749                 __entry->pid = rqst? rqst->rq_task->pid : 0;
1750                 __entry->flags = xprt->xpt_flags;
1751                 __assign_str(addr, xprt->xpt_remotebuf);
1752         ),
1753
1754         TP_printk("addr=%s pid=%d flags=%s", __get_str(addr),
1755                 __entry->pid, show_svc_xprt_flags(__entry->flags))
1756 );
1757
1758 DECLARE_EVENT_CLASS(svc_xprt_event,
1759         TP_PROTO(struct svc_xprt *xprt),
1760
1761         TP_ARGS(xprt),
1762
1763         TP_STRUCT__entry(
1764                 __field(unsigned long, flags)
1765                 __string(addr, xprt->xpt_remotebuf)
1766         ),
1767
1768         TP_fast_assign(
1769                 __entry->flags = xprt->xpt_flags;
1770                 __assign_str(addr, xprt->xpt_remotebuf);
1771         ),
1772
1773         TP_printk("addr=%s flags=%s", __get_str(addr),
1774                 show_svc_xprt_flags(__entry->flags))
1775 );
1776
1777 #define DEFINE_SVC_XPRT_EVENT(name) \
1778         DEFINE_EVENT(svc_xprt_event, svc_xprt_##name, \
1779                         TP_PROTO( \
1780                                 struct svc_xprt *xprt \
1781                         ), \
1782                         TP_ARGS(xprt))
1783
1784 DEFINE_SVC_XPRT_EVENT(received);
1785 DEFINE_SVC_XPRT_EVENT(no_write_space);
1786 DEFINE_SVC_XPRT_EVENT(close);
1787 DEFINE_SVC_XPRT_EVENT(detach);
1788 DEFINE_SVC_XPRT_EVENT(free);
1789
1790 TRACE_EVENT(svc_xprt_accept,
1791         TP_PROTO(
1792                 const struct svc_xprt *xprt,
1793                 const char *service
1794         ),
1795
1796         TP_ARGS(xprt, service),
1797
1798         TP_STRUCT__entry(
1799                 __string(addr, xprt->xpt_remotebuf)
1800                 __string(protocol, xprt->xpt_class->xcl_name)
1801                 __string(service, service)
1802         ),
1803
1804         TP_fast_assign(
1805                 __assign_str(addr, xprt->xpt_remotebuf);
1806                 __assign_str(protocol, xprt->xpt_class->xcl_name)
1807                 __assign_str(service, service);
1808         ),
1809
1810         TP_printk("addr=%s protocol=%s service=%s",
1811                 __get_str(addr), __get_str(protocol), __get_str(service)
1812         )
1813 );
1814
1815 TRACE_EVENT(svc_xprt_dequeue,
1816         TP_PROTO(struct svc_rqst *rqst),
1817
1818         TP_ARGS(rqst),
1819
1820         TP_STRUCT__entry(
1821                 __field(unsigned long, flags)
1822                 __field(unsigned long, wakeup)
1823                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1824         ),
1825
1826         TP_fast_assign(
1827                 __entry->flags = rqst->rq_xprt->xpt_flags;
1828                 __entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
1829                                                         rqst->rq_qtime));
1830                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1831         ),
1832
1833         TP_printk("addr=%s flags=%s wakeup-us=%lu", __get_str(addr),
1834                 show_svc_xprt_flags(__entry->flags), __entry->wakeup)
1835 );
1836
1837 TRACE_EVENT(svc_wake_up,
1838         TP_PROTO(int pid),
1839
1840         TP_ARGS(pid),
1841
1842         TP_STRUCT__entry(
1843                 __field(int, pid)
1844         ),
1845
1846         TP_fast_assign(
1847                 __entry->pid = pid;
1848         ),
1849
1850         TP_printk("pid=%d", __entry->pid)
1851 );
1852
1853 TRACE_EVENT(svc_handle_xprt,
1854         TP_PROTO(struct svc_xprt *xprt, int len),
1855
1856         TP_ARGS(xprt, len),
1857
1858         TP_STRUCT__entry(
1859                 __field(int, len)
1860                 __field(unsigned long, flags)
1861                 __string(addr, xprt->xpt_remotebuf)
1862         ),
1863
1864         TP_fast_assign(
1865                 __entry->len = len;
1866                 __entry->flags = xprt->xpt_flags;
1867                 __assign_str(addr, xprt->xpt_remotebuf);
1868         ),
1869
1870         TP_printk("addr=%s len=%d flags=%s", __get_str(addr),
1871                 __entry->len, show_svc_xprt_flags(__entry->flags))
1872 );
1873
1874 TRACE_EVENT(svc_stats_latency,
1875         TP_PROTO(const struct svc_rqst *rqst),
1876
1877         TP_ARGS(rqst),
1878
1879         TP_STRUCT__entry(
1880                 __field(u32, xid)
1881                 __field(unsigned long, execute)
1882                 __string(procedure, rqst->rq_procinfo->pc_name)
1883                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1884         ),
1885
1886         TP_fast_assign(
1887                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1888                 __entry->execute = ktime_to_us(ktime_sub(ktime_get(),
1889                                                          rqst->rq_stime));
1890                 __assign_str(procedure, rqst->rq_procinfo->pc_name);
1891                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1892         ),
1893
1894         TP_printk("addr=%s xid=0x%08x proc=%s execute-us=%lu",
1895                 __get_str(addr), __entry->xid, __get_str(procedure),
1896                 __entry->execute)
1897 );
1898
1899 DECLARE_EVENT_CLASS(svc_deferred_event,
1900         TP_PROTO(
1901                 const struct svc_deferred_req *dr
1902         ),
1903
1904         TP_ARGS(dr),
1905
1906         TP_STRUCT__entry(
1907                 __field(const void *, dr)
1908                 __field(u32, xid)
1909                 __string(addr, dr->xprt->xpt_remotebuf)
1910         ),
1911
1912         TP_fast_assign(
1913                 __entry->dr = dr;
1914                 __entry->xid = be32_to_cpu(*(__be32 *)(dr->args +
1915                                                        (dr->xprt_hlen>>2)));
1916                 __assign_str(addr, dr->xprt->xpt_remotebuf);
1917         ),
1918
1919         TP_printk("addr=%s dr=%p xid=0x%08x", __get_str(addr), __entry->dr,
1920                 __entry->xid)
1921 );
1922
1923 #define DEFINE_SVC_DEFERRED_EVENT(name) \
1924         DEFINE_EVENT(svc_deferred_event, svc_defer_##name, \
1925                         TP_PROTO( \
1926                                 const struct svc_deferred_req *dr \
1927                         ), \
1928                         TP_ARGS(dr))
1929
1930 DEFINE_SVC_DEFERRED_EVENT(drop);
1931 DEFINE_SVC_DEFERRED_EVENT(queue);
1932 DEFINE_SVC_DEFERRED_EVENT(recv);
1933
1934 TRACE_EVENT(svcsock_new_socket,
1935         TP_PROTO(
1936                 const struct socket *socket
1937         ),
1938
1939         TP_ARGS(socket),
1940
1941         TP_STRUCT__entry(
1942                 __field(unsigned long, type)
1943                 __field(unsigned long, family)
1944                 __field(bool, listener)
1945         ),
1946
1947         TP_fast_assign(
1948                 __entry->type = socket->type;
1949                 __entry->family = socket->sk->sk_family;
1950                 __entry->listener = (socket->sk->sk_state == TCP_LISTEN);
1951         ),
1952
1953         TP_printk("type=%s family=%s%s",
1954                 show_socket_type(__entry->type),
1955                 rpc_show_address_family(__entry->family),
1956                 __entry->listener ? " (listener)" : ""
1957         )
1958 );
1959
1960 TRACE_EVENT(svcsock_marker,
1961         TP_PROTO(
1962                 const struct svc_xprt *xprt,
1963                 __be32 marker
1964         ),
1965
1966         TP_ARGS(xprt, marker),
1967
1968         TP_STRUCT__entry(
1969                 __field(unsigned int, length)
1970                 __field(bool, last)
1971                 __string(addr, xprt->xpt_remotebuf)
1972         ),
1973
1974         TP_fast_assign(
1975                 __entry->length = be32_to_cpu(marker) & RPC_FRAGMENT_SIZE_MASK;
1976                 __entry->last = be32_to_cpu(marker) & RPC_LAST_STREAM_FRAGMENT;
1977                 __assign_str(addr, xprt->xpt_remotebuf);
1978         ),
1979
1980         TP_printk("addr=%s length=%u%s", __get_str(addr),
1981                 __entry->length, __entry->last ? " (last)" : "")
1982 );
1983
1984 DECLARE_EVENT_CLASS(svcsock_class,
1985         TP_PROTO(
1986                 const struct svc_xprt *xprt,
1987                 ssize_t result
1988         ),
1989
1990         TP_ARGS(xprt, result),
1991
1992         TP_STRUCT__entry(
1993                 __field(ssize_t, result)
1994                 __field(unsigned long, flags)
1995                 __string(addr, xprt->xpt_remotebuf)
1996         ),
1997
1998         TP_fast_assign(
1999                 __entry->result = result;
2000                 __entry->flags = xprt->xpt_flags;
2001                 __assign_str(addr, xprt->xpt_remotebuf);
2002         ),
2003
2004         TP_printk("addr=%s result=%zd flags=%s", __get_str(addr),
2005                 __entry->result, show_svc_xprt_flags(__entry->flags)
2006         )
2007 );
2008
2009 #define DEFINE_SVCSOCK_EVENT(name) \
2010         DEFINE_EVENT(svcsock_class, svcsock_##name, \
2011                         TP_PROTO( \
2012                                 const struct svc_xprt *xprt, \
2013                                 ssize_t result \
2014                         ), \
2015                         TP_ARGS(xprt, result))
2016
2017 DEFINE_SVCSOCK_EVENT(udp_send);
2018 DEFINE_SVCSOCK_EVENT(udp_recv);
2019 DEFINE_SVCSOCK_EVENT(udp_recv_err);
2020 DEFINE_SVCSOCK_EVENT(tcp_send);
2021 DEFINE_SVCSOCK_EVENT(tcp_recv);
2022 DEFINE_SVCSOCK_EVENT(tcp_recv_eagain);
2023 DEFINE_SVCSOCK_EVENT(tcp_recv_err);
2024 DEFINE_SVCSOCK_EVENT(data_ready);
2025 DEFINE_SVCSOCK_EVENT(write_space);
2026
2027 TRACE_EVENT(svcsock_tcp_recv_short,
2028         TP_PROTO(
2029                 const struct svc_xprt *xprt,
2030                 u32 expected,
2031                 u32 received
2032         ),
2033
2034         TP_ARGS(xprt, expected, received),
2035
2036         TP_STRUCT__entry(
2037                 __field(u32, expected)
2038                 __field(u32, received)
2039                 __field(unsigned long, flags)
2040                 __string(addr, xprt->xpt_remotebuf)
2041         ),
2042
2043         TP_fast_assign(
2044                 __entry->expected = expected;
2045                 __entry->received = received;
2046                 __entry->flags = xprt->xpt_flags;
2047                 __assign_str(addr, xprt->xpt_remotebuf);
2048         ),
2049
2050         TP_printk("addr=%s flags=%s expected=%u received=%u",
2051                 __get_str(addr), show_svc_xprt_flags(__entry->flags),
2052                 __entry->expected, __entry->received
2053         )
2054 );
2055
2056 TRACE_EVENT(svcsock_tcp_state,
2057         TP_PROTO(
2058                 const struct svc_xprt *xprt,
2059                 const struct socket *socket
2060         ),
2061
2062         TP_ARGS(xprt, socket),
2063
2064         TP_STRUCT__entry(
2065                 __field(unsigned long, socket_state)
2066                 __field(unsigned long, sock_state)
2067                 __field(unsigned long, flags)
2068                 __string(addr, xprt->xpt_remotebuf)
2069         ),
2070
2071         TP_fast_assign(
2072                 __entry->socket_state = socket->state;
2073                 __entry->sock_state = socket->sk->sk_state;
2074                 __entry->flags = xprt->xpt_flags;
2075                 __assign_str(addr, xprt->xpt_remotebuf);
2076         ),
2077
2078         TP_printk("addr=%s state=%s sk_state=%s flags=%s", __get_str(addr),
2079                 rpc_show_socket_state(__entry->socket_state),
2080                 rpc_show_sock_state(__entry->sock_state),
2081                 show_svc_xprt_flags(__entry->flags)
2082         )
2083 );
2084
2085 DECLARE_EVENT_CLASS(svcsock_accept_class,
2086         TP_PROTO(
2087                 const struct svc_xprt *xprt,
2088                 const char *service,
2089                 long status
2090         ),
2091
2092         TP_ARGS(xprt, service, status),
2093
2094         TP_STRUCT__entry(
2095                 __field(long, status)
2096                 __string(service, service)
2097                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
2098         ),
2099
2100         TP_fast_assign(
2101                 __entry->status = status;
2102                 __assign_str(service, service);
2103                 memcpy(__entry->addr, &xprt->xpt_local, sizeof(__entry->addr));
2104         ),
2105
2106         TP_printk("listener=%pISpc service=%s status=%ld",
2107                 __entry->addr, __get_str(service), __entry->status
2108         )
2109 );
2110
2111 #define DEFINE_ACCEPT_EVENT(name) \
2112         DEFINE_EVENT(svcsock_accept_class, svcsock_##name##_err, \
2113                         TP_PROTO( \
2114                                 const struct svc_xprt *xprt, \
2115                                 const char *service, \
2116                                 long status \
2117                         ), \
2118                         TP_ARGS(xprt, service, status))
2119
2120 DEFINE_ACCEPT_EVENT(accept);
2121 DEFINE_ACCEPT_EVENT(getpeername);
2122
2123 DECLARE_EVENT_CLASS(cache_event,
2124         TP_PROTO(
2125                 const struct cache_detail *cd,
2126                 const struct cache_head *h
2127         ),
2128
2129         TP_ARGS(cd, h),
2130
2131         TP_STRUCT__entry(
2132                 __field(const struct cache_head *, h)
2133                 __string(name, cd->name)
2134         ),
2135
2136         TP_fast_assign(
2137                 __entry->h = h;
2138                 __assign_str(name, cd->name);
2139         ),
2140
2141         TP_printk("cache=%s entry=%p", __get_str(name), __entry->h)
2142 );
2143 #define DEFINE_CACHE_EVENT(name) \
2144         DEFINE_EVENT(cache_event, name, \
2145                         TP_PROTO( \
2146                                 const struct cache_detail *cd, \
2147                                 const struct cache_head *h \
2148                         ), \
2149                         TP_ARGS(cd, h))
2150 DEFINE_CACHE_EVENT(cache_entry_expired);
2151 DEFINE_CACHE_EVENT(cache_entry_upcall);
2152 DEFINE_CACHE_EVENT(cache_entry_update);
2153 DEFINE_CACHE_EVENT(cache_entry_make_negative);
2154 DEFINE_CACHE_EVENT(cache_entry_no_listener);
2155
2156 DECLARE_EVENT_CLASS(register_class,
2157         TP_PROTO(
2158                 const char *program,
2159                 const u32 version,
2160                 const int family,
2161                 const unsigned short protocol,
2162                 const unsigned short port,
2163                 int error
2164         ),
2165
2166         TP_ARGS(program, version, family, protocol, port, error),
2167
2168         TP_STRUCT__entry(
2169                 __field(u32, version)
2170                 __field(unsigned long, family)
2171                 __field(unsigned short, protocol)
2172                 __field(unsigned short, port)
2173                 __field(int, error)
2174                 __string(program, program)
2175         ),
2176
2177         TP_fast_assign(
2178                 __entry->version = version;
2179                 __entry->family = family;
2180                 __entry->protocol = protocol;
2181                 __entry->port = port;
2182                 __entry->error = error;
2183                 __assign_str(program, program);
2184         ),
2185
2186         TP_printk("program=%sv%u proto=%s port=%u family=%s error=%d",
2187                 __get_str(program), __entry->version,
2188                 __entry->protocol == IPPROTO_UDP ? "udp" : "tcp",
2189                 __entry->port, rpc_show_address_family(__entry->family),
2190                 __entry->error
2191         )
2192 );
2193
2194 #define DEFINE_REGISTER_EVENT(name) \
2195         DEFINE_EVENT(register_class, svc_##name, \
2196                         TP_PROTO( \
2197                                 const char *program, \
2198                                 const u32 version, \
2199                                 const int family, \
2200                                 const unsigned short protocol, \
2201                                 const unsigned short port, \
2202                                 int error \
2203                         ), \
2204                         TP_ARGS(program, version, family, protocol, \
2205                                 port, error))
2206
2207 DEFINE_REGISTER_EVENT(register);
2208 DEFINE_REGISTER_EVENT(noregister);
2209
2210 TRACE_EVENT(svc_unregister,
2211         TP_PROTO(
2212                 const char *program,
2213                 const u32 version,
2214                 int error
2215         ),
2216
2217         TP_ARGS(program, version, error),
2218
2219         TP_STRUCT__entry(
2220                 __field(u32, version)
2221                 __field(int, error)
2222                 __string(program, program)
2223         ),
2224
2225         TP_fast_assign(
2226                 __entry->version = version;
2227                 __entry->error = error;
2228                 __assign_str(program, program);
2229         ),
2230
2231         TP_printk("program=%sv%u error=%d",
2232                 __get_str(program), __entry->version, __entry->error
2233         )
2234 );
2235
2236 #endif /* _TRACE_SUNRPC_H */
2237
2238 #include <trace/define_trace.h>