Fix: sunrpc: null rpc_clnt dereference in rpc_task_queued tracepoint
[lttng-modules.git] / instrumentation / events / lttng-module / rpc.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM rpc
3
4 #if !defined(LTTNG_TRACE_RPC_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define LTTNG_TRACE_RPC_H
6
7 #include <probes/lttng-tracepoint-event.h>
8 #include <linux/sunrpc/sched.h>
9 #include <linux/sunrpc/clnt.h>
10
11 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0))
12 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_status,
13
14 TP_PROTO(const struct rpc_task *task),
15
16 TP_ARGS(task),
17
18 TP_FIELDS(
19 ctf_integer(unsigned int, task_id, task->tk_pid)
20 ctf_integer(unsigned int, client_id, task->tk_client->cl_clid)
21 ctf_integer(int, status, task->tk_status)
22 )
23 )
24
25 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_call_status,
26 TP_PROTO(const struct rpc_task *task),
27
28 TP_ARGS(task)
29 )
30
31 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_bind_status,
32 TP_PROTO(const struct rpc_task *task),
33
34 TP_ARGS(task)
35 )
36 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
37 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_status,
38
39 TP_PROTO(struct rpc_task *task),
40
41 TP_ARGS(task),
42
43 TP_FIELDS(
44 ctf_integer(unsigned int, task_id, task->tk_pid)
45 ctf_integer(unsigned int, client_id, task->tk_client->cl_clid)
46 ctf_integer(int, status, task->tk_status)
47 )
48 )
49
50 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_call_status,
51 TP_PROTO(struct rpc_task *task),
52
53 TP_ARGS(task)
54 )
55
56 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_bind_status,
57 TP_PROTO(struct rpc_task *task),
58
59 TP_ARGS(task)
60 )
61 #else
62 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_status,
63
64 TP_PROTO(struct rpc_task *task),
65
66 TP_ARGS(task),
67
68 TP_FIELDS(
69 ctf_integer_hex(const struct rpc_task *, task, task)
70 ctf_integer_hex(const struct rpc_clnt *, clnt, task->tk_client)
71 ctf_integer(int, status, task->tk_status)
72 )
73 )
74
75 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_call_status,
76 TP_PROTO(struct rpc_task *task),
77
78 TP_ARGS(task)
79 )
80
81 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_bind_status,
82 TP_PROTO(struct rpc_task *task),
83
84 TP_ARGS(task)
85 )
86 #endif
87
88 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0))
89 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_status, rpc_connect_status,
90 TP_PROTO(const struct rpc_task *task),
91
92 TP_ARGS(task)
93 )
94 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0))
95 LTTNG_TRACEPOINT_EVENT(rpc_connect_status,
96 TP_PROTO(const struct rpc_task *task),
97
98 TP_ARGS(task),
99
100 TP_FIELDS(
101 ctf_integer(unsigned int, task_id, task->tk_pid)
102 ctf_integer(unsigned int, client_id, task->tk_client->cl_clid)
103 ctf_integer(int, status, task->tk_status)
104 )
105 )
106 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
107 LTTNG_TRACEPOINT_EVENT(rpc_connect_status,
108 TP_PROTO(struct rpc_task *task, int status),
109
110 TP_ARGS(task, status),
111
112 TP_FIELDS(
113 ctf_integer(unsigned int, task_id, task->tk_pid)
114 ctf_integer(unsigned int, client_id, task->tk_client->cl_clid)
115 ctf_integer(int, status, status)
116 )
117 )
118 #else
119 LTTNG_TRACEPOINT_EVENT(rpc_connect_status,
120 TP_PROTO(struct rpc_task *task, int status),
121
122 TP_ARGS(task, status),
123
124 TP_FIELDS(
125 ctf_integer_hex(const struct rpc_task *, task, task)
126 ctf_integer_hex(const struct rpc_clnt *, clnt, task->tk_client)
127 ctf_integer(int, status, status)
128 )
129 )
130 #endif
131
132 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,17,0))
133 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_running,
134
135 TP_PROTO(const struct rpc_task *task, const void *action),
136
137 TP_ARGS(task, action),
138
139 TP_FIELDS(
140 ctf_integer(unsigned int, task_id, task->tk_pid)
141 ctf_integer(unsigned int, client_id, task->tk_client ? task->tk_client->cl_clid : -1)
142 ctf_integer_hex(const void *, action, action)
143 ctf_integer(unsigned long, runstate, task->tk_runstate)
144 ctf_integer(int, status, task->tk_status)
145 ctf_integer(unsigned short, flags, task->tk_flags)
146 )
147 )
148
149 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_begin,
150
151 TP_PROTO(const struct rpc_task *task, const void *action),
152
153 TP_ARGS(task, action)
154 )
155
156 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_run_action,
157
158 TP_PROTO(const struct rpc_task *task, const void *action),
159
160 TP_ARGS(task, action)
161 )
162
163 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_complete,
164
165 TP_PROTO(const struct rpc_task *task, const void *action),
166
167 TP_ARGS(task, action)
168 )
169
170 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_queued,
171
172 TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
173
174 TP_ARGS(task, q),
175
176 TP_FIELDS(
177 ctf_integer(unsigned int, task_id, task->tk_pid)
178 ctf_integer(unsigned int, client_id, task->tk_client ?
179 task->tk_client->cl_clid : -1)
180 ctf_integer(unsigned long, timeout, task->tk_timeout)
181 ctf_integer(unsigned long, runstate, task->tk_runstate)
182 ctf_integer(int, status, task->tk_status)
183 ctf_integer(unsigned short, flags, task->tk_flags)
184 ctf_string(q_name, rpc_qname(q))
185 )
186 )
187
188 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_sleep,
189
190 TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
191
192 TP_ARGS(task, q)
193 )
194
195 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup,
196
197 TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
198
199 TP_ARGS(task, q)
200 )
201
202 #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
203 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_running,
204
205 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
206
207 TP_ARGS(clnt, task, action),
208
209 TP_FIELDS(
210 ctf_integer(unsigned int, task_id, task->tk_pid)
211 ctf_integer(unsigned int, client_id, task->tk_client ? task->tk_client->cl_clid : -1)
212 ctf_integer_hex(const void *, action, action)
213 ctf_integer(unsigned long, runstate, task->tk_runstate)
214 ctf_integer(int, status, task->tk_status)
215 ctf_integer(unsigned short, flags, task->tk_flags)
216 )
217 )
218
219 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_begin,
220
221 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
222
223 TP_ARGS(clnt, task, action)
224 )
225
226 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_run_action,
227
228 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
229
230 TP_ARGS(clnt, task, action)
231 )
232
233 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_complete,
234
235 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
236
237 TP_ARGS(clnt, task, action)
238 )
239
240 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_queued,
241
242 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
243
244 TP_ARGS(clnt, task, q),
245
246 TP_FIELDS(
247 ctf_integer(unsigned int, task_id, task->tk_pid)
248 ctf_integer(unsigned int, client_id, task->tk_client->cl_clid)
249 ctf_integer(unsigned long, timeout, task->tk_timeout)
250 ctf_integer(unsigned long, runstate, task->tk_runstate)
251 ctf_integer(int, status, task->tk_status)
252 ctf_integer(unsigned short, flags, task->tk_flags)
253 ctf_string(q_name, rpc_qname(q))
254 )
255 )
256
257 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_sleep,
258
259 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
260
261 TP_ARGS(clnt, task, q)
262 )
263
264 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup,
265
266 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
267
268 TP_ARGS(clnt, task, q)
269 )
270
271 #else
272 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_running,
273
274 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
275
276 TP_ARGS(clnt, task, action),
277
278 TP_FIELDS(
279 ctf_integer_hex(const struct rpc_clnt *, clnt, clnt)
280 ctf_integer_hex(const struct rpc_task *, task, task)
281 ctf_integer_hex(const void *, action, action)
282 ctf_integer(unsigned long, runstate, task->tk_runstate)
283 ctf_integer(int, status, task->tk_status)
284 ctf_integer(unsigned short, flags, task->tk_flags)
285 )
286 )
287
288 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_begin,
289
290 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
291
292 TP_ARGS(clnt, task, action)
293 )
294
295 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_run_action,
296
297 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
298
299 TP_ARGS(clnt, task, action)
300 )
301
302 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_running, rpc_task_complete,
303
304 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
305
306 TP_ARGS(clnt, task, action)
307 )
308
309 LTTNG_TRACEPOINT_EVENT_CLASS(rpc_task_queued,
310
311 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
312
313 TP_ARGS(clnt, task, q),
314
315 TP_FIELDS(
316 ctf_integer_hex(const struct rpc_clnt *, clnt, clnt)
317 ctf_integer_hex(const struct rpc_task *, task, task)
318 ctf_integer(unsigned long, timeout, task->tk_timeout)
319 ctf_integer(unsigned long, runstate, task->tk_runstate)
320 ctf_integer(int, status, task->tk_status)
321 ctf_integer(unsigned short, flags, task->tk_flags)
322 ctf_string(q_name, rpc_qname(q))
323 )
324 )
325
326 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_sleep,
327
328 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
329
330 TP_ARGS(clnt, task, q)
331 )
332
333 LTTNG_TRACEPOINT_EVENT_INSTANCE(rpc_task_queued, rpc_task_wakeup,
334
335 TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
336
337 TP_ARGS(clnt, task, q)
338 )
339 #endif
340
341 #endif /* LTTNG_TRACE_RPC_H */
342
343 #include <probes/define_trace.h>
This page took 0.035968 seconds and 4 git commands to generate.