GNU Linux-libre 5.10.217-gnu1
[releases.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(destroy);
1010
1011 DECLARE_EVENT_CLASS(rpc_xprt_event,
1012         TP_PROTO(
1013                 const struct rpc_xprt *xprt,
1014                 __be32 xid,
1015                 int status
1016         ),
1017
1018         TP_ARGS(xprt, xid, status),
1019
1020         TP_STRUCT__entry(
1021                 __field(u32, xid)
1022                 __field(int, status)
1023                 __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1024                 __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1025         ),
1026
1027         TP_fast_assign(
1028                 __entry->xid = be32_to_cpu(xid);
1029                 __entry->status = status;
1030                 __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
1031                 __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
1032         ),
1033
1034         TP_printk("peer=[%s]:%s xid=0x%08x status=%d", __get_str(addr),
1035                         __get_str(port), __entry->xid,
1036                         __entry->status)
1037 );
1038 #define DEFINE_RPC_XPRT_EVENT(name) \
1039         DEFINE_EVENT(rpc_xprt_event, xprt_##name, \
1040                         TP_PROTO( \
1041                                 const struct rpc_xprt *xprt, \
1042                                 __be32 xid, \
1043                                 int status \
1044                         ), \
1045                         TP_ARGS(xprt, xid, status))
1046
1047 DEFINE_RPC_XPRT_EVENT(timer);
1048 DEFINE_RPC_XPRT_EVENT(lookup_rqst);
1049
1050 TRACE_EVENT(xprt_transmit,
1051         TP_PROTO(
1052                 const struct rpc_rqst *rqst,
1053                 int status
1054         ),
1055
1056         TP_ARGS(rqst, status),
1057
1058         TP_STRUCT__entry(
1059                 __field(unsigned int, task_id)
1060                 __field(unsigned int, client_id)
1061                 __field(u32, xid)
1062                 __field(u32, seqno)
1063                 __field(int, status)
1064         ),
1065
1066         TP_fast_assign(
1067                 __entry->task_id = rqst->rq_task->tk_pid;
1068                 __entry->client_id = rqst->rq_task->tk_client ?
1069                         rqst->rq_task->tk_client->cl_clid : -1;
1070                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1071                 __entry->seqno = rqst->rq_seqno;
1072                 __entry->status = status;
1073         ),
1074
1075         TP_printk(
1076                 "task:%u@%u xid=0x%08x seqno=%u status=%d",
1077                 __entry->task_id, __entry->client_id, __entry->xid,
1078                 __entry->seqno, __entry->status)
1079 );
1080
1081 TRACE_EVENT(xprt_ping,
1082         TP_PROTO(const struct rpc_xprt *xprt, int status),
1083
1084         TP_ARGS(xprt, status),
1085
1086         TP_STRUCT__entry(
1087                 __field(int, status)
1088                 __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
1089                 __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
1090         ),
1091
1092         TP_fast_assign(
1093                 __entry->status = status;
1094                 __assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
1095                 __assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
1096         ),
1097
1098         TP_printk("peer=[%s]:%s status=%d",
1099                         __get_str(addr), __get_str(port), __entry->status)
1100 );
1101
1102 DECLARE_EVENT_CLASS(xprt_writelock_event,
1103         TP_PROTO(
1104                 const struct rpc_xprt *xprt, const struct rpc_task *task
1105         ),
1106
1107         TP_ARGS(xprt, task),
1108
1109         TP_STRUCT__entry(
1110                 __field(unsigned int, task_id)
1111                 __field(unsigned int, client_id)
1112                 __field(unsigned int, snd_task_id)
1113         ),
1114
1115         TP_fast_assign(
1116                 if (task) {
1117                         __entry->task_id = task->tk_pid;
1118                         __entry->client_id = task->tk_client ?
1119                                              task->tk_client->cl_clid : -1;
1120                 } else {
1121                         __entry->task_id = -1;
1122                         __entry->client_id = -1;
1123                 }
1124                 __entry->snd_task_id = xprt->snd_task ?
1125                                         xprt->snd_task->tk_pid : -1;
1126         ),
1127
1128         TP_printk("task:%u@%u snd_task:%u",
1129                         __entry->task_id, __entry->client_id,
1130                         __entry->snd_task_id)
1131 );
1132
1133 #define DEFINE_WRITELOCK_EVENT(name) \
1134         DEFINE_EVENT(xprt_writelock_event, xprt_##name, \
1135                         TP_PROTO( \
1136                                 const struct rpc_xprt *xprt, \
1137                                 const struct rpc_task *task \
1138                         ), \
1139                         TP_ARGS(xprt, task))
1140
1141 DEFINE_WRITELOCK_EVENT(reserve_xprt);
1142 DEFINE_WRITELOCK_EVENT(release_xprt);
1143
1144 DECLARE_EVENT_CLASS(xprt_cong_event,
1145         TP_PROTO(
1146                 const struct rpc_xprt *xprt, const struct rpc_task *task
1147         ),
1148
1149         TP_ARGS(xprt, task),
1150
1151         TP_STRUCT__entry(
1152                 __field(unsigned int, task_id)
1153                 __field(unsigned int, client_id)
1154                 __field(unsigned int, snd_task_id)
1155                 __field(unsigned long, cong)
1156                 __field(unsigned long, cwnd)
1157                 __field(bool, wait)
1158         ),
1159
1160         TP_fast_assign(
1161                 if (task) {
1162                         __entry->task_id = task->tk_pid;
1163                         __entry->client_id = task->tk_client ?
1164                                              task->tk_client->cl_clid : -1;
1165                 } else {
1166                         __entry->task_id = -1;
1167                         __entry->client_id = -1;
1168                 }
1169                 __entry->snd_task_id = xprt->snd_task ?
1170                                         xprt->snd_task->tk_pid : -1;
1171                 __entry->cong = xprt->cong;
1172                 __entry->cwnd = xprt->cwnd;
1173                 __entry->wait = test_bit(XPRT_CWND_WAIT, &xprt->state);
1174         ),
1175
1176         TP_printk("task:%u@%u snd_task:%u cong=%lu cwnd=%lu%s",
1177                         __entry->task_id, __entry->client_id,
1178                         __entry->snd_task_id, __entry->cong, __entry->cwnd,
1179                         __entry->wait ? " (wait)" : "")
1180 );
1181
1182 #define DEFINE_CONG_EVENT(name) \
1183         DEFINE_EVENT(xprt_cong_event, xprt_##name, \
1184                         TP_PROTO( \
1185                                 const struct rpc_xprt *xprt, \
1186                                 const struct rpc_task *task \
1187                         ), \
1188                         TP_ARGS(xprt, task))
1189
1190 DEFINE_CONG_EVENT(reserve_cong);
1191 DEFINE_CONG_EVENT(release_cong);
1192 DEFINE_CONG_EVENT(get_cong);
1193 DEFINE_CONG_EVENT(put_cong);
1194
1195 TRACE_EVENT(xprt_reserve,
1196         TP_PROTO(
1197                 const struct rpc_rqst *rqst
1198         ),
1199
1200         TP_ARGS(rqst),
1201
1202         TP_STRUCT__entry(
1203                 __field(unsigned int, task_id)
1204                 __field(unsigned int, client_id)
1205                 __field(u32, xid)
1206         ),
1207
1208         TP_fast_assign(
1209                 __entry->task_id = rqst->rq_task->tk_pid;
1210                 __entry->client_id = rqst->rq_task->tk_client->cl_clid;
1211                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1212         ),
1213
1214         TP_printk("task:%u@%u xid=0x%08x",
1215                 __entry->task_id, __entry->client_id, __entry->xid
1216         )
1217 );
1218
1219 TRACE_EVENT(xs_stream_read_data,
1220         TP_PROTO(struct rpc_xprt *xprt, ssize_t err, size_t total),
1221
1222         TP_ARGS(xprt, err, total),
1223
1224         TP_STRUCT__entry(
1225                 __field(ssize_t, err)
1226                 __field(size_t, total)
1227                 __string(addr, xprt ? xprt->address_strings[RPC_DISPLAY_ADDR] :
1228                                 "(null)")
1229                 __string(port, xprt ? xprt->address_strings[RPC_DISPLAY_PORT] :
1230                                 "(null)")
1231         ),
1232
1233         TP_fast_assign(
1234                 __entry->err = err;
1235                 __entry->total = total;
1236                 __assign_str(addr, xprt ?
1237                         xprt->address_strings[RPC_DISPLAY_ADDR] : "(null)");
1238                 __assign_str(port, xprt ?
1239                         xprt->address_strings[RPC_DISPLAY_PORT] : "(null)");
1240         ),
1241
1242         TP_printk("peer=[%s]:%s err=%zd total=%zu", __get_str(addr),
1243                         __get_str(port), __entry->err, __entry->total)
1244 );
1245
1246 TRACE_EVENT(xs_stream_read_request,
1247         TP_PROTO(struct sock_xprt *xs),
1248
1249         TP_ARGS(xs),
1250
1251         TP_STRUCT__entry(
1252                 __string(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR])
1253                 __string(port, xs->xprt.address_strings[RPC_DISPLAY_PORT])
1254                 __field(u32, xid)
1255                 __field(unsigned long, copied)
1256                 __field(unsigned int, reclen)
1257                 __field(unsigned int, offset)
1258         ),
1259
1260         TP_fast_assign(
1261                 __assign_str(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR]);
1262                 __assign_str(port, xs->xprt.address_strings[RPC_DISPLAY_PORT]);
1263                 __entry->xid = be32_to_cpu(xs->recv.xid);
1264                 __entry->copied = xs->recv.copied;
1265                 __entry->reclen = xs->recv.len;
1266                 __entry->offset = xs->recv.offset;
1267         ),
1268
1269         TP_printk("peer=[%s]:%s xid=0x%08x copied=%lu reclen=%u offset=%u",
1270                         __get_str(addr), __get_str(port), __entry->xid,
1271                         __entry->copied, __entry->reclen, __entry->offset)
1272 );
1273
1274 TRACE_EVENT(rpcb_getport,
1275         TP_PROTO(
1276                 const struct rpc_clnt *clnt,
1277                 const struct rpc_task *task,
1278                 unsigned int bind_version
1279         ),
1280
1281         TP_ARGS(clnt, task, bind_version),
1282
1283         TP_STRUCT__entry(
1284                 __field(unsigned int, task_id)
1285                 __field(unsigned int, client_id)
1286                 __field(unsigned int, program)
1287                 __field(unsigned int, version)
1288                 __field(int, protocol)
1289                 __field(unsigned int, bind_version)
1290                 __string(servername, task->tk_xprt->servername)
1291         ),
1292
1293         TP_fast_assign(
1294                 __entry->task_id = task->tk_pid;
1295                 __entry->client_id = clnt->cl_clid;
1296                 __entry->program = clnt->cl_prog;
1297                 __entry->version = clnt->cl_vers;
1298                 __entry->protocol = task->tk_xprt->prot;
1299                 __entry->bind_version = bind_version;
1300                 __assign_str(servername, task->tk_xprt->servername);
1301         ),
1302
1303         TP_printk("task:%u@%u server=%s program=%u version=%u protocol=%d bind_version=%u",
1304                 __entry->task_id, __entry->client_id, __get_str(servername),
1305                 __entry->program, __entry->version, __entry->protocol,
1306                 __entry->bind_version
1307         )
1308 );
1309
1310 TRACE_EVENT(rpcb_setport,
1311         TP_PROTO(
1312                 const struct rpc_task *task,
1313                 int status,
1314                 unsigned short port
1315         ),
1316
1317         TP_ARGS(task, status, port),
1318
1319         TP_STRUCT__entry(
1320                 __field(unsigned int, task_id)
1321                 __field(unsigned int, client_id)
1322                 __field(int, status)
1323                 __field(unsigned short, port)
1324         ),
1325
1326         TP_fast_assign(
1327                 __entry->task_id = task->tk_pid;
1328                 __entry->client_id = task->tk_client->cl_clid;
1329                 __entry->status = status;
1330                 __entry->port = port;
1331         ),
1332
1333         TP_printk("task:%u@%u status=%d port=%u",
1334                 __entry->task_id, __entry->client_id,
1335                 __entry->status, __entry->port
1336         )
1337 );
1338
1339 TRACE_EVENT(pmap_register,
1340         TP_PROTO(
1341                 u32 program,
1342                 u32 version,
1343                 int protocol,
1344                 unsigned short port
1345         ),
1346
1347         TP_ARGS(program, version, protocol, port),
1348
1349         TP_STRUCT__entry(
1350                 __field(unsigned int, program)
1351                 __field(unsigned int, version)
1352                 __field(int, protocol)
1353                 __field(unsigned int, port)
1354         ),
1355
1356         TP_fast_assign(
1357                 __entry->program = program;
1358                 __entry->version = version;
1359                 __entry->protocol = protocol;
1360                 __entry->port = port;
1361         ),
1362
1363         TP_printk("program=%u version=%u protocol=%d port=%u",
1364                 __entry->program, __entry->version,
1365                 __entry->protocol, __entry->port
1366         )
1367 );
1368
1369 TRACE_EVENT(rpcb_register,
1370         TP_PROTO(
1371                 u32 program,
1372                 u32 version,
1373                 const char *addr,
1374                 const char *netid
1375         ),
1376
1377         TP_ARGS(program, version, addr, netid),
1378
1379         TP_STRUCT__entry(
1380                 __field(unsigned int, program)
1381                 __field(unsigned int, version)
1382                 __string(addr, addr)
1383                 __string(netid, netid)
1384         ),
1385
1386         TP_fast_assign(
1387                 __entry->program = program;
1388                 __entry->version = version;
1389                 __assign_str(addr, addr);
1390                 __assign_str(netid, netid);
1391         ),
1392
1393         TP_printk("program=%u version=%u addr=%s netid=%s",
1394                 __entry->program, __entry->version,
1395                 __get_str(addr), __get_str(netid)
1396         )
1397 );
1398
1399 TRACE_EVENT(rpcb_unregister,
1400         TP_PROTO(
1401                 u32 program,
1402                 u32 version,
1403                 const char *netid
1404         ),
1405
1406         TP_ARGS(program, version, netid),
1407
1408         TP_STRUCT__entry(
1409                 __field(unsigned int, program)
1410                 __field(unsigned int, version)
1411                 __string(netid, netid)
1412         ),
1413
1414         TP_fast_assign(
1415                 __entry->program = program;
1416                 __entry->version = version;
1417                 __assign_str(netid, netid);
1418         ),
1419
1420         TP_printk("program=%u version=%u netid=%s",
1421                 __entry->program, __entry->version, __get_str(netid)
1422         )
1423 );
1424
1425 DECLARE_EVENT_CLASS(svc_xdr_buf_class,
1426         TP_PROTO(
1427                 const struct svc_rqst *rqst,
1428                 const struct xdr_buf *xdr
1429         ),
1430
1431         TP_ARGS(rqst, xdr),
1432
1433         TP_STRUCT__entry(
1434                 __field(u32, xid)
1435                 __field(const void *, head_base)
1436                 __field(size_t, head_len)
1437                 __field(const void *, tail_base)
1438                 __field(size_t, tail_len)
1439                 __field(unsigned int, page_len)
1440                 __field(unsigned int, msg_len)
1441         ),
1442
1443         TP_fast_assign(
1444                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1445                 __entry->head_base = xdr->head[0].iov_base;
1446                 __entry->head_len = xdr->head[0].iov_len;
1447                 __entry->tail_base = xdr->tail[0].iov_base;
1448                 __entry->tail_len = xdr->tail[0].iov_len;
1449                 __entry->page_len = xdr->page_len;
1450                 __entry->msg_len = xdr->len;
1451         ),
1452
1453         TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
1454                 __entry->xid,
1455                 __entry->head_base, __entry->head_len, __entry->page_len,
1456                 __entry->tail_base, __entry->tail_len, __entry->msg_len
1457         )
1458 );
1459
1460 #define DEFINE_SVCXDRBUF_EVENT(name)                                    \
1461                 DEFINE_EVENT(svc_xdr_buf_class,                         \
1462                                 svc_xdr_##name,                         \
1463                                 TP_PROTO(                               \
1464                                         const struct svc_rqst *rqst,    \
1465                                         const struct xdr_buf *xdr       \
1466                                 ),                                      \
1467                                 TP_ARGS(rqst, xdr))
1468
1469 DEFINE_SVCXDRBUF_EVENT(recvfrom);
1470 DEFINE_SVCXDRBUF_EVENT(sendto);
1471
1472 /*
1473  * from include/linux/sunrpc/svc.h
1474  */
1475 #define SVC_RQST_FLAG_LIST                                              \
1476         svc_rqst_flag(SECURE)                                           \
1477         svc_rqst_flag(LOCAL)                                            \
1478         svc_rqst_flag(USEDEFERRAL)                                      \
1479         svc_rqst_flag(DROPME)                                           \
1480         svc_rqst_flag(SPLICE_OK)                                        \
1481         svc_rqst_flag(VICTIM)                                           \
1482         svc_rqst_flag(BUSY)                                             \
1483         svc_rqst_flag(DATA)                                             \
1484         svc_rqst_flag_end(AUTHERR)
1485
1486 #undef svc_rqst_flag
1487 #undef svc_rqst_flag_end
1488 #define svc_rqst_flag(x)        TRACE_DEFINE_ENUM(RQ_##x);
1489 #define svc_rqst_flag_end(x)    TRACE_DEFINE_ENUM(RQ_##x);
1490
1491 SVC_RQST_FLAG_LIST
1492
1493 #undef svc_rqst_flag
1494 #undef svc_rqst_flag_end
1495 #define svc_rqst_flag(x)        { BIT(RQ_##x), #x },
1496 #define svc_rqst_flag_end(x)    { BIT(RQ_##x), #x }
1497
1498 #define show_rqstp_flags(flags)                                         \
1499                 __print_flags(flags, "|", SVC_RQST_FLAG_LIST)
1500
1501 TRACE_EVENT(svc_recv,
1502         TP_PROTO(struct svc_rqst *rqst, int len),
1503
1504         TP_ARGS(rqst, len),
1505
1506         TP_STRUCT__entry(
1507                 __field(u32, xid)
1508                 __field(int, len)
1509                 __field(unsigned long, flags)
1510                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1511         ),
1512
1513         TP_fast_assign(
1514                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1515                 __entry->len = len;
1516                 __entry->flags = rqst->rq_flags;
1517                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1518         ),
1519
1520         TP_printk("addr=%s xid=0x%08x len=%d flags=%s",
1521                         __get_str(addr), __entry->xid, __entry->len,
1522                         show_rqstp_flags(__entry->flags))
1523 );
1524
1525 TRACE_DEFINE_ENUM(SVC_GARBAGE);
1526 TRACE_DEFINE_ENUM(SVC_SYSERR);
1527 TRACE_DEFINE_ENUM(SVC_VALID);
1528 TRACE_DEFINE_ENUM(SVC_NEGATIVE);
1529 TRACE_DEFINE_ENUM(SVC_OK);
1530 TRACE_DEFINE_ENUM(SVC_DROP);
1531 TRACE_DEFINE_ENUM(SVC_CLOSE);
1532 TRACE_DEFINE_ENUM(SVC_DENIED);
1533 TRACE_DEFINE_ENUM(SVC_PENDING);
1534 TRACE_DEFINE_ENUM(SVC_COMPLETE);
1535
1536 #define svc_show_status(status)                         \
1537         __print_symbolic(status,                        \
1538                 { SVC_GARBAGE,  "SVC_GARBAGE" },        \
1539                 { SVC_SYSERR,   "SVC_SYSERR" },         \
1540                 { SVC_VALID,    "SVC_VALID" },          \
1541                 { SVC_NEGATIVE, "SVC_NEGATIVE" },       \
1542                 { SVC_OK,       "SVC_OK" },             \
1543                 { SVC_DROP,     "SVC_DROP" },           \
1544                 { SVC_CLOSE,    "SVC_CLOSE" },          \
1545                 { SVC_DENIED,   "SVC_DENIED" },         \
1546                 { SVC_PENDING,  "SVC_PENDING" },        \
1547                 { SVC_COMPLETE, "SVC_COMPLETE" })
1548
1549 TRACE_EVENT(svc_authenticate,
1550         TP_PROTO(const struct svc_rqst *rqst, int auth_res, __be32 auth_stat),
1551
1552         TP_ARGS(rqst, auth_res, auth_stat),
1553
1554         TP_STRUCT__entry(
1555                 __field(u32, xid)
1556                 __field(unsigned long, svc_status)
1557                 __field(unsigned long, auth_stat)
1558         ),
1559
1560         TP_fast_assign(
1561                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1562                 __entry->svc_status = auth_res;
1563                 __entry->auth_stat = be32_to_cpu(auth_stat);
1564         ),
1565
1566         TP_printk("xid=0x%08x auth_res=%s auth_stat=%s",
1567                         __entry->xid, svc_show_status(__entry->svc_status),
1568                         rpc_show_auth_stat(__entry->auth_stat))
1569 );
1570
1571 TRACE_EVENT(svc_process,
1572         TP_PROTO(const struct svc_rqst *rqst, const char *name),
1573
1574         TP_ARGS(rqst, name),
1575
1576         TP_STRUCT__entry(
1577                 __field(u32, xid)
1578                 __field(u32, vers)
1579                 __field(u32, proc)
1580                 __string(service, name)
1581                 __string(addr, rqst->rq_xprt ?
1582                          rqst->rq_xprt->xpt_remotebuf : "(null)")
1583         ),
1584
1585         TP_fast_assign(
1586                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1587                 __entry->vers = rqst->rq_vers;
1588                 __entry->proc = rqst->rq_proc;
1589                 __assign_str(service, name);
1590                 __assign_str(addr, rqst->rq_xprt ?
1591                              rqst->rq_xprt->xpt_remotebuf : "(null)");
1592         ),
1593
1594         TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%u",
1595                         __get_str(addr), __entry->xid,
1596                         __get_str(service), __entry->vers, __entry->proc)
1597 );
1598
1599 DECLARE_EVENT_CLASS(svc_rqst_event,
1600
1601         TP_PROTO(
1602                 const struct svc_rqst *rqst
1603         ),
1604
1605         TP_ARGS(rqst),
1606
1607         TP_STRUCT__entry(
1608                 __field(u32, xid)
1609                 __field(unsigned long, flags)
1610                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1611         ),
1612
1613         TP_fast_assign(
1614                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1615                 __entry->flags = rqst->rq_flags;
1616                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1617         ),
1618
1619         TP_printk("addr=%s xid=0x%08x flags=%s",
1620                         __get_str(addr), __entry->xid,
1621                         show_rqstp_flags(__entry->flags))
1622 );
1623 #define DEFINE_SVC_RQST_EVENT(name) \
1624         DEFINE_EVENT(svc_rqst_event, svc_##name, \
1625                         TP_PROTO( \
1626                                 const struct svc_rqst *rqst \
1627                         ), \
1628                         TP_ARGS(rqst))
1629
1630 DEFINE_SVC_RQST_EVENT(defer);
1631 DEFINE_SVC_RQST_EVENT(drop);
1632
1633 DECLARE_EVENT_CLASS(svc_rqst_status,
1634
1635         TP_PROTO(struct svc_rqst *rqst, int status),
1636
1637         TP_ARGS(rqst, status),
1638
1639         TP_STRUCT__entry(
1640                 __field(u32, xid)
1641                 __field(int, status)
1642                 __field(unsigned long, flags)
1643                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1644         ),
1645
1646         TP_fast_assign(
1647                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1648                 __entry->status = status;
1649                 __entry->flags = rqst->rq_flags;
1650                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1651         ),
1652
1653         TP_printk("addr=%s xid=0x%08x status=%d flags=%s",
1654                   __get_str(addr), __entry->xid,
1655                   __entry->status, show_rqstp_flags(__entry->flags))
1656 );
1657
1658 DEFINE_EVENT(svc_rqst_status, svc_send,
1659         TP_PROTO(struct svc_rqst *rqst, int status),
1660         TP_ARGS(rqst, status));
1661
1662 #define show_svc_xprt_flags(flags)                                      \
1663         __print_flags(flags, "|",                                       \
1664                 { (1UL << XPT_BUSY),            "XPT_BUSY"},            \
1665                 { (1UL << XPT_CONN),            "XPT_CONN"},            \
1666                 { (1UL << XPT_CLOSE),           "XPT_CLOSE"},           \
1667                 { (1UL << XPT_DATA),            "XPT_DATA"},            \
1668                 { (1UL << XPT_TEMP),            "XPT_TEMP"},            \
1669                 { (1UL << XPT_DEAD),            "XPT_DEAD"},            \
1670                 { (1UL << XPT_CHNGBUF),         "XPT_CHNGBUF"},         \
1671                 { (1UL << XPT_DEFERRED),        "XPT_DEFERRED"},        \
1672                 { (1UL << XPT_OLD),             "XPT_OLD"},             \
1673                 { (1UL << XPT_LISTENER),        "XPT_LISTENER"},        \
1674                 { (1UL << XPT_CACHE_AUTH),      "XPT_CACHE_AUTH"},      \
1675                 { (1UL << XPT_LOCAL),           "XPT_LOCAL"},           \
1676                 { (1UL << XPT_KILL_TEMP),       "XPT_KILL_TEMP"},       \
1677                 { (1UL << XPT_CONG_CTRL),       "XPT_CONG_CTRL"})
1678
1679 TRACE_EVENT(svc_xprt_create_err,
1680         TP_PROTO(
1681                 const char *program,
1682                 const char *protocol,
1683                 struct sockaddr *sap,
1684                 const struct svc_xprt *xprt
1685         ),
1686
1687         TP_ARGS(program, protocol, sap, xprt),
1688
1689         TP_STRUCT__entry(
1690                 __field(long, error)
1691                 __string(program, program)
1692                 __string(protocol, protocol)
1693                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
1694         ),
1695
1696         TP_fast_assign(
1697                 __entry->error = PTR_ERR(xprt);
1698                 __assign_str(program, program);
1699                 __assign_str(protocol, protocol);
1700                 memcpy(__entry->addr, sap, sizeof(__entry->addr));
1701         ),
1702
1703         TP_printk("addr=%pISpc program=%s protocol=%s error=%ld",
1704                 __entry->addr, __get_str(program), __get_str(protocol),
1705                 __entry->error)
1706 );
1707
1708 TRACE_EVENT(svc_xprt_do_enqueue,
1709         TP_PROTO(struct svc_xprt *xprt, struct svc_rqst *rqst),
1710
1711         TP_ARGS(xprt, rqst),
1712
1713         TP_STRUCT__entry(
1714                 __field(int, pid)
1715                 __field(unsigned long, flags)
1716                 __string(addr, xprt->xpt_remotebuf)
1717         ),
1718
1719         TP_fast_assign(
1720                 __entry->pid = rqst? rqst->rq_task->pid : 0;
1721                 __entry->flags = xprt->xpt_flags;
1722                 __assign_str(addr, xprt->xpt_remotebuf);
1723         ),
1724
1725         TP_printk("addr=%s pid=%d flags=%s", __get_str(addr),
1726                 __entry->pid, show_svc_xprt_flags(__entry->flags))
1727 );
1728
1729 DECLARE_EVENT_CLASS(svc_xprt_event,
1730         TP_PROTO(struct svc_xprt *xprt),
1731
1732         TP_ARGS(xprt),
1733
1734         TP_STRUCT__entry(
1735                 __field(unsigned long, flags)
1736                 __string(addr, xprt->xpt_remotebuf)
1737         ),
1738
1739         TP_fast_assign(
1740                 __entry->flags = xprt->xpt_flags;
1741                 __assign_str(addr, xprt->xpt_remotebuf);
1742         ),
1743
1744         TP_printk("addr=%s flags=%s", __get_str(addr),
1745                 show_svc_xprt_flags(__entry->flags))
1746 );
1747
1748 #define DEFINE_SVC_XPRT_EVENT(name) \
1749         DEFINE_EVENT(svc_xprt_event, svc_xprt_##name, \
1750                         TP_PROTO( \
1751                                 struct svc_xprt *xprt \
1752                         ), \
1753                         TP_ARGS(xprt))
1754
1755 DEFINE_SVC_XPRT_EVENT(no_write_space);
1756 DEFINE_SVC_XPRT_EVENT(close);
1757 DEFINE_SVC_XPRT_EVENT(detach);
1758 DEFINE_SVC_XPRT_EVENT(free);
1759
1760 TRACE_EVENT(svc_xprt_accept,
1761         TP_PROTO(
1762                 const struct svc_xprt *xprt,
1763                 const char *service
1764         ),
1765
1766         TP_ARGS(xprt, service),
1767
1768         TP_STRUCT__entry(
1769                 __string(addr, xprt->xpt_remotebuf)
1770                 __string(protocol, xprt->xpt_class->xcl_name)
1771                 __string(service, service)
1772         ),
1773
1774         TP_fast_assign(
1775                 __assign_str(addr, xprt->xpt_remotebuf);
1776                 __assign_str(protocol, xprt->xpt_class->xcl_name)
1777                 __assign_str(service, service);
1778         ),
1779
1780         TP_printk("addr=%s protocol=%s service=%s",
1781                 __get_str(addr), __get_str(protocol), __get_str(service)
1782         )
1783 );
1784
1785 TRACE_EVENT(svc_xprt_dequeue,
1786         TP_PROTO(struct svc_rqst *rqst),
1787
1788         TP_ARGS(rqst),
1789
1790         TP_STRUCT__entry(
1791                 __field(unsigned long, flags)
1792                 __field(unsigned long, wakeup)
1793                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1794         ),
1795
1796         TP_fast_assign(
1797                 __entry->flags = rqst->rq_xprt->xpt_flags;
1798                 __entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
1799                                                         rqst->rq_qtime));
1800                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1801         ),
1802
1803         TP_printk("addr=%s flags=%s wakeup-us=%lu", __get_str(addr),
1804                 show_svc_xprt_flags(__entry->flags), __entry->wakeup)
1805 );
1806
1807 TRACE_EVENT(svc_wake_up,
1808         TP_PROTO(int pid),
1809
1810         TP_ARGS(pid),
1811
1812         TP_STRUCT__entry(
1813                 __field(int, pid)
1814         ),
1815
1816         TP_fast_assign(
1817                 __entry->pid = pid;
1818         ),
1819
1820         TP_printk("pid=%d", __entry->pid)
1821 );
1822
1823 TRACE_EVENT(svc_handle_xprt,
1824         TP_PROTO(struct svc_xprt *xprt, int len),
1825
1826         TP_ARGS(xprt, len),
1827
1828         TP_STRUCT__entry(
1829                 __field(int, len)
1830                 __field(unsigned long, flags)
1831                 __string(addr, xprt->xpt_remotebuf)
1832         ),
1833
1834         TP_fast_assign(
1835                 __entry->len = len;
1836                 __entry->flags = xprt->xpt_flags;
1837                 __assign_str(addr, xprt->xpt_remotebuf);
1838         ),
1839
1840         TP_printk("addr=%s len=%d flags=%s", __get_str(addr),
1841                 __entry->len, show_svc_xprt_flags(__entry->flags))
1842 );
1843
1844 TRACE_EVENT(svc_stats_latency,
1845         TP_PROTO(const struct svc_rqst *rqst),
1846
1847         TP_ARGS(rqst),
1848
1849         TP_STRUCT__entry(
1850                 __field(u32, xid)
1851                 __field(unsigned long, execute)
1852                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1853         ),
1854
1855         TP_fast_assign(
1856                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1857                 __entry->execute = ktime_to_us(ktime_sub(ktime_get(),
1858                                                          rqst->rq_stime));
1859                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1860         ),
1861
1862         TP_printk("addr=%s xid=0x%08x execute-us=%lu",
1863                 __get_str(addr), __entry->xid, __entry->execute)
1864 );
1865
1866 DECLARE_EVENT_CLASS(svc_deferred_event,
1867         TP_PROTO(
1868                 const struct svc_deferred_req *dr
1869         ),
1870
1871         TP_ARGS(dr),
1872
1873         TP_STRUCT__entry(
1874                 __field(const void *, dr)
1875                 __field(u32, xid)
1876                 __array(__u8, addr, INET6_ADDRSTRLEN + 10)
1877         ),
1878
1879         TP_fast_assign(
1880                 __entry->dr = dr;
1881                 __entry->xid = be32_to_cpu(*(__be32 *)(dr->args +
1882                                                        (dr->xprt_hlen>>2)));
1883                 snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1884                          "%pISpc", (struct sockaddr *)&dr->addr);
1885         ),
1886
1887         TP_printk("addr=%s dr=%p xid=0x%08x", __entry->addr, __entry->dr,
1888                 __entry->xid)
1889 );
1890
1891 #define DEFINE_SVC_DEFERRED_EVENT(name) \
1892         DEFINE_EVENT(svc_deferred_event, svc_defer_##name, \
1893                         TP_PROTO( \
1894                                 const struct svc_deferred_req *dr \
1895                         ), \
1896                         TP_ARGS(dr))
1897
1898 DEFINE_SVC_DEFERRED_EVENT(drop);
1899 DEFINE_SVC_DEFERRED_EVENT(queue);
1900 DEFINE_SVC_DEFERRED_EVENT(recv);
1901
1902 TRACE_EVENT(svcsock_new_socket,
1903         TP_PROTO(
1904                 const struct socket *socket
1905         ),
1906
1907         TP_ARGS(socket),
1908
1909         TP_STRUCT__entry(
1910                 __field(unsigned long, type)
1911                 __field(unsigned long, family)
1912                 __field(bool, listener)
1913         ),
1914
1915         TP_fast_assign(
1916                 __entry->type = socket->type;
1917                 __entry->family = socket->sk->sk_family;
1918                 __entry->listener = (socket->sk->sk_state == TCP_LISTEN);
1919         ),
1920
1921         TP_printk("type=%s family=%s%s",
1922                 show_socket_type(__entry->type),
1923                 rpc_show_address_family(__entry->family),
1924                 __entry->listener ? " (listener)" : ""
1925         )
1926 );
1927
1928 TRACE_EVENT(svcsock_marker,
1929         TP_PROTO(
1930                 const struct svc_xprt *xprt,
1931                 __be32 marker
1932         ),
1933
1934         TP_ARGS(xprt, marker),
1935
1936         TP_STRUCT__entry(
1937                 __field(unsigned int, length)
1938                 __field(bool, last)
1939                 __string(addr, xprt->xpt_remotebuf)
1940         ),
1941
1942         TP_fast_assign(
1943                 __entry->length = be32_to_cpu(marker) & RPC_FRAGMENT_SIZE_MASK;
1944                 __entry->last = be32_to_cpu(marker) & RPC_LAST_STREAM_FRAGMENT;
1945                 __assign_str(addr, xprt->xpt_remotebuf);
1946         ),
1947
1948         TP_printk("addr=%s length=%u%s", __get_str(addr),
1949                 __entry->length, __entry->last ? " (last)" : "")
1950 );
1951
1952 DECLARE_EVENT_CLASS(svcsock_class,
1953         TP_PROTO(
1954                 const struct svc_xprt *xprt,
1955                 ssize_t result
1956         ),
1957
1958         TP_ARGS(xprt, result),
1959
1960         TP_STRUCT__entry(
1961                 __field(ssize_t, result)
1962                 __field(unsigned long, flags)
1963                 __string(addr, xprt->xpt_remotebuf)
1964         ),
1965
1966         TP_fast_assign(
1967                 __entry->result = result;
1968                 __entry->flags = xprt->xpt_flags;
1969                 __assign_str(addr, xprt->xpt_remotebuf);
1970         ),
1971
1972         TP_printk("addr=%s result=%zd flags=%s", __get_str(addr),
1973                 __entry->result, show_svc_xprt_flags(__entry->flags)
1974         )
1975 );
1976
1977 #define DEFINE_SVCSOCK_EVENT(name) \
1978         DEFINE_EVENT(svcsock_class, svcsock_##name, \
1979                         TP_PROTO( \
1980                                 const struct svc_xprt *xprt, \
1981                                 ssize_t result \
1982                         ), \
1983                         TP_ARGS(xprt, result))
1984
1985 DEFINE_SVCSOCK_EVENT(udp_send);
1986 DEFINE_SVCSOCK_EVENT(udp_recv);
1987 DEFINE_SVCSOCK_EVENT(udp_recv_err);
1988 DEFINE_SVCSOCK_EVENT(tcp_send);
1989 DEFINE_SVCSOCK_EVENT(tcp_recv);
1990 DEFINE_SVCSOCK_EVENT(tcp_recv_eagain);
1991 DEFINE_SVCSOCK_EVENT(tcp_recv_err);
1992 DEFINE_SVCSOCK_EVENT(data_ready);
1993 DEFINE_SVCSOCK_EVENT(write_space);
1994
1995 TRACE_EVENT(svcsock_tcp_recv_short,
1996         TP_PROTO(
1997                 const struct svc_xprt *xprt,
1998                 u32 expected,
1999                 u32 received
2000         ),
2001
2002         TP_ARGS(xprt, expected, received),
2003
2004         TP_STRUCT__entry(
2005                 __field(u32, expected)
2006                 __field(u32, received)
2007                 __field(unsigned long, flags)
2008                 __string(addr, xprt->xpt_remotebuf)
2009         ),
2010
2011         TP_fast_assign(
2012                 __entry->expected = expected;
2013                 __entry->received = received;
2014                 __entry->flags = xprt->xpt_flags;
2015                 __assign_str(addr, xprt->xpt_remotebuf);
2016         ),
2017
2018         TP_printk("addr=%s flags=%s expected=%u received=%u",
2019                 __get_str(addr), show_svc_xprt_flags(__entry->flags),
2020                 __entry->expected, __entry->received
2021         )
2022 );
2023
2024 TRACE_EVENT(svcsock_tcp_state,
2025         TP_PROTO(
2026                 const struct svc_xprt *xprt,
2027                 const struct socket *socket
2028         ),
2029
2030         TP_ARGS(xprt, socket),
2031
2032         TP_STRUCT__entry(
2033                 __field(unsigned long, socket_state)
2034                 __field(unsigned long, sock_state)
2035                 __field(unsigned long, flags)
2036                 __string(addr, xprt->xpt_remotebuf)
2037         ),
2038
2039         TP_fast_assign(
2040                 __entry->socket_state = socket->state;
2041                 __entry->sock_state = socket->sk->sk_state;
2042                 __entry->flags = xprt->xpt_flags;
2043                 __assign_str(addr, xprt->xpt_remotebuf);
2044         ),
2045
2046         TP_printk("addr=%s state=%s sk_state=%s flags=%s", __get_str(addr),
2047                 rpc_show_socket_state(__entry->socket_state),
2048                 rpc_show_sock_state(__entry->sock_state),
2049                 show_svc_xprt_flags(__entry->flags)
2050         )
2051 );
2052
2053 DECLARE_EVENT_CLASS(svcsock_accept_class,
2054         TP_PROTO(
2055                 const struct svc_xprt *xprt,
2056                 const char *service,
2057                 long status
2058         ),
2059
2060         TP_ARGS(xprt, service, status),
2061
2062         TP_STRUCT__entry(
2063                 __field(long, status)
2064                 __string(service, service)
2065                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
2066         ),
2067
2068         TP_fast_assign(
2069                 __entry->status = status;
2070                 __assign_str(service, service);
2071                 memcpy(__entry->addr, &xprt->xpt_local, sizeof(__entry->addr));
2072         ),
2073
2074         TP_printk("listener=%pISpc service=%s status=%ld",
2075                 __entry->addr, __get_str(service), __entry->status
2076         )
2077 );
2078
2079 #define DEFINE_ACCEPT_EVENT(name) \
2080         DEFINE_EVENT(svcsock_accept_class, svcsock_##name##_err, \
2081                         TP_PROTO( \
2082                                 const struct svc_xprt *xprt, \
2083                                 const char *service, \
2084                                 long status \
2085                         ), \
2086                         TP_ARGS(xprt, service, status))
2087
2088 DEFINE_ACCEPT_EVENT(accept);
2089 DEFINE_ACCEPT_EVENT(getpeername);
2090
2091 DECLARE_EVENT_CLASS(cache_event,
2092         TP_PROTO(
2093                 const struct cache_detail *cd,
2094                 const struct cache_head *h
2095         ),
2096
2097         TP_ARGS(cd, h),
2098
2099         TP_STRUCT__entry(
2100                 __field(const struct cache_head *, h)
2101                 __string(name, cd->name)
2102         ),
2103
2104         TP_fast_assign(
2105                 __entry->h = h;
2106                 __assign_str(name, cd->name);
2107         ),
2108
2109         TP_printk("cache=%s entry=%p", __get_str(name), __entry->h)
2110 );
2111 #define DEFINE_CACHE_EVENT(name) \
2112         DEFINE_EVENT(cache_event, name, \
2113                         TP_PROTO( \
2114                                 const struct cache_detail *cd, \
2115                                 const struct cache_head *h \
2116                         ), \
2117                         TP_ARGS(cd, h))
2118 DEFINE_CACHE_EVENT(cache_entry_expired);
2119 DEFINE_CACHE_EVENT(cache_entry_upcall);
2120 DEFINE_CACHE_EVENT(cache_entry_update);
2121 DEFINE_CACHE_EVENT(cache_entry_make_negative);
2122 DEFINE_CACHE_EVENT(cache_entry_no_listener);
2123
2124 DECLARE_EVENT_CLASS(register_class,
2125         TP_PROTO(
2126                 const char *program,
2127                 const u32 version,
2128                 const int family,
2129                 const unsigned short protocol,
2130                 const unsigned short port,
2131                 int error
2132         ),
2133
2134         TP_ARGS(program, version, family, protocol, port, error),
2135
2136         TP_STRUCT__entry(
2137                 __field(u32, version)
2138                 __field(unsigned long, family)
2139                 __field(unsigned short, protocol)
2140                 __field(unsigned short, port)
2141                 __field(int, error)
2142                 __string(program, program)
2143         ),
2144
2145         TP_fast_assign(
2146                 __entry->version = version;
2147                 __entry->family = family;
2148                 __entry->protocol = protocol;
2149                 __entry->port = port;
2150                 __entry->error = error;
2151                 __assign_str(program, program);
2152         ),
2153
2154         TP_printk("program=%sv%u proto=%s port=%u family=%s error=%d",
2155                 __get_str(program), __entry->version,
2156                 __entry->protocol == IPPROTO_UDP ? "udp" : "tcp",
2157                 __entry->port, rpc_show_address_family(__entry->family),
2158                 __entry->error
2159         )
2160 );
2161
2162 #define DEFINE_REGISTER_EVENT(name) \
2163         DEFINE_EVENT(register_class, svc_##name, \
2164                         TP_PROTO( \
2165                                 const char *program, \
2166                                 const u32 version, \
2167                                 const int family, \
2168                                 const unsigned short protocol, \
2169                                 const unsigned short port, \
2170                                 int error \
2171                         ), \
2172                         TP_ARGS(program, version, family, protocol, \
2173                                 port, error))
2174
2175 DEFINE_REGISTER_EVENT(register);
2176 DEFINE_REGISTER_EVENT(noregister);
2177
2178 TRACE_EVENT(svc_unregister,
2179         TP_PROTO(
2180                 const char *program,
2181                 const u32 version,
2182                 int error
2183         ),
2184
2185         TP_ARGS(program, version, error),
2186
2187         TP_STRUCT__entry(
2188                 __field(u32, version)
2189                 __field(int, error)
2190                 __string(program, program)
2191         ),
2192
2193         TP_fast_assign(
2194                 __entry->version = version;
2195                 __entry->error = error;
2196                 __assign_str(program, program);
2197         ),
2198
2199         TP_printk("program=%sv%u error=%d",
2200                 __get_str(program), __entry->version, __entry->error
2201         )
2202 );
2203
2204 #endif /* _TRACE_SUNRPC_H */
2205
2206 #include <trace/define_trace.h>