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