Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0-or-later */
2 : : /* CacheFiles tracepoints
3 : : *
4 : : * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
5 : : * Written by David Howells (dhowells@redhat.com)
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 : :
21 : : enum 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 : :
58 : : cachefiles_obj_kill_traces;
59 : : cachefiles_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 : :
71 [ # # # # : 404 : TRACE_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 : :
99 [ # # # # : 404 : TRACE_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 : :
122 [ # # # # : 404 : TRACE_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 : :
144 [ # # # # : 404 : TRACE_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 : :
166 [ # # # # : 404 : TRACE_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 : :
191 [ # # # # : 404 : TRACE_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 : :
219 [ # # # # : 404 : TRACE_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 : :
240 [ # # # # : 404 : TRACE_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 : :
269 [ # # # # : 404 : TRACE_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 : :
293 [ # # # # : 404 : TRACE_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>
|