Commit | Line | Data |
---|---|---|
f1d3b8f9 AA |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #undef TRACE_SYSTEM | |
3 | #define TRACE_SYSTEM dlm | |
4 | ||
5 | #if !defined(_TRACE_DLM_H) || defined(TRACE_HEADER_MULTI_READ) | |
6 | #define _TRACE_DLM_H | |
7 | ||
8 | #include <linux/dlm.h> | |
9 | #include <linux/dlmconstants.h> | |
10 | #include <linux/tracepoint.h> | |
11 | ||
12 | #include "../../../fs/dlm/dlm_internal.h" | |
13 | ||
14 | #define show_lock_flags(flags) __print_flags(flags, "|", \ | |
15 | { DLM_LKF_NOQUEUE, "NOQUEUE" }, \ | |
16 | { DLM_LKF_CANCEL, "CANCEL" }, \ | |
17 | { DLM_LKF_CONVERT, "CONVERT" }, \ | |
18 | { DLM_LKF_VALBLK, "VALBLK" }, \ | |
19 | { DLM_LKF_QUECVT, "QUECVT" }, \ | |
20 | { DLM_LKF_IVVALBLK, "IVVALBLK" }, \ | |
21 | { DLM_LKF_CONVDEADLK, "CONVDEADLK" }, \ | |
22 | { DLM_LKF_PERSISTENT, "PERSISTENT" }, \ | |
23 | { DLM_LKF_NODLCKWT, "NODLCKWT" }, \ | |
24 | { DLM_LKF_NODLCKBLK, "NODLCKBLK" }, \ | |
25 | { DLM_LKF_EXPEDITE, "EXPEDITE" }, \ | |
26 | { DLM_LKF_NOQUEUEBAST, "NOQUEUEBAST" }, \ | |
27 | { DLM_LKF_HEADQUE, "HEADQUE" }, \ | |
28 | { DLM_LKF_NOORDER, "NOORDER" }, \ | |
29 | { DLM_LKF_ORPHAN, "ORPHAN" }, \ | |
30 | { DLM_LKF_ALTPR, "ALTPR" }, \ | |
31 | { DLM_LKF_ALTCW, "ALTCW" }, \ | |
32 | { DLM_LKF_FORCEUNLOCK, "FORCEUNLOCK" }, \ | |
33 | { DLM_LKF_TIMEOUT, "TIMEOUT" }) | |
34 | ||
35 | #define show_lock_mode(mode) __print_symbolic(mode, \ | |
36 | { DLM_LOCK_IV, "IV"}, \ | |
37 | { DLM_LOCK_NL, "NL"}, \ | |
38 | { DLM_LOCK_CR, "CR"}, \ | |
39 | { DLM_LOCK_CW, "CW"}, \ | |
40 | { DLM_LOCK_PR, "PR"}, \ | |
41 | { DLM_LOCK_PW, "PW"}, \ | |
42 | { DLM_LOCK_EX, "EX"}) | |
43 | ||
44 | #define show_dlm_sb_flags(flags) __print_flags(flags, "|", \ | |
45 | { DLM_SBF_DEMOTED, "DEMOTED" }, \ | |
46 | { DLM_SBF_VALNOTVALID, "VALNOTVALID" }, \ | |
47 | { DLM_SBF_ALTMODE, "ALTMODE" }) | |
48 | ||
49 | /* note: we begin tracing dlm_lock_start() only if ls and lkb are found */ | |
50 | TRACE_EVENT(dlm_lock_start, | |
51 | ||
5d92a30e AA |
52 | TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, void *name, |
53 | unsigned int namelen, int mode, __u32 flags), | |
f1d3b8f9 | 54 | |
5d92a30e | 55 | TP_ARGS(ls, lkb, name, namelen, mode, flags), |
f1d3b8f9 AA |
56 | |
57 | TP_STRUCT__entry( | |
58 | __field(__u32, ls_id) | |
59 | __field(__u32, lkb_id) | |
60 | __field(int, mode) | |
61 | __field(__u32, flags) | |
5d92a30e AA |
62 | __dynamic_array(unsigned char, res_name, |
63 | lkb->lkb_resource ? lkb->lkb_resource->res_length : namelen) | |
f1d3b8f9 AA |
64 | ), |
65 | ||
66 | TP_fast_assign( | |
5d92a30e AA |
67 | struct dlm_rsb *r; |
68 | ||
f1d3b8f9 AA |
69 | __entry->ls_id = ls->ls_global_id; |
70 | __entry->lkb_id = lkb->lkb_id; | |
71 | __entry->mode = mode; | |
72 | __entry->flags = flags; | |
5d92a30e AA |
73 | |
74 | r = lkb->lkb_resource; | |
75 | if (r) | |
76 | memcpy(__get_dynamic_array(res_name), r->res_name, | |
77 | __get_dynamic_array_len(res_name)); | |
78 | else if (name) | |
79 | memcpy(__get_dynamic_array(res_name), name, | |
80 | __get_dynamic_array_len(res_name)); | |
f1d3b8f9 AA |
81 | ), |
82 | ||
5d92a30e | 83 | TP_printk("ls_id=%u lkb_id=%x mode=%s flags=%s res_name=%s", |
f1d3b8f9 AA |
84 | __entry->ls_id, __entry->lkb_id, |
85 | show_lock_mode(__entry->mode), | |
5d92a30e AA |
86 | show_lock_flags(__entry->flags), |
87 | __print_hex_str(__get_dynamic_array(res_name), | |
88 | __get_dynamic_array_len(res_name))) | |
f1d3b8f9 AA |
89 | |
90 | ); | |
91 | ||
92 | TRACE_EVENT(dlm_lock_end, | |
93 | ||
5d92a30e | 94 | TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, void *name, |
7a3de732 AA |
95 | unsigned int namelen, int mode, __u32 flags, int error, |
96 | bool kernel_lock), | |
f1d3b8f9 | 97 | |
7a3de732 | 98 | TP_ARGS(ls, lkb, name, namelen, mode, flags, error, kernel_lock), |
f1d3b8f9 AA |
99 | |
100 | TP_STRUCT__entry( | |
101 | __field(__u32, ls_id) | |
102 | __field(__u32, lkb_id) | |
103 | __field(int, mode) | |
104 | __field(__u32, flags) | |
105 | __field(int, error) | |
5d92a30e AA |
106 | __dynamic_array(unsigned char, res_name, |
107 | lkb->lkb_resource ? lkb->lkb_resource->res_length : namelen) | |
f1d3b8f9 AA |
108 | ), |
109 | ||
110 | TP_fast_assign( | |
5d92a30e AA |
111 | struct dlm_rsb *r; |
112 | ||
f1d3b8f9 AA |
113 | __entry->ls_id = ls->ls_global_id; |
114 | __entry->lkb_id = lkb->lkb_id; | |
115 | __entry->mode = mode; | |
116 | __entry->flags = flags; | |
7a3de732 | 117 | __entry->error = error; |
f1d3b8f9 | 118 | |
5d92a30e AA |
119 | r = lkb->lkb_resource; |
120 | if (r) | |
121 | memcpy(__get_dynamic_array(res_name), r->res_name, | |
122 | __get_dynamic_array_len(res_name)); | |
123 | else if (name) | |
124 | memcpy(__get_dynamic_array(res_name), name, | |
125 | __get_dynamic_array_len(res_name)); | |
126 | ||
7a3de732 AA |
127 | if (kernel_lock) { |
128 | /* return value will be zeroed in those cases by dlm_lock() | |
129 | * we do it here again to not introduce more overhead if | |
130 | * trace isn't running and error reflects the return value. | |
131 | */ | |
132 | if (error == -EAGAIN || error == -EDEADLK) | |
133 | __entry->error = 0; | |
134 | } | |
5d92a30e | 135 | |
f1d3b8f9 AA |
136 | ), |
137 | ||
5d92a30e | 138 | TP_printk("ls_id=%u lkb_id=%x mode=%s flags=%s error=%d res_name=%s", |
f1d3b8f9 AA |
139 | __entry->ls_id, __entry->lkb_id, |
140 | show_lock_mode(__entry->mode), | |
5d92a30e AA |
141 | show_lock_flags(__entry->flags), __entry->error, |
142 | __print_hex_str(__get_dynamic_array(res_name), | |
143 | __get_dynamic_array_len(res_name))) | |
f1d3b8f9 AA |
144 | |
145 | ); | |
146 | ||
147 | TRACE_EVENT(dlm_bast, | |
148 | ||
149 | TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, int mode), | |
150 | ||
151 | TP_ARGS(ls, lkb, mode), | |
152 | ||
153 | TP_STRUCT__entry( | |
154 | __field(__u32, ls_id) | |
155 | __field(__u32, lkb_id) | |
156 | __field(int, mode) | |
5d92a30e AA |
157 | __dynamic_array(unsigned char, res_name, |
158 | lkb->lkb_resource ? lkb->lkb_resource->res_length : 0) | |
f1d3b8f9 AA |
159 | ), |
160 | ||
161 | TP_fast_assign( | |
5d92a30e AA |
162 | struct dlm_rsb *r; |
163 | ||
f1d3b8f9 AA |
164 | __entry->ls_id = ls->ls_global_id; |
165 | __entry->lkb_id = lkb->lkb_id; | |
166 | __entry->mode = mode; | |
5d92a30e AA |
167 | |
168 | r = lkb->lkb_resource; | |
169 | if (r) | |
170 | memcpy(__get_dynamic_array(res_name), r->res_name, | |
171 | __get_dynamic_array_len(res_name)); | |
f1d3b8f9 AA |
172 | ), |
173 | ||
5d92a30e AA |
174 | TP_printk("ls_id=%u lkb_id=%x mode=%s res_name=%s", |
175 | __entry->ls_id, __entry->lkb_id, | |
176 | show_lock_mode(__entry->mode), | |
177 | __print_hex_str(__get_dynamic_array(res_name), | |
178 | __get_dynamic_array_len(res_name))) | |
f1d3b8f9 AA |
179 | |
180 | ); | |
181 | ||
182 | TRACE_EVENT(dlm_ast, | |
183 | ||
0c4c516f | 184 | TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb), |
f1d3b8f9 | 185 | |
0c4c516f | 186 | TP_ARGS(ls, lkb), |
f1d3b8f9 AA |
187 | |
188 | TP_STRUCT__entry( | |
189 | __field(__u32, ls_id) | |
190 | __field(__u32, lkb_id) | |
191 | __field(u8, sb_flags) | |
192 | __field(int, sb_status) | |
5d92a30e AA |
193 | __dynamic_array(unsigned char, res_name, |
194 | lkb->lkb_resource ? lkb->lkb_resource->res_length : 0) | |
f1d3b8f9 AA |
195 | ), |
196 | ||
197 | TP_fast_assign( | |
5d92a30e AA |
198 | struct dlm_rsb *r; |
199 | ||
f1d3b8f9 AA |
200 | __entry->ls_id = ls->ls_global_id; |
201 | __entry->lkb_id = lkb->lkb_id; | |
0c4c516f AA |
202 | __entry->sb_flags = lkb->lkb_lksb->sb_flags; |
203 | __entry->sb_status = lkb->lkb_lksb->sb_status; | |
5d92a30e AA |
204 | |
205 | r = lkb->lkb_resource; | |
206 | if (r) | |
207 | memcpy(__get_dynamic_array(res_name), r->res_name, | |
208 | __get_dynamic_array_len(res_name)); | |
f1d3b8f9 AA |
209 | ), |
210 | ||
5d92a30e | 211 | TP_printk("ls_id=%u lkb_id=%x sb_flags=%s sb_status=%d res_name=%s", |
f1d3b8f9 | 212 | __entry->ls_id, __entry->lkb_id, |
5d92a30e AA |
213 | show_dlm_sb_flags(__entry->sb_flags), __entry->sb_status, |
214 | __print_hex_str(__get_dynamic_array(res_name), | |
215 | __get_dynamic_array_len(res_name))) | |
f1d3b8f9 AA |
216 | |
217 | ); | |
218 | ||
219 | /* note: we begin tracing dlm_unlock_start() only if ls and lkb are found */ | |
220 | TRACE_EVENT(dlm_unlock_start, | |
221 | ||
222 | TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, __u32 flags), | |
223 | ||
224 | TP_ARGS(ls, lkb, flags), | |
225 | ||
226 | TP_STRUCT__entry( | |
227 | __field(__u32, ls_id) | |
228 | __field(__u32, lkb_id) | |
229 | __field(__u32, flags) | |
5d92a30e AA |
230 | __dynamic_array(unsigned char, res_name, |
231 | lkb->lkb_resource ? lkb->lkb_resource->res_length : 0) | |
f1d3b8f9 AA |
232 | ), |
233 | ||
234 | TP_fast_assign( | |
5d92a30e AA |
235 | struct dlm_rsb *r; |
236 | ||
f1d3b8f9 AA |
237 | __entry->ls_id = ls->ls_global_id; |
238 | __entry->lkb_id = lkb->lkb_id; | |
239 | __entry->flags = flags; | |
5d92a30e AA |
240 | |
241 | r = lkb->lkb_resource; | |
242 | if (r) | |
243 | memcpy(__get_dynamic_array(res_name), r->res_name, | |
244 | __get_dynamic_array_len(res_name)); | |
f1d3b8f9 AA |
245 | ), |
246 | ||
5d92a30e | 247 | TP_printk("ls_id=%u lkb_id=%x flags=%s res_name=%s", |
f1d3b8f9 | 248 | __entry->ls_id, __entry->lkb_id, |
5d92a30e AA |
249 | show_lock_flags(__entry->flags), |
250 | __print_hex_str(__get_dynamic_array(res_name), | |
251 | __get_dynamic_array_len(res_name))) | |
f1d3b8f9 AA |
252 | |
253 | ); | |
254 | ||
255 | TRACE_EVENT(dlm_unlock_end, | |
256 | ||
257 | TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, __u32 flags, | |
258 | int error), | |
259 | ||
260 | TP_ARGS(ls, lkb, flags, error), | |
261 | ||
262 | TP_STRUCT__entry( | |
263 | __field(__u32, ls_id) | |
264 | __field(__u32, lkb_id) | |
265 | __field(__u32, flags) | |
266 | __field(int, error) | |
5d92a30e AA |
267 | __dynamic_array(unsigned char, res_name, |
268 | lkb->lkb_resource ? lkb->lkb_resource->res_length : 0) | |
f1d3b8f9 AA |
269 | ), |
270 | ||
271 | TP_fast_assign( | |
5d92a30e AA |
272 | struct dlm_rsb *r; |
273 | ||
f1d3b8f9 AA |
274 | __entry->ls_id = ls->ls_global_id; |
275 | __entry->lkb_id = lkb->lkb_id; | |
276 | __entry->flags = flags; | |
277 | __entry->error = error; | |
5d92a30e AA |
278 | |
279 | r = lkb->lkb_resource; | |
280 | if (r) | |
281 | memcpy(__get_dynamic_array(res_name), r->res_name, | |
282 | __get_dynamic_array_len(res_name)); | |
f1d3b8f9 AA |
283 | ), |
284 | ||
5d92a30e | 285 | TP_printk("ls_id=%u lkb_id=%x flags=%s error=%d res_name=%s", |
f1d3b8f9 | 286 | __entry->ls_id, __entry->lkb_id, |
5d92a30e AA |
287 | show_lock_flags(__entry->flags), __entry->error, |
288 | __print_hex_str(__get_dynamic_array(res_name), | |
289 | __get_dynamic_array_len(res_name))) | |
f1d3b8f9 AA |
290 | |
291 | ); | |
292 | ||
92732376 AA |
293 | TRACE_EVENT(dlm_send, |
294 | ||
295 | TP_PROTO(int nodeid, int ret), | |
296 | ||
297 | TP_ARGS(nodeid, ret), | |
298 | ||
299 | TP_STRUCT__entry( | |
300 | __field(int, nodeid) | |
301 | __field(int, ret) | |
302 | ), | |
303 | ||
304 | TP_fast_assign( | |
305 | __entry->nodeid = nodeid; | |
306 | __entry->ret = ret; | |
307 | ), | |
308 | ||
309 | TP_printk("nodeid=%d ret=%d", __entry->nodeid, __entry->ret) | |
310 | ||
311 | ); | |
312 | ||
313 | TRACE_EVENT(dlm_recv, | |
314 | ||
315 | TP_PROTO(int nodeid, int ret), | |
316 | ||
317 | TP_ARGS(nodeid, ret), | |
318 | ||
319 | TP_STRUCT__entry( | |
320 | __field(int, nodeid) | |
321 | __field(int, ret) | |
322 | ), | |
323 | ||
324 | TP_fast_assign( | |
325 | __entry->nodeid = nodeid; | |
326 | __entry->ret = ret; | |
327 | ), | |
328 | ||
329 | TP_printk("nodeid=%d ret=%d", __entry->nodeid, __entry->ret) | |
330 | ||
331 | ); | |
332 | ||
f1d3b8f9 AA |
333 | #endif /* if !defined(_TRACE_DLM_H) || defined(TRACE_HEADER_MULTI_READ) */ |
334 | ||
335 | /* This part must be outside protection */ | |
336 | #include <trace/define_trace.h> |