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