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