Branch data Line data Source code
1 : : #undef TRACE_SYSTEM
2 : : #define TRACE_SYSTEM sunrpc
3 : :
4 : : #if !defined(_TRACE_SUNRPC_H) || defined(TRACE_HEADER_MULTI_READ)
5 : : #define _TRACE_SUNRPC_H
6 : :
7 : : #include <linux/sunrpc/sched.h>
8 : : #include <linux/sunrpc/clnt.h>
9 : : #include <net/tcp_states.h>
10 : : #include <linux/net.h>
11 : : #include <linux/tracepoint.h>
12 : :
13 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(rpc_task_status,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
14 : :
15 : : TP_PROTO(struct rpc_task *task),
16 : :
17 : : TP_ARGS(task),
18 : :
19 : : TP_STRUCT__entry(
20 : : __field(unsigned int, task_id)
21 : : __field(unsigned int, client_id)
22 : : __field(int, status)
23 : : ),
24 : :
25 : : TP_fast_assign(
26 : : __entry->task_id = task->tk_pid;
27 : : __entry->client_id = task->tk_client->cl_clid;
28 : : __entry->status = task->tk_status;
29 : : ),
30 : :
31 : : TP_printk("task:%u@%u, status %d",
32 : : __entry->task_id, __entry->client_id,
33 : : __entry->status)
34 : : );
35 : :
36 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_status, rpc_call_status,
[ # # ]
37 : : TP_PROTO(struct rpc_task *task),
38 : :
39 : : TP_ARGS(task)
40 : : );
41 : :
42 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_status, rpc_bind_status,
[ # # ]
43 : : TP_PROTO(struct rpc_task *task),
44 : :
45 : : TP_ARGS(task)
46 : : );
47 : :
48 [ # # # # ]: 0 : TRACE_EVENT(rpc_connect_status,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ]
49 : : TP_PROTO(struct rpc_task *task, int status),
50 : :
51 : : TP_ARGS(task, status),
52 : :
53 : : TP_STRUCT__entry(
54 : : __field(unsigned int, task_id)
55 : : __field(unsigned int, client_id)
56 : : __field(int, status)
57 : : ),
58 : :
59 : : TP_fast_assign(
60 : : __entry->task_id = task->tk_pid;
61 : : __entry->client_id = task->tk_client->cl_clid;
62 : : __entry->status = status;
63 : : ),
64 : :
65 : : TP_printk("task:%u@%u, status %d",
66 : : __entry->task_id, __entry->client_id,
67 : : __entry->status)
68 : : );
69 : :
70 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(rpc_task_running,
[ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
71 : :
72 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
73 : :
74 : : TP_ARGS(clnt, task, action),
75 : :
76 : : TP_STRUCT__entry(
77 : : __field(unsigned int, task_id)
78 : : __field(unsigned int, client_id)
79 : : __field(const void *, action)
80 : : __field(unsigned long, runstate)
81 : : __field(int, status)
82 : : __field(unsigned short, flags)
83 : : ),
84 : :
85 : : TP_fast_assign(
86 : : __entry->client_id = clnt ? clnt->cl_clid : -1;
87 : : __entry->task_id = task->tk_pid;
88 : : __entry->action = action;
89 : : __entry->runstate = task->tk_runstate;
90 : : __entry->status = task->tk_status;
91 : : __entry->flags = task->tk_flags;
92 : : ),
93 : :
94 : : TP_printk("task:%u@%d flags=%4.4x state=%4.4lx status=%d action=%pf",
95 : : __entry->task_id, __entry->client_id,
96 : : __entry->flags,
97 : : __entry->runstate,
98 : : __entry->status,
99 : : __entry->action
100 : : )
101 : : );
102 : :
103 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_running, rpc_task_begin,
[ # # ]
104 : :
105 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
106 : :
107 : : TP_ARGS(clnt, task, action)
108 : :
109 : : );
110 : :
111 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_running, rpc_task_run_action,
[ # # ]
112 : :
113 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
114 : :
115 : : TP_ARGS(clnt, task, action)
116 : :
117 : : );
118 : :
119 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_running, rpc_task_complete,
[ # # ]
120 : :
121 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
122 : :
123 : : TP_ARGS(clnt, task, action)
124 : :
125 : : );
126 : :
127 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(rpc_task_queued,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
128 : :
129 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
130 : :
131 : : TP_ARGS(clnt, task, q),
132 : :
133 : : TP_STRUCT__entry(
134 : : __field(unsigned int, task_id)
135 : : __field(unsigned int, client_id)
136 : : __field(unsigned long, timeout)
137 : : __field(unsigned long, runstate)
138 : : __field(int, status)
139 : : __field(unsigned short, flags)
140 : : __string(q_name, rpc_qname(q))
141 : : ),
142 : :
143 : : TP_fast_assign(
144 : : __entry->client_id = clnt->cl_clid;
145 : : __entry->task_id = task->tk_pid;
146 : : __entry->timeout = task->tk_timeout;
147 : : __entry->runstate = task->tk_runstate;
148 : : __entry->status = task->tk_status;
149 : : __entry->flags = task->tk_flags;
150 : : __assign_str(q_name, rpc_qname(q));
151 : : ),
152 : :
153 : : TP_printk("task:%u@%u flags=%4.4x state=%4.4lx status=%d timeout=%lu queue=%s",
154 : : __entry->task_id, __entry->client_id,
155 : : __entry->flags,
156 : : __entry->runstate,
157 : : __entry->status,
158 : : __entry->timeout,
159 : : __get_str(q_name)
160 : : )
161 : : );
162 : :
163 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_queued, rpc_task_sleep,
[ # # ]
164 : :
165 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
166 : :
167 : : TP_ARGS(clnt, task, q)
168 : :
169 : : );
170 : :
171 [ # # # # ]: 0 : DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
[ # # ]
172 : :
173 : : TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
174 : :
175 : : TP_ARGS(clnt, task, q)
176 : :
177 : : );
178 : :
179 : : #define rpc_show_socket_state(state) \
180 : : __print_symbolic(state, \
181 : : { SS_FREE, "FREE" }, \
182 : : { SS_UNCONNECTED, "UNCONNECTED" }, \
183 : : { SS_CONNECTING, "CONNECTING," }, \
184 : : { SS_CONNECTED, "CONNECTED," }, \
185 : : { SS_DISCONNECTING, "DISCONNECTING" })
186 : :
187 : : #define rpc_show_sock_state(state) \
188 : : __print_symbolic(state, \
189 : : { TCP_ESTABLISHED, "ESTABLISHED" }, \
190 : : { TCP_SYN_SENT, "SYN_SENT" }, \
191 : : { TCP_SYN_RECV, "SYN_RECV" }, \
192 : : { TCP_FIN_WAIT1, "FIN_WAIT1" }, \
193 : : { TCP_FIN_WAIT2, "FIN_WAIT2" }, \
194 : : { TCP_TIME_WAIT, "TIME_WAIT" }, \
195 : : { TCP_CLOSE, "CLOSE" }, \
196 : : { TCP_CLOSE_WAIT, "CLOSE_WAIT" }, \
197 : : { TCP_LAST_ACK, "LAST_ACK" }, \
198 : : { TCP_LISTEN, "LISTEN" }, \
199 : : { TCP_CLOSING, "CLOSING" })
200 : :
201 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(xs_socket_event,
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
202 : :
203 : : TP_PROTO(
204 : : struct rpc_xprt *xprt,
205 : : struct socket *socket
206 : : ),
207 : :
208 : : TP_ARGS(xprt, socket),
209 : :
210 : : TP_STRUCT__entry(
211 : : __field(unsigned int, socket_state)
212 : : __field(unsigned int, sock_state)
213 : : __field(unsigned long long, ino)
214 : : __string(dstaddr,
215 : : xprt->address_strings[RPC_DISPLAY_ADDR])
216 : : __string(dstport,
217 : : xprt->address_strings[RPC_DISPLAY_PORT])
218 : : ),
219 : :
220 : : TP_fast_assign(
221 : : struct inode *inode = SOCK_INODE(socket);
222 : : __entry->socket_state = socket->state;
223 : : __entry->sock_state = socket->sk->sk_state;
224 : : __entry->ino = (unsigned long long)inode->i_ino;
225 : : __assign_str(dstaddr,
226 : : xprt->address_strings[RPC_DISPLAY_ADDR]);
227 : : __assign_str(dstport,
228 : : xprt->address_strings[RPC_DISPLAY_PORT]);
229 : : ),
230 : :
231 : : TP_printk(
232 : : "socket:[%llu] dstaddr=%s/%s "
233 : : "state=%u (%s) sk_state=%u (%s)",
234 : : __entry->ino, __get_str(dstaddr), __get_str(dstport),
235 : : __entry->socket_state,
236 : : rpc_show_socket_state(__entry->socket_state),
237 : : __entry->sock_state,
238 : : rpc_show_sock_state(__entry->sock_state)
239 : : )
240 : : );
241 : : #define DEFINE_RPC_SOCKET_EVENT(name) \
242 : : DEFINE_EVENT(xs_socket_event, name, \
243 : : TP_PROTO( \
244 : : struct rpc_xprt *xprt, \
245 : : struct socket *socket \
246 : : ), \
247 : : TP_ARGS(xprt, socket))
248 : :
249 [ # # ][ # # ]: 0 : DECLARE_EVENT_CLASS(xs_socket_event_done,
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
250 : :
251 : : TP_PROTO(
252 : : struct rpc_xprt *xprt,
253 : : struct socket *socket,
254 : : int error
255 : : ),
256 : :
257 : : TP_ARGS(xprt, socket, error),
258 : :
259 : : TP_STRUCT__entry(
260 : : __field(int, error)
261 : : __field(unsigned int, socket_state)
262 : : __field(unsigned int, sock_state)
263 : : __field(unsigned long long, ino)
264 : : __string(dstaddr,
265 : : xprt->address_strings[RPC_DISPLAY_ADDR])
266 : : __string(dstport,
267 : : xprt->address_strings[RPC_DISPLAY_PORT])
268 : : ),
269 : :
270 : : TP_fast_assign(
271 : : struct inode *inode = SOCK_INODE(socket);
272 : : __entry->socket_state = socket->state;
273 : : __entry->sock_state = socket->sk->sk_state;
274 : : __entry->ino = (unsigned long long)inode->i_ino;
275 : : __entry->error = error;
276 : : __assign_str(dstaddr,
277 : : xprt->address_strings[RPC_DISPLAY_ADDR]);
278 : : __assign_str(dstport,
279 : : xprt->address_strings[RPC_DISPLAY_PORT]);
280 : : ),
281 : :
282 : : TP_printk(
283 : : "error=%d socket:[%llu] dstaddr=%s/%s "
284 : : "state=%u (%s) sk_state=%u (%s)",
285 : : __entry->error,
286 : : __entry->ino, __get_str(dstaddr), __get_str(dstport),
287 : : __entry->socket_state,
288 : : rpc_show_socket_state(__entry->socket_state),
289 : : __entry->sock_state,
290 : : rpc_show_sock_state(__entry->sock_state)
291 : : )
292 : : );
293 : : #define DEFINE_RPC_SOCKET_EVENT_DONE(name) \
294 : : DEFINE_EVENT(xs_socket_event_done, name, \
295 : : TP_PROTO( \
296 : : struct rpc_xprt *xprt, \
297 : : struct socket *socket, \
298 : : int error \
299 : : ), \
300 : : TP_ARGS(xprt, socket, error))
301 : :
302 [ # # # # ]: 0 : DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
[ # # ]
303 [ # # # # ]: 0 : DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
[ # # ]
[ # # # # ]
[ # # ]
[ # # # # ]
[ # # ]
304 [ # # # # ]: 0 : DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
[ # # ]
305 [ # # # # ]: 0 : DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
[ # # ]
306 [ # # # # ]: 0 : DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
[ # # ]
307 [ # # # # ]: 0 : DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
[ # # ]
308 : :
309 : : #endif /* _TRACE_SUNRPC_H */
310 : :
311 : : #include <trace/define_trace.h>
|