xref: /linux/include/trace/events/dlm.h (revision a4eb44a6435d6d8f9e642407a4a06f65eb90ca04)
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 
52 	TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, int mode,
53 		 __u32 flags),
54 
55 	TP_ARGS(ls, lkb, mode, flags),
56 
57 	TP_STRUCT__entry(
58 		__field(__u32, ls_id)
59 		__field(__u32, lkb_id)
60 		__field(int, mode)
61 		__field(__u32, flags)
62 	),
63 
64 	TP_fast_assign(
65 		__entry->ls_id = ls->ls_global_id;
66 		__entry->lkb_id = lkb->lkb_id;
67 		__entry->mode = mode;
68 		__entry->flags = flags;
69 	),
70 
71 	TP_printk("ls_id=%u lkb_id=%x mode=%s flags=%s",
72 		  __entry->ls_id, __entry->lkb_id,
73 		  show_lock_mode(__entry->mode),
74 		  show_lock_flags(__entry->flags))
75 
76 );
77 
78 TRACE_EVENT(dlm_lock_end,
79 
80 	TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, int mode, __u32 flags,
81 		 int error),
82 
83 	TP_ARGS(ls, lkb, mode, flags, error),
84 
85 	TP_STRUCT__entry(
86 		__field(__u32, ls_id)
87 		__field(__u32, lkb_id)
88 		__field(int, mode)
89 		__field(__u32, flags)
90 		__field(int, error)
91 	),
92 
93 	TP_fast_assign(
94 		__entry->ls_id = ls->ls_global_id;
95 		__entry->lkb_id = lkb->lkb_id;
96 		__entry->mode = mode;
97 		__entry->flags = flags;
98 
99 		/* return value will be zeroed in those cases by dlm_lock()
100 		 * we do it here again to not introduce more overhead if
101 		 * trace isn't running and error reflects the return value.
102 		 */
103 		if (error == -EAGAIN || error == -EDEADLK)
104 			__entry->error = 0;
105 		else
106 			__entry->error = error;
107 	),
108 
109 	TP_printk("ls_id=%u lkb_id=%x mode=%s flags=%s error=%d",
110 		  __entry->ls_id, __entry->lkb_id,
111 		  show_lock_mode(__entry->mode),
112 		  show_lock_flags(__entry->flags), __entry->error)
113 
114 );
115 
116 TRACE_EVENT(dlm_bast,
117 
118 	TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, int mode),
119 
120 	TP_ARGS(ls, lkb, mode),
121 
122 	TP_STRUCT__entry(
123 		__field(__u32, ls_id)
124 		__field(__u32, lkb_id)
125 		__field(int, mode)
126 	),
127 
128 	TP_fast_assign(
129 		__entry->ls_id = ls->ls_global_id;
130 		__entry->lkb_id = lkb->lkb_id;
131 		__entry->mode = mode;
132 	),
133 
134 	TP_printk("ls_id=%u lkb_id=%x mode=%s", __entry->ls_id,
135 		  __entry->lkb_id, show_lock_mode(__entry->mode))
136 
137 );
138 
139 TRACE_EVENT(dlm_ast,
140 
141 	TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, struct dlm_lksb *lksb),
142 
143 	TP_ARGS(ls, lkb, lksb),
144 
145 	TP_STRUCT__entry(
146 		__field(__u32, ls_id)
147 		__field(__u32, lkb_id)
148 		__field(u8, sb_flags)
149 		__field(int, sb_status)
150 	),
151 
152 	TP_fast_assign(
153 		__entry->ls_id = ls->ls_global_id;
154 		__entry->lkb_id = lkb->lkb_id;
155 		__entry->sb_flags = lksb->sb_flags;
156 		__entry->sb_status = lksb->sb_status;
157 	),
158 
159 	TP_printk("ls_id=%u lkb_id=%x sb_flags=%s sb_status=%d",
160 		  __entry->ls_id, __entry->lkb_id,
161 		  show_dlm_sb_flags(__entry->sb_flags), __entry->sb_status)
162 
163 );
164 
165 /* note: we begin tracing dlm_unlock_start() only if ls and lkb are found */
166 TRACE_EVENT(dlm_unlock_start,
167 
168 	TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, __u32 flags),
169 
170 	TP_ARGS(ls, lkb, flags),
171 
172 	TP_STRUCT__entry(
173 		__field(__u32, ls_id)
174 		__field(__u32, lkb_id)
175 		__field(__u32, flags)
176 	),
177 
178 	TP_fast_assign(
179 		__entry->ls_id = ls->ls_global_id;
180 		__entry->lkb_id = lkb->lkb_id;
181 		__entry->flags = flags;
182 	),
183 
184 	TP_printk("ls_id=%u lkb_id=%x flags=%s",
185 		  __entry->ls_id, __entry->lkb_id,
186 		  show_lock_flags(__entry->flags))
187 
188 );
189 
190 TRACE_EVENT(dlm_unlock_end,
191 
192 	TP_PROTO(struct dlm_ls *ls, struct dlm_lkb *lkb, __u32 flags,
193 		 int error),
194 
195 	TP_ARGS(ls, lkb, flags, error),
196 
197 	TP_STRUCT__entry(
198 		__field(__u32, ls_id)
199 		__field(__u32, lkb_id)
200 		__field(__u32, flags)
201 		__field(int, error)
202 	),
203 
204 	TP_fast_assign(
205 		__entry->ls_id = ls->ls_global_id;
206 		__entry->lkb_id = lkb->lkb_id;
207 		__entry->flags = flags;
208 		__entry->error = error;
209 	),
210 
211 	TP_printk("ls_id=%u lkb_id=%x flags=%s error=%d",
212 		  __entry->ls_id, __entry->lkb_id,
213 		  show_lock_flags(__entry->flags), __entry->error)
214 
215 );
216 
217 TRACE_EVENT(dlm_send,
218 
219 	TP_PROTO(int nodeid, int ret),
220 
221 	TP_ARGS(nodeid, ret),
222 
223 	TP_STRUCT__entry(
224 		__field(int, nodeid)
225 		__field(int, ret)
226 	),
227 
228 	TP_fast_assign(
229 		__entry->nodeid = nodeid;
230 		__entry->ret = ret;
231 	),
232 
233 	TP_printk("nodeid=%d ret=%d", __entry->nodeid, __entry->ret)
234 
235 );
236 
237 TRACE_EVENT(dlm_recv,
238 
239 	TP_PROTO(int nodeid, int ret),
240 
241 	TP_ARGS(nodeid, ret),
242 
243 	TP_STRUCT__entry(
244 		__field(int, nodeid)
245 		__field(int, ret)
246 	),
247 
248 	TP_fast_assign(
249 		__entry->nodeid = nodeid;
250 		__entry->ret = ret;
251 	),
252 
253 	TP_printk("nodeid=%d ret=%d", __entry->nodeid, __entry->ret)
254 
255 );
256 
257 #endif /* if !defined(_TRACE_DLM_H) || defined(TRACE_HEADER_MULTI_READ) */
258 
259 /* This part must be outside protection */
260 #include <trace/define_trace.h>
261