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> |
855 | |