LCOV - code coverage report
Current view: top level - include/trace/events - sunrpc.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 73 0.0 %
Date: 2022-04-01 14:17:54 Functions: 0 156 0.0 %
Branches: 0 654 0.0 %

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

Generated by: LCOV version 1.14