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