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