]>
Commit | Line | Data |
---|---|---|
82b0a4c3 TM |
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> | |
40b5ea0c TM |
9 | #include <net/tcp_states.h> |
10 | #include <linux/net.h> | |
82b0a4c3 TM |
11 | #include <linux/tracepoint.h> |
12 | ||
5753cba1 SD |
13 | DECLARE_EVENT_CLASS(rpc_task_status, |
14 | ||
15 | TP_PROTO(struct rpc_task *task), | |
16 | ||
17 | TP_ARGS(task), | |
18 | ||
19 | TP_STRUCT__entry( | |
92cb6c5b TM |
20 | __field(unsigned int, task_id) |
21 | __field(unsigned int, client_id) | |
5753cba1 SD |
22 | __field(int, status) |
23 | ), | |
24 | ||
25 | TP_fast_assign( | |
92cb6c5b TM |
26 | __entry->task_id = task->tk_pid; |
27 | __entry->client_id = task->tk_client->cl_clid; | |
5753cba1 SD |
28 | __entry->status = task->tk_status; |
29 | ), | |
30 | ||
92cb6c5b TM |
31 | TP_printk("task:%u@%u, status %d", |
32 | __entry->task_id, __entry->client_id, | |
33 | __entry->status) | |
5753cba1 SD |
34 | ); |
35 | ||
36 | DEFINE_EVENT(rpc_task_status, rpc_call_status, | |
37 | TP_PROTO(struct rpc_task *task), | |
38 | ||
39 | TP_ARGS(task) | |
40 | ); | |
41 | ||
42 | DEFINE_EVENT(rpc_task_status, rpc_bind_status, | |
43 | TP_PROTO(struct rpc_task *task), | |
44 | ||
45 | TP_ARGS(task) | |
46 | ); | |
47 | ||
48 | 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( | |
92cb6c5b TM |
54 | __field(unsigned int, task_id) |
55 | __field(unsigned int, client_id) | |
5753cba1 SD |
56 | __field(int, status) |
57 | ), | |
58 | ||
59 | TP_fast_assign( | |
92cb6c5b TM |
60 | __entry->task_id = task->tk_pid; |
61 | __entry->client_id = task->tk_client->cl_clid; | |
5753cba1 SD |
62 | __entry->status = status; |
63 | ), | |
64 | ||
92cb6c5b TM |
65 | TP_printk("task:%u@%u, status %d", |
66 | __entry->task_id, __entry->client_id, | |
67 | __entry->status) | |
5753cba1 SD |
68 | ); |
69 | ||
82b0a4c3 TM |
70 | 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( | |
92cb6c5b TM |
77 | __field(unsigned int, task_id) |
78 | __field(unsigned int, client_id) | |
82b0a4c3 TM |
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( | |
2ca310fc | 86 | __entry->client_id = clnt ? clnt->cl_clid : -1; |
92cb6c5b | 87 | __entry->task_id = task->tk_pid; |
82b0a4c3 TM |
88 | __entry->action = action; |
89 | __entry->runstate = task->tk_runstate; | |
90 | __entry->status = task->tk_status; | |
91 | __entry->flags = task->tk_flags; | |
92 | ), | |
93 | ||
2ca310fc | 94 | TP_printk("task:%u@%d flags=%4.4x state=%4.4lx status=%d action=%pf", |
92cb6c5b | 95 | __entry->task_id, __entry->client_id, |
82b0a4c3 TM |
96 | __entry->flags, |
97 | __entry->runstate, | |
98 | __entry->status, | |
99 | __entry->action | |
100 | ) | |
101 | ); | |
102 | ||
103 | 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 | 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 | 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 | 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( | |
92cb6c5b TM |
134 | __field(unsigned int, task_id) |
135 | __field(unsigned int, client_id) | |
82b0a4c3 TM |
136 | __field(unsigned long, timeout) |
137 | __field(unsigned long, runstate) | |
138 | __field(int, status) | |
139 | __field(unsigned short, flags) | |
85c0d24f | 140 | __string(q_name, rpc_qname(q)) |
82b0a4c3 TM |
141 | ), |
142 | ||
143 | TP_fast_assign( | |
92cb6c5b TM |
144 | __entry->client_id = clnt->cl_clid; |
145 | __entry->task_id = task->tk_pid; | |
82b0a4c3 TM |
146 | __entry->timeout = task->tk_timeout; |
147 | __entry->runstate = task->tk_runstate; | |
148 | __entry->status = task->tk_status; | |
149 | __entry->flags = task->tk_flags; | |
85c0d24f | 150 | __assign_str(q_name, rpc_qname(q)); |
82b0a4c3 TM |
151 | ), |
152 | ||
92cb6c5b TM |
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, | |
82b0a4c3 TM |
155 | __entry->flags, |
156 | __entry->runstate, | |
157 | __entry->status, | |
158 | __entry->timeout, | |
85c0d24f | 159 | __get_str(q_name) |
82b0a4c3 TM |
160 | ) |
161 | ); | |
162 | ||
163 | 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 | 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 | ||
40b5ea0c TM |
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 | 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 | 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 | DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change); | |
303 | DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect); | |
e8353c76 | 304 | DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error); |
40b5ea0c TM |
305 | DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection); |
306 | DEFINE_RPC_SOCKET_EVENT(rpc_socket_close); | |
307 | DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown); | |
308 | ||
82b0a4c3 TM |
309 | #endif /* _TRACE_SUNRPC_H */ |
310 | ||
311 | #include <trace/define_trace.h> |