Linux Audio

Check our new training course

Loading...
v5.4
   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
  17DECLARE_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
  46DEFINE_RPC_STATUS_EVENT(call);
  47DEFINE_RPC_STATUS_EVENT(bind);
  48DEFINE_RPC_STATUS_EVENT(connect);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  49
  50TRACE_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
  80TRACE_DEFINE_ENUM(RPC_TASK_ASYNC);
  81TRACE_DEFINE_ENUM(RPC_TASK_SWAPPER);
  82TRACE_DEFINE_ENUM(RPC_CALL_MAJORSEEN);
  83TRACE_DEFINE_ENUM(RPC_TASK_ROOTCREDS);
  84TRACE_DEFINE_ENUM(RPC_TASK_DYNAMIC);
  85TRACE_DEFINE_ENUM(RPC_TASK_SOFT);
  86TRACE_DEFINE_ENUM(RPC_TASK_SOFTCONN);
  87TRACE_DEFINE_ENUM(RPC_TASK_SENT);
  88TRACE_DEFINE_ENUM(RPC_TASK_TIMEOUT);
  89TRACE_DEFINE_ENUM(RPC_TASK_NOCONNECT);
  90TRACE_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
 106TRACE_DEFINE_ENUM(RPC_TASK_RUNNING);
 107TRACE_DEFINE_ENUM(RPC_TASK_QUEUED);
 108TRACE_DEFINE_ENUM(RPC_TASK_ACTIVE);
 109TRACE_DEFINE_ENUM(RPC_TASK_NEED_XMIT);
 110TRACE_DEFINE_ENUM(RPC_TASK_NEED_RECV);
 111TRACE_DEFINE_ENUM(RPC_TASK_MSG_PIN_WAIT);
 112TRACE_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
 124DECLARE_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
 165DEFINE_RPC_RUNNING_EVENT(begin);
 166DEFINE_RPC_RUNNING_EVENT(run_action);
 167DEFINE_RPC_RUNNING_EVENT(complete);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 168
 169DECLARE_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
 213DEFINE_RPC_QUEUED_EVENT(sleep);
 214DEFINE_RPC_QUEUED_EVENT(wakeup);
 215
 216DECLARE_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
 243DEFINE_RPC_FAILURE(callhdr);
 244DEFINE_RPC_FAILURE(verifier);
 245
 246DECLARE_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
 287DEFINE_RPC_REPLY_EVENT(prog_unavail);
 288DEFINE_RPC_REPLY_EVENT(prog_mismatch);
 289DEFINE_RPC_REPLY_EVENT(proc_unavail);
 290DEFINE_RPC_REPLY_EVENT(garbage_args);
 291DEFINE_RPC_REPLY_EVENT(unparsable);
 292DEFINE_RPC_REPLY_EVENT(mismatch);
 293DEFINE_RPC_REPLY_EVENT(stale_creds);
 294DEFINE_RPC_REPLY_EVENT(bad_creds);
 295DEFINE_RPC_REPLY_EVENT(auth_tooweak);
 296
 297TRACE_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
 338TRACE_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
 405TRACE_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
 464TRACE_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
 520RPC_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
 538RPC_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
 549DECLARE_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
 597DECLARE_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
 650DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
 651DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
 652DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
 653DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
 654DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
 655DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
 656
 657DECLARE_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
 693DEFINE_RPC_XPRT_EVENT(timer);
 694DEFINE_RPC_XPRT_EVENT(lookup_rqst);
 695DEFINE_RPC_XPRT_EVENT(complete_rqst);
 696
 697TRACE_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
 728TRACE_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
 759TRACE_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
 780TRACE_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
 807TRACE_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
 845TRACE_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
 869TRACE_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
 897DECLARE_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
 928DEFINE_SVC_RQST_EVENT(defer);
 929DEFINE_SVC_RQST_EVENT(drop);
 
 
 
 
 
 930
 931DECLARE_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
 956DEFINE_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
 977TRACE_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
1001DECLARE_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
1023DEFINE_EVENT(svc_xprt_event, svc_xprt_no_write_space,
1024	TP_PROTO(struct svc_xprt *xprt),
1025	TP_ARGS(xprt));
1026
1027TRACE_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
1053TRACE_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
1069TRACE_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
1093TRACE_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
1115DECLARE_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
1142DEFINE_SVC_DEFERRED_EVENT(drop);
1143DEFINE_SVC_DEFERRED_EVENT(revisit);
1144
 
 
 
 
 
 
1145#endif /* _TRACE_SUNRPC_H */
1146
1147#include <trace/define_trace.h>
v4.17
  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
 17DECLARE_EVENT_CLASS(rpc_task_status,
 18
 19	TP_PROTO(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
 40DEFINE_EVENT(rpc_task_status, rpc_call_status,
 41	TP_PROTO(struct rpc_task *task),
 42
 43	TP_ARGS(task)
 44);
 45
 46DEFINE_EVENT(rpc_task_status, rpc_bind_status,
 47	TP_PROTO(struct rpc_task *task),
 48
 49	TP_ARGS(task)
 50);
 51
 52TRACE_EVENT(rpc_connect_status,
 53	TP_PROTO(const struct rpc_task *task),
 54
 55	TP_ARGS(task),
 56
 57	TP_STRUCT__entry(
 58		__field(unsigned int, task_id)
 59		__field(unsigned int, client_id)
 60		__field(int, status)
 61	),
 62
 63	TP_fast_assign(
 64		__entry->task_id = task->tk_pid;
 65		__entry->client_id = task->tk_client->cl_clid;
 66		__entry->status = task->tk_status;
 67	),
 68
 69	TP_printk("task:%u@%u status=%d",
 70		__entry->task_id, __entry->client_id,
 71		__entry->status)
 72);
 73
 74TRACE_EVENT(rpc_request,
 75	TP_PROTO(const struct rpc_task *task),
 76
 77	TP_ARGS(task),
 78
 79	TP_STRUCT__entry(
 80		__field(unsigned int, task_id)
 81		__field(unsigned int, client_id)
 82		__field(int, version)
 83		__field(bool, async)
 84		__string(progname, task->tk_client->cl_program->name)
 85		__string(procname, rpc_proc_name(task))
 86	),
 87
 88	TP_fast_assign(
 89		__entry->task_id = task->tk_pid;
 90		__entry->client_id = task->tk_client->cl_clid;
 91		__entry->version = task->tk_client->cl_vers;
 92		__entry->async = RPC_IS_ASYNC(task);
 93		__assign_str(progname, task->tk_client->cl_program->name)
 94		__assign_str(procname, rpc_proc_name(task))
 95	),
 96
 97	TP_printk("task:%u@%u %sv%d %s (%ssync)",
 98		__entry->task_id, __entry->client_id,
 99		__get_str(progname), __entry->version,
100		__get_str(procname), __entry->async ? "a": ""
101		)
102);
103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104DECLARE_EVENT_CLASS(rpc_task_running,
105
106	TP_PROTO(const struct rpc_task *task, const void *action),
107
108	TP_ARGS(task, action),
109
110	TP_STRUCT__entry(
111		__field(unsigned int, task_id)
112		__field(unsigned int, client_id)
113		__field(const void *, action)
114		__field(unsigned long, runstate)
115		__field(int, status)
116		__field(unsigned short, flags)
117		),
118
119	TP_fast_assign(
120		__entry->client_id = task->tk_client ?
121				     task->tk_client->cl_clid : -1;
122		__entry->task_id = task->tk_pid;
123		__entry->action = action;
124		__entry->runstate = task->tk_runstate;
125		__entry->status = task->tk_status;
126		__entry->flags = task->tk_flags;
127		),
128
129	TP_printk("task:%u@%d flags=%4.4x state=%4.4lx status=%d action=%pf",
130		__entry->task_id, __entry->client_id,
131		__entry->flags,
132		__entry->runstate,
133		__entry->status,
134		__entry->action
135		)
136);
 
 
 
 
 
 
 
137
138DEFINE_EVENT(rpc_task_running, rpc_task_begin,
139
140	TP_PROTO(const struct rpc_task *task, const void *action),
141
142	TP_ARGS(task, action)
143
144);
145
146DEFINE_EVENT(rpc_task_running, rpc_task_run_action,
147
148	TP_PROTO(const struct rpc_task *task, const void *action),
149
150	TP_ARGS(task, action)
151
152);
153
154DEFINE_EVENT(rpc_task_running, rpc_task_complete,
155
156	TP_PROTO(const struct rpc_task *task, const void *action),
157
158	TP_ARGS(task, action)
159
160);
161
162DECLARE_EVENT_CLASS(rpc_task_queued,
163
164	TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
165
166	TP_ARGS(task, q),
167
168	TP_STRUCT__entry(
169		__field(unsigned int, task_id)
170		__field(unsigned int, client_id)
171		__field(unsigned long, timeout)
172		__field(unsigned long, runstate)
173		__field(int, status)
174		__field(unsigned short, flags)
175		__string(q_name, rpc_qname(q))
176		),
177
178	TP_fast_assign(
179		__entry->client_id = task->tk_client ?
180				     task->tk_client->cl_clid : -1;
181		__entry->task_id = task->tk_pid;
182		__entry->timeout = task->tk_timeout;
183		__entry->runstate = task->tk_runstate;
184		__entry->status = task->tk_status;
185		__entry->flags = task->tk_flags;
186		__assign_str(q_name, rpc_qname(q));
187		),
188
189	TP_printk("task:%u@%d flags=%4.4x state=%4.4lx status=%d timeout=%lu queue=%s",
190		__entry->task_id, __entry->client_id,
191		__entry->flags,
192		__entry->runstate,
193		__entry->status,
194		__entry->timeout,
195		__get_str(q_name)
196		)
197);
 
 
 
 
 
 
 
 
 
 
198
199DEFINE_EVENT(rpc_task_queued, rpc_task_sleep,
200
201	TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
 
 
 
 
 
 
 
202
203	TP_ARGS(task, q)
 
 
 
204
 
 
205);
206
207DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
 
 
 
 
 
208
209	TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
211	TP_ARGS(task, q)
 
 
 
 
 
 
 
 
212
213);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
215TRACE_EVENT(rpc_stats_latency,
216
217	TP_PROTO(
218		const struct rpc_task *task,
219		ktime_t backlog,
220		ktime_t rtt,
221		ktime_t execute
222	),
223
224	TP_ARGS(task, backlog, rtt, execute),
225
226	TP_STRUCT__entry(
227		__field(unsigned int, task_id)
228		__field(unsigned int, client_id)
229		__field(u32, xid)
230		__field(int, version)
231		__string(progname, task->tk_client->cl_program->name)
232		__string(procname, rpc_proc_name(task))
233		__field(unsigned long, backlog)
234		__field(unsigned long, rtt)
235		__field(unsigned long, execute)
236	),
237
238	TP_fast_assign(
239		__entry->client_id = task->tk_client->cl_clid;
240		__entry->task_id = task->tk_pid;
241		__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
242		__entry->version = task->tk_client->cl_vers;
243		__assign_str(progname, task->tk_client->cl_program->name)
244		__assign_str(procname, rpc_proc_name(task))
245		__entry->backlog = ktime_to_us(backlog);
246		__entry->rtt = ktime_to_us(rtt);
247		__entry->execute = ktime_to_us(execute);
248	),
249
250	TP_printk("task:%u@%d xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu",
251		__entry->task_id, __entry->client_id, __entry->xid,
252		__get_str(progname), __entry->version, __get_str(procname),
253		__entry->backlog, __entry->rtt, __entry->execute)
254);
255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256/*
257 * First define the enums in the below macros to be exported to userspace
258 * via TRACE_DEFINE_ENUM().
259 */
260#undef EM
261#undef EMe
262#define EM(a, b)	TRACE_DEFINE_ENUM(a);
263#define EMe(a, b)	TRACE_DEFINE_ENUM(a);
264
265#define RPC_SHOW_SOCKET				\
266	EM( SS_FREE, "FREE" )			\
267	EM( SS_UNCONNECTED, "UNCONNECTED" )	\
268	EM( SS_CONNECTING, "CONNECTING," )	\
269	EM( SS_CONNECTED, "CONNECTED," )	\
270	EMe(SS_DISCONNECTING, "DISCONNECTING" )
271
272#define rpc_show_socket_state(state) \
273	__print_symbolic(state, RPC_SHOW_SOCKET)
274
275RPC_SHOW_SOCKET
276
277#define RPC_SHOW_SOCK				\
278	EM( TCP_ESTABLISHED, "ESTABLISHED" )	\
279	EM( TCP_SYN_SENT, "SYN_SENT" )		\
280	EM( TCP_SYN_RECV, "SYN_RECV" )		\
281	EM( TCP_FIN_WAIT1, "FIN_WAIT1" )	\
282	EM( TCP_FIN_WAIT2, "FIN_WAIT2" )	\
283	EM( TCP_TIME_WAIT, "TIME_WAIT" )	\
284	EM( TCP_CLOSE, "CLOSE" )		\
285	EM( TCP_CLOSE_WAIT, "CLOSE_WAIT" )	\
286	EM( TCP_LAST_ACK, "LAST_ACK" )		\
287	EM( TCP_LISTEN, "LISTEN" )		\
288	EMe( TCP_CLOSING, "CLOSING" )
289
290#define rpc_show_sock_state(state) \
291	__print_symbolic(state, RPC_SHOW_SOCK)
292
293RPC_SHOW_SOCK
294
295/*
296 * Now redefine the EM() and EMe() macros to map the enums to the strings
297 * that will be printed in the output.
298 */
299#undef EM
300#undef EMe
301#define EM(a, b)	{a, b},
302#define EMe(a, b)	{a, b}
303
304DECLARE_EVENT_CLASS(xs_socket_event,
305
306		TP_PROTO(
307			struct rpc_xprt *xprt,
308			struct socket *socket
309		),
310
311		TP_ARGS(xprt, socket),
312
313		TP_STRUCT__entry(
314			__field(unsigned int, socket_state)
315			__field(unsigned int, sock_state)
316			__field(unsigned long long, ino)
317			__string(dstaddr,
318				xprt->address_strings[RPC_DISPLAY_ADDR])
319			__string(dstport,
320				xprt->address_strings[RPC_DISPLAY_PORT])
321		),
322
323		TP_fast_assign(
324			struct inode *inode = SOCK_INODE(socket);
325			__entry->socket_state = socket->state;
326			__entry->sock_state = socket->sk->sk_state;
327			__entry->ino = (unsigned long long)inode->i_ino;
328			__assign_str(dstaddr,
329				xprt->address_strings[RPC_DISPLAY_ADDR]);
330			__assign_str(dstport,
331				xprt->address_strings[RPC_DISPLAY_PORT]);
332		),
333
334		TP_printk(
335			"socket:[%llu] dstaddr=%s/%s "
336			"state=%u (%s) sk_state=%u (%s)",
337			__entry->ino, __get_str(dstaddr), __get_str(dstport),
338			__entry->socket_state,
339			rpc_show_socket_state(__entry->socket_state),
340			__entry->sock_state,
341			rpc_show_sock_state(__entry->sock_state)
342		)
343);
344#define DEFINE_RPC_SOCKET_EVENT(name) \
345	DEFINE_EVENT(xs_socket_event, name, \
346			TP_PROTO( \
347				struct rpc_xprt *xprt, \
348				struct socket *socket \
349			), \
350			TP_ARGS(xprt, socket))
351
352DECLARE_EVENT_CLASS(xs_socket_event_done,
353
354		TP_PROTO(
355			struct rpc_xprt *xprt,
356			struct socket *socket,
357			int error
358		),
359
360		TP_ARGS(xprt, socket, error),
361
362		TP_STRUCT__entry(
363			__field(int, error)
364			__field(unsigned int, socket_state)
365			__field(unsigned int, sock_state)
366			__field(unsigned long long, ino)
367			__string(dstaddr,
368				xprt->address_strings[RPC_DISPLAY_ADDR])
369			__string(dstport,
370				xprt->address_strings[RPC_DISPLAY_PORT])
371		),
372
373		TP_fast_assign(
374			struct inode *inode = SOCK_INODE(socket);
375			__entry->socket_state = socket->state;
376			__entry->sock_state = socket->sk->sk_state;
377			__entry->ino = (unsigned long long)inode->i_ino;
378			__entry->error = error;
379			__assign_str(dstaddr,
380				xprt->address_strings[RPC_DISPLAY_ADDR]);
381			__assign_str(dstport,
382				xprt->address_strings[RPC_DISPLAY_PORT]);
383		),
384
385		TP_printk(
386			"error=%d socket:[%llu] dstaddr=%s/%s "
387			"state=%u (%s) sk_state=%u (%s)",
388			__entry->error,
389			__entry->ino, __get_str(dstaddr), __get_str(dstport),
390			__entry->socket_state,
391			rpc_show_socket_state(__entry->socket_state),
392			__entry->sock_state,
393			rpc_show_sock_state(__entry->sock_state)
394		)
395);
396#define DEFINE_RPC_SOCKET_EVENT_DONE(name) \
397	DEFINE_EVENT(xs_socket_event_done, name, \
398			TP_PROTO( \
399				struct rpc_xprt *xprt, \
400				struct socket *socket, \
401				int error \
402			), \
403			TP_ARGS(xprt, socket, error))
404
405DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
406DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
407DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
408DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
409DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
410DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
411
412DECLARE_EVENT_CLASS(rpc_xprt_event,
413	TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
 
 
 
 
414
415	TP_ARGS(xprt, xid, status),
416
417	TP_STRUCT__entry(
418		__field(u32, xid)
419		__field(int, status)
420		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
421		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
422	),
423
424	TP_fast_assign(
425		__entry->xid = be32_to_cpu(xid);
426		__entry->status = status;
427		__assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
428		__assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
429	),
430
431	TP_printk("peer=[%s]:%s xid=0x%08x status=%d", __get_str(addr),
432			__get_str(port), __entry->xid,
433			__entry->status)
434);
 
 
 
 
 
 
 
 
435
436DEFINE_EVENT(rpc_xprt_event, xprt_timer,
437	TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
438	TP_ARGS(xprt, xid, status));
439
440DEFINE_EVENT(rpc_xprt_event, xprt_lookup_rqst,
441	TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
442	TP_ARGS(xprt, xid, status));
443
444DEFINE_EVENT(rpc_xprt_event, xprt_transmit,
445	TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
446	TP_ARGS(xprt, xid, status));
447
448DEFINE_EVENT(rpc_xprt_event, xprt_complete_rqst,
449	TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
450	TP_ARGS(xprt, xid, status));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
451
452TRACE_EVENT(xprt_ping,
453	TP_PROTO(const struct rpc_xprt *xprt, int status),
454
455	TP_ARGS(xprt, status),
456
457	TP_STRUCT__entry(
458		__field(int, status)
459		__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
460		__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
461	),
462
463	TP_fast_assign(
464		__entry->status = status;
465		__assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
466		__assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
467	),
468
469	TP_printk("peer=[%s]:%s status=%d",
470			__get_str(addr), __get_str(port), __entry->status)
471);
472
473TRACE_EVENT(xs_tcp_data_ready,
474	TP_PROTO(struct rpc_xprt *xprt, int err, unsigned int total),
475
476	TP_ARGS(xprt, err, total),
477
478	TP_STRUCT__entry(
479		__field(int, err)
480		__field(unsigned int, total)
481		__string(addr, xprt ? xprt->address_strings[RPC_DISPLAY_ADDR] :
482				"(null)")
483		__string(port, xprt ? xprt->address_strings[RPC_DISPLAY_PORT] :
484				"(null)")
485	),
486
487	TP_fast_assign(
488		__entry->err = err;
489		__entry->total = total;
490		__assign_str(addr, xprt ?
491			xprt->address_strings[RPC_DISPLAY_ADDR] : "(null)");
492		__assign_str(port, xprt ?
493			xprt->address_strings[RPC_DISPLAY_PORT] : "(null)");
494	),
495
496	TP_printk("peer=[%s]:%s err=%d total=%u", __get_str(addr),
497			__get_str(port), __entry->err, __entry->total)
498);
499
500#define rpc_show_sock_xprt_flags(flags) \
501	__print_flags(flags, "|", \
502		{ TCP_RCV_LAST_FRAG, "TCP_RCV_LAST_FRAG" }, \
503		{ TCP_RCV_COPY_FRAGHDR, "TCP_RCV_COPY_FRAGHDR" }, \
504		{ TCP_RCV_COPY_XID, "TCP_RCV_COPY_XID" }, \
505		{ TCP_RCV_COPY_DATA, "TCP_RCV_COPY_DATA" }, \
506		{ TCP_RCV_READ_CALLDIR, "TCP_RCV_READ_CALLDIR" }, \
507		{ TCP_RCV_COPY_CALLDIR, "TCP_RCV_COPY_CALLDIR" }, \
508		{ TCP_RPC_REPLY, "TCP_RPC_REPLY" })
509
510TRACE_EVENT(xs_tcp_data_recv,
511	TP_PROTO(struct sock_xprt *xs),
512
513	TP_ARGS(xs),
514
515	TP_STRUCT__entry(
516		__string(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR])
517		__string(port, xs->xprt.address_strings[RPC_DISPLAY_PORT])
518		__field(u32, xid)
519		__field(unsigned long, flags)
520		__field(unsigned long, copied)
521		__field(unsigned int, reclen)
522		__field(unsigned long, offset)
523	),
524
525	TP_fast_assign(
526		__assign_str(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR]);
527		__assign_str(port, xs->xprt.address_strings[RPC_DISPLAY_PORT]);
528		__entry->xid = be32_to_cpu(xs->tcp_xid);
529		__entry->flags = xs->tcp_flags;
530		__entry->copied = xs->tcp_copied;
531		__entry->reclen = xs->tcp_reclen;
532		__entry->offset = xs->tcp_offset;
533	),
534
535	TP_printk("peer=[%s]:%s xid=0x%08x flags=%s copied=%lu reclen=%u offset=%lu",
536			__get_str(addr), __get_str(port), __entry->xid,
537			rpc_show_sock_xprt_flags(__entry->flags),
538			__entry->copied, __entry->reclen, __entry->offset)
539);
540
541#define show_rqstp_flags(flags)						\
542	__print_flags(flags, "|",					\
543		{ (1UL << RQ_SECURE),		"RQ_SECURE"},		\
544		{ (1UL << RQ_LOCAL),		"RQ_LOCAL"},		\
545		{ (1UL << RQ_USEDEFERRAL),	"RQ_USEDEFERRAL"},	\
546		{ (1UL << RQ_DROPME),		"RQ_DROPME"},		\
547		{ (1UL << RQ_SPLICE_OK),	"RQ_SPLICE_OK"},	\
548		{ (1UL << RQ_VICTIM),		"RQ_VICTIM"},		\
549		{ (1UL << RQ_BUSY),		"RQ_BUSY"})
550
551TRACE_EVENT(svc_recv,
552	TP_PROTO(struct svc_rqst *rqst, int len),
553
554	TP_ARGS(rqst, len),
555
556	TP_STRUCT__entry(
557		__field(u32, xid)
558		__field(int, len)
559		__field(unsigned long, flags)
560		__string(addr, rqst->rq_xprt->xpt_remotebuf)
561	),
562
563	TP_fast_assign(
564		__entry->xid = be32_to_cpu(rqst->rq_xid);
565		__entry->len = len;
566		__entry->flags = rqst->rq_flags;
567		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
568	),
569
570	TP_printk("addr=%s xid=0x%08x len=%d flags=%s",
571			__get_str(addr), __entry->xid, __entry->len,
572			show_rqstp_flags(__entry->flags))
573);
574
575TRACE_EVENT(svc_process,
576	TP_PROTO(const struct svc_rqst *rqst, const char *name),
577
578	TP_ARGS(rqst, name),
579
580	TP_STRUCT__entry(
581		__field(u32, xid)
582		__field(u32, vers)
583		__field(u32, proc)
584		__string(service, name)
585		__string(addr, rqst->rq_xprt->xpt_remotebuf)
 
586	),
587
588	TP_fast_assign(
589		__entry->xid = be32_to_cpu(rqst->rq_xid);
590		__entry->vers = rqst->rq_vers;
591		__entry->proc = rqst->rq_proc;
592		__assign_str(service, name);
593		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
 
594	),
595
596	TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%u",
597			__get_str(addr), __entry->xid,
598			__get_str(service), __entry->vers, __entry->proc)
599);
600
601DECLARE_EVENT_CLASS(svc_rqst_event,
602
603	TP_PROTO(struct svc_rqst *rqst),
 
 
604
605	TP_ARGS(rqst),
606
607	TP_STRUCT__entry(
608		__field(u32, xid)
609		__field(unsigned long, flags)
610		__string(addr, rqst->rq_xprt->xpt_remotebuf)
611	),
612
613	TP_fast_assign(
614		__entry->xid = be32_to_cpu(rqst->rq_xid);
615		__entry->flags = rqst->rq_flags;
616		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
617	),
618
619	TP_printk("addr=%s xid=0x%08x flags=%s",
620			__get_str(addr), __entry->xid,
621			show_rqstp_flags(__entry->flags))
622);
 
 
 
 
 
 
623
624DEFINE_EVENT(svc_rqst_event, svc_defer,
625	TP_PROTO(struct svc_rqst *rqst),
626	TP_ARGS(rqst));
627
628DEFINE_EVENT(svc_rqst_event, svc_drop,
629	TP_PROTO(struct svc_rqst *rqst),
630	TP_ARGS(rqst));
631
632DECLARE_EVENT_CLASS(svc_rqst_status,
633
634	TP_PROTO(struct svc_rqst *rqst, int status),
635
636	TP_ARGS(rqst, status),
637
638	TP_STRUCT__entry(
639		__field(u32, xid)
640		__field(int, status)
641		__field(unsigned long, flags)
642		__string(addr, rqst->rq_xprt->xpt_remotebuf)
643	),
644
645	TP_fast_assign(
646		__entry->xid = be32_to_cpu(rqst->rq_xid);
647		__entry->status = status;
648		__entry->flags = rqst->rq_flags;
649		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
650	),
651
652	TP_printk("addr=%s xid=0x%08x status=%d flags=%s",
653		  __get_str(addr), __entry->xid,
654		  __entry->status, show_rqstp_flags(__entry->flags))
655);
656
657DEFINE_EVENT(svc_rqst_status, svc_send,
658	TP_PROTO(struct svc_rqst *rqst, int status),
659	TP_ARGS(rqst, status));
660
661#define show_svc_xprt_flags(flags)					\
662	__print_flags(flags, "|",					\
663		{ (1UL << XPT_BUSY),		"XPT_BUSY"},		\
664		{ (1UL << XPT_CONN),		"XPT_CONN"},		\
665		{ (1UL << XPT_CLOSE),		"XPT_CLOSE"},		\
666		{ (1UL << XPT_DATA),		"XPT_DATA"},		\
667		{ (1UL << XPT_TEMP),		"XPT_TEMP"},		\
668		{ (1UL << XPT_DEAD),		"XPT_DEAD"},		\
669		{ (1UL << XPT_CHNGBUF),		"XPT_CHNGBUF"},		\
670		{ (1UL << XPT_DEFERRED),	"XPT_DEFERRED"},	\
671		{ (1UL << XPT_OLD),		"XPT_OLD"},		\
672		{ (1UL << XPT_LISTENER),	"XPT_LISTENER"},	\
673		{ (1UL << XPT_CACHE_AUTH),	"XPT_CACHE_AUTH"},	\
674		{ (1UL << XPT_LOCAL),		"XPT_LOCAL"},		\
675		{ (1UL << XPT_KILL_TEMP),	"XPT_KILL_TEMP"},	\
676		{ (1UL << XPT_CONG_CTRL),	"XPT_CONG_CTRL"})
677
678TRACE_EVENT(svc_xprt_do_enqueue,
679	TP_PROTO(struct svc_xprt *xprt, struct svc_rqst *rqst),
680
681	TP_ARGS(xprt, rqst),
682
683	TP_STRUCT__entry(
684		__field(struct svc_xprt *, xprt)
685		__field(int, pid)
686		__field(unsigned long, flags)
687		__string(addr, xprt->xpt_remotebuf)
688	),
689
690	TP_fast_assign(
691		__entry->xprt = xprt;
692		__entry->pid = rqst? rqst->rq_task->pid : 0;
693		__entry->flags = xprt->xpt_flags;
694		__assign_str(addr, xprt->xpt_remotebuf);
695	),
696
697	TP_printk("xprt=%p addr=%s pid=%d flags=%s",
698			__entry->xprt, __get_str(addr),
699			__entry->pid, show_svc_xprt_flags(__entry->flags))
700);
701
702DECLARE_EVENT_CLASS(svc_xprt_event,
703	TP_PROTO(struct svc_xprt *xprt),
704
705	TP_ARGS(xprt),
706
707	TP_STRUCT__entry(
708		__field(struct svc_xprt *, xprt)
709		__field(unsigned long, flags)
710		__string(addr, xprt->xpt_remotebuf)
711	),
712
713	TP_fast_assign(
714		__entry->xprt = xprt;
715		__entry->flags = xprt->xpt_flags;
716		__assign_str(addr, xprt->xpt_remotebuf);
717	),
718
719	TP_printk("xprt=%p addr=%s flags=%s",
720			__entry->xprt, __get_str(addr),
721			show_svc_xprt_flags(__entry->flags))
722);
723
724DEFINE_EVENT(svc_xprt_event, svc_xprt_no_write_space,
725	TP_PROTO(struct svc_xprt *xprt),
726	TP_ARGS(xprt));
727
728TRACE_EVENT(svc_xprt_dequeue,
729	TP_PROTO(struct svc_rqst *rqst),
730
731	TP_ARGS(rqst),
732
733	TP_STRUCT__entry(
734		__field(struct svc_xprt *, xprt)
735		__field(unsigned long, flags)
736		__field(unsigned long, wakeup)
737		__string(addr, rqst->rq_xprt->xpt_remotebuf)
738	),
739
740	TP_fast_assign(
741		__entry->xprt = rqst->rq_xprt;
742		__entry->flags = rqst->rq_xprt->xpt_flags;
743		__entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
744							rqst->rq_qtime));
745		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
746	),
747
748	TP_printk("xprt=%p addr=%s flags=%s wakeup-us=%lu",
749			__entry->xprt, __get_str(addr),
750			show_svc_xprt_flags(__entry->flags),
751			__entry->wakeup)
752);
753
754TRACE_EVENT(svc_wake_up,
755	TP_PROTO(int pid),
756
757	TP_ARGS(pid),
758
759	TP_STRUCT__entry(
760		__field(int, pid)
761	),
762
763	TP_fast_assign(
764		__entry->pid = pid;
765	),
766
767	TP_printk("pid=%d", __entry->pid)
768);
769
770TRACE_EVENT(svc_handle_xprt,
771	TP_PROTO(struct svc_xprt *xprt, int len),
772
773	TP_ARGS(xprt, len),
774
775	TP_STRUCT__entry(
776		__field(struct svc_xprt *, xprt)
777		__field(int, len)
778		__field(unsigned long, flags)
779		__string(addr, xprt->xpt_remotebuf)
780	),
781
782	TP_fast_assign(
783		__entry->xprt = xprt;
784		__entry->len = len;
785		__entry->flags = xprt->xpt_flags;
786		__assign_str(addr, xprt->xpt_remotebuf);
787	),
788
789	TP_printk("xprt=%p addr=%s len=%d flags=%s",
790		__entry->xprt, __get_str(addr),
791		__entry->len, show_svc_xprt_flags(__entry->flags))
792);
793
794TRACE_EVENT(svc_stats_latency,
795	TP_PROTO(const struct svc_rqst *rqst),
796
797	TP_ARGS(rqst),
798
799	TP_STRUCT__entry(
800		__field(u32, xid)
801		__field(unsigned long, execute)
802		__string(addr, rqst->rq_xprt->xpt_remotebuf)
803	),
804
805	TP_fast_assign(
806		__entry->xid = be32_to_cpu(rqst->rq_xid);
807		__entry->execute = ktime_to_us(ktime_sub(ktime_get(),
808							 rqst->rq_stime));
809		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
810	),
811
812	TP_printk("addr=%s xid=0x%08x execute-us=%lu",
813		__get_str(addr), __entry->xid, __entry->execute)
814);
815
816DECLARE_EVENT_CLASS(svc_deferred_event,
817	TP_PROTO(struct svc_deferred_req *dr),
 
 
818
819	TP_ARGS(dr),
820
821	TP_STRUCT__entry(
822		__field(u32, xid)
823		__string(addr, dr->xprt->xpt_remotebuf)
824	),
825
826	TP_fast_assign(
827		__entry->xid = be32_to_cpu(*(__be32 *)(dr->args +
828						       (dr->xprt_hlen>>2)));
829		__assign_str(addr, dr->xprt->xpt_remotebuf);
830	),
831
832	TP_printk("addr=%s xid=0x%08x", __get_str(addr), __entry->xid)
833);
 
 
 
 
 
 
 
 
 
834
835DEFINE_EVENT(svc_deferred_event, svc_drop_deferred,
836	TP_PROTO(struct svc_deferred_req *dr),
837	TP_ARGS(dr));
838DEFINE_EVENT(svc_deferred_event, svc_revisit_deferred,
839	TP_PROTO(struct svc_deferred_req *dr),
840	TP_ARGS(dr));
841#endif /* _TRACE_SUNRPC_H */
842
843#include <trace/define_trace.h>