Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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};
37
38enum 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
48enum 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
67enum cachefiles_trunc_trace {
68 cachefiles_trunc_dio_adjust,
69 cachefiles_trunc_expand_tmpfile,
70 cachefiles_trunc_shrink,
71};
72
73enum 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
84enum 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
193cachefiles_obj_kill_traces;
194cachefiles_obj_ref_traces;
195cachefiles_coherency_traces;
196cachefiles_trunc_traces;
197cachefiles_prepare_read_traces;
198cachefiles_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
210TRACE_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
238TRACE_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
264TRACE_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
284TRACE_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
304TRACE_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
324TRACE_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
349TRACE_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
374TRACE_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
404TRACE_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
430TRACE_EVENT(cachefiles_prep_read,
431 TP_PROTO(struct netfs_io_subrequest *sreq,
432 enum netfs_io_source source,
433 enum cachefiles_prepare_read_trace why,
434 ino_t cache_inode),
435
436 TP_ARGS(sreq, source, why, cache_inode),
437
438 TP_STRUCT__entry(
439 __field(unsigned int, rreq )
440 __field(unsigned short, index )
441 __field(unsigned short, flags )
442 __field(enum netfs_io_source, source )
443 __field(enum cachefiles_prepare_read_trace, why )
444 __field(size_t, len )
445 __field(loff_t, start )
446 __field(unsigned int, netfs_inode )
447 __field(unsigned int, cache_inode )
448 ),
449
450 TP_fast_assign(
451 __entry->rreq = sreq->rreq->debug_id;
452 __entry->index = sreq->debug_index;
453 __entry->flags = sreq->flags;
454 __entry->source = source;
455 __entry->why = why;
456 __entry->len = sreq->len;
457 __entry->start = sreq->start;
458 __entry->netfs_inode = sreq->rreq->inode->i_ino;
459 __entry->cache_inode = cache_inode;
460 ),
461
462 TP_printk("R=%08x[%u] %s %s f=%02x s=%llx %zx ni=%x B=%x",
463 __entry->rreq, __entry->index,
464 __print_symbolic(__entry->source, netfs_sreq_sources),
465 __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
466 __entry->flags,
467 __entry->start, __entry->len,
468 __entry->netfs_inode, __entry->cache_inode)
469 );
470
471TRACE_EVENT(cachefiles_read,
472 TP_PROTO(struct cachefiles_object *obj,
473 struct inode *backer,
474 loff_t start,
475 size_t len),
476
477 TP_ARGS(obj, backer, start, len),
478
479 TP_STRUCT__entry(
480 __field(unsigned int, obj )
481 __field(unsigned int, backer )
482 __field(size_t, len )
483 __field(loff_t, start )
484 ),
485
486 TP_fast_assign(
487 __entry->obj = obj->debug_id;
488 __entry->backer = backer->i_ino;
489 __entry->start = start;
490 __entry->len = len;
491 ),
492
493 TP_printk("o=%08x B=%x s=%llx l=%zx",
494 __entry->obj,
495 __entry->backer,
496 __entry->start,
497 __entry->len)
498 );
499
500TRACE_EVENT(cachefiles_write,
501 TP_PROTO(struct cachefiles_object *obj,
502 struct inode *backer,
503 loff_t start,
504 size_t len),
505
506 TP_ARGS(obj, backer, start, len),
507
508 TP_STRUCT__entry(
509 __field(unsigned int, obj )
510 __field(unsigned int, backer )
511 __field(size_t, len )
512 __field(loff_t, start )
513 ),
514
515 TP_fast_assign(
516 __entry->obj = obj->debug_id;
517 __entry->backer = backer->i_ino;
518 __entry->start = start;
519 __entry->len = len;
520 ),
521
522 TP_printk("o=%08x B=%x s=%llx l=%zx",
523 __entry->obj,
524 __entry->backer,
525 __entry->start,
526 __entry->len)
527 );
528
529TRACE_EVENT(cachefiles_trunc,
530 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
531 loff_t from, loff_t to, enum cachefiles_trunc_trace why),
532
533 TP_ARGS(obj, backer, from, to, why),
534
535 TP_STRUCT__entry(
536 __field(unsigned int, obj )
537 __field(unsigned int, backer )
538 __field(enum cachefiles_trunc_trace, why )
539 __field(loff_t, from )
540 __field(loff_t, to )
541 ),
542
543 TP_fast_assign(
544 __entry->obj = obj->debug_id;
545 __entry->backer = backer->i_ino;
546 __entry->from = from;
547 __entry->to = to;
548 __entry->why = why;
549 ),
550
551 TP_printk("o=%08x B=%x %s l=%llx->%llx",
552 __entry->obj,
553 __entry->backer,
554 __print_symbolic(__entry->why, cachefiles_trunc_traces),
555 __entry->from,
556 __entry->to)
557 );
558
559TRACE_EVENT(cachefiles_mark_active,
560 TP_PROTO(struct cachefiles_object *obj,
561 struct inode *inode),
562
563 TP_ARGS(obj, inode),
564
565 /* Note that obj may be NULL */
566 TP_STRUCT__entry(
567 __field(unsigned int, obj )
568 __field(ino_t, inode )
569 ),
570
571 TP_fast_assign(
572 __entry->obj = obj ? obj->debug_id : 0;
573 __entry->inode = inode->i_ino;
574 ),
575
576 TP_printk("o=%08x B=%lx",
577 __entry->obj, __entry->inode)
578 );
579
580TRACE_EVENT(cachefiles_mark_failed,
581 TP_PROTO(struct cachefiles_object *obj,
582 struct inode *inode),
583
584 TP_ARGS(obj, inode),
585
586 /* Note that obj may be NULL */
587 TP_STRUCT__entry(
588 __field(unsigned int, obj )
589 __field(ino_t, inode )
590 ),
591
592 TP_fast_assign(
593 __entry->obj = obj ? obj->debug_id : 0;
594 __entry->inode = inode->i_ino;
595 ),
596
597 TP_printk("o=%08x B=%lx",
598 __entry->obj, __entry->inode)
599 );
600
601TRACE_EVENT(cachefiles_mark_inactive,
602 TP_PROTO(struct cachefiles_object *obj,
603 struct inode *inode),
604
605 TP_ARGS(obj, inode),
606
607 /* Note that obj may be NULL */
608 TP_STRUCT__entry(
609 __field(unsigned int, obj )
610 __field(ino_t, inode )
611 ),
612
613 TP_fast_assign(
614 __entry->obj = obj ? obj->debug_id : 0;
615 __entry->inode = inode->i_ino;
616 ),
617
618 TP_printk("o=%08x B=%lx",
619 __entry->obj, __entry->inode)
620 );
621
622TRACE_EVENT(cachefiles_vfs_error,
623 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
624 int error, enum cachefiles_error_trace where),
625
626 TP_ARGS(obj, backer, error, where),
627
628 TP_STRUCT__entry(
629 __field(unsigned int, obj )
630 __field(unsigned int, backer )
631 __field(enum cachefiles_error_trace, where )
632 __field(short, error )
633 ),
634
635 TP_fast_assign(
636 __entry->obj = obj ? obj->debug_id : 0;
637 __entry->backer = backer->i_ino;
638 __entry->error = error;
639 __entry->where = where;
640 ),
641
642 TP_printk("o=%08x B=%x %s e=%d",
643 __entry->obj,
644 __entry->backer,
645 __print_symbolic(__entry->where, cachefiles_error_traces),
646 __entry->error)
647 );
648
649TRACE_EVENT(cachefiles_io_error,
650 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
651 int error, enum cachefiles_error_trace where),
652
653 TP_ARGS(obj, backer, error, where),
654
655 TP_STRUCT__entry(
656 __field(unsigned int, obj )
657 __field(unsigned int, backer )
658 __field(enum cachefiles_error_trace, where )
659 __field(short, error )
660 ),
661
662 TP_fast_assign(
663 __entry->obj = obj ? obj->debug_id : 0;
664 __entry->backer = backer->i_ino;
665 __entry->error = error;
666 __entry->where = where;
667 ),
668
669 TP_printk("o=%08x B=%x %s e=%d",
670 __entry->obj,
671 __entry->backer,
672 __print_symbolic(__entry->where, cachefiles_error_traces),
673 __entry->error)
674 );
675
676TRACE_EVENT(cachefiles_ondemand_open,
677 TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
678 struct cachefiles_open *load),
679
680 TP_ARGS(obj, msg, load),
681
682 TP_STRUCT__entry(
683 __field(unsigned int, obj )
684 __field(unsigned int, msg_id )
685 __field(unsigned int, object_id )
686 __field(unsigned int, fd )
687 __field(unsigned int, flags )
688 ),
689
690 TP_fast_assign(
691 __entry->obj = obj ? obj->debug_id : 0;
692 __entry->msg_id = msg->msg_id;
693 __entry->object_id = msg->object_id;
694 __entry->fd = load->fd;
695 __entry->flags = load->flags;
696 ),
697
698 TP_printk("o=%08x mid=%x oid=%x fd=%d f=%x",
699 __entry->obj,
700 __entry->msg_id,
701 __entry->object_id,
702 __entry->fd,
703 __entry->flags)
704 );
705
706TRACE_EVENT(cachefiles_ondemand_copen,
707 TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id,
708 long len),
709
710 TP_ARGS(obj, msg_id, len),
711
712 TP_STRUCT__entry(
713 __field(unsigned int, obj )
714 __field(unsigned int, msg_id )
715 __field(long, len )
716 ),
717
718 TP_fast_assign(
719 __entry->obj = obj ? obj->debug_id : 0;
720 __entry->msg_id = msg_id;
721 __entry->len = len;
722 ),
723
724 TP_printk("o=%08x mid=%x l=%lx",
725 __entry->obj,
726 __entry->msg_id,
727 __entry->len)
728 );
729
730TRACE_EVENT(cachefiles_ondemand_close,
731 TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg),
732
733 TP_ARGS(obj, msg),
734
735 TP_STRUCT__entry(
736 __field(unsigned int, obj )
737 __field(unsigned int, msg_id )
738 __field(unsigned int, object_id )
739 ),
740
741 TP_fast_assign(
742 __entry->obj = obj ? obj->debug_id : 0;
743 __entry->msg_id = msg->msg_id;
744 __entry->object_id = msg->object_id;
745 ),
746
747 TP_printk("o=%08x mid=%x oid=%x",
748 __entry->obj,
749 __entry->msg_id,
750 __entry->object_id)
751 );
752
753TRACE_EVENT(cachefiles_ondemand_read,
754 TP_PROTO(struct cachefiles_object *obj, struct cachefiles_msg *msg,
755 struct cachefiles_read *load),
756
757 TP_ARGS(obj, msg, load),
758
759 TP_STRUCT__entry(
760 __field(unsigned int, obj )
761 __field(unsigned int, msg_id )
762 __field(unsigned int, object_id )
763 __field(loff_t, start )
764 __field(size_t, len )
765 ),
766
767 TP_fast_assign(
768 __entry->obj = obj ? obj->debug_id : 0;
769 __entry->msg_id = msg->msg_id;
770 __entry->object_id = msg->object_id;
771 __entry->start = load->off;
772 __entry->len = load->len;
773 ),
774
775 TP_printk("o=%08x mid=%x oid=%x s=%llx l=%zx",
776 __entry->obj,
777 __entry->msg_id,
778 __entry->object_id,
779 __entry->start,
780 __entry->len)
781 );
782
783TRACE_EVENT(cachefiles_ondemand_cread,
784 TP_PROTO(struct cachefiles_object *obj, unsigned int msg_id),
785
786 TP_ARGS(obj, msg_id),
787
788 TP_STRUCT__entry(
789 __field(unsigned int, obj )
790 __field(unsigned int, msg_id )
791 ),
792
793 TP_fast_assign(
794 __entry->obj = obj ? obj->debug_id : 0;
795 __entry->msg_id = msg_id;
796 ),
797
798 TP_printk("o=%08x mid=%x",
799 __entry->obj,
800 __entry->msg_id)
801 );
802
803TRACE_EVENT(cachefiles_ondemand_fd_write,
804 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
805 loff_t start, size_t len),
806
807 TP_ARGS(obj, backer, start, len),
808
809 TP_STRUCT__entry(
810 __field(unsigned int, obj )
811 __field(unsigned int, backer )
812 __field(loff_t, start )
813 __field(size_t, len )
814 ),
815
816 TP_fast_assign(
817 __entry->obj = obj ? obj->debug_id : 0;
818 __entry->backer = backer->i_ino;
819 __entry->start = start;
820 __entry->len = len;
821 ),
822
823 TP_printk("o=%08x iB=%x s=%llx l=%zx",
824 __entry->obj,
825 __entry->backer,
826 __entry->start,
827 __entry->len)
828 );
829
830TRACE_EVENT(cachefiles_ondemand_fd_release,
831 TP_PROTO(struct cachefiles_object *obj, int object_id),
832
833 TP_ARGS(obj, object_id),
834
835 TP_STRUCT__entry(
836 __field(unsigned int, obj )
837 __field(unsigned int, object_id )
838 ),
839
840 TP_fast_assign(
841 __entry->obj = obj ? obj->debug_id : 0;
842 __entry->object_id = object_id;
843 ),
844
845 TP_printk("o=%08x oid=%x",
846 __entry->obj,
847 __entry->object_id)
848 );
849
850#endif /* _TRACE_CACHEFILES_H */
851
852/* This part must be outside protection */
853#include <trace/define_trace.h>