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