arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / events / cachefiles.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* CacheFiles tracepoints
3  *
4  * Copyright (C) 2021 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_get_ioreq,
23         cachefiles_obj_new,
24         cachefiles_obj_put_alloc_fail,
25         cachefiles_obj_put_detach,
26         cachefiles_obj_put_ioreq,
27         cachefiles_obj_see_clean_commit,
28         cachefiles_obj_see_clean_delete,
29         cachefiles_obj_see_clean_drop_tmp,
30         cachefiles_obj_see_lookup_cookie,
31         cachefiles_obj_see_lookup_failed,
32         cachefiles_obj_see_withdraw_cookie,
33         cachefiles_obj_see_withdrawal,
34         cachefiles_obj_get_ondemand_fd,
35         cachefiles_obj_put_ondemand_fd,
36 };
37
38 enum fscache_why_object_killed {
39         FSCACHE_OBJECT_IS_STALE,
40         FSCACHE_OBJECT_IS_WEIRD,
41         FSCACHE_OBJECT_INVALIDATED,
42         FSCACHE_OBJECT_NO_SPACE,
43         FSCACHE_OBJECT_WAS_RETIRED,
44         FSCACHE_OBJECT_WAS_CULLED,
45         FSCACHE_VOLUME_IS_WEIRD,
46 };
47
48 enum cachefiles_coherency_trace {
49         cachefiles_coherency_check_aux,
50         cachefiles_coherency_check_content,
51         cachefiles_coherency_check_dirty,
52         cachefiles_coherency_check_len,
53         cachefiles_coherency_check_objsize,
54         cachefiles_coherency_check_ok,
55         cachefiles_coherency_check_type,
56         cachefiles_coherency_check_xattr,
57         cachefiles_coherency_set_fail,
58         cachefiles_coherency_set_ok,
59         cachefiles_coherency_vol_check_cmp,
60         cachefiles_coherency_vol_check_ok,
61         cachefiles_coherency_vol_check_resv,
62         cachefiles_coherency_vol_check_xattr,
63         cachefiles_coherency_vol_set_fail,
64         cachefiles_coherency_vol_set_ok,
65 };
66
67 enum cachefiles_trunc_trace {
68         cachefiles_trunc_dio_adjust,
69         cachefiles_trunc_expand_tmpfile,
70         cachefiles_trunc_shrink,
71 };
72
73 enum cachefiles_prepare_read_trace {
74         cachefiles_trace_read_after_eof,
75         cachefiles_trace_read_found_hole,
76         cachefiles_trace_read_found_part,
77         cachefiles_trace_read_have_data,
78         cachefiles_trace_read_no_data,
79         cachefiles_trace_read_no_file,
80         cachefiles_trace_read_seek_error,
81         cachefiles_trace_read_seek_nxio,
82 };
83
84 enum cachefiles_error_trace {
85         cachefiles_trace_fallocate_error,
86         cachefiles_trace_getxattr_error,
87         cachefiles_trace_link_error,
88         cachefiles_trace_lookup_error,
89         cachefiles_trace_mkdir_error,
90         cachefiles_trace_notify_change_error,
91         cachefiles_trace_open_error,
92         cachefiles_trace_read_error,
93         cachefiles_trace_remxattr_error,
94         cachefiles_trace_rename_error,
95         cachefiles_trace_seek_error,
96         cachefiles_trace_setxattr_error,
97         cachefiles_trace_statfs_error,
98         cachefiles_trace_tmpfile_error,
99         cachefiles_trace_trunc_error,
100         cachefiles_trace_unlink_error,
101         cachefiles_trace_write_error,
102 };
103
104 #endif
105
106 /*
107  * Define enum -> string mappings for display.
108  */
109 #define cachefiles_obj_kill_traces                              \
110         EM(FSCACHE_OBJECT_IS_STALE,     "stale")                \
111         EM(FSCACHE_OBJECT_IS_WEIRD,     "weird")                \
112         EM(FSCACHE_OBJECT_INVALIDATED,  "inval")                \
113         EM(FSCACHE_OBJECT_NO_SPACE,     "no_space")             \
114         EM(FSCACHE_OBJECT_WAS_RETIRED,  "was_retired")          \
115         EM(FSCACHE_OBJECT_WAS_CULLED,   "was_culled")           \
116         E_(FSCACHE_VOLUME_IS_WEIRD,     "volume_weird")
117
118 #define cachefiles_obj_ref_traces                                       \
119         EM(cachefiles_obj_get_ioreq,            "GET ioreq")            \
120         EM(cachefiles_obj_new,                  "NEW obj")              \
121         EM(cachefiles_obj_put_alloc_fail,       "PUT alloc_fail")       \
122         EM(cachefiles_obj_put_detach,           "PUT detach")           \
123         EM(cachefiles_obj_put_ioreq,            "PUT ioreq")            \
124         EM(cachefiles_obj_see_clean_commit,     "SEE clean_commit")     \
125         EM(cachefiles_obj_see_clean_delete,     "SEE clean_delete")     \
126         EM(cachefiles_obj_see_clean_drop_tmp,   "SEE clean_drop_tmp")   \
127         EM(cachefiles_obj_see_lookup_cookie,    "SEE lookup_cookie")    \
128         EM(cachefiles_obj_see_lookup_failed,    "SEE lookup_failed")    \
129         EM(cachefiles_obj_see_withdraw_cookie,  "SEE withdraw_cookie")  \
130         E_(cachefiles_obj_see_withdrawal,       "SEE withdrawal")
131
132 #define cachefiles_coherency_traces                                     \
133         EM(cachefiles_coherency_check_aux,      "BAD aux ")             \
134         EM(cachefiles_coherency_check_content,  "BAD cont")             \
135         EM(cachefiles_coherency_check_dirty,    "BAD dirt")             \
136         EM(cachefiles_coherency_check_len,      "BAD len ")             \
137         EM(cachefiles_coherency_check_objsize,  "BAD osiz")             \
138         EM(cachefiles_coherency_check_ok,       "OK      ")             \
139         EM(cachefiles_coherency_check_type,     "BAD type")             \
140         EM(cachefiles_coherency_check_xattr,    "BAD xatt")             \
141         EM(cachefiles_coherency_set_fail,       "SET fail")             \
142         EM(cachefiles_coherency_set_ok,         "SET ok  ")             \
143         EM(cachefiles_coherency_vol_check_cmp,  "VOL BAD cmp ")         \
144         EM(cachefiles_coherency_vol_check_ok,   "VOL OK      ")         \
145         EM(cachefiles_coherency_vol_check_resv, "VOL BAD resv") \
146         EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt")         \
147         EM(cachefiles_coherency_vol_set_fail,   "VOL SET fail")         \
148         E_(cachefiles_coherency_vol_set_ok,     "VOL SET ok  ")
149
150 #define cachefiles_trunc_traces                                         \
151         EM(cachefiles_trunc_dio_adjust,         "DIOADJ")               \
152         EM(cachefiles_trunc_expand_tmpfile,     "EXPTMP")               \
153         E_(cachefiles_trunc_shrink,             "SHRINK")
154
155 #define cachefiles_prepare_read_traces                                  \
156         EM(cachefiles_trace_read_after_eof,     "after-eof ")           \
157         EM(cachefiles_trace_read_found_hole,    "found-hole")           \
158         EM(cachefiles_trace_read_found_part,    "found-part")           \
159         EM(cachefiles_trace_read_have_data,     "have-data ")           \
160         EM(cachefiles_trace_read_no_data,       "no-data   ")           \
161         EM(cachefiles_trace_read_no_file,       "no-file   ")           \
162         EM(cachefiles_trace_read_seek_error,    "seek-error")           \
163         E_(cachefiles_trace_read_seek_nxio,     "seek-enxio")
164
165 #define cachefiles_error_traces                                         \
166         EM(cachefiles_trace_fallocate_error,    "fallocate")            \
167         EM(cachefiles_trace_getxattr_error,     "getxattr")             \
168         EM(cachefiles_trace_link_error,         "link")                 \
169         EM(cachefiles_trace_lookup_error,       "lookup")               \
170         EM(cachefiles_trace_mkdir_error,        "mkdir")                \
171         EM(cachefiles_trace_notify_change_error, "notify_change")       \
172         EM(cachefiles_trace_open_error,         "open")                 \
173         EM(cachefiles_trace_read_error,         "read")                 \
174         EM(cachefiles_trace_remxattr_error,     "remxattr")             \
175         EM(cachefiles_trace_rename_error,       "rename")               \
176         EM(cachefiles_trace_seek_error,         "seek")                 \
177         EM(cachefiles_trace_setxattr_error,     "setxattr")             \
178         EM(cachefiles_trace_statfs_error,       "statfs")               \
179         EM(cachefiles_trace_tmpfile_error,      "tmpfile")              \
180         EM(cachefiles_trace_trunc_error,        "trunc")                \
181         EM(cachefiles_trace_unlink_error,       "unlink")               \
182         E_(cachefiles_trace_write_error,        "write")
183
184
185 /*
186  * Export enum symbols via userspace.
187  */
188 #undef EM
189 #undef E_
190 #define EM(a, b) TRACE_DEFINE_ENUM(a);
191 #define E_(a, b) TRACE_DEFINE_ENUM(a);
192
193 cachefiles_obj_kill_traces;
194 cachefiles_obj_ref_traces;
195 cachefiles_coherency_traces;
196 cachefiles_trunc_traces;
197 cachefiles_prepare_read_traces;
198 cachefiles_error_traces;
199
200 /*
201  * Now redefine the EM() and E_() macros to map the enums to the strings that
202  * will be printed in the output.
203  */
204 #undef EM
205 #undef E_
206 #define EM(a, b)        { a, b },
207 #define E_(a, b)        { a, b }
208
209
210 TRACE_EVENT(cachefiles_ref,
211             TP_PROTO(unsigned int object_debug_id,
212                      unsigned int cookie_debug_id,
213                      int usage,
214                      enum cachefiles_obj_ref_trace why),
215
216             TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
217
218             /* Note that obj may be NULL */
219             TP_STRUCT__entry(
220                     __field(unsigned int,                       obj             )
221                     __field(unsigned int,                       cookie          )
222                     __field(enum cachefiles_obj_ref_trace,      why             )
223                     __field(int,                                usage           )
224                              ),
225
226             TP_fast_assign(
227                     __entry->obj        = object_debug_id;
228                     __entry->cookie     = cookie_debug_id;
229                     __entry->usage      = usage;
230                     __entry->why        = why;
231                            ),
232
233             TP_printk("c=%08x o=%08x u=%d %s",
234                       __entry->cookie, __entry->obj, __entry->usage,
235                       __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
236             );
237
238 TRACE_EVENT(cachefiles_lookup,
239             TP_PROTO(struct cachefiles_object *obj,
240                      struct dentry *dir,
241                      struct dentry *de),
242
243             TP_ARGS(obj, dir, de),
244
245             TP_STRUCT__entry(
246                     __field(unsigned int,               obj     )
247                     __field(short,                      error   )
248                     __field(unsigned long,              dino    )
249                     __field(unsigned long,              ino     )
250                              ),
251
252             TP_fast_assign(
253                     __entry->obj        = obj ? obj->debug_id : 0;
254                     __entry->dino       = d_backing_inode(dir)->i_ino;
255                     __entry->ino        = (!IS_ERR(de) && d_backing_inode(de) ?
256                                            d_backing_inode(de)->i_ino : 0);
257                     __entry->error      = IS_ERR(de) ? PTR_ERR(de) : 0;
258                            ),
259
260             TP_printk("o=%08x dB=%lx B=%lx e=%d",
261                       __entry->obj, __entry->dino, __entry->ino, __entry->error)
262             );
263
264 TRACE_EVENT(cachefiles_mkdir,
265             TP_PROTO(struct dentry *dir, struct dentry *subdir),
266
267             TP_ARGS(dir, subdir),
268
269             TP_STRUCT__entry(
270                     __field(unsigned int,                       dir     )
271                     __field(unsigned int,                       subdir  )
272                              ),
273
274             TP_fast_assign(
275                     __entry->dir        = d_backing_inode(dir)->i_ino;
276                     __entry->subdir     = d_backing_inode(subdir)->i_ino;
277                            ),
278
279             TP_printk("dB=%x sB=%x",
280                       __entry->dir,
281                       __entry->subdir)
282             );
283
284 TRACE_EVENT(cachefiles_tmpfile,
285             TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
286
287             TP_ARGS(obj, backer),
288
289             TP_STRUCT__entry(
290                     __field(unsigned int,                       obj     )
291                     __field(unsigned int,                       backer  )
292                              ),
293
294             TP_fast_assign(
295                     __entry->obj        = obj->debug_id;
296                     __entry->backer     = backer->i_ino;
297                            ),
298
299             TP_printk("o=%08x B=%x",
300                       __entry->obj,
301                       __entry->backer)
302             );
303
304 TRACE_EVENT(cachefiles_link,
305             TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
306
307             TP_ARGS(obj, backer),
308
309             TP_STRUCT__entry(
310                     __field(unsigned int,                       obj     )
311                     __field(unsigned int,                       backer  )
312                              ),
313
314             TP_fast_assign(
315                     __entry->obj        = obj->debug_id;
316                     __entry->backer     = backer->i_ino;
317                            ),
318
319             TP_printk("o=%08x B=%x",
320                       __entry->obj,
321                       __entry->backer)
322             );
323
324 TRACE_EVENT(cachefiles_unlink,
325             TP_PROTO(struct cachefiles_object *obj,
326                      ino_t ino,
327                      enum fscache_why_object_killed why),
328
329             TP_ARGS(obj, ino, why),
330
331             /* Note that obj may be NULL */
332             TP_STRUCT__entry(
333                     __field(unsigned int,               obj             )
334                     __field(unsigned int,               ino             )
335                     __field(enum fscache_why_object_killed, why         )
336                              ),
337
338             TP_fast_assign(
339                     __entry->obj        = obj ? obj->debug_id : UINT_MAX;
340                     __entry->ino        = ino;
341                     __entry->why        = why;
342                            ),
343
344             TP_printk("o=%08x B=%x w=%s",
345                       __entry->obj, __entry->ino,
346                       __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
347             );
348
349 TRACE_EVENT(cachefiles_rename,
350             TP_PROTO(struct cachefiles_object *obj,
351                      ino_t ino,
352                      enum fscache_why_object_killed why),
353
354             TP_ARGS(obj, ino, why),
355
356             /* Note that obj may be NULL */
357             TP_STRUCT__entry(
358                     __field(unsigned int,               obj             )
359                     __field(unsigned int,               ino             )
360                     __field(enum fscache_why_object_killed, why         )
361                              ),
362
363             TP_fast_assign(
364                     __entry->obj        = obj ? obj->debug_id : UINT_MAX;
365                     __entry->ino        = ino;
366                     __entry->why        = why;
367                            ),
368
369             TP_printk("o=%08x B=%x w=%s",
370                       __entry->obj, __entry->ino,
371                       __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
372             );
373
374 TRACE_EVENT(cachefiles_coherency,
375             TP_PROTO(struct cachefiles_object *obj,
376                      ino_t ino,
377                      enum cachefiles_content content,
378                      enum cachefiles_coherency_trace why),
379
380             TP_ARGS(obj, ino, content, why),
381
382             /* Note that obj may be NULL */
383             TP_STRUCT__entry(
384                     __field(unsigned int,                       obj     )
385                     __field(enum cachefiles_coherency_trace,    why     )
386                     __field(enum cachefiles_content,            content )
387                     __field(u64,                                ino     )
388                              ),
389
390             TP_fast_assign(
391                     __entry->obj        = obj->debug_id;
392                     __entry->why        = why;
393                     __entry->content    = content;
394                     __entry->ino        = ino;
395                            ),
396
397             TP_printk("o=%08x %s B=%llx c=%u",
398                       __entry->obj,
399                       __print_symbolic(__entry->why, cachefiles_coherency_traces),
400                       __entry->ino,
401                       __entry->content)
402             );
403
404 TRACE_EVENT(cachefiles_vol_coherency,
405             TP_PROTO(struct cachefiles_volume *volume,
406                      ino_t ino,
407                      enum cachefiles_coherency_trace why),
408
409             TP_ARGS(volume, ino, why),
410
411             /* Note that obj may be NULL */
412             TP_STRUCT__entry(
413                     __field(unsigned int,                       vol     )
414                     __field(enum cachefiles_coherency_trace,    why     )
415                     __field(u64,                                ino     )
416                              ),
417
418             TP_fast_assign(
419                     __entry->vol        = volume->vcookie->debug_id;
420                     __entry->why        = why;
421                     __entry->ino        = ino;
422                            ),
423
424             TP_printk("V=%08x %s B=%llx",
425                       __entry->vol,
426                       __print_symbolic(__entry->why, cachefiles_coherency_traces),
427                       __entry->ino)
428             );
429
430 TRACE_EVENT(cachefiles_prep_read,
431             TP_PROTO(struct cachefiles_object *obj,
432                      loff_t start,
433                      size_t len,
434                      unsigned short flags,
435                      enum netfs_io_source source,
436                      enum cachefiles_prepare_read_trace why,
437                      ino_t cache_inode, ino_t netfs_inode),
438
439             TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),
440
441             TP_STRUCT__entry(
442                     __field(unsigned int,               obj             )
443                     __field(unsigned short,             flags           )
444                     __field(enum netfs_io_source,       source          )
445                     __field(enum cachefiles_prepare_read_trace, why     )
446                     __field(size_t,                     len             )
447                     __field(loff_t,                     start           )
448                     __field(unsigned int,               netfs_inode     )
449                     __field(unsigned int,               cache_inode     )
450                              ),
451
452             TP_fast_assign(
453                     __entry->obj        = obj ? obj->debug_id : 0;
454                     __entry->flags      = flags;
455                     __entry->source     = source;
456                     __entry->why        = why;
457                     __entry->len        = len;
458                     __entry->start      = start;
459                     __entry->netfs_inode = netfs_inode;
460                     __entry->cache_inode = cache_inode;
461                            ),
462
463             TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x",
464                       __entry->obj,
465                       __print_symbolic(__entry->source, netfs_sreq_sources),
466                       __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
467                       __entry->flags,
468                       __entry->start, __entry->len,
469                       __entry->netfs_inode, __entry->cache_inode)
470             );
471
472 TRACE_EVENT(cachefiles_read,
473             TP_PROTO(struct cachefiles_object *obj,
474                      struct inode *backer,
475                      loff_t start,
476                      size_t len),
477
478             TP_ARGS(obj, backer, start, len),
479
480             TP_STRUCT__entry(
481                     __field(unsigned int,                       obj     )
482                     __field(unsigned int,                       backer  )
483                     __field(size_t,                             len     )
484                     __field(loff_t,                             start   )
485                              ),
486
487             TP_fast_assign(
488                     __entry->obj        = obj->debug_id;
489                     __entry->backer     = backer->i_ino;
490                     __entry->start      = start;
491                     __entry->len        = len;
492                            ),
493
494             TP_printk("o=%08x B=%x s=%llx l=%zx",
495                       __entry->obj,
496                       __entry->backer,
497                       __entry->start,
498                       __entry->len)
499             );
500
501 TRACE_EVENT(cachefiles_write,
502             TP_PROTO(struct cachefiles_object *obj,
503                      struct inode *backer,
504                      loff_t start,
505                      size_t len),
506
507             TP_ARGS(obj, backer, start, len),
508
509             TP_STRUCT__entry(
510                     __field(unsigned int,                       obj     )
511                     __field(unsigned int,                       backer  )
512                     __field(size_t,                             len     )
513                     __field(loff_t,                             start   )
514                              ),
515
516             TP_fast_assign(
517                     __entry->obj        = obj->debug_id;
518                     __entry->backer     = backer->i_ino;
519                     __entry->start      = start;
520                     __entry->len        = len;
521                            ),
522
523             TP_printk("o=%08x B=%x s=%llx l=%zx",
524                       __entry->obj,
525                       __entry->backer,
526                       __entry->start,
527                       __entry->len)
528             );
529
530 TRACE_EVENT(cachefiles_trunc,
531             TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
532                      loff_t from, loff_t to, enum cachefiles_trunc_trace why),
533
534             TP_ARGS(obj, backer, from, to, why),
535
536             TP_STRUCT__entry(
537                     __field(unsigned int,                       obj     )
538                     __field(unsigned int,                       backer  )
539                     __field(enum cachefiles_trunc_trace,        why     )
540                     __field(loff_t,                             from    )
541                     __field(loff_t,                             to      )
542                              ),
543
544             TP_fast_assign(
545                     __entry->obj        = obj->debug_id;
546                     __entry->backer     = backer->i_ino;
547                     __entry->from       = from;
548                     __entry->to         = to;
549                     __entry->why        = why;
550                            ),
551
552             TP_printk("o=%08x B=%x %s l=%llx->%llx",
553                       __entry->obj,
554                       __entry->backer,
555                       __print_symbolic(__entry->why, cachefiles_trunc_traces),
556                       __entry->from,
557                       __entry->to)
558             );
559
560 TRACE_EVENT(cachefiles_mark_active,
561             TP_PROTO(struct cachefiles_object *obj,
562                      struct inode *inode),
563
564             TP_ARGS(obj, inode),
565
566             /* Note that obj may be NULL */
567             TP_STRUCT__entry(
568                     __field(unsigned int,               obj             )
569                     __field(ino_t,                      inode           )
570                              ),
571
572             TP_fast_assign(
573                     __entry->obj        = obj ? obj->debug_id : 0;
574                     __entry->inode      = inode->i_ino;
575                            ),
576
577             TP_printk("o=%08x B=%lx",
578                       __entry->obj, __entry->inode)
579             );
580
581 TRACE_EVENT(cachefiles_mark_failed,
582             TP_PROTO(struct cachefiles_object *obj,
583                      struct inode *inode),
584
585             TP_ARGS(obj, inode),
586
587             /* Note that obj may be NULL */
588             TP_STRUCT__entry(
589                     __field(unsigned int,               obj             )
590                     __field(ino_t,                      inode           )
591                              ),
592
593             TP_fast_assign(
594                     __entry->obj        = obj ? obj->debug_id : 0;
595                     __entry->inode      = inode->i_ino;
596                            ),
597
598             TP_printk("o=%08x B=%lx",
599                       __entry->obj, __entry->inode)
600             );
601
602 TRACE_EVENT(cachefiles_mark_inactive,
603             TP_PROTO(struct cachefiles_object *obj,
604                      struct inode *inode),
605
606             TP_ARGS(obj, inode),
607
608             /* Note that obj may be NULL */
609             TP_STRUCT__entry(
610                     __field(unsigned int,               obj             )
611                     __field(ino_t,                      inode           )
612                              ),
613
614             TP_fast_assign(
615                     __entry->obj        = obj ? obj->debug_id : 0;
616                     __entry->inode      = inode->i_ino;
617                            ),
618
619             TP_printk("o=%08x B=%lx",
620                       __entry->obj, __entry->inode)
621             );
622
623 TRACE_EVENT(cachefiles_vfs_error,
624             TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
625                      int error, enum cachefiles_error_trace where),
626
627             TP_ARGS(obj, backer, error, where),
628
629             TP_STRUCT__entry(
630                     __field(unsigned int,                       obj     )
631                     __field(unsigned int,                       backer  )
632                     __field(enum cachefiles_error_trace,        where   )
633                     __field(short,                              error   )
634                              ),
635
636             TP_fast_assign(
637                     __entry->obj        = obj ? obj->debug_id : 0;
638                     __entry->backer     = backer->i_ino;
639                     __entry->error      = error;
640                     __entry->where      = where;
641                            ),
642
643             TP_printk("o=%08x B=%x %s e=%d",
644                       __entry->obj,
645                       __entry->backer,
646                       __print_symbolic(__entry->where, cachefiles_error_traces),
647                       __entry->error)
648             );
649
650 TRACE_EVENT(cachefiles_io_error,
651             TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
652                      int error, enum cachefiles_error_trace where),
653
654             TP_ARGS(obj, backer, error, where),
655
656             TP_STRUCT__entry(
657                     __field(unsigned int,                       obj     )
658                     __field(unsigned int,                       backer  )
659                     __field(enum cachefiles_error_trace,        where   )
660                     __field(short,                              error   )
661                              ),
662
663             TP_fast_assign(
664                     __entry->obj        = obj ? obj->debug_id : 0;
665                     __entry->backer     = backer->i_ino;
666                     __entry->error      = error;
667                     __entry->where      = where;
668                            ),
669
670             TP_printk("o=%08x B=%x %s e=%d",
671                       __entry->obj,
672                       __entry->backer,
673                       __print_symbolic(__entry->where, cachefiles_error_traces),
674                       __entry->error)
675             );
676
677 TRACE_EVENT(cachefiles_ondemand_open,
678             TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
679                      struct cachefiles_open *load),
680
681             TP_ARGS(obj, msg, load),
682
683             TP_STRUCT__entry(
684                     __field(unsigned int,       obj             )
685                     __field(unsigned int,       msg_id          )
686                     __field(unsigned int,       object_id       )
687                     __field(unsigned int,       fd              )
688                     __field(unsigned int,       flags           )
689                              ),
690
691             TP_fast_assign(
692                     __entry->obj        = obj ? obj->debug_id : 0;
693                     __entry->msg_id     = msg->msg_id;
694                     __entry->object_id  = msg->object_id;
695                     __entry->fd         = load->fd;
696                     __entry->flags      = load->flags;
697                            ),
698
699             TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
700                       __entry->obj,
701                       __entry->msg_id,
702                       __entry->object_id,
703                       __entry->fd,
704                       __entry->flags)
705             );
706
707 TRACE_EVENT(cachefiles_ondemand_copen,
708             TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
709                      long len),
710
711             TP_ARGS(obj, msg_id, len),
712
713             TP_STRUCT__entry(
714                     __field(unsigned int,       obj     )
715                     __field(unsigned int,       msg_id  )
716                     __field(long,               len     )
717                              ),
718
719             TP_fast_assign(
720                     __entry->obj        = obj ? obj->debug_id : 0;
721                     __entry->msg_id     = msg_id;
722                     __entry->len        = len;
723                            ),
724
725             TP_printk("o=%08x mid=%x l=%lx",
726                       __entry->obj,
727                       __entry->msg_id,
728                       __entry->len)
729             );
730
731 TRACE_EVENT(cachefiles_ondemand_close,
732             TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),
733
734             TP_ARGS(obj, msg),
735
736             TP_STRUCT__entry(
737                     __field(unsigned int,       obj             )
738                     __field(unsigned int,       msg_id          )
739                     __field(unsigned int,       object_id       )
740                              ),
741
742             TP_fast_assign(
743                     __entry->obj        = obj ? obj->debug_id : 0;
744                     __entry->msg_id     = msg->msg_id;
745                     __entry->object_id  = msg->object_id;
746                            ),
747
748             TP_printk("o=%08x mid=%x oid=%x",
749                       __entry->obj,
750                       __entry->msg_id,
751                       __entry->object_id)
752             );
753
754 TRACE_EVENT(cachefiles_ondemand_read,
755             TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
756                      struct cachefiles_read *load),
757
758             TP_ARGS(obj, msg, load),
759
760             TP_STRUCT__entry(
761                     __field(unsigned int,       obj             )
762                     __field(unsigned int,       msg_id          )
763                     __field(unsigned int,       object_id       )
764                     __field(loff_t,             start           )
765                     __field(size_t,             len             )
766                              ),
767
768             TP_fast_assign(
769                     __entry->obj        = obj ? obj->debug_id : 0;
770                     __entry->msg_id     = msg->msg_id;
771                     __entry->object_id  = msg->object_id;
772                     __entry->start      = load->off;
773                     __entry->len        = load->len;
774                            ),
775
776             TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
777                       __entry->obj,
778                       __entry->msg_id,
779                       __entry->object_id,
780                       __entry->start,
781                       __entry->len)
782             );
783
784 TRACE_EVENT(cachefiles_ondemand_cread,
785             TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),
786
787             TP_ARGS(obj, msg_id),
788
789             TP_STRUCT__entry(
790                     __field(unsigned int,       obj     )
791                     __field(unsigned int,       msg_id  )
792                              ),
793
794             TP_fast_assign(
795                     __entry->obj        = obj ? obj->debug_id : 0;
796                     __entry->msg_id     = msg_id;
797                            ),
798
799             TP_printk("o=%08x mid=%x",
800                       __entry->obj,
801                       __entry->msg_id)
802             );
803
804 TRACE_EVENT(cachefiles_ondemand_fd_write,
805             TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
806                      loff_t start, size_t len),
807
808             TP_ARGS(obj, backer, start, len),
809
810             TP_STRUCT__entry(
811                     __field(unsigned int,       obj     )
812                     __field(unsigned int,       backer  )
813                     __field(loff_t,             start   )
814                     __field(size_t,             len     )
815                              ),
816
817             TP_fast_assign(
818                     __entry->obj        = obj ? obj->debug_id : 0;
819                     __entry->backer     = backer->i_ino;
820                     __entry->start      = start;
821                     __entry->len        = len;
822                            ),
823
824             TP_printk("o=%08x iB=%x s=%llx l=%zx",
825                       __entry->obj,
826                       __entry->backer,
827                       __entry->start,
828                       __entry->len)
829             );
830
831 TRACE_EVENT(cachefiles_ondemand_fd_release,
832             TP_PROTO(struct cachefiles_object *obj, int object_id),
833
834             TP_ARGS(obj, object_id),
835
836             TP_STRUCT__entry(
837                     __field(unsigned int,       obj             )
838                     __field(unsigned int,       object_id       )
839                              ),
840
841             TP_fast_assign(
842                     __entry->obj        = obj ? obj->debug_id : 0;
843                     __entry->object_id  = object_id;
844                            ),
845
846             TP_printk("o=%08x oid=%x",
847                       __entry->obj,
848                       __entry->object_id)
849             );
850
851 #endif /* _TRACE_CACHEFILES_H */
852
853 /* This part must be outside protection */
854 #include <trace/define_trace.h>