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

source code of linux/include/trace/events/cachefiles.h