Merge tag 'for-5.15-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
[linux-2.6-microblaze.git] / include / trace / events / cachefiles.h
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 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 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 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 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 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 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 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 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 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 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>