pinctrl: qcom: Don't clear pending interrupts when enabling
[sfrench/cifs-2.6.git] / include / trace / events / sunrpc.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM sunrpc
4
5 #if !defined(_TRACE_SUNRPC_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_SUNRPC_H
7
8 #include <linux/sunrpc/sched.h>
9 #include <linux/sunrpc/clnt.h>
10 #include <linux/sunrpc/svc.h>
11 #include <linux/sunrpc/xprtsock.h>
12 #include <linux/sunrpc/svc_xprt.h>
13 #include <net/tcp_states.h>
14 #include <linux/net.h>
15 #include <linux/tracepoint.h>
16
17 TRACE_DEFINE_ENUM(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 DECLARE_EVENT_CLASS(svc_xdr_buf_class,
1428         TP_PROTO(
1429                 const struct svc_rqst *rqst,
1430                 const struct xdr_buf *xdr
1431         ),
1432
1433         TP_ARGS(rqst, 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                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1447                 __entry->head_base = xdr->head[0].iov_base;
1448                 __entry->head_len = xdr->head[0].iov_len;
1449                 __entry->tail_base = xdr->tail[0].iov_base;
1450                 __entry->tail_len = xdr->tail[0].iov_len;
1451                 __entry->page_len = xdr->page_len;
1452                 __entry->msg_len = xdr->len;
1453         ),
1454
1455         TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
1456                 __entry->xid,
1457                 __entry->head_base, __entry->head_len, __entry->page_len,
1458                 __entry->tail_base, __entry->tail_len, __entry->msg_len
1459         )
1460 );
1461
1462 #define DEFINE_SVCXDRBUF_EVENT(name)                                    \
1463                 DEFINE_EVENT(svc_xdr_buf_class,                         \
1464                                 svc_xdr_##name,                         \
1465                                 TP_PROTO(                               \
1466                                         const struct svc_rqst *rqst,    \
1467                                         const struct xdr_buf *xdr       \
1468                                 ),                                      \
1469                                 TP_ARGS(rqst, xdr))
1470
1471 DEFINE_SVCXDRBUF_EVENT(recvfrom);
1472 DEFINE_SVCXDRBUF_EVENT(sendto);
1473
1474 /*
1475  * from include/linux/sunrpc/svc.h
1476  */
1477 #define SVC_RQST_FLAG_LIST                                              \
1478         svc_rqst_flag(SECURE)                                           \
1479         svc_rqst_flag(LOCAL)                                            \
1480         svc_rqst_flag(USEDEFERRAL)                                      \
1481         svc_rqst_flag(DROPME)                                           \
1482         svc_rqst_flag(SPLICE_OK)                                        \
1483         svc_rqst_flag(VICTIM)                                           \
1484         svc_rqst_flag(BUSY)                                             \
1485         svc_rqst_flag(DATA)                                             \
1486         svc_rqst_flag_end(AUTHERR)
1487
1488 #undef svc_rqst_flag
1489 #undef svc_rqst_flag_end
1490 #define svc_rqst_flag(x)        TRACE_DEFINE_ENUM(RQ_##x);
1491 #define svc_rqst_flag_end(x)    TRACE_DEFINE_ENUM(RQ_##x);
1492
1493 SVC_RQST_FLAG_LIST
1494
1495 #undef svc_rqst_flag
1496 #undef svc_rqst_flag_end
1497 #define svc_rqst_flag(x)        { BIT(RQ_##x), #x },
1498 #define svc_rqst_flag_end(x)    { BIT(RQ_##x), #x }
1499
1500 #define show_rqstp_flags(flags)                                         \
1501                 __print_flags(flags, "|", SVC_RQST_FLAG_LIST)
1502
1503 TRACE_DEFINE_ENUM(SVC_GARBAGE);
1504 TRACE_DEFINE_ENUM(SVC_SYSERR);
1505 TRACE_DEFINE_ENUM(SVC_VALID);
1506 TRACE_DEFINE_ENUM(SVC_NEGATIVE);
1507 TRACE_DEFINE_ENUM(SVC_OK);
1508 TRACE_DEFINE_ENUM(SVC_DROP);
1509 TRACE_DEFINE_ENUM(SVC_CLOSE);
1510 TRACE_DEFINE_ENUM(SVC_DENIED);
1511 TRACE_DEFINE_ENUM(SVC_PENDING);
1512 TRACE_DEFINE_ENUM(SVC_COMPLETE);
1513
1514 #define svc_show_status(status)                         \
1515         __print_symbolic(status,                        \
1516                 { SVC_GARBAGE,  "SVC_GARBAGE" },        \
1517                 { SVC_SYSERR,   "SVC_SYSERR" },         \
1518                 { SVC_VALID,    "SVC_VALID" },          \
1519                 { SVC_NEGATIVE, "SVC_NEGATIVE" },       \
1520                 { SVC_OK,       "SVC_OK" },             \
1521                 { SVC_DROP,     "SVC_DROP" },           \
1522                 { SVC_CLOSE,    "SVC_CLOSE" },          \
1523                 { SVC_DENIED,   "SVC_DENIED" },         \
1524                 { SVC_PENDING,  "SVC_PENDING" },        \
1525                 { SVC_COMPLETE, "SVC_COMPLETE" })
1526
1527 TRACE_EVENT(svc_authenticate,
1528         TP_PROTO(const struct svc_rqst *rqst, int auth_res, __be32 auth_stat),
1529
1530         TP_ARGS(rqst, auth_res, auth_stat),
1531
1532         TP_STRUCT__entry(
1533                 __field(u32, xid)
1534                 __field(unsigned long, svc_status)
1535                 __field(unsigned long, auth_stat)
1536         ),
1537
1538         TP_fast_assign(
1539                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1540                 __entry->svc_status = auth_res;
1541                 __entry->auth_stat = be32_to_cpu(auth_stat);
1542         ),
1543
1544         TP_printk("xid=0x%08x auth_res=%s auth_stat=%s",
1545                         __entry->xid, svc_show_status(__entry->svc_status),
1546                         rpc_show_auth_stat(__entry->auth_stat))
1547 );
1548
1549 TRACE_EVENT(svc_process,
1550         TP_PROTO(const struct svc_rqst *rqst, const char *name),
1551
1552         TP_ARGS(rqst, name),
1553
1554         TP_STRUCT__entry(
1555                 __field(u32, xid)
1556                 __field(u32, vers)
1557                 __field(u32, proc)
1558                 __string(service, name)
1559                 __string(addr, rqst->rq_xprt ?
1560                          rqst->rq_xprt->xpt_remotebuf : "(null)")
1561         ),
1562
1563         TP_fast_assign(
1564                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1565                 __entry->vers = rqst->rq_vers;
1566                 __entry->proc = rqst->rq_proc;
1567                 __assign_str(service, name);
1568                 __assign_str(addr, rqst->rq_xprt ?
1569                              rqst->rq_xprt->xpt_remotebuf : "(null)");
1570         ),
1571
1572         TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%u",
1573                         __get_str(addr), __entry->xid,
1574                         __get_str(service), __entry->vers, __entry->proc)
1575 );
1576
1577 DECLARE_EVENT_CLASS(svc_rqst_event,
1578
1579         TP_PROTO(
1580                 const struct svc_rqst *rqst
1581         ),
1582
1583         TP_ARGS(rqst),
1584
1585         TP_STRUCT__entry(
1586                 __field(u32, xid)
1587                 __field(unsigned long, flags)
1588                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1589         ),
1590
1591         TP_fast_assign(
1592                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1593                 __entry->flags = rqst->rq_flags;
1594                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1595         ),
1596
1597         TP_printk("addr=%s xid=0x%08x flags=%s",
1598                         __get_str(addr), __entry->xid,
1599                         show_rqstp_flags(__entry->flags))
1600 );
1601 #define DEFINE_SVC_RQST_EVENT(name) \
1602         DEFINE_EVENT(svc_rqst_event, svc_##name, \
1603                         TP_PROTO( \
1604                                 const struct svc_rqst *rqst \
1605                         ), \
1606                         TP_ARGS(rqst))
1607
1608 DEFINE_SVC_RQST_EVENT(defer);
1609 DEFINE_SVC_RQST_EVENT(drop);
1610
1611 DECLARE_EVENT_CLASS(svc_rqst_status,
1612
1613         TP_PROTO(struct svc_rqst *rqst, int status),
1614
1615         TP_ARGS(rqst, status),
1616
1617         TP_STRUCT__entry(
1618                 __field(u32, xid)
1619                 __field(int, status)
1620                 __field(unsigned long, flags)
1621                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1622         ),
1623
1624         TP_fast_assign(
1625                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1626                 __entry->status = status;
1627                 __entry->flags = rqst->rq_flags;
1628                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1629         ),
1630
1631         TP_printk("addr=%s xid=0x%08x status=%d flags=%s",
1632                   __get_str(addr), __entry->xid,
1633                   __entry->status, show_rqstp_flags(__entry->flags))
1634 );
1635
1636 DEFINE_EVENT(svc_rqst_status, svc_send,
1637         TP_PROTO(struct svc_rqst *rqst, int status),
1638         TP_ARGS(rqst, status));
1639
1640 #define show_svc_xprt_flags(flags)                                      \
1641         __print_flags(flags, "|",                                       \
1642                 { (1UL << XPT_BUSY),            "XPT_BUSY"},            \
1643                 { (1UL << XPT_CONN),            "XPT_CONN"},            \
1644                 { (1UL << XPT_CLOSE),           "XPT_CLOSE"},           \
1645                 { (1UL << XPT_DATA),            "XPT_DATA"},            \
1646                 { (1UL << XPT_TEMP),            "XPT_TEMP"},            \
1647                 { (1UL << XPT_DEAD),            "XPT_DEAD"},            \
1648                 { (1UL << XPT_CHNGBUF),         "XPT_CHNGBUF"},         \
1649                 { (1UL << XPT_DEFERRED),        "XPT_DEFERRED"},        \
1650                 { (1UL << XPT_OLD),             "XPT_OLD"},             \
1651                 { (1UL << XPT_LISTENER),        "XPT_LISTENER"},        \
1652                 { (1UL << XPT_CACHE_AUTH),      "XPT_CACHE_AUTH"},      \
1653                 { (1UL << XPT_LOCAL),           "XPT_LOCAL"},           \
1654                 { (1UL << XPT_KILL_TEMP),       "XPT_KILL_TEMP"},       \
1655                 { (1UL << XPT_CONG_CTRL),       "XPT_CONG_CTRL"})
1656
1657 TRACE_EVENT(svc_xprt_create_err,
1658         TP_PROTO(
1659                 const char *program,
1660                 const char *protocol,
1661                 struct sockaddr *sap,
1662                 const struct svc_xprt *xprt
1663         ),
1664
1665         TP_ARGS(program, protocol, sap, xprt),
1666
1667         TP_STRUCT__entry(
1668                 __field(long, error)
1669                 __string(program, program)
1670                 __string(protocol, protocol)
1671                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
1672         ),
1673
1674         TP_fast_assign(
1675                 __entry->error = PTR_ERR(xprt);
1676                 __assign_str(program, program);
1677                 __assign_str(protocol, protocol);
1678                 memcpy(__entry->addr, sap, sizeof(__entry->addr));
1679         ),
1680
1681         TP_printk("addr=%pISpc program=%s protocol=%s error=%ld",
1682                 __entry->addr, __get_str(program), __get_str(protocol),
1683                 __entry->error)
1684 );
1685
1686 TRACE_EVENT(svc_xprt_do_enqueue,
1687         TP_PROTO(struct svc_xprt *xprt, struct svc_rqst *rqst),
1688
1689         TP_ARGS(xprt, rqst),
1690
1691         TP_STRUCT__entry(
1692                 __field(int, pid)
1693                 __field(unsigned long, flags)
1694                 __string(addr, xprt->xpt_remotebuf)
1695         ),
1696
1697         TP_fast_assign(
1698                 __entry->pid = rqst? rqst->rq_task->pid : 0;
1699                 __entry->flags = xprt->xpt_flags;
1700                 __assign_str(addr, xprt->xpt_remotebuf);
1701         ),
1702
1703         TP_printk("addr=%s pid=%d flags=%s", __get_str(addr),
1704                 __entry->pid, show_svc_xprt_flags(__entry->flags))
1705 );
1706
1707 DECLARE_EVENT_CLASS(svc_xprt_event,
1708         TP_PROTO(struct svc_xprt *xprt),
1709
1710         TP_ARGS(xprt),
1711
1712         TP_STRUCT__entry(
1713                 __field(unsigned long, flags)
1714                 __string(addr, xprt->xpt_remotebuf)
1715         ),
1716
1717         TP_fast_assign(
1718                 __entry->flags = xprt->xpt_flags;
1719                 __assign_str(addr, xprt->xpt_remotebuf);
1720         ),
1721
1722         TP_printk("addr=%s flags=%s", __get_str(addr),
1723                 show_svc_xprt_flags(__entry->flags))
1724 );
1725
1726 #define DEFINE_SVC_XPRT_EVENT(name) \
1727         DEFINE_EVENT(svc_xprt_event, svc_xprt_##name, \
1728                         TP_PROTO( \
1729                                 struct svc_xprt *xprt \
1730                         ), \
1731                         TP_ARGS(xprt))
1732
1733 DEFINE_SVC_XPRT_EVENT(no_write_space);
1734 DEFINE_SVC_XPRT_EVENT(close);
1735 DEFINE_SVC_XPRT_EVENT(detach);
1736 DEFINE_SVC_XPRT_EVENT(free);
1737
1738 TRACE_EVENT(svc_xprt_accept,
1739         TP_PROTO(
1740                 const struct svc_xprt *xprt,
1741                 const char *service
1742         ),
1743
1744         TP_ARGS(xprt, service),
1745
1746         TP_STRUCT__entry(
1747                 __string(addr, xprt->xpt_remotebuf)
1748                 __string(protocol, xprt->xpt_class->xcl_name)
1749                 __string(service, service)
1750         ),
1751
1752         TP_fast_assign(
1753                 __assign_str(addr, xprt->xpt_remotebuf);
1754                 __assign_str(protocol, xprt->xpt_class->xcl_name)
1755                 __assign_str(service, service);
1756         ),
1757
1758         TP_printk("addr=%s protocol=%s service=%s",
1759                 __get_str(addr), __get_str(protocol), __get_str(service)
1760         )
1761 );
1762
1763 TRACE_EVENT(svc_xprt_dequeue,
1764         TP_PROTO(struct svc_rqst *rqst),
1765
1766         TP_ARGS(rqst),
1767
1768         TP_STRUCT__entry(
1769                 __field(unsigned long, flags)
1770                 __field(unsigned long, wakeup)
1771                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1772         ),
1773
1774         TP_fast_assign(
1775                 __entry->flags = rqst->rq_xprt->xpt_flags;
1776                 __entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
1777                                                         rqst->rq_qtime));
1778                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1779         ),
1780
1781         TP_printk("addr=%s flags=%s wakeup-us=%lu", __get_str(addr),
1782                 show_svc_xprt_flags(__entry->flags), __entry->wakeup)
1783 );
1784
1785 TRACE_EVENT(svc_wake_up,
1786         TP_PROTO(int pid),
1787
1788         TP_ARGS(pid),
1789
1790         TP_STRUCT__entry(
1791                 __field(int, pid)
1792         ),
1793
1794         TP_fast_assign(
1795                 __entry->pid = pid;
1796         ),
1797
1798         TP_printk("pid=%d", __entry->pid)
1799 );
1800
1801 TRACE_EVENT(svc_handle_xprt,
1802         TP_PROTO(struct svc_xprt *xprt, int len),
1803
1804         TP_ARGS(xprt, len),
1805
1806         TP_STRUCT__entry(
1807                 __field(int, len)
1808                 __field(unsigned long, flags)
1809                 __string(addr, xprt->xpt_remotebuf)
1810         ),
1811
1812         TP_fast_assign(
1813                 __entry->len = len;
1814                 __entry->flags = xprt->xpt_flags;
1815                 __assign_str(addr, xprt->xpt_remotebuf);
1816         ),
1817
1818         TP_printk("addr=%s len=%d flags=%s", __get_str(addr),
1819                 __entry->len, show_svc_xprt_flags(__entry->flags))
1820 );
1821
1822 TRACE_EVENT(svc_stats_latency,
1823         TP_PROTO(const struct svc_rqst *rqst),
1824
1825         TP_ARGS(rqst),
1826
1827         TP_STRUCT__entry(
1828                 __field(u32, xid)
1829                 __field(unsigned long, execute)
1830                 __string(addr, rqst->rq_xprt->xpt_remotebuf)
1831         ),
1832
1833         TP_fast_assign(
1834                 __entry->xid = be32_to_cpu(rqst->rq_xid);
1835                 __entry->execute = ktime_to_us(ktime_sub(ktime_get(),
1836                                                          rqst->rq_stime));
1837                 __assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1838         ),
1839
1840         TP_printk("addr=%s xid=0x%08x execute-us=%lu",
1841                 __get_str(addr), __entry->xid, __entry->execute)
1842 );
1843
1844 DECLARE_EVENT_CLASS(svc_deferred_event,
1845         TP_PROTO(
1846                 const struct svc_deferred_req *dr
1847         ),
1848
1849         TP_ARGS(dr),
1850
1851         TP_STRUCT__entry(
1852                 __field(const void *, dr)
1853                 __field(u32, xid)
1854                 __string(addr, dr->xprt->xpt_remotebuf)
1855         ),
1856
1857         TP_fast_assign(
1858                 __entry->dr = dr;
1859                 __entry->xid = be32_to_cpu(*(__be32 *)(dr->args +
1860                                                        (dr->xprt_hlen>>2)));
1861                 __assign_str(addr, dr->xprt->xpt_remotebuf);
1862         ),
1863
1864         TP_printk("addr=%s dr=%p xid=0x%08x", __get_str(addr), __entry->dr,
1865                 __entry->xid)
1866 );
1867
1868 #define DEFINE_SVC_DEFERRED_EVENT(name) \
1869         DEFINE_EVENT(svc_deferred_event, svc_defer_##name, \
1870                         TP_PROTO( \
1871                                 const struct svc_deferred_req *dr \
1872                         ), \
1873                         TP_ARGS(dr))
1874
1875 DEFINE_SVC_DEFERRED_EVENT(drop);
1876 DEFINE_SVC_DEFERRED_EVENT(queue);
1877 DEFINE_SVC_DEFERRED_EVENT(recv);
1878
1879 TRACE_EVENT(svcsock_new_socket,
1880         TP_PROTO(
1881                 const struct socket *socket
1882         ),
1883
1884         TP_ARGS(socket),
1885
1886         TP_STRUCT__entry(
1887                 __field(unsigned long, type)
1888                 __field(unsigned long, family)
1889                 __field(bool, listener)
1890         ),
1891
1892         TP_fast_assign(
1893                 __entry->type = socket->type;
1894                 __entry->family = socket->sk->sk_family;
1895                 __entry->listener = (socket->sk->sk_state == TCP_LISTEN);
1896         ),
1897
1898         TP_printk("type=%s family=%s%s",
1899                 show_socket_type(__entry->type),
1900                 rpc_show_address_family(__entry->family),
1901                 __entry->listener ? " (listener)" : ""
1902         )
1903 );
1904
1905 TRACE_EVENT(svcsock_marker,
1906         TP_PROTO(
1907                 const struct svc_xprt *xprt,
1908                 __be32 marker
1909         ),
1910
1911         TP_ARGS(xprt, marker),
1912
1913         TP_STRUCT__entry(
1914                 __field(unsigned int, length)
1915                 __field(bool, last)
1916                 __string(addr, xprt->xpt_remotebuf)
1917         ),
1918
1919         TP_fast_assign(
1920                 __entry->length = be32_to_cpu(marker) & RPC_FRAGMENT_SIZE_MASK;
1921                 __entry->last = be32_to_cpu(marker) & RPC_LAST_STREAM_FRAGMENT;
1922                 __assign_str(addr, xprt->xpt_remotebuf);
1923         ),
1924
1925         TP_printk("addr=%s length=%u%s", __get_str(addr),
1926                 __entry->length, __entry->last ? " (last)" : "")
1927 );
1928
1929 DECLARE_EVENT_CLASS(svcsock_class,
1930         TP_PROTO(
1931                 const struct svc_xprt *xprt,
1932                 ssize_t result
1933         ),
1934
1935         TP_ARGS(xprt, result),
1936
1937         TP_STRUCT__entry(
1938                 __field(ssize_t, result)
1939                 __field(unsigned long, flags)
1940                 __string(addr, xprt->xpt_remotebuf)
1941         ),
1942
1943         TP_fast_assign(
1944                 __entry->result = result;
1945                 __entry->flags = xprt->xpt_flags;
1946                 __assign_str(addr, xprt->xpt_remotebuf);
1947         ),
1948
1949         TP_printk("addr=%s result=%zd flags=%s", __get_str(addr),
1950                 __entry->result, show_svc_xprt_flags(__entry->flags)
1951         )
1952 );
1953
1954 #define DEFINE_SVCSOCK_EVENT(name) \
1955         DEFINE_EVENT(svcsock_class, svcsock_##name, \
1956                         TP_PROTO( \
1957                                 const struct svc_xprt *xprt, \
1958                                 ssize_t result \
1959                         ), \
1960                         TP_ARGS(xprt, result))
1961
1962 DEFINE_SVCSOCK_EVENT(udp_send);
1963 DEFINE_SVCSOCK_EVENT(udp_recv);
1964 DEFINE_SVCSOCK_EVENT(udp_recv_err);
1965 DEFINE_SVCSOCK_EVENT(tcp_send);
1966 DEFINE_SVCSOCK_EVENT(tcp_recv);
1967 DEFINE_SVCSOCK_EVENT(tcp_recv_eagain);
1968 DEFINE_SVCSOCK_EVENT(tcp_recv_err);
1969 DEFINE_SVCSOCK_EVENT(data_ready);
1970 DEFINE_SVCSOCK_EVENT(write_space);
1971
1972 TRACE_EVENT(svcsock_tcp_recv_short,
1973         TP_PROTO(
1974                 const struct svc_xprt *xprt,
1975                 u32 expected,
1976                 u32 received
1977         ),
1978
1979         TP_ARGS(xprt, expected, received),
1980
1981         TP_STRUCT__entry(
1982                 __field(u32, expected)
1983                 __field(u32, received)
1984                 __field(unsigned long, flags)
1985                 __string(addr, xprt->xpt_remotebuf)
1986         ),
1987
1988         TP_fast_assign(
1989                 __entry->expected = expected;
1990                 __entry->received = received;
1991                 __entry->flags = xprt->xpt_flags;
1992                 __assign_str(addr, xprt->xpt_remotebuf);
1993         ),
1994
1995         TP_printk("addr=%s flags=%s expected=%u received=%u",
1996                 __get_str(addr), show_svc_xprt_flags(__entry->flags),
1997                 __entry->expected, __entry->received
1998         )
1999 );
2000
2001 TRACE_EVENT(svcsock_tcp_state,
2002         TP_PROTO(
2003                 const struct svc_xprt *xprt,
2004                 const struct socket *socket
2005         ),
2006
2007         TP_ARGS(xprt, socket),
2008
2009         TP_STRUCT__entry(
2010                 __field(unsigned long, socket_state)
2011                 __field(unsigned long, sock_state)
2012                 __field(unsigned long, flags)
2013                 __string(addr, xprt->xpt_remotebuf)
2014         ),
2015
2016         TP_fast_assign(
2017                 __entry->socket_state = socket->state;
2018                 __entry->sock_state = socket->sk->sk_state;
2019                 __entry->flags = xprt->xpt_flags;
2020                 __assign_str(addr, xprt->xpt_remotebuf);
2021         ),
2022
2023         TP_printk("addr=%s state=%s sk_state=%s flags=%s", __get_str(addr),
2024                 rpc_show_socket_state(__entry->socket_state),
2025                 rpc_show_sock_state(__entry->sock_state),
2026                 show_svc_xprt_flags(__entry->flags)
2027         )
2028 );
2029
2030 DECLARE_EVENT_CLASS(svcsock_accept_class,
2031         TP_PROTO(
2032                 const struct svc_xprt *xprt,
2033                 const char *service,
2034                 long status
2035         ),
2036
2037         TP_ARGS(xprt, service, status),
2038
2039         TP_STRUCT__entry(
2040                 __field(long, status)
2041                 __string(service, service)
2042                 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
2043         ),
2044
2045         TP_fast_assign(
2046                 __entry->status = status;
2047                 __assign_str(service, service);
2048                 memcpy(__entry->addr, &xprt->xpt_local, sizeof(__entry->addr));
2049         ),
2050
2051         TP_printk("listener=%pISpc service=%s status=%ld",
2052                 __entry->addr, __get_str(service), __entry->status
2053         )
2054 );
2055
2056 #define DEFINE_ACCEPT_EVENT(name) \
2057         DEFINE_EVENT(svcsock_accept_class, svcsock_##name##_err, \
2058                         TP_PROTO( \
2059                                 const struct svc_xprt *xprt, \
2060                                 const char *service, \
2061                                 long status \
2062                         ), \
2063                         TP_ARGS(xprt, service, status))
2064
2065 DEFINE_ACCEPT_EVENT(accept);
2066 DEFINE_ACCEPT_EVENT(getpeername);
2067
2068 DECLARE_EVENT_CLASS(cache_event,
2069         TP_PROTO(
2070                 const struct cache_detail *cd,
2071                 const struct cache_head *h
2072         ),
2073
2074         TP_ARGS(cd, h),
2075
2076         TP_STRUCT__entry(
2077                 __field(const struct cache_head *, h)
2078                 __string(name, cd->name)
2079         ),
2080
2081         TP_fast_assign(
2082                 __entry->h = h;
2083                 __assign_str(name, cd->name);
2084         ),
2085
2086         TP_printk("cache=%s entry=%p", __get_str(name), __entry->h)
2087 );
2088 #define DEFINE_CACHE_EVENT(name) \
2089         DEFINE_EVENT(cache_event, name, \
2090                         TP_PROTO( \
2091                                 const struct cache_detail *cd, \
2092                                 const struct cache_head *h \
2093                         ), \
2094                         TP_ARGS(cd, h))
2095 DEFINE_CACHE_EVENT(cache_entry_expired);
2096 DEFINE_CACHE_EVENT(cache_entry_upcall);
2097 DEFINE_CACHE_EVENT(cache_entry_update);
2098 DEFINE_CACHE_EVENT(cache_entry_make_negative);
2099 DEFINE_CACHE_EVENT(cache_entry_no_listener);
2100
2101 DECLARE_EVENT_CLASS(register_class,
2102         TP_PROTO(
2103                 const char *program,
2104                 const u32 version,
2105                 const int family,
2106                 const unsigned short protocol,
2107                 const unsigned short port,
2108                 int error
2109         ),
2110
2111         TP_ARGS(program, version, family, protocol, port, error),
2112
2113         TP_STRUCT__entry(
2114                 __field(u32, version)
2115                 __field(unsigned long, family)
2116                 __field(unsigned short, protocol)
2117                 __field(unsigned short, port)
2118                 __field(int, error)
2119                 __string(program, program)
2120         ),
2121
2122         TP_fast_assign(
2123                 __entry->version = version;
2124                 __entry->family = family;
2125                 __entry->protocol = protocol;
2126                 __entry->port = port;
2127                 __entry->error = error;
2128                 __assign_str(program, program);
2129         ),
2130
2131         TP_printk("program=%sv%u proto=%s port=%u family=%s error=%d",
2132                 __get_str(program), __entry->version,
2133                 __entry->protocol == IPPROTO_UDP ? "udp" : "tcp",
2134                 __entry->port, rpc_show_address_family(__entry->family),
2135                 __entry->error
2136         )
2137 );
2138
2139 #define DEFINE_REGISTER_EVENT(name) \
2140         DEFINE_EVENT(register_class, svc_##name, \
2141                         TP_PROTO( \
2142                                 const char *program, \
2143                                 const u32 version, \
2144                                 const int family, \
2145                                 const unsigned short protocol, \
2146                                 const unsigned short port, \
2147                                 int error \
2148                         ), \
2149                         TP_ARGS(program, version, family, protocol, \
2150                                 port, error))
2151
2152 DEFINE_REGISTER_EVENT(register);
2153 DEFINE_REGISTER_EVENT(noregister);
2154
2155 TRACE_EVENT(svc_unregister,
2156         TP_PROTO(
2157                 const char *program,
2158                 const u32 version,
2159                 int error
2160         ),
2161
2162         TP_ARGS(program, version, error),
2163
2164         TP_STRUCT__entry(
2165                 __field(u32, version)
2166                 __field(int, error)
2167                 __string(program, program)
2168         ),
2169
2170         TP_fast_assign(
2171                 __entry->version = version;
2172                 __entry->error = error;
2173                 __assign_str(program, program);
2174         ),
2175
2176         TP_printk("program=%sv%u error=%d",
2177                 __get_str(program), __entry->version, __entry->error
2178         )
2179 );
2180
2181 #endif /* _TRACE_SUNRPC_H */
2182
2183 #include <trace/define_trace.h>