treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36
[linux-block.git] / include / trace / events / cachefiles.h
CommitLineData
b4d0d230 1/* SPDX-License-Identifier: GPL-2.0-or-later */
a18feb55
DH
2/* CacheFiles tracepoints
3 *
4 * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
a18feb55
DH
6 */
7#undef TRACE_SYSTEM
8#define TRACE_SYSTEM cachefiles
9
10#if !defined(_TRACE_CACHEFILES_H) || defined(TRACE_HEADER_MULTI_READ)
11#define _TRACE_CACHEFILES_H
12
13#include <linux/tracepoint.h>
14
15/*
16 * Define enums for tracing information.
17 */
18#ifndef __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
19#define __CACHEFILES_DECLARE_TRACE_ENUMS_ONCE_ONLY
20
21enum cachefiles_obj_ref_trace {
22 cachefiles_obj_put_wait_retry = fscache_obj_ref__nr_traces,
23 cachefiles_obj_put_wait_timeo,
24 cachefiles_obj_ref__nr_traces
25};
26
27#endif
28
29/*
30 * Define enum -> string mappings for display.
31 */
32#define cachefiles_obj_kill_traces \
33 EM(FSCACHE_OBJECT_IS_STALE, "stale") \
34 EM(FSCACHE_OBJECT_NO_SPACE, "no_space") \
35 EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \
36 E_(FSCACHE_OBJECT_WAS_CULLED, "was_culled")
37
38#define cachefiles_obj_ref_traces \
39 EM(fscache_obj_get_add_to_deps, "GET add_to_deps") \
40 EM(fscache_obj_get_queue, "GET queue") \
41 EM(fscache_obj_put_alloc_fail, "PUT alloc_fail") \
42 EM(fscache_obj_put_attach_fail, "PUT attach_fail") \
43 EM(fscache_obj_put_drop_obj, "PUT drop_obj") \
44 EM(fscache_obj_put_enq_dep, "PUT enq_dep") \
45 EM(fscache_obj_put_queue, "PUT queue") \
46 EM(fscache_obj_put_work, "PUT work") \
47 EM(cachefiles_obj_put_wait_retry, "PUT wait_retry") \
48 E_(cachefiles_obj_put_wait_timeo, "PUT wait_timeo")
49
50/*
51 * Export enum symbols via userspace.
52 */
53#undef EM
54#undef E_
55#define EM(a, b) TRACE_DEFINE_ENUM(a);
56#define E_(a, b) TRACE_DEFINE_ENUM(a);
57
58cachefiles_obj_kill_traces;
59cachefiles_obj_ref_traces;
60
61/*
62 * Now redefine the EM() and E_() macros to map the enums to the strings that
63 * will be printed in the output.
64 */
65#undef EM
66#undef E_
67#define EM(a, b) { a, b },
68#define E_(a, b) { a, b }
69
70
71TRACE_EVENT(cachefiles_ref,
72 TP_PROTO(struct cachefiles_object *obj,
73 struct fscache_cookie *cookie,
74 enum cachefiles_obj_ref_trace why,
75 int usage),
76
77 TP_ARGS(obj, cookie, why, usage),
78
79 /* Note that obj may be NULL */
80 TP_STRUCT__entry(
81 __field(struct cachefiles_object *, obj )
82 __field(struct fscache_cookie *, cookie )
83 __field(enum cachefiles_obj_ref_trace, why )
84 __field(int, usage )
85 ),
86
87 TP_fast_assign(
88 __entry->obj = obj;
89 __entry->cookie = cookie;
90 __entry->usage = usage;
91 __entry->why = why;
92 ),
93
94 TP_printk("c=%p o=%p u=%d %s",
95 __entry->cookie, __entry->obj, __entry->usage,
96 __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
97 );
98
99TRACE_EVENT(cachefiles_lookup,
100 TP_PROTO(struct cachefiles_object *obj,
101 struct dentry *de,
102 struct inode *inode),
103
104 TP_ARGS(obj, de, inode),
105
106 TP_STRUCT__entry(
107 __field(struct cachefiles_object *, obj )
108 __field(struct dentry *, de )
109 __field(struct inode *, inode )
110 ),
111
112 TP_fast_assign(
113 __entry->obj = obj;
114 __entry->de = de;
115 __entry->inode = inode;
116 ),
117
118 TP_printk("o=%p d=%p i=%p",
119 __entry->obj, __entry->de, __entry->inode)
120 );
121
122TRACE_EVENT(cachefiles_mkdir,
123 TP_PROTO(struct cachefiles_object *obj,
124 struct dentry *de, int ret),
125
126 TP_ARGS(obj, de, ret),
127
128 TP_STRUCT__entry(
129 __field(struct cachefiles_object *, obj )
130 __field(struct dentry *, de )
131 __field(int, ret )
132 ),
133
134 TP_fast_assign(
135 __entry->obj = obj;
136 __entry->de = de;
137 __entry->ret = ret;
138 ),
139
140 TP_printk("o=%p d=%p r=%u",
141 __entry->obj, __entry->de, __entry->ret)
142 );
143
144TRACE_EVENT(cachefiles_create,
145 TP_PROTO(struct cachefiles_object *obj,
146 struct dentry *de, int ret),
147
148 TP_ARGS(obj, de, ret),
149
150 TP_STRUCT__entry(
151 __field(struct cachefiles_object *, obj )
152 __field(struct dentry *, de )
153 __field(int, ret )
154 ),
155
156 TP_fast_assign(
157 __entry->obj = obj;
158 __entry->de = de;
159 __entry->ret = ret;
160 ),
161
162 TP_printk("o=%p d=%p r=%u",
163 __entry->obj, __entry->de, __entry->ret)
164 );
165
166TRACE_EVENT(cachefiles_unlink,
167 TP_PROTO(struct cachefiles_object *obj,
168 struct dentry *de,
169 enum fscache_why_object_killed why),
170
171 TP_ARGS(obj, de, why),
172
173 /* Note that obj may be NULL */
174 TP_STRUCT__entry(
175 __field(struct cachefiles_object *, obj )
176 __field(struct dentry *, de )
177 __field(enum fscache_why_object_killed, why )
178 ),
179
180 TP_fast_assign(
181 __entry->obj = obj;
182 __entry->de = de;
183 __entry->why = why;
184 ),
185
186 TP_printk("o=%p d=%p w=%s",
187 __entry->obj, __entry->de,
188 __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
189 );
190
191TRACE_EVENT(cachefiles_rename,
192 TP_PROTO(struct cachefiles_object *obj,
193 struct dentry *de,
194 struct dentry *to,
195 enum fscache_why_object_killed why),
196
197 TP_ARGS(obj, de, to, why),
198
199 /* Note that obj may be NULL */
200 TP_STRUCT__entry(
201 __field(struct cachefiles_object *, obj )
202 __field(struct dentry *, de )
203 __field(struct dentry *, to )
204 __field(enum fscache_why_object_killed, why )
205 ),
206
207 TP_fast_assign(
208 __entry->obj = obj;
209 __entry->de = de;
210 __entry->to = to;
211 __entry->why = why;
212 ),
213
214 TP_printk("o=%p d=%p t=%p w=%s",
215 __entry->obj, __entry->de, __entry->to,
216 __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
217 );
218
219TRACE_EVENT(cachefiles_mark_active,
220 TP_PROTO(struct cachefiles_object *obj,
221 struct dentry *de),
222
223 TP_ARGS(obj, de),
224
225 /* Note that obj may be NULL */
226 TP_STRUCT__entry(
227 __field(struct cachefiles_object *, obj )
228 __field(struct dentry *, de )
229 ),
230
231 TP_fast_assign(
232 __entry->obj = obj;
233 __entry->de = de;
234 ),
235
236 TP_printk("o=%p d=%p",
237 __entry->obj, __entry->de)
238 );
239
240TRACE_EVENT(cachefiles_wait_active,
241 TP_PROTO(struct cachefiles_object *obj,
242 struct dentry *de,
243 struct cachefiles_object *xobj),
244
245 TP_ARGS(obj, de, xobj),
246
247 /* Note that obj may be NULL */
248 TP_STRUCT__entry(
249 __field(struct cachefiles_object *, obj )
250 __field(struct dentry *, de )
251 __field(struct cachefiles_object *, xobj )
252 __field(u16, flags )
253 __field(u16, fsc_flags )
254 ),
255
256 TP_fast_assign(
257 __entry->obj = obj;
258 __entry->de = de;
259 __entry->xobj = xobj;
260 __entry->flags = xobj->flags;
261 __entry->fsc_flags = xobj->fscache.flags;
262 ),
263
264 TP_printk("o=%p d=%p wo=%p wf=%x wff=%x",
265 __entry->obj, __entry->de, __entry->xobj,
266 __entry->flags, __entry->fsc_flags)
267 );
268
269TRACE_EVENT(cachefiles_mark_inactive,
270 TP_PROTO(struct cachefiles_object *obj,
271 struct dentry *de,
272 struct inode *inode),
273
274 TP_ARGS(obj, de, inode),
275
276 /* Note that obj may be NULL */
277 TP_STRUCT__entry(
278 __field(struct cachefiles_object *, obj )
279 __field(struct dentry *, de )
280 __field(struct inode *, inode )
281 ),
282
283 TP_fast_assign(
284 __entry->obj = obj;
285 __entry->de = de;
286 __entry->inode = inode;
287 ),
288
289 TP_printk("o=%p d=%p i=%p",
290 __entry->obj, __entry->de, __entry->inode)
291 );
292
293TRACE_EVENT(cachefiles_mark_buried,
294 TP_PROTO(struct cachefiles_object *obj,
295 struct dentry *de,
296 enum fscache_why_object_killed why),
297
298 TP_ARGS(obj, de, why),
299
300 /* Note that obj may be NULL */
301 TP_STRUCT__entry(
302 __field(struct cachefiles_object *, obj )
303 __field(struct dentry *, de )
304 __field(enum fscache_why_object_killed, why )
305 ),
306
307 TP_fast_assign(
308 __entry->obj = obj;
309 __entry->de = de;
310 __entry->why = why;
311 ),
312
313 TP_printk("o=%p d=%p w=%s",
314 __entry->obj, __entry->de,
315 __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
316 );
317
318#endif /* _TRACE_CACHEFILES_H */
319
320/* This part must be outside protection */
321#include <trace/define_trace.h>