projects/linux·blob master · refs

741 lines · 20.4 KiB

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 ([email protected])
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};
35
36enum fscache_why_object_killed {
37 FSCACHE_OBJECT_IS_STALE,
38 FSCACHE_OBJECT_IS_WEIRD,
39 FSCACHE_OBJECT_INVALIDATED,
40 FSCACHE_OBJECT_NO_SPACE,
41 FSCACHE_OBJECT_WAS_RETIRED,
42 FSCACHE_OBJECT_WAS_CULLED,
43 FSCACHE_VOLUME_IS_WEIRD,
44};
45
46enum cachefiles_coherency_trace {
47 cachefiles_coherency_check_aux,
48 cachefiles_coherency_check_content,
49 cachefiles_coherency_check_dirty,
50 cachefiles_coherency_check_len,
51 cachefiles_coherency_check_objsize,
52 cachefiles_coherency_check_ok,
53 cachefiles_coherency_check_type,
54 cachefiles_coherency_check_xattr,
55 cachefiles_coherency_discontiguous,
56 cachefiles_coherency_remove,
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_clear_padding,
69 cachefiles_trunc_dio_adjust,
70 cachefiles_trunc_expand_tmpfile,
71 cachefiles_trunc_shrink,
72 cachefiles_trunc_zap,
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_alignment_error,
88 cachefiles_trace_create_nospace,
89 cachefiles_trace_fallocate_error,
90 cachefiles_trace_getxattr_error,
91 cachefiles_trace_link_error,
92 cachefiles_trace_lookup_error,
93 cachefiles_trace_mkdir_error,
94 cachefiles_trace_mkdir_nospace,
95 cachefiles_trace_notify_change_error,
96 cachefiles_trace_open_error,
97 cachefiles_trace_read_error,
98 cachefiles_trace_remxattr_error,
99 cachefiles_trace_rename_error,
100 cachefiles_trace_seek_error,
101 cachefiles_trace_setxattr_error,
102 cachefiles_trace_statfs_error,
103 cachefiles_trace_tmpfile_error,
104 cachefiles_trace_trunc_error,
105 cachefiles_trace_unlink_error,
106 cachefiles_trace_write_error,
107 cachefiles_trace_write_nospace,
108 cachefiles_trace_write_nospace_2,
109};
110
111#endif
112
113/*
114 * Define enum -> string mappings for display.
115 */
116#define cachefiles_obj_kill_traces \
117 EM(FSCACHE_OBJECT_IS_STALE, "stale") \
118 EM(FSCACHE_OBJECT_IS_WEIRD, "weird") \
119 EM(FSCACHE_OBJECT_INVALIDATED, "inval") \
120 EM(FSCACHE_OBJECT_NO_SPACE, "no_space") \
121 EM(FSCACHE_OBJECT_WAS_RETIRED, "was_retired") \
122 EM(FSCACHE_OBJECT_WAS_CULLED, "was_culled") \
123 E_(FSCACHE_VOLUME_IS_WEIRD, "volume_weird")
124
125#define cachefiles_obj_ref_traces \
126 EM(cachefiles_obj_get_ioreq, "GET ioreq") \
127 EM(cachefiles_obj_new, "NEW obj") \
128 EM(cachefiles_obj_put_alloc_fail, "PUT alloc_fail") \
129 EM(cachefiles_obj_put_detach, "PUT detach") \
130 EM(cachefiles_obj_put_ioreq, "PUT ioreq") \
131 EM(cachefiles_obj_see_clean_commit, "SEE clean_commit") \
132 EM(cachefiles_obj_see_clean_delete, "SEE clean_delete") \
133 EM(cachefiles_obj_see_clean_drop_tmp, "SEE clean_drop_tmp") \
134 EM(cachefiles_obj_see_lookup_cookie, "SEE lookup_cookie") \
135 EM(cachefiles_obj_see_lookup_failed, "SEE lookup_failed") \
136 EM(cachefiles_obj_see_withdraw_cookie, "SEE withdraw_cookie") \
137 E_(cachefiles_obj_see_withdrawal, "SEE withdrawal")
138
139#define cachefiles_coherency_traces \
140 EM(cachefiles_coherency_check_aux, "BAD aux ") \
141 EM(cachefiles_coherency_check_content, "BAD cont") \
142 EM(cachefiles_coherency_check_dirty, "BAD dirt") \
143 EM(cachefiles_coherency_check_len, "BAD len ") \
144 EM(cachefiles_coherency_check_objsize, "BAD osiz") \
145 EM(cachefiles_coherency_check_ok, "OK ") \
146 EM(cachefiles_coherency_check_type, "BAD type") \
147 EM(cachefiles_coherency_check_xattr, "BAD xatt") \
148 EM(cachefiles_coherency_discontiguous, "--- gap ") \
149 EM(cachefiles_coherency_remove, "REMOVE ") \
150 EM(cachefiles_coherency_set_fail, "SET fail") \
151 EM(cachefiles_coherency_set_ok, "SET ok ") \
152 EM(cachefiles_coherency_vol_check_cmp, "VOL BAD cmp ") \
153 EM(cachefiles_coherency_vol_check_ok, "VOL OK ") \
154 EM(cachefiles_coherency_vol_check_resv, "VOL BAD resv") \
155 EM(cachefiles_coherency_vol_check_xattr,"VOL BAD xatt") \
156 EM(cachefiles_coherency_vol_set_fail, "VOL SET fail") \
157 E_(cachefiles_coherency_vol_set_ok, "VOL SET ok ")
158
159#define cachefiles_trunc_traces \
160 EM(cachefiles_trunc_clear_padding, "CLRPAD") \
161 EM(cachefiles_trunc_dio_adjust, "DIOADJ") \
162 EM(cachefiles_trunc_expand_tmpfile, "EXPTMP") \
163 EM(cachefiles_trunc_shrink, "SHRINK") \
164 E_(cachefiles_trunc_zap, "ZAP ")
165
166#define cachefiles_prepare_read_traces \
167 EM(cachefiles_trace_read_after_eof, "after-eof ") \
168 EM(cachefiles_trace_read_found_hole, "found-hole") \
169 EM(cachefiles_trace_read_found_part, "found-part") \
170 EM(cachefiles_trace_read_have_data, "have-data ") \
171 EM(cachefiles_trace_read_no_data, "no-data ") \
172 EM(cachefiles_trace_read_no_file, "no-file ") \
173 EM(cachefiles_trace_read_seek_error, "seek-error") \
174 E_(cachefiles_trace_read_seek_nxio, "seek-enxio")
175
176#define cachefiles_error_traces \
177 EM(cachefiles_trace_alignment_error, "align") \
178 EM(cachefiles_trace_create_nospace, "create-nospace") \
179 EM(cachefiles_trace_fallocate_error, "fallocate") \
180 EM(cachefiles_trace_getxattr_error, "getxattr") \
181 EM(cachefiles_trace_link_error, "link") \
182 EM(cachefiles_trace_lookup_error, "lookup") \
183 EM(cachefiles_trace_mkdir_error, "mkdir") \
184 EM(cachefiles_trace_mkdir_nospace, "mkdir-nospace") \
185 EM(cachefiles_trace_notify_change_error, "notify_change") \
186 EM(cachefiles_trace_open_error, "open") \
187 EM(cachefiles_trace_read_error, "read") \
188 EM(cachefiles_trace_remxattr_error, "remxattr") \
189 EM(cachefiles_trace_rename_error, "rename") \
190 EM(cachefiles_trace_seek_error, "seek") \
191 EM(cachefiles_trace_setxattr_error, "setxattr") \
192 EM(cachefiles_trace_statfs_error, "statfs") \
193 EM(cachefiles_trace_tmpfile_error, "tmpfile") \
194 EM(cachefiles_trace_trunc_error, "trunc") \
195 EM(cachefiles_trace_unlink_error, "unlink") \
196 EM(cachefiles_trace_write_error, "write") \
197 EM(cachefiles_trace_write_nospace, "write-nospace") \
198 E_(cachefiles_trace_write_nospace_2, "write-nospace-2")
199
200
201/*
202 * Export enum symbols via userspace.
203 */
204#undef EM
205#undef E_
206#define EM(a, b) TRACE_DEFINE_ENUM(a);
207#define E_(a, b) TRACE_DEFINE_ENUM(a);
208
209cachefiles_obj_kill_traces;
210cachefiles_obj_ref_traces;
211cachefiles_coherency_traces;
212cachefiles_trunc_traces;
213cachefiles_prepare_read_traces;
214cachefiles_error_traces;
215
216/*
217 * Now redefine the EM() and E_() macros to map the enums to the strings that
218 * will be printed in the output.
219 */
220#undef EM
221#undef E_
222#define EM(a, b) { a, b },
223#define E_(a, b) { a, b }
224
225
226TRACE_EVENT(cachefiles_ref,
227 TP_PROTO(unsigned int object_debug_id,
228 unsigned int cookie_debug_id,
229 int usage,
230 enum cachefiles_obj_ref_trace why),
231
232 TP_ARGS(object_debug_id, cookie_debug_id, usage, why),
233
234 /* Note that obj may be NULL */
235 TP_STRUCT__entry(
236 __field(unsigned int, obj)
237 __field(unsigned int, cookie)
238 __field(enum cachefiles_obj_ref_trace, why)
239 __field(int, usage)
240 ),
241
242 TP_fast_assign(
243 __entry->obj = object_debug_id;
244 __entry->cookie = cookie_debug_id;
245 __entry->usage = usage;
246 __entry->why = why;
247 ),
248
249 TP_printk("c=%08x o=%08x u=%d %s",
250 __entry->cookie, __entry->obj, __entry->usage,
251 __print_symbolic(__entry->why, cachefiles_obj_ref_traces))
252 );
253
254TRACE_EVENT(cachefiles_lookup,
255 TP_PROTO(struct cachefiles_object *obj,
256 struct dentry *dir,
257 struct dentry *de),
258
259 TP_ARGS(obj, dir, de),
260
261 TP_STRUCT__entry(
262 __field(u64, dino)
263 __field(u64, ino)
264 __field(unsigned int, obj)
265 __field(short, error)
266 ),
267
268 TP_fast_assign(
269 __entry->obj = obj ? obj->debug_id : 0;
270 __entry->dino = d_backing_inode(dir)->i_ino;
271 __entry->ino = (!IS_ERR(de) && d_backing_inode(de) ?
272 d_backing_inode(de)->i_ino : 0);
273 __entry->error = IS_ERR(de) ? PTR_ERR(de) : 0;
274 ),
275
276 TP_printk("o=%08x dB=%llx B=%llx e=%d",
277 __entry->obj, __entry->dino, __entry->ino, __entry->error)
278 );
279
280TRACE_EVENT(cachefiles_mkdir,
281 TP_PROTO(struct dentry *dir, struct dentry *subdir),
282
283 TP_ARGS(dir, subdir),
284
285 TP_STRUCT__entry(
286 __field(unsigned int, dir)
287 __field(unsigned int, subdir)
288 ),
289
290 TP_fast_assign(
291 __entry->dir = d_backing_inode(dir)->i_ino;
292 __entry->subdir = d_backing_inode(subdir)->i_ino;
293 ),
294
295 TP_printk("dB=%x sB=%x",
296 __entry->dir,
297 __entry->subdir)
298 );
299
300TRACE_EVENT(cachefiles_tmpfile,
301 TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
302
303 TP_ARGS(obj, backer),
304
305 TP_STRUCT__entry(
306 __field(unsigned int, obj)
307 __field(unsigned int, backer)
308 ),
309
310 TP_fast_assign(
311 __entry->obj = obj->debug_id;
312 __entry->backer = backer->i_ino;
313 ),
314
315 TP_printk("o=%08x B=%x",
316 __entry->obj,
317 __entry->backer)
318 );
319
320TRACE_EVENT(cachefiles_link,
321 TP_PROTO(struct cachefiles_object *obj, struct inode *backer),
322
323 TP_ARGS(obj, backer),
324
325 TP_STRUCT__entry(
326 __field(unsigned int, obj)
327 __field(unsigned int, backer)
328 ),
329
330 TP_fast_assign(
331 __entry->obj = obj->debug_id;
332 __entry->backer = backer->i_ino;
333 ),
334
335 TP_printk("o=%08x B=%x",
336 __entry->obj,
337 __entry->backer)
338 );
339
340TRACE_EVENT(cachefiles_unlink,
341 TP_PROTO(struct cachefiles_object *obj,
342 ino_t ino,
343 enum fscache_why_object_killed why),
344
345 TP_ARGS(obj, ino, why),
346
347 /* Note that obj may be NULL */
348 TP_STRUCT__entry(
349 __field(unsigned int, obj)
350 __field(unsigned int, ino)
351 __field(enum fscache_why_object_killed, why)
352 ),
353
354 TP_fast_assign(
355 __entry->obj = obj ? obj->debug_id : UINT_MAX;
356 __entry->ino = ino;
357 __entry->why = why;
358 ),
359
360 TP_printk("o=%08x B=%x w=%s",
361 __entry->obj, __entry->ino,
362 __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
363 );
364
365TRACE_EVENT(cachefiles_rename,
366 TP_PROTO(struct cachefiles_object *obj,
367 ino_t ino,
368 enum fscache_why_object_killed why),
369
370 TP_ARGS(obj, ino, why),
371
372 /* Note that obj may be NULL */
373 TP_STRUCT__entry(
374 __field(unsigned int, obj)
375 __field(unsigned int, ino)
376 __field(enum fscache_why_object_killed, why)
377 ),
378
379 TP_fast_assign(
380 __entry->obj = obj ? obj->debug_id : UINT_MAX;
381 __entry->ino = ino;
382 __entry->why = why;
383 ),
384
385 TP_printk("o=%08x B=%x w=%s",
386 __entry->obj, __entry->ino,
387 __print_symbolic(__entry->why, cachefiles_obj_kill_traces))
388 );
389
390TRACE_EVENT(cachefiles_coherency,
391 TP_PROTO(struct cachefiles_object *obj,
392 ino_t ino, uoff_t obj_size,
393 const void *disk_aux,
394 enum cachefiles_content content,
395 enum cachefiles_coherency_trace why),
396
397 TP_ARGS(obj, ino, obj_size, disk_aux, content, why),
398
399 /* Note that obj may be NULL */
400 TP_STRUCT__entry(
401 __field(unsigned int, obj)
402 __field(enum cachefiles_coherency_trace, why)
403 __field(enum cachefiles_content, content)
404 __field(u64, ino)
405 __field(u64, obj_size)
406 __field(u64, aux)
407 __field(u64, disk_aux)
408 ),
409
410 TP_fast_assign(
411 union {
412 __be16 s[4];
413 __be64 ll;
414 } x;
415
416 __entry->obj = obj->debug_id;
417 __entry->why = why;
418 __entry->content = content;
419 __entry->ino = ino;
420 __entry->obj_size = obj_size;
421 __entry->aux = be64_to_cpup((__be64 *)obj->cookie->inline_aux);
422
423 /* cachefiles_xattr::data is 2-byte aligned but not 8-byte aligned. */
424 if (disk_aux) {
425 x.s[0] = ((__be16 *)disk_aux)[0];
426 x.s[1] = ((__be16 *)disk_aux)[1];
427 x.s[2] = ((__be16 *)disk_aux)[2];
428 x.s[3] = ((__be16 *)disk_aux)[3];
429 __entry->disk_aux = be64_to_cpu(x.ll);
430 } else {
431 __entry->disk_aux = 0;
432 }
433 ),
434
435 TP_printk("o=%08x %s B=%llx oz=%llx c=%u aux=%llx dsk=%llx",
436 __entry->obj,
437 __print_symbolic(__entry->why, cachefiles_coherency_traces),
438 __entry->ino,
439 __entry->obj_size,
440 __entry->content,
441 __entry->aux,
442 __entry->disk_aux)
443 );
444
445TRACE_EVENT(cachefiles_vol_coherency,
446 TP_PROTO(struct cachefiles_volume *volume,
447 ino_t ino,
448 enum cachefiles_coherency_trace why),
449
450 TP_ARGS(volume, ino, why),
451
452 /* Note that obj may be NULL */
453 TP_STRUCT__entry(
454 __field(unsigned int, vol)
455 __field(enum cachefiles_coherency_trace, why)
456 __field(u64, ino)
457 ),
458
459 TP_fast_assign(
460 __entry->vol = volume->vcookie->debug_id;
461 __entry->why = why;
462 __entry->ino = ino;
463 ),
464
465 TP_printk("V=%08x %s B=%llx",
466 __entry->vol,
467 __print_symbolic(__entry->why, cachefiles_coherency_traces),
468 __entry->ino)
469 );
470
471TRACE_EVENT(cachefiles_prep_read,
472 TP_PROTO(struct cachefiles_object *obj,
473 uoff_t start,
474 size_t len,
475 unsigned short flags,
476 enum netfs_io_source source,
477 enum cachefiles_prepare_read_trace why,
478 ino_t cache_inode, ino_t netfs_inode),
479
480 TP_ARGS(obj, start, len, flags, source, why, cache_inode, netfs_inode),
481
482 TP_STRUCT__entry(
483 __field(unsigned int, obj)
484 __field(unsigned short, flags)
485 __field(enum netfs_io_source, source)
486 __field(enum cachefiles_prepare_read_trace, why)
487 __field(size_t, len)
488 __field(uoff_t, start)
489 __field(unsigned int, netfs_inode)
490 __field(unsigned int, cache_inode)
491 ),
492
493 TP_fast_assign(
494 __entry->obj = obj ? obj->debug_id : 0;
495 __entry->flags = flags;
496 __entry->source = source;
497 __entry->why = why;
498 __entry->len = len;
499 __entry->start = start;
500 __entry->netfs_inode = netfs_inode;
501 __entry->cache_inode = cache_inode;
502 ),
503
504 TP_printk("o=%08x %s %s f=%02x s=%llx %zx ni=%x B=%x",
505 __entry->obj,
506 __print_symbolic(__entry->source, netfs_sreq_sources),
507 __print_symbolic(__entry->why, cachefiles_prepare_read_traces),
508 __entry->flags,
509 __entry->start, __entry->len,
510 __entry->netfs_inode, __entry->cache_inode)
511 );
512
513TRACE_EVENT(cachefiles_read,
514 TP_PROTO(struct cachefiles_object *obj,
515 struct inode *backer,
516 uoff_t start,
517 size_t len),
518
519 TP_ARGS(obj, backer, start, len),
520
521 TP_STRUCT__entry(
522 __field(unsigned int, obj)
523 __field(unsigned int, backer)
524 __field(size_t, len)
525 __field(uoff_t, start)
526 ),
527
528 TP_fast_assign(
529 __entry->obj = obj->debug_id;
530 __entry->backer = backer->i_ino;
531 __entry->start = start;
532 __entry->len = len;
533 ),
534
535 TP_printk("o=%08x B=%x s=%llx l=%zx",
536 __entry->obj,
537 __entry->backer,
538 __entry->start,
539 __entry->len)
540 );
541
542TRACE_EVENT(cachefiles_write,
543 TP_PROTO(struct cachefiles_object *obj,
544 struct inode *backer,
545 uoff_t start,
546 size_t len),
547
548 TP_ARGS(obj, backer, start, len),
549
550 TP_STRUCT__entry(
551 __field(unsigned int, obj)
552 __field(unsigned int, backer)
553 __field(size_t, len)
554 __field(uoff_t, start)
555 ),
556
557 TP_fast_assign(
558 __entry->obj = obj->debug_id;
559 __entry->backer = backer->i_ino;
560 __entry->start = start;
561 __entry->len = len;
562 ),
563
564 TP_printk("o=%08x B=%x s=%llx l=%zx",
565 __entry->obj,
566 __entry->backer,
567 __entry->start,
568 __entry->len)
569 );
570
571TRACE_EVENT(cachefiles_trunc,
572 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
573 uoff_t from, uoff_t to, enum cachefiles_trunc_trace why),
574
575 TP_ARGS(obj, backer, from, to, why),
576
577 TP_STRUCT__entry(
578 __field(unsigned int, obj)
579 __field(unsigned int, backer)
580 __field(enum cachefiles_trunc_trace, why)
581 __field(uoff_t, from)
582 __field(uoff_t, to)
583 ),
584
585 TP_fast_assign(
586 __entry->obj = obj->debug_id;
587 __entry->backer = backer->i_ino;
588 __entry->from = from;
589 __entry->to = to;
590 __entry->why = why;
591 ),
592
593 TP_printk("o=%08x B=%x %s l=%llx->%llx",
594 __entry->obj,
595 __entry->backer,
596 __print_symbolic(__entry->why, cachefiles_trunc_traces),
597 __entry->from,
598 __entry->to)
599 );
600
601TRACE_EVENT(cachefiles_mark_active,
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(u64, inode)
610 __field(unsigned int, obj)
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=%llx",
619 __entry->obj, __entry->inode)
620 );
621
622TRACE_EVENT(cachefiles_mark_failed,
623 TP_PROTO(struct cachefiles_object *obj,
624 struct inode *inode),
625
626 TP_ARGS(obj, inode),
627
628 /* Note that obj may be NULL */
629 TP_STRUCT__entry(
630 __field(u64, inode)
631 __field(unsigned int, obj)
632 ),
633
634 TP_fast_assign(
635 __entry->obj = obj ? obj->debug_id : 0;
636 __entry->inode = inode->i_ino;
637 ),
638
639 TP_printk("o=%08x B=%llx",
640 __entry->obj, __entry->inode)
641 );
642
643TRACE_EVENT(cachefiles_mark_inactive,
644 TP_PROTO(struct cachefiles_object *obj,
645 struct inode *inode),
646
647 TP_ARGS(obj, inode),
648
649 /* Note that obj may be NULL */
650 TP_STRUCT__entry(
651 __field(u64, inode)
652 __field(unsigned int, obj)
653 ),
654
655 TP_fast_assign(
656 __entry->obj = obj ? obj->debug_id : 0;
657 __entry->inode = inode->i_ino;
658 ),
659
660 TP_printk("o=%08x B=%llx",
661 __entry->obj, __entry->inode)
662 );
663
664TRACE_EVENT(cachefiles_vfs_error,
665 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
666 int error, enum cachefiles_error_trace where),
667
668 TP_ARGS(obj, backer, error, where),
669
670 TP_STRUCT__entry(
671 __field(unsigned int, obj)
672 __field(unsigned int, backer)
673 __field(enum cachefiles_error_trace, where)
674 __field(short, error)
675 ),
676
677 TP_fast_assign(
678 __entry->obj = obj ? obj->debug_id : 0;
679 __entry->backer = backer->i_ino;
680 __entry->error = error;
681 __entry->where = where;
682 ),
683
684 TP_printk("o=%08x B=%x %s e=%d",
685 __entry->obj,
686 __entry->backer,
687 __print_symbolic(__entry->where, cachefiles_error_traces),
688 __entry->error)
689 );
690
691TRACE_EVENT(cachefiles_io_error,
692 TP_PROTO(struct cachefiles_object *obj, struct inode *backer,
693 int error, enum cachefiles_error_trace where),
694
695 TP_ARGS(obj, backer, error, where),
696
697 TP_STRUCT__entry(
698 __field(unsigned int, obj)
699 __field(unsigned int, backer)
700 __field(enum cachefiles_error_trace, where)
701 __field(short, error)
702 ),
703
704 TP_fast_assign(
705 __entry->obj = obj ? obj->debug_id : 0;
706 __entry->backer = backer->i_ino;
707 __entry->error = error;
708 __entry->where = where;
709 ),
710
711 TP_printk("o=%08x B=%x %s e=%d",
712 __entry->obj,
713 __entry->backer,
714 __print_symbolic(__entry->where, cachefiles_error_traces),
715 __entry->error)
716 );
717
718TRACE_EVENT(cachefiles_no_space,
719 TP_PROTO(struct cachefiles_object *obj, enum cachefiles_error_trace trace),
720
721 TP_ARGS(obj, trace),
722
723 TP_STRUCT__entry(
724 __field(unsigned int, obj)
725 __field(enum cachefiles_error_trace, trace)
726 ),
727
728 TP_fast_assign(
729 __entry->obj = obj ? obj->debug_id : 0;
730 __entry->trace = trace;
731 ),
732
733 TP_printk("o=%08x %s",
734 __entry->obj,
735 __print_symbolic(__entry->trace, cachefiles_error_traces))
736 );
737
738#endif /* _TRACE_CACHEFILES_H */
739
740/* This part must be outside protection */
741#include <trace/define_trace.h>