1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM bcachefs 4 5 #if !defined(_TRACE_BCACHEFS_H) || defined(TRACE_HEADER_MULTI_READ) 6 7 #include <linux/tracepoint.h> 8 9 #define TRACE_BPOS_entries(name) \ 10 __field(u64, name##_inode ) \ 11 __field(u64, name##_offset ) \ 12 __field(u32, name##_snapshot ) 13 14 #define TRACE_BPOS_assign(dst, src) \ 15 __entry->dst##_inode = (src).inode; \ 16 __entry->dst##_offset = (src).offset; \ 17 __entry->dst##_snapshot = (src).snapshot 18 19 DECLARE_EVENT_CLASS(bpos, 20 TP_PROTO(const struct bpos *p), 21 TP_ARGS(p), 22 23 TP_STRUCT__entry( 24 TRACE_BPOS_entries(p) 25 ), 26 27 TP_fast_assign( 28 TRACE_BPOS_assign(p, *p); 29 ), 30 31 TP_printk("%llu:%llu:%u", __entry->p_inode, __entry->p_offset, __entry->p_snapshot) 32 ); 33 34 DECLARE_EVENT_CLASS(fs_str, 35 TP_PROTO(struct bch_fs *c, const char *str), 36 TP_ARGS(c, str), 37 38 TP_STRUCT__entry( 39 __field(dev_t, dev ) 40 __string(str, str ) 41 ), 42 43 TP_fast_assign( 44 __entry->dev = c->dev; 45 __assign_str(str); 46 ), 47 48 TP_printk("%d,%d\n%s", MAJOR(__entry->dev), MINOR(__entry->dev), __get_str(str)) 49 ); 50 51 DECLARE_EVENT_CLASS(trans_str, 52 TP_PROTO(struct btree_trans *trans, unsigned long caller_ip, const char *str), 53 TP_ARGS(trans, caller_ip, str), 54 55 TP_STRUCT__entry( 56 __field(dev_t, dev ) 57 __array(char, trans_fn, 32 ) 58 __field(unsigned long, caller_ip ) 59 __string(str, str ) 60 ), 61 62 TP_fast_assign( 63 __entry->dev = trans->c->dev; 64 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 65 __entry->caller_ip = caller_ip; 66 __assign_str(str); 67 ), 68 69 TP_printk("%d,%d %s %pS %s", 70 MAJOR(__entry->dev), MINOR(__entry->dev), 71 __entry->trans_fn, (void *) __entry->caller_ip, __get_str(str)) 72 ); 73 74 DECLARE_EVENT_CLASS(trans_str_nocaller, 75 TP_PROTO(struct btree_trans *trans, const char *str), 76 TP_ARGS(trans, str), 77 78 TP_STRUCT__entry( 79 __field(dev_t, dev ) 80 __array(char, trans_fn, 32 ) 81 __string(str, str ) 82 ), 83 84 TP_fast_assign( 85 __entry->dev = trans->c->dev; 86 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 87 __assign_str(str); 88 ), 89 90 TP_printk("%d,%d %s %s", 91 MAJOR(__entry->dev), MINOR(__entry->dev), 92 __entry->trans_fn, __get_str(str)) 93 ); 94 95 DECLARE_EVENT_CLASS(btree_node_nofs, 96 TP_PROTO(struct bch_fs *c, struct btree *b), 97 TP_ARGS(c, b), 98 99 TP_STRUCT__entry( 100 __field(dev_t, dev ) 101 __field(u8, level ) 102 __field(u8, btree_id ) 103 TRACE_BPOS_entries(pos) 104 ), 105 106 TP_fast_assign( 107 __entry->dev = c->dev; 108 __entry->level = b->c.level; 109 __entry->btree_id = b->c.btree_id; 110 TRACE_BPOS_assign(pos, b->key.k.p); 111 ), 112 113 TP_printk("%d,%d %u %s %llu:%llu:%u", 114 MAJOR(__entry->dev), MINOR(__entry->dev), 115 __entry->level, 116 bch2_btree_id_str(__entry->btree_id), 117 __entry->pos_inode, __entry->pos_offset, __entry->pos_snapshot) 118 ); 119 120 DECLARE_EVENT_CLASS(btree_node, 121 TP_PROTO(struct btree_trans *trans, struct btree *b), 122 TP_ARGS(trans, b), 123 124 TP_STRUCT__entry( 125 __field(dev_t, dev ) 126 __array(char, trans_fn, 32 ) 127 __field(u8, level ) 128 __field(u8, btree_id ) 129 TRACE_BPOS_entries(pos) 130 ), 131 132 TP_fast_assign( 133 __entry->dev = trans->c->dev; 134 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 135 __entry->level = b->c.level; 136 __entry->btree_id = b->c.btree_id; 137 TRACE_BPOS_assign(pos, b->key.k.p); 138 ), 139 140 TP_printk("%d,%d %s %u %s %llu:%llu:%u", 141 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->trans_fn, 142 __entry->level, 143 bch2_btree_id_str(__entry->btree_id), 144 __entry->pos_inode, __entry->pos_offset, __entry->pos_snapshot) 145 ); 146 147 DECLARE_EVENT_CLASS(bch_fs, 148 TP_PROTO(struct bch_fs *c), 149 TP_ARGS(c), 150 151 TP_STRUCT__entry( 152 __field(dev_t, dev ) 153 ), 154 155 TP_fast_assign( 156 __entry->dev = c->dev; 157 ), 158 159 TP_printk("%d,%d", MAJOR(__entry->dev), MINOR(__entry->dev)) 160 ); 161 162 DECLARE_EVENT_CLASS(btree_trans, 163 TP_PROTO(struct btree_trans *trans), 164 TP_ARGS(trans), 165 166 TP_STRUCT__entry( 167 __field(dev_t, dev ) 168 __array(char, trans_fn, 32 ) 169 ), 170 171 TP_fast_assign( 172 __entry->dev = trans->c->dev; 173 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 174 ), 175 176 TP_printk("%d,%d %s", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->trans_fn) 177 ); 178 179 DECLARE_EVENT_CLASS(bio, 180 TP_PROTO(struct bio *bio), 181 TP_ARGS(bio), 182 183 TP_STRUCT__entry( 184 __field(dev_t, dev ) 185 __field(sector_t, sector ) 186 __field(unsigned int, nr_sector ) 187 __array(char, rwbs, 6 ) 188 ), 189 190 TP_fast_assign( 191 __entry->dev = bio->bi_bdev ? bio_dev(bio) : 0; 192 __entry->sector = bio->bi_iter.bi_sector; 193 __entry->nr_sector = bio->bi_iter.bi_size >> 9; 194 blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 195 ), 196 197 TP_printk("%d,%d %s %llu + %u", 198 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 199 (unsigned long long)__entry->sector, __entry->nr_sector) 200 ); 201 202 /* fs.c: */ 203 TRACE_EVENT(bch2_sync_fs, 204 TP_PROTO(struct super_block *sb, int wait), 205 206 TP_ARGS(sb, wait), 207 208 TP_STRUCT__entry( 209 __field( dev_t, dev ) 210 __field( int, wait ) 211 212 ), 213 214 TP_fast_assign( 215 __entry->dev = sb->s_dev; 216 __entry->wait = wait; 217 ), 218 219 TP_printk("dev %d,%d wait %d", 220 MAJOR(__entry->dev), MINOR(__entry->dev), 221 __entry->wait) 222 ); 223 224 /* fs-io.c: */ 225 TRACE_EVENT(bch2_fsync, 226 TP_PROTO(struct file *file, int datasync), 227 228 TP_ARGS(file, datasync), 229 230 TP_STRUCT__entry( 231 __field( dev_t, dev ) 232 __field( ino_t, ino ) 233 __field( ino_t, parent ) 234 __field( int, datasync ) 235 ), 236 237 TP_fast_assign( 238 struct dentry *dentry = file->f_path.dentry; 239 240 __entry->dev = dentry->d_sb->s_dev; 241 __entry->ino = d_inode(dentry)->i_ino; 242 __entry->parent = d_inode(dentry->d_parent)->i_ino; 243 __entry->datasync = datasync; 244 ), 245 246 TP_printk("dev %d,%d ino %lu parent %lu datasync %d ", 247 MAJOR(__entry->dev), MINOR(__entry->dev), 248 (unsigned long) __entry->ino, 249 (unsigned long) __entry->parent, __entry->datasync) 250 ); 251 252 /* super-io.c: */ 253 TRACE_EVENT(write_super, 254 TP_PROTO(struct bch_fs *c, unsigned long ip), 255 TP_ARGS(c, ip), 256 257 TP_STRUCT__entry( 258 __field(dev_t, dev ) 259 __field(unsigned long, ip ) 260 ), 261 262 TP_fast_assign( 263 __entry->dev = c->dev; 264 __entry->ip = ip; 265 ), 266 267 TP_printk("%d,%d for %pS", 268 MAJOR(__entry->dev), MINOR(__entry->dev), 269 (void *) __entry->ip) 270 ); 271 272 /* io.c: */ 273 274 DEFINE_EVENT(bio, read_promote, 275 TP_PROTO(struct bio *bio), 276 TP_ARGS(bio) 277 ); 278 279 TRACE_EVENT(read_nopromote, 280 TP_PROTO(struct bch_fs *c, int ret), 281 TP_ARGS(c, ret), 282 283 TP_STRUCT__entry( 284 __field(dev_t, dev ) 285 __array(char, ret, 32 ) 286 ), 287 288 TP_fast_assign( 289 __entry->dev = c->dev; 290 strscpy(__entry->ret, bch2_err_str(ret), sizeof(__entry->ret)); 291 ), 292 293 TP_printk("%d,%d ret %s", 294 MAJOR(__entry->dev), MINOR(__entry->dev), 295 __entry->ret) 296 ); 297 298 DEFINE_EVENT(bio, read_bounce, 299 TP_PROTO(struct bio *bio), 300 TP_ARGS(bio) 301 ); 302 303 DEFINE_EVENT(bio, read_split, 304 TP_PROTO(struct bio *bio), 305 TP_ARGS(bio) 306 ); 307 308 DEFINE_EVENT(bio, read_retry, 309 TP_PROTO(struct bio *bio), 310 TP_ARGS(bio) 311 ); 312 313 DEFINE_EVENT(bio, read_reuse_race, 314 TP_PROTO(struct bio *bio), 315 TP_ARGS(bio) 316 ); 317 318 /* Journal */ 319 320 DEFINE_EVENT(bch_fs, journal_full, 321 TP_PROTO(struct bch_fs *c), 322 TP_ARGS(c) 323 ); 324 325 DEFINE_EVENT(fs_str, journal_entry_full, 326 TP_PROTO(struct bch_fs *c, const char *str), 327 TP_ARGS(c, str) 328 ); 329 330 DEFINE_EVENT(fs_str, journal_entry_close, 331 TP_PROTO(struct bch_fs *c, const char *str), 332 TP_ARGS(c, str) 333 ); 334 335 DEFINE_EVENT(bio, journal_write, 336 TP_PROTO(struct bio *bio), 337 TP_ARGS(bio) 338 ); 339 340 TRACE_EVENT(journal_reclaim_start, 341 TP_PROTO(struct bch_fs *c, bool direct, bool kicked, 342 u64 min_nr, u64 min_key_cache, 343 u64 btree_cache_dirty, u64 btree_cache_total, 344 u64 btree_key_cache_dirty, u64 btree_key_cache_total), 345 TP_ARGS(c, direct, kicked, min_nr, min_key_cache, 346 btree_cache_dirty, btree_cache_total, 347 btree_key_cache_dirty, btree_key_cache_total), 348 349 TP_STRUCT__entry( 350 __field(dev_t, dev ) 351 __field(bool, direct ) 352 __field(bool, kicked ) 353 __field(u64, min_nr ) 354 __field(u64, min_key_cache ) 355 __field(u64, btree_cache_dirty ) 356 __field(u64, btree_cache_total ) 357 __field(u64, btree_key_cache_dirty ) 358 __field(u64, btree_key_cache_total ) 359 ), 360 361 TP_fast_assign( 362 __entry->dev = c->dev; 363 __entry->direct = direct; 364 __entry->kicked = kicked; 365 __entry->min_nr = min_nr; 366 __entry->min_key_cache = min_key_cache; 367 __entry->btree_cache_dirty = btree_cache_dirty; 368 __entry->btree_cache_total = btree_cache_total; 369 __entry->btree_key_cache_dirty = btree_key_cache_dirty; 370 __entry->btree_key_cache_total = btree_key_cache_total; 371 ), 372 373 TP_printk("%d,%d direct %u kicked %u min %llu key cache %llu btree cache %llu/%llu key cache %llu/%llu", 374 MAJOR(__entry->dev), MINOR(__entry->dev), 375 __entry->direct, 376 __entry->kicked, 377 __entry->min_nr, 378 __entry->min_key_cache, 379 __entry->btree_cache_dirty, 380 __entry->btree_cache_total, 381 __entry->btree_key_cache_dirty, 382 __entry->btree_key_cache_total) 383 ); 384 385 TRACE_EVENT(journal_reclaim_finish, 386 TP_PROTO(struct bch_fs *c, u64 nr_flushed), 387 TP_ARGS(c, nr_flushed), 388 389 TP_STRUCT__entry( 390 __field(dev_t, dev ) 391 __field(u64, nr_flushed ) 392 ), 393 394 TP_fast_assign( 395 __entry->dev = c->dev; 396 __entry->nr_flushed = nr_flushed; 397 ), 398 399 TP_printk("%d,%d flushed %llu", 400 MAJOR(__entry->dev), MINOR(__entry->dev), 401 __entry->nr_flushed) 402 ); 403 404 /* bset.c: */ 405 406 DEFINE_EVENT(bpos, bkey_pack_pos_fail, 407 TP_PROTO(const struct bpos *p), 408 TP_ARGS(p) 409 ); 410 411 /* Btree cache: */ 412 413 TRACE_EVENT(btree_cache_scan, 414 TP_PROTO(long nr_to_scan, long can_free, long ret), 415 TP_ARGS(nr_to_scan, can_free, ret), 416 417 TP_STRUCT__entry( 418 __field(long, nr_to_scan ) 419 __field(long, can_free ) 420 __field(long, ret ) 421 ), 422 423 TP_fast_assign( 424 __entry->nr_to_scan = nr_to_scan; 425 __entry->can_free = can_free; 426 __entry->ret = ret; 427 ), 428 429 TP_printk("scanned for %li nodes, can free %li, ret %li", 430 __entry->nr_to_scan, __entry->can_free, __entry->ret) 431 ); 432 433 DEFINE_EVENT(btree_node_nofs, btree_cache_reap, 434 TP_PROTO(struct bch_fs *c, struct btree *b), 435 TP_ARGS(c, b) 436 ); 437 438 DEFINE_EVENT(btree_trans, btree_cache_cannibalize_lock_fail, 439 TP_PROTO(struct btree_trans *trans), 440 TP_ARGS(trans) 441 ); 442 443 DEFINE_EVENT(btree_trans, btree_cache_cannibalize_lock, 444 TP_PROTO(struct btree_trans *trans), 445 TP_ARGS(trans) 446 ); 447 448 DEFINE_EVENT(btree_trans, btree_cache_cannibalize, 449 TP_PROTO(struct btree_trans *trans), 450 TP_ARGS(trans) 451 ); 452 453 DEFINE_EVENT(btree_trans, btree_cache_cannibalize_unlock, 454 TP_PROTO(struct btree_trans *trans), 455 TP_ARGS(trans) 456 ); 457 458 /* Btree */ 459 460 DEFINE_EVENT(btree_node, btree_node_read, 461 TP_PROTO(struct btree_trans *trans, struct btree *b), 462 TP_ARGS(trans, b) 463 ); 464 465 TRACE_EVENT(btree_node_write, 466 TP_PROTO(struct btree *b, unsigned bytes, unsigned sectors), 467 TP_ARGS(b, bytes, sectors), 468 469 TP_STRUCT__entry( 470 __field(enum btree_node_type, type) 471 __field(unsigned, bytes ) 472 __field(unsigned, sectors ) 473 ), 474 475 TP_fast_assign( 476 __entry->type = btree_node_type(b); 477 __entry->bytes = bytes; 478 __entry->sectors = sectors; 479 ), 480 481 TP_printk("bkey type %u bytes %u sectors %u", 482 __entry->type , __entry->bytes, __entry->sectors) 483 ); 484 485 DEFINE_EVENT(btree_node, btree_node_alloc, 486 TP_PROTO(struct btree_trans *trans, struct btree *b), 487 TP_ARGS(trans, b) 488 ); 489 490 DEFINE_EVENT(btree_node, btree_node_free, 491 TP_PROTO(struct btree_trans *trans, struct btree *b), 492 TP_ARGS(trans, b) 493 ); 494 495 TRACE_EVENT(btree_reserve_get_fail, 496 TP_PROTO(const char *trans_fn, 497 unsigned long caller_ip, 498 size_t required, 499 int ret), 500 TP_ARGS(trans_fn, caller_ip, required, ret), 501 502 TP_STRUCT__entry( 503 __array(char, trans_fn, 32 ) 504 __field(unsigned long, caller_ip ) 505 __field(size_t, required ) 506 __array(char, ret, 32 ) 507 ), 508 509 TP_fast_assign( 510 strscpy(__entry->trans_fn, trans_fn, sizeof(__entry->trans_fn)); 511 __entry->caller_ip = caller_ip; 512 __entry->required = required; 513 strscpy(__entry->ret, bch2_err_str(ret), sizeof(__entry->ret)); 514 ), 515 516 TP_printk("%s %pS required %zu ret %s", 517 __entry->trans_fn, 518 (void *) __entry->caller_ip, 519 __entry->required, 520 __entry->ret) 521 ); 522 523 DEFINE_EVENT(btree_node, btree_node_compact, 524 TP_PROTO(struct btree_trans *trans, struct btree *b), 525 TP_ARGS(trans, b) 526 ); 527 528 DEFINE_EVENT(btree_node, btree_node_merge, 529 TP_PROTO(struct btree_trans *trans, struct btree *b), 530 TP_ARGS(trans, b) 531 ); 532 533 DEFINE_EVENT(btree_node, btree_node_split, 534 TP_PROTO(struct btree_trans *trans, struct btree *b), 535 TP_ARGS(trans, b) 536 ); 537 538 DEFINE_EVENT(btree_node, btree_node_rewrite, 539 TP_PROTO(struct btree_trans *trans, struct btree *b), 540 TP_ARGS(trans, b) 541 ); 542 543 DEFINE_EVENT(btree_node, btree_node_set_root, 544 TP_PROTO(struct btree_trans *trans, struct btree *b), 545 TP_ARGS(trans, b) 546 ); 547 548 TRACE_EVENT(btree_path_relock_fail, 549 TP_PROTO(struct btree_trans *trans, 550 unsigned long caller_ip, 551 struct btree_path *path, 552 unsigned level), 553 TP_ARGS(trans, caller_ip, path, level), 554 555 TP_STRUCT__entry( 556 __array(char, trans_fn, 32 ) 557 __field(unsigned long, caller_ip ) 558 __field(u8, btree_id ) 559 __field(u8, level ) 560 __field(u8, path_idx) 561 TRACE_BPOS_entries(pos) 562 __array(char, node, 24 ) 563 __field(u8, self_read_count ) 564 __field(u8, self_intent_count) 565 __field(u8, read_count ) 566 __field(u8, intent_count ) 567 __field(u32, iter_lock_seq ) 568 __field(u32, node_lock_seq ) 569 ), 570 571 TP_fast_assign( 572 struct btree *b = btree_path_node(path, level); 573 struct six_lock_count c; 574 575 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 576 __entry->caller_ip = caller_ip; 577 __entry->btree_id = path->btree_id; 578 __entry->level = level; 579 __entry->path_idx = path - trans->paths; 580 TRACE_BPOS_assign(pos, path->pos); 581 582 c = bch2_btree_node_lock_counts(trans, NULL, &path->l[level].b->c, level); 583 __entry->self_read_count = c.n[SIX_LOCK_read]; 584 __entry->self_intent_count = c.n[SIX_LOCK_intent]; 585 586 if (IS_ERR(b)) { 587 strscpy(__entry->node, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node)); 588 } else { 589 c = six_lock_counts(&path->l[level].b->c.lock); 590 __entry->read_count = c.n[SIX_LOCK_read]; 591 __entry->intent_count = c.n[SIX_LOCK_intent]; 592 scnprintf(__entry->node, sizeof(__entry->node), "%px", &b->c); 593 } 594 __entry->iter_lock_seq = path->l[level].lock_seq; 595 __entry->node_lock_seq = is_btree_node(path, level) 596 ? six_lock_seq(&path->l[level].b->c.lock) 597 : 0; 598 ), 599 600 TP_printk("%s %pS\nidx %2u btree %s pos %llu:%llu:%u level %u node %s held %u:%u lock count %u:%u iter seq %u lock seq %u", 601 __entry->trans_fn, 602 (void *) __entry->caller_ip, 603 __entry->path_idx, 604 bch2_btree_id_str(__entry->btree_id), 605 __entry->pos_inode, 606 __entry->pos_offset, 607 __entry->pos_snapshot, 608 __entry->level, 609 __entry->node, 610 __entry->self_read_count, 611 __entry->self_intent_count, 612 __entry->read_count, 613 __entry->intent_count, 614 __entry->iter_lock_seq, 615 __entry->node_lock_seq) 616 ); 617 618 TRACE_EVENT(btree_path_upgrade_fail, 619 TP_PROTO(struct btree_trans *trans, 620 unsigned long caller_ip, 621 struct btree_path *path, 622 unsigned level), 623 TP_ARGS(trans, caller_ip, path, level), 624 625 TP_STRUCT__entry( 626 __array(char, trans_fn, 32 ) 627 __field(unsigned long, caller_ip ) 628 __field(u8, btree_id ) 629 __field(u8, level ) 630 __field(u8, path_idx) 631 TRACE_BPOS_entries(pos) 632 __field(u8, locked ) 633 __field(u8, self_read_count ) 634 __field(u8, self_intent_count) 635 __field(u8, read_count ) 636 __field(u8, intent_count ) 637 __field(u32, iter_lock_seq ) 638 __field(u32, node_lock_seq ) 639 ), 640 641 TP_fast_assign( 642 struct six_lock_count c; 643 644 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 645 __entry->caller_ip = caller_ip; 646 __entry->btree_id = path->btree_id; 647 __entry->level = level; 648 __entry->path_idx = path - trans->paths; 649 TRACE_BPOS_assign(pos, path->pos); 650 __entry->locked = btree_node_locked(path, level); 651 652 c = bch2_btree_node_lock_counts(trans, NULL, &path->l[level].b->c, level), 653 __entry->self_read_count = c.n[SIX_LOCK_read]; 654 __entry->self_intent_count = c.n[SIX_LOCK_intent]; 655 c = six_lock_counts(&path->l[level].b->c.lock); 656 __entry->read_count = c.n[SIX_LOCK_read]; 657 __entry->intent_count = c.n[SIX_LOCK_intent]; 658 __entry->iter_lock_seq = path->l[level].lock_seq; 659 __entry->node_lock_seq = is_btree_node(path, level) 660 ? six_lock_seq(&path->l[level].b->c.lock) 661 : 0; 662 ), 663 664 TP_printk("%s %pS\nidx %2u btree %s pos %llu:%llu:%u level %u locked %u held %u:%u lock count %u:%u iter seq %u lock seq %u", 665 __entry->trans_fn, 666 (void *) __entry->caller_ip, 667 __entry->path_idx, 668 bch2_btree_id_str(__entry->btree_id), 669 __entry->pos_inode, 670 __entry->pos_offset, 671 __entry->pos_snapshot, 672 __entry->level, 673 __entry->locked, 674 __entry->self_read_count, 675 __entry->self_intent_count, 676 __entry->read_count, 677 __entry->intent_count, 678 __entry->iter_lock_seq, 679 __entry->node_lock_seq) 680 ); 681 682 /* Garbage collection */ 683 684 DEFINE_EVENT(bch_fs, gc_gens_start, 685 TP_PROTO(struct bch_fs *c), 686 TP_ARGS(c) 687 ); 688 689 DEFINE_EVENT(bch_fs, gc_gens_end, 690 TP_PROTO(struct bch_fs *c), 691 TP_ARGS(c) 692 ); 693 694 /* Allocator */ 695 696 DEFINE_EVENT(fs_str, bucket_alloc, 697 TP_PROTO(struct bch_fs *c, const char *str), 698 TP_ARGS(c, str) 699 ); 700 701 DEFINE_EVENT(fs_str, bucket_alloc_fail, 702 TP_PROTO(struct bch_fs *c, const char *str), 703 TP_ARGS(c, str) 704 ); 705 706 TRACE_EVENT(discard_buckets, 707 TP_PROTO(struct bch_fs *c, u64 seen, u64 open, 708 u64 need_journal_commit, u64 discarded, const char *err), 709 TP_ARGS(c, seen, open, need_journal_commit, discarded, err), 710 711 TP_STRUCT__entry( 712 __field(dev_t, dev ) 713 __field(u64, seen ) 714 __field(u64, open ) 715 __field(u64, need_journal_commit ) 716 __field(u64, discarded ) 717 __array(char, err, 16 ) 718 ), 719 720 TP_fast_assign( 721 __entry->dev = c->dev; 722 __entry->seen = seen; 723 __entry->open = open; 724 __entry->need_journal_commit = need_journal_commit; 725 __entry->discarded = discarded; 726 strscpy(__entry->err, err, sizeof(__entry->err)); 727 ), 728 729 TP_printk("%d%d seen %llu open %llu need_journal_commit %llu discarded %llu err %s", 730 MAJOR(__entry->dev), MINOR(__entry->dev), 731 __entry->seen, 732 __entry->open, 733 __entry->need_journal_commit, 734 __entry->discarded, 735 __entry->err) 736 ); 737 738 TRACE_EVENT(bucket_invalidate, 739 TP_PROTO(struct bch_fs *c, unsigned dev, u64 bucket, u32 sectors), 740 TP_ARGS(c, dev, bucket, sectors), 741 742 TP_STRUCT__entry( 743 __field(dev_t, dev ) 744 __field(u32, dev_idx ) 745 __field(u32, sectors ) 746 __field(u64, bucket ) 747 ), 748 749 TP_fast_assign( 750 __entry->dev = c->dev; 751 __entry->dev_idx = dev; 752 __entry->sectors = sectors; 753 __entry->bucket = bucket; 754 ), 755 756 TP_printk("%d:%d invalidated %u:%llu cached sectors %u", 757 MAJOR(__entry->dev), MINOR(__entry->dev), 758 __entry->dev_idx, __entry->bucket, 759 __entry->sectors) 760 ); 761 762 /* Moving IO */ 763 764 TRACE_EVENT(bucket_evacuate, 765 TP_PROTO(struct bch_fs *c, struct bpos *bucket), 766 TP_ARGS(c, bucket), 767 768 TP_STRUCT__entry( 769 __field(dev_t, dev ) 770 __field(u32, dev_idx ) 771 __field(u64, bucket ) 772 ), 773 774 TP_fast_assign( 775 __entry->dev = c->dev; 776 __entry->dev_idx = bucket->inode; 777 __entry->bucket = bucket->offset; 778 ), 779 780 TP_printk("%d:%d %u:%llu", 781 MAJOR(__entry->dev), MINOR(__entry->dev), 782 __entry->dev_idx, __entry->bucket) 783 ); 784 785 DEFINE_EVENT(fs_str, move_extent, 786 TP_PROTO(struct bch_fs *c, const char *str), 787 TP_ARGS(c, str) 788 ); 789 790 DEFINE_EVENT(fs_str, move_extent_read, 791 TP_PROTO(struct bch_fs *c, const char *str), 792 TP_ARGS(c, str) 793 ); 794 795 DEFINE_EVENT(fs_str, move_extent_write, 796 TP_PROTO(struct bch_fs *c, const char *str), 797 TP_ARGS(c, str) 798 ); 799 800 DEFINE_EVENT(fs_str, move_extent_finish, 801 TP_PROTO(struct bch_fs *c, const char *str), 802 TP_ARGS(c, str) 803 ); 804 805 DEFINE_EVENT(fs_str, move_extent_fail, 806 TP_PROTO(struct bch_fs *c, const char *str), 807 TP_ARGS(c, str) 808 ); 809 810 DEFINE_EVENT(fs_str, move_extent_start_fail, 811 TP_PROTO(struct bch_fs *c, const char *str), 812 TP_ARGS(c, str) 813 ); 814 815 TRACE_EVENT(move_data, 816 TP_PROTO(struct bch_fs *c, 817 struct bch_move_stats *stats), 818 TP_ARGS(c, stats), 819 820 TP_STRUCT__entry( 821 __field(dev_t, dev ) 822 __field(u64, keys_moved ) 823 __field(u64, keys_raced ) 824 __field(u64, sectors_seen ) 825 __field(u64, sectors_moved ) 826 __field(u64, sectors_raced ) 827 ), 828 829 TP_fast_assign( 830 __entry->dev = c->dev; 831 __entry->keys_moved = atomic64_read(&stats->keys_moved); 832 __entry->keys_raced = atomic64_read(&stats->keys_raced); 833 __entry->sectors_seen = atomic64_read(&stats->sectors_seen); 834 __entry->sectors_moved = atomic64_read(&stats->sectors_moved); 835 __entry->sectors_raced = atomic64_read(&stats->sectors_raced); 836 ), 837 838 TP_printk("%d,%d keys moved %llu raced %llu" 839 "sectors seen %llu moved %llu raced %llu", 840 MAJOR(__entry->dev), MINOR(__entry->dev), 841 __entry->keys_moved, 842 __entry->keys_raced, 843 __entry->sectors_seen, 844 __entry->sectors_moved, 845 __entry->sectors_raced) 846 ); 847 848 TRACE_EVENT(evacuate_bucket, 849 TP_PROTO(struct bch_fs *c, struct bpos *bucket, 850 unsigned sectors, unsigned bucket_size, 851 u64 fragmentation, int ret), 852 TP_ARGS(c, bucket, sectors, bucket_size, fragmentation, ret), 853 854 TP_STRUCT__entry( 855 __field(dev_t, dev ) 856 __field(u64, member ) 857 __field(u64, bucket ) 858 __field(u32, sectors ) 859 __field(u32, bucket_size ) 860 __field(u64, fragmentation ) 861 __field(int, ret ) 862 ), 863 864 TP_fast_assign( 865 __entry->dev = c->dev; 866 __entry->member = bucket->inode; 867 __entry->bucket = bucket->offset; 868 __entry->sectors = sectors; 869 __entry->bucket_size = bucket_size; 870 __entry->fragmentation = fragmentation; 871 __entry->ret = ret; 872 ), 873 874 TP_printk("%d,%d %llu:%llu sectors %u/%u fragmentation %llu ret %i", 875 MAJOR(__entry->dev), MINOR(__entry->dev), 876 __entry->member, __entry->bucket, 877 __entry->sectors, __entry->bucket_size, 878 __entry->fragmentation, __entry->ret) 879 ); 880 881 TRACE_EVENT(copygc, 882 TP_PROTO(struct bch_fs *c, 883 u64 sectors_moved, u64 sectors_not_moved, 884 u64 buckets_moved, u64 buckets_not_moved), 885 TP_ARGS(c, 886 sectors_moved, sectors_not_moved, 887 buckets_moved, buckets_not_moved), 888 889 TP_STRUCT__entry( 890 __field(dev_t, dev ) 891 __field(u64, sectors_moved ) 892 __field(u64, sectors_not_moved ) 893 __field(u64, buckets_moved ) 894 __field(u64, buckets_not_moved ) 895 ), 896 897 TP_fast_assign( 898 __entry->dev = c->dev; 899 __entry->sectors_moved = sectors_moved; 900 __entry->sectors_not_moved = sectors_not_moved; 901 __entry->buckets_moved = buckets_moved; 902 __entry->buckets_not_moved = buckets_moved; 903 ), 904 905 TP_printk("%d,%d sectors moved %llu remain %llu buckets moved %llu remain %llu", 906 MAJOR(__entry->dev), MINOR(__entry->dev), 907 __entry->sectors_moved, __entry->sectors_not_moved, 908 __entry->buckets_moved, __entry->buckets_not_moved) 909 ); 910 911 TRACE_EVENT(copygc_wait, 912 TP_PROTO(struct bch_fs *c, 913 u64 wait_amount, u64 until), 914 TP_ARGS(c, wait_amount, until), 915 916 TP_STRUCT__entry( 917 __field(dev_t, dev ) 918 __field(u64, wait_amount ) 919 __field(u64, until ) 920 ), 921 922 TP_fast_assign( 923 __entry->dev = c->dev; 924 __entry->wait_amount = wait_amount; 925 __entry->until = until; 926 ), 927 928 TP_printk("%d,%u waiting for %llu sectors until %llu", 929 MAJOR(__entry->dev), MINOR(__entry->dev), 930 __entry->wait_amount, __entry->until) 931 ); 932 933 /* btree transactions: */ 934 935 DECLARE_EVENT_CLASS(transaction_event, 936 TP_PROTO(struct btree_trans *trans, 937 unsigned long caller_ip), 938 TP_ARGS(trans, caller_ip), 939 940 TP_STRUCT__entry( 941 __array(char, trans_fn, 32 ) 942 __field(unsigned long, caller_ip ) 943 ), 944 945 TP_fast_assign( 946 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 947 __entry->caller_ip = caller_ip; 948 ), 949 950 TP_printk("%s %pS", __entry->trans_fn, (void *) __entry->caller_ip) 951 ); 952 953 DEFINE_EVENT(transaction_event, transaction_commit, 954 TP_PROTO(struct btree_trans *trans, 955 unsigned long caller_ip), 956 TP_ARGS(trans, caller_ip) 957 ); 958 959 DEFINE_EVENT(transaction_event, trans_restart_injected, 960 TP_PROTO(struct btree_trans *trans, 961 unsigned long caller_ip), 962 TP_ARGS(trans, caller_ip) 963 ); 964 965 TRACE_EVENT(trans_restart_split_race, 966 TP_PROTO(struct btree_trans *trans, 967 unsigned long caller_ip, 968 struct btree *b), 969 TP_ARGS(trans, caller_ip, b), 970 971 TP_STRUCT__entry( 972 __array(char, trans_fn, 32 ) 973 __field(unsigned long, caller_ip ) 974 __field(u8, level ) 975 __field(u16, written ) 976 __field(u16, blocks ) 977 __field(u16, u64s_remaining ) 978 ), 979 980 TP_fast_assign( 981 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 982 __entry->caller_ip = caller_ip; 983 __entry->level = b->c.level; 984 __entry->written = b->written; 985 __entry->blocks = btree_blocks(trans->c); 986 __entry->u64s_remaining = bch2_btree_keys_u64s_remaining(b); 987 ), 988 989 TP_printk("%s %pS l=%u written %u/%u u64s remaining %u", 990 __entry->trans_fn, (void *) __entry->caller_ip, 991 __entry->level, 992 __entry->written, __entry->blocks, 993 __entry->u64s_remaining) 994 ); 995 996 TRACE_EVENT(trans_blocked_journal_reclaim, 997 TP_PROTO(struct btree_trans *trans, 998 unsigned long caller_ip), 999 TP_ARGS(trans, caller_ip), 1000 1001 TP_STRUCT__entry( 1002 __array(char, trans_fn, 32 ) 1003 __field(unsigned long, caller_ip ) 1004 1005 __field(unsigned long, key_cache_nr_keys ) 1006 __field(unsigned long, key_cache_nr_dirty ) 1007 __field(long, must_wait ) 1008 ), 1009 1010 TP_fast_assign( 1011 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1012 __entry->caller_ip = caller_ip; 1013 __entry->key_cache_nr_keys = atomic_long_read(&trans->c->btree_key_cache.nr_keys); 1014 __entry->key_cache_nr_dirty = atomic_long_read(&trans->c->btree_key_cache.nr_dirty); 1015 __entry->must_wait = __bch2_btree_key_cache_must_wait(trans->c); 1016 ), 1017 1018 TP_printk("%s %pS key cache keys %lu dirty %lu must_wait %li", 1019 __entry->trans_fn, (void *) __entry->caller_ip, 1020 __entry->key_cache_nr_keys, 1021 __entry->key_cache_nr_dirty, 1022 __entry->must_wait) 1023 ); 1024 1025 TRACE_EVENT(trans_restart_journal_preres_get, 1026 TP_PROTO(struct btree_trans *trans, 1027 unsigned long caller_ip, 1028 unsigned flags), 1029 TP_ARGS(trans, caller_ip, flags), 1030 1031 TP_STRUCT__entry( 1032 __array(char, trans_fn, 32 ) 1033 __field(unsigned long, caller_ip ) 1034 __field(unsigned, flags ) 1035 ), 1036 1037 TP_fast_assign( 1038 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1039 __entry->caller_ip = caller_ip; 1040 __entry->flags = flags; 1041 ), 1042 1043 TP_printk("%s %pS %x", __entry->trans_fn, 1044 (void *) __entry->caller_ip, 1045 __entry->flags) 1046 ); 1047 1048 DEFINE_EVENT(transaction_event, trans_restart_fault_inject, 1049 TP_PROTO(struct btree_trans *trans, 1050 unsigned long caller_ip), 1051 TP_ARGS(trans, caller_ip) 1052 ); 1053 1054 DEFINE_EVENT(transaction_event, trans_traverse_all, 1055 TP_PROTO(struct btree_trans *trans, 1056 unsigned long caller_ip), 1057 TP_ARGS(trans, caller_ip) 1058 ); 1059 1060 DEFINE_EVENT(transaction_event, trans_restart_key_cache_raced, 1061 TP_PROTO(struct btree_trans *trans, 1062 unsigned long caller_ip), 1063 TP_ARGS(trans, caller_ip) 1064 ); 1065 1066 DEFINE_EVENT(trans_str, trans_restart_too_many_iters, 1067 TP_PROTO(struct btree_trans *trans, 1068 unsigned long caller_ip, 1069 const char *paths), 1070 TP_ARGS(trans, caller_ip, paths) 1071 ); 1072 1073 DECLARE_EVENT_CLASS(transaction_restart_iter, 1074 TP_PROTO(struct btree_trans *trans, 1075 unsigned long caller_ip, 1076 struct btree_path *path), 1077 TP_ARGS(trans, caller_ip, path), 1078 1079 TP_STRUCT__entry( 1080 __array(char, trans_fn, 32 ) 1081 __field(unsigned long, caller_ip ) 1082 __field(u8, btree_id ) 1083 TRACE_BPOS_entries(pos) 1084 ), 1085 1086 TP_fast_assign( 1087 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1088 __entry->caller_ip = caller_ip; 1089 __entry->btree_id = path->btree_id; 1090 TRACE_BPOS_assign(pos, path->pos) 1091 ), 1092 1093 TP_printk("%s %pS btree %s pos %llu:%llu:%u", 1094 __entry->trans_fn, 1095 (void *) __entry->caller_ip, 1096 bch2_btree_id_str(__entry->btree_id), 1097 __entry->pos_inode, 1098 __entry->pos_offset, 1099 __entry->pos_snapshot) 1100 ); 1101 1102 DEFINE_EVENT(transaction_restart_iter, trans_restart_btree_node_reused, 1103 TP_PROTO(struct btree_trans *trans, 1104 unsigned long caller_ip, 1105 struct btree_path *path), 1106 TP_ARGS(trans, caller_ip, path) 1107 ); 1108 1109 DEFINE_EVENT(transaction_restart_iter, trans_restart_btree_node_split, 1110 TP_PROTO(struct btree_trans *trans, 1111 unsigned long caller_ip, 1112 struct btree_path *path), 1113 TP_ARGS(trans, caller_ip, path) 1114 ); 1115 1116 TRACE_EVENT(trans_restart_upgrade, 1117 TP_PROTO(struct btree_trans *trans, 1118 unsigned long caller_ip, 1119 struct btree_path *path, 1120 unsigned old_locks_want, 1121 unsigned new_locks_want, 1122 struct get_locks_fail *f), 1123 TP_ARGS(trans, caller_ip, path, old_locks_want, new_locks_want, f), 1124 1125 TP_STRUCT__entry( 1126 __array(char, trans_fn, 32 ) 1127 __field(unsigned long, caller_ip ) 1128 __field(u8, btree_id ) 1129 __field(u8, old_locks_want ) 1130 __field(u8, new_locks_want ) 1131 __field(u8, level ) 1132 __field(u32, path_seq ) 1133 __field(u32, node_seq ) 1134 TRACE_BPOS_entries(pos) 1135 ), 1136 1137 TP_fast_assign( 1138 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1139 __entry->caller_ip = caller_ip; 1140 __entry->btree_id = path->btree_id; 1141 __entry->old_locks_want = old_locks_want; 1142 __entry->new_locks_want = new_locks_want; 1143 __entry->level = f->l; 1144 __entry->path_seq = path->l[f->l].lock_seq; 1145 __entry->node_seq = IS_ERR_OR_NULL(f->b) ? 0 : f->b->c.lock.seq; 1146 TRACE_BPOS_assign(pos, path->pos) 1147 ), 1148 1149 TP_printk("%s %pS btree %s pos %llu:%llu:%u locks_want %u -> %u level %u path seq %u node seq %u", 1150 __entry->trans_fn, 1151 (void *) __entry->caller_ip, 1152 bch2_btree_id_str(__entry->btree_id), 1153 __entry->pos_inode, 1154 __entry->pos_offset, 1155 __entry->pos_snapshot, 1156 __entry->old_locks_want, 1157 __entry->new_locks_want, 1158 __entry->level, 1159 __entry->path_seq, 1160 __entry->node_seq) 1161 ); 1162 1163 DEFINE_EVENT(trans_str, trans_restart_relock, 1164 TP_PROTO(struct btree_trans *trans, unsigned long caller_ip, const char *str), 1165 TP_ARGS(trans, caller_ip, str) 1166 ); 1167 1168 DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_next_node, 1169 TP_PROTO(struct btree_trans *trans, 1170 unsigned long caller_ip, 1171 struct btree_path *path), 1172 TP_ARGS(trans, caller_ip, path) 1173 ); 1174 1175 DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_parent_for_fill, 1176 TP_PROTO(struct btree_trans *trans, 1177 unsigned long caller_ip, 1178 struct btree_path *path), 1179 TP_ARGS(trans, caller_ip, path) 1180 ); 1181 1182 DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_after_fill, 1183 TP_PROTO(struct btree_trans *trans, 1184 unsigned long caller_ip, 1185 struct btree_path *path), 1186 TP_ARGS(trans, caller_ip, path) 1187 ); 1188 1189 DEFINE_EVENT(transaction_event, trans_restart_key_cache_upgrade, 1190 TP_PROTO(struct btree_trans *trans, 1191 unsigned long caller_ip), 1192 TP_ARGS(trans, caller_ip) 1193 ); 1194 1195 DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_key_cache_fill, 1196 TP_PROTO(struct btree_trans *trans, 1197 unsigned long caller_ip, 1198 struct btree_path *path), 1199 TP_ARGS(trans, caller_ip, path) 1200 ); 1201 1202 DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_path, 1203 TP_PROTO(struct btree_trans *trans, 1204 unsigned long caller_ip, 1205 struct btree_path *path), 1206 TP_ARGS(trans, caller_ip, path) 1207 ); 1208 1209 DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_path_intent, 1210 TP_PROTO(struct btree_trans *trans, 1211 unsigned long caller_ip, 1212 struct btree_path *path), 1213 TP_ARGS(trans, caller_ip, path) 1214 ); 1215 1216 DEFINE_EVENT(transaction_restart_iter, trans_restart_traverse, 1217 TP_PROTO(struct btree_trans *trans, 1218 unsigned long caller_ip, 1219 struct btree_path *path), 1220 TP_ARGS(trans, caller_ip, path) 1221 ); 1222 1223 DEFINE_EVENT(transaction_restart_iter, trans_restart_memory_allocation_failure, 1224 TP_PROTO(struct btree_trans *trans, 1225 unsigned long caller_ip, 1226 struct btree_path *path), 1227 TP_ARGS(trans, caller_ip, path) 1228 ); 1229 1230 DEFINE_EVENT(trans_str_nocaller, trans_restart_would_deadlock, 1231 TP_PROTO(struct btree_trans *trans, 1232 const char *cycle), 1233 TP_ARGS(trans, cycle) 1234 ); 1235 1236 DEFINE_EVENT(transaction_event, trans_restart_would_deadlock_recursion_limit, 1237 TP_PROTO(struct btree_trans *trans, 1238 unsigned long caller_ip), 1239 TP_ARGS(trans, caller_ip) 1240 ); 1241 1242 TRACE_EVENT(trans_restart_would_deadlock_write, 1243 TP_PROTO(struct btree_trans *trans), 1244 TP_ARGS(trans), 1245 1246 TP_STRUCT__entry( 1247 __array(char, trans_fn, 32 ) 1248 ), 1249 1250 TP_fast_assign( 1251 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1252 ), 1253 1254 TP_printk("%s", __entry->trans_fn) 1255 ); 1256 1257 TRACE_EVENT(trans_restart_mem_realloced, 1258 TP_PROTO(struct btree_trans *trans, 1259 unsigned long caller_ip, 1260 unsigned long bytes), 1261 TP_ARGS(trans, caller_ip, bytes), 1262 1263 TP_STRUCT__entry( 1264 __array(char, trans_fn, 32 ) 1265 __field(unsigned long, caller_ip ) 1266 __field(unsigned long, bytes ) 1267 ), 1268 1269 TP_fast_assign( 1270 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1271 __entry->caller_ip = caller_ip; 1272 __entry->bytes = bytes; 1273 ), 1274 1275 TP_printk("%s %pS bytes %lu", 1276 __entry->trans_fn, 1277 (void *) __entry->caller_ip, 1278 __entry->bytes) 1279 ); 1280 1281 TRACE_EVENT(trans_restart_key_cache_key_realloced, 1282 TP_PROTO(struct btree_trans *trans, 1283 unsigned long caller_ip, 1284 struct btree_path *path, 1285 unsigned old_u64s, 1286 unsigned new_u64s), 1287 TP_ARGS(trans, caller_ip, path, old_u64s, new_u64s), 1288 1289 TP_STRUCT__entry( 1290 __array(char, trans_fn, 32 ) 1291 __field(unsigned long, caller_ip ) 1292 __field(enum btree_id, btree_id ) 1293 TRACE_BPOS_entries(pos) 1294 __field(u32, old_u64s ) 1295 __field(u32, new_u64s ) 1296 ), 1297 1298 TP_fast_assign( 1299 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1300 __entry->caller_ip = caller_ip; 1301 1302 __entry->btree_id = path->btree_id; 1303 TRACE_BPOS_assign(pos, path->pos); 1304 __entry->old_u64s = old_u64s; 1305 __entry->new_u64s = new_u64s; 1306 ), 1307 1308 TP_printk("%s %pS btree %s pos %llu:%llu:%u old_u64s %u new_u64s %u", 1309 __entry->trans_fn, 1310 (void *) __entry->caller_ip, 1311 bch2_btree_id_str(__entry->btree_id), 1312 __entry->pos_inode, 1313 __entry->pos_offset, 1314 __entry->pos_snapshot, 1315 __entry->old_u64s, 1316 __entry->new_u64s) 1317 ); 1318 1319 TRACE_EVENT(path_downgrade, 1320 TP_PROTO(struct btree_trans *trans, 1321 unsigned long caller_ip, 1322 struct btree_path *path, 1323 unsigned old_locks_want), 1324 TP_ARGS(trans, caller_ip, path, old_locks_want), 1325 1326 TP_STRUCT__entry( 1327 __array(char, trans_fn, 32 ) 1328 __field(unsigned long, caller_ip ) 1329 __field(unsigned, old_locks_want ) 1330 __field(unsigned, new_locks_want ) 1331 __field(unsigned, btree ) 1332 TRACE_BPOS_entries(pos) 1333 ), 1334 1335 TP_fast_assign( 1336 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1337 __entry->caller_ip = caller_ip; 1338 __entry->old_locks_want = old_locks_want; 1339 __entry->new_locks_want = path->locks_want; 1340 __entry->btree = path->btree_id; 1341 TRACE_BPOS_assign(pos, path->pos); 1342 ), 1343 1344 TP_printk("%s %pS locks_want %u -> %u %s %llu:%llu:%u", 1345 __entry->trans_fn, 1346 (void *) __entry->caller_ip, 1347 __entry->old_locks_want, 1348 __entry->new_locks_want, 1349 bch2_btree_id_str(__entry->btree), 1350 __entry->pos_inode, 1351 __entry->pos_offset, 1352 __entry->pos_snapshot) 1353 ); 1354 1355 DEFINE_EVENT(transaction_event, trans_restart_write_buffer_flush, 1356 TP_PROTO(struct btree_trans *trans, 1357 unsigned long caller_ip), 1358 TP_ARGS(trans, caller_ip) 1359 ); 1360 1361 TRACE_EVENT(write_buffer_flush, 1362 TP_PROTO(struct btree_trans *trans, size_t nr, size_t skipped, size_t fast, size_t size), 1363 TP_ARGS(trans, nr, skipped, fast, size), 1364 1365 TP_STRUCT__entry( 1366 __field(size_t, nr ) 1367 __field(size_t, skipped ) 1368 __field(size_t, fast ) 1369 __field(size_t, size ) 1370 ), 1371 1372 TP_fast_assign( 1373 __entry->nr = nr; 1374 __entry->skipped = skipped; 1375 __entry->fast = fast; 1376 __entry->size = size; 1377 ), 1378 1379 TP_printk("%zu/%zu skipped %zu fast %zu", 1380 __entry->nr, __entry->size, __entry->skipped, __entry->fast) 1381 ); 1382 1383 TRACE_EVENT(write_buffer_flush_sync, 1384 TP_PROTO(struct btree_trans *trans, unsigned long caller_ip), 1385 TP_ARGS(trans, caller_ip), 1386 1387 TP_STRUCT__entry( 1388 __array(char, trans_fn, 32 ) 1389 __field(unsigned long, caller_ip ) 1390 ), 1391 1392 TP_fast_assign( 1393 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1394 __entry->caller_ip = caller_ip; 1395 ), 1396 1397 TP_printk("%s %pS", __entry->trans_fn, (void *) __entry->caller_ip) 1398 ); 1399 1400 TRACE_EVENT(write_buffer_flush_slowpath, 1401 TP_PROTO(struct btree_trans *trans, size_t slowpath, size_t total), 1402 TP_ARGS(trans, slowpath, total), 1403 1404 TP_STRUCT__entry( 1405 __field(size_t, slowpath ) 1406 __field(size_t, total ) 1407 ), 1408 1409 TP_fast_assign( 1410 __entry->slowpath = slowpath; 1411 __entry->total = total; 1412 ), 1413 1414 TP_printk("%zu/%zu", __entry->slowpath, __entry->total) 1415 ); 1416 1417 DEFINE_EVENT(fs_str, rebalance_extent, 1418 TP_PROTO(struct bch_fs *c, const char *str), 1419 TP_ARGS(c, str) 1420 ); 1421 1422 DEFINE_EVENT(fs_str, data_update, 1423 TP_PROTO(struct bch_fs *c, const char *str), 1424 TP_ARGS(c, str) 1425 ); 1426 1427 TRACE_EVENT(error_downcast, 1428 TP_PROTO(int bch_err, int std_err, unsigned long ip), 1429 TP_ARGS(bch_err, std_err, ip), 1430 1431 TP_STRUCT__entry( 1432 __array(char, bch_err, 32 ) 1433 __array(char, std_err, 32 ) 1434 __array(char, ip, 32 ) 1435 ), 1436 1437 TP_fast_assign( 1438 strscpy(__entry->bch_err, bch2_err_str(bch_err), sizeof(__entry->bch_err)); 1439 strscpy(__entry->std_err, bch2_err_str(std_err), sizeof(__entry->std_err)); 1440 snprintf(__entry->ip, sizeof(__entry->ip), "%ps", (void *) ip); 1441 ), 1442 1443 TP_printk("%s -> %s %s", __entry->bch_err, __entry->std_err, __entry->ip) 1444 ); 1445 1446 #ifdef CONFIG_BCACHEFS_PATH_TRACEPOINTS 1447 1448 TRACE_EVENT(update_by_path, 1449 TP_PROTO(struct btree_trans *trans, struct btree_path *path, 1450 struct btree_insert_entry *i, bool overwrite), 1451 TP_ARGS(trans, path, i, overwrite), 1452 1453 TP_STRUCT__entry( 1454 __array(char, trans_fn, 32 ) 1455 __field(btree_path_idx_t, path_idx ) 1456 __field(u8, btree_id ) 1457 TRACE_BPOS_entries(pos) 1458 __field(u8, overwrite ) 1459 __field(btree_path_idx_t, update_idx ) 1460 __field(btree_path_idx_t, nr_updates ) 1461 ), 1462 1463 TP_fast_assign( 1464 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1465 __entry->path_idx = path - trans->paths; 1466 __entry->btree_id = path->btree_id; 1467 TRACE_BPOS_assign(pos, path->pos); 1468 __entry->overwrite = overwrite; 1469 __entry->update_idx = i - trans->updates; 1470 __entry->nr_updates = trans->nr_updates; 1471 ), 1472 1473 TP_printk("%s path %3u btree %s pos %llu:%llu:%u overwrite %u update %u/%u", 1474 __entry->trans_fn, 1475 __entry->path_idx, 1476 bch2_btree_id_str(__entry->btree_id), 1477 __entry->pos_inode, 1478 __entry->pos_offset, 1479 __entry->pos_snapshot, 1480 __entry->overwrite, 1481 __entry->update_idx, 1482 __entry->nr_updates) 1483 ); 1484 1485 TRACE_EVENT(btree_path_lock, 1486 TP_PROTO(struct btree_trans *trans, 1487 unsigned long caller_ip, 1488 struct btree_bkey_cached_common *b), 1489 TP_ARGS(trans, caller_ip, b), 1490 1491 TP_STRUCT__entry( 1492 __array(char, trans_fn, 32 ) 1493 __field(unsigned long, caller_ip ) 1494 __field(u8, btree_id ) 1495 __field(u8, level ) 1496 __array(char, node, 24 ) 1497 __field(u32, lock_seq ) 1498 ), 1499 1500 TP_fast_assign( 1501 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1502 __entry->caller_ip = caller_ip; 1503 __entry->btree_id = b->btree_id; 1504 __entry->level = b->level; 1505 1506 scnprintf(__entry->node, sizeof(__entry->node), "%px", b); 1507 __entry->lock_seq = six_lock_seq(&b->lock); 1508 ), 1509 1510 TP_printk("%s %pS\nbtree %s level %u node %s lock seq %u", 1511 __entry->trans_fn, 1512 (void *) __entry->caller_ip, 1513 bch2_btree_id_str(__entry->btree_id), 1514 __entry->level, 1515 __entry->node, 1516 __entry->lock_seq) 1517 ); 1518 1519 DECLARE_EVENT_CLASS(btree_path_ev, 1520 TP_PROTO(struct btree_trans *trans, struct btree_path *path), 1521 TP_ARGS(trans, path), 1522 1523 TP_STRUCT__entry( 1524 __field(u16, idx ) 1525 __field(u8, ref ) 1526 __field(u8, btree_id ) 1527 TRACE_BPOS_entries(pos) 1528 ), 1529 1530 TP_fast_assign( 1531 __entry->idx = path - trans->paths; 1532 __entry->ref = path->ref; 1533 __entry->btree_id = path->btree_id; 1534 TRACE_BPOS_assign(pos, path->pos); 1535 ), 1536 1537 TP_printk("path %3u ref %u btree %s pos %llu:%llu:%u", 1538 __entry->idx, __entry->ref, 1539 bch2_btree_id_str(__entry->btree_id), 1540 __entry->pos_inode, 1541 __entry->pos_offset, 1542 __entry->pos_snapshot) 1543 ); 1544 1545 DEFINE_EVENT(btree_path_ev, btree_path_get_ll, 1546 TP_PROTO(struct btree_trans *trans, struct btree_path *path), 1547 TP_ARGS(trans, path) 1548 ); 1549 1550 DEFINE_EVENT(btree_path_ev, btree_path_put_ll, 1551 TP_PROTO(struct btree_trans *trans, struct btree_path *path), 1552 TP_ARGS(trans, path) 1553 ); 1554 1555 DEFINE_EVENT(btree_path_ev, btree_path_should_be_locked, 1556 TP_PROTO(struct btree_trans *trans, struct btree_path *path), 1557 TP_ARGS(trans, path) 1558 ); 1559 1560 TRACE_EVENT(btree_path_alloc, 1561 TP_PROTO(struct btree_trans *trans, struct btree_path *path), 1562 TP_ARGS(trans, path), 1563 1564 TP_STRUCT__entry( 1565 __field(btree_path_idx_t, idx ) 1566 __field(u8, locks_want ) 1567 __field(u8, btree_id ) 1568 TRACE_BPOS_entries(pos) 1569 ), 1570 1571 TP_fast_assign( 1572 __entry->idx = path - trans->paths; 1573 __entry->locks_want = path->locks_want; 1574 __entry->btree_id = path->btree_id; 1575 TRACE_BPOS_assign(pos, path->pos); 1576 ), 1577 1578 TP_printk("path %3u btree %s locks_want %u pos %llu:%llu:%u", 1579 __entry->idx, 1580 bch2_btree_id_str(__entry->btree_id), 1581 __entry->locks_want, 1582 __entry->pos_inode, 1583 __entry->pos_offset, 1584 __entry->pos_snapshot) 1585 ); 1586 1587 TRACE_EVENT(btree_path_get, 1588 TP_PROTO(struct btree_trans *trans, struct btree_path *path, struct bpos *new_pos), 1589 TP_ARGS(trans, path, new_pos), 1590 1591 TP_STRUCT__entry( 1592 __field(btree_path_idx_t, idx ) 1593 __field(u8, ref ) 1594 __field(u8, preserve ) 1595 __field(u8, locks_want ) 1596 __field(u8, btree_id ) 1597 TRACE_BPOS_entries(old_pos) 1598 TRACE_BPOS_entries(new_pos) 1599 ), 1600 1601 TP_fast_assign( 1602 __entry->idx = path - trans->paths; 1603 __entry->ref = path->ref; 1604 __entry->preserve = path->preserve; 1605 __entry->locks_want = path->locks_want; 1606 __entry->btree_id = path->btree_id; 1607 TRACE_BPOS_assign(old_pos, path->pos); 1608 TRACE_BPOS_assign(new_pos, *new_pos); 1609 ), 1610 1611 TP_printk(" path %3u ref %u preserve %u btree %s locks_want %u pos %llu:%llu:%u -> %llu:%llu:%u", 1612 __entry->idx, 1613 __entry->ref, 1614 __entry->preserve, 1615 bch2_btree_id_str(__entry->btree_id), 1616 __entry->locks_want, 1617 __entry->old_pos_inode, 1618 __entry->old_pos_offset, 1619 __entry->old_pos_snapshot, 1620 __entry->new_pos_inode, 1621 __entry->new_pos_offset, 1622 __entry->new_pos_snapshot) 1623 ); 1624 1625 DECLARE_EVENT_CLASS(btree_path_clone, 1626 TP_PROTO(struct btree_trans *trans, struct btree_path *path, struct btree_path *new), 1627 TP_ARGS(trans, path, new), 1628 1629 TP_STRUCT__entry( 1630 __field(btree_path_idx_t, idx ) 1631 __field(u8, new_idx ) 1632 __field(u8, btree_id ) 1633 __field(u8, ref ) 1634 __field(u8, preserve ) 1635 TRACE_BPOS_entries(pos) 1636 ), 1637 1638 TP_fast_assign( 1639 __entry->idx = path - trans->paths; 1640 __entry->new_idx = new - trans->paths; 1641 __entry->btree_id = path->btree_id; 1642 __entry->ref = path->ref; 1643 __entry->preserve = path->preserve; 1644 TRACE_BPOS_assign(pos, path->pos); 1645 ), 1646 1647 TP_printk(" path %3u ref %u preserve %u btree %s %llu:%llu:%u -> %u", 1648 __entry->idx, 1649 __entry->ref, 1650 __entry->preserve, 1651 bch2_btree_id_str(__entry->btree_id), 1652 __entry->pos_inode, 1653 __entry->pos_offset, 1654 __entry->pos_snapshot, 1655 __entry->new_idx) 1656 ); 1657 1658 DEFINE_EVENT(btree_path_clone, btree_path_clone, 1659 TP_PROTO(struct btree_trans *trans, struct btree_path *path, struct btree_path *new), 1660 TP_ARGS(trans, path, new) 1661 ); 1662 1663 DEFINE_EVENT(btree_path_clone, btree_path_save_pos, 1664 TP_PROTO(struct btree_trans *trans, struct btree_path *path, struct btree_path *new), 1665 TP_ARGS(trans, path, new) 1666 ); 1667 1668 DECLARE_EVENT_CLASS(btree_path_traverse, 1669 TP_PROTO(struct btree_trans *trans, 1670 struct btree_path *path), 1671 TP_ARGS(trans, path), 1672 1673 TP_STRUCT__entry( 1674 __array(char, trans_fn, 32 ) 1675 __field(btree_path_idx_t, idx ) 1676 __field(u8, ref ) 1677 __field(u8, preserve ) 1678 __field(u8, should_be_locked ) 1679 __field(u8, btree_id ) 1680 __field(u8, level ) 1681 TRACE_BPOS_entries(pos) 1682 __field(u8, locks_want ) 1683 __field(u8, nodes_locked ) 1684 __array(char, node0, 24 ) 1685 __array(char, node1, 24 ) 1686 __array(char, node2, 24 ) 1687 __array(char, node3, 24 ) 1688 ), 1689 1690 TP_fast_assign( 1691 strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); 1692 1693 __entry->idx = path - trans->paths; 1694 __entry->ref = path->ref; 1695 __entry->preserve = path->preserve; 1696 __entry->btree_id = path->btree_id; 1697 __entry->level = path->level; 1698 TRACE_BPOS_assign(pos, path->pos); 1699 1700 __entry->locks_want = path->locks_want; 1701 __entry->nodes_locked = path->nodes_locked; 1702 struct btree *b = path->l[0].b; 1703 if (IS_ERR(b)) 1704 strscpy(__entry->node0, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1705 else 1706 scnprintf(__entry->node0, sizeof(__entry->node0), "%px", &b->c); 1707 b = path->l[1].b; 1708 if (IS_ERR(b)) 1709 strscpy(__entry->node1, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1710 else 1711 scnprintf(__entry->node1, sizeof(__entry->node0), "%px", &b->c); 1712 b = path->l[2].b; 1713 if (IS_ERR(b)) 1714 strscpy(__entry->node2, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1715 else 1716 scnprintf(__entry->node2, sizeof(__entry->node0), "%px", &b->c); 1717 b = path->l[3].b; 1718 if (IS_ERR(b)) 1719 strscpy(__entry->node3, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1720 else 1721 scnprintf(__entry->node3, sizeof(__entry->node0), "%px", &b->c); 1722 ), 1723 1724 TP_printk("%s\npath %3u ref %u preserve %u btree %s %llu:%llu:%u level %u locks_want %u\n" 1725 "locks %u %u %u %u node %s %s %s %s", 1726 __entry->trans_fn, 1727 __entry->idx, 1728 __entry->ref, 1729 __entry->preserve, 1730 bch2_btree_id_str(__entry->btree_id), 1731 __entry->pos_inode, 1732 __entry->pos_offset, 1733 __entry->pos_snapshot, 1734 __entry->level, 1735 __entry->locks_want, 1736 (__entry->nodes_locked >> 6) & 3, 1737 (__entry->nodes_locked >> 4) & 3, 1738 (__entry->nodes_locked >> 2) & 3, 1739 (__entry->nodes_locked >> 0) & 3, 1740 __entry->node3, 1741 __entry->node2, 1742 __entry->node1, 1743 __entry->node0) 1744 ); 1745 1746 DEFINE_EVENT(btree_path_traverse, btree_path_traverse_start, 1747 TP_PROTO(struct btree_trans *trans, 1748 struct btree_path *path), 1749 TP_ARGS(trans, path) 1750 ); 1751 1752 DEFINE_EVENT(btree_path_traverse, btree_path_traverse_end, 1753 TP_PROTO(struct btree_trans *trans, struct btree_path *path), 1754 TP_ARGS(trans, path) 1755 ); 1756 1757 TRACE_EVENT(btree_path_set_pos, 1758 TP_PROTO(struct btree_trans *trans, 1759 struct btree_path *path, 1760 struct bpos *new_pos), 1761 TP_ARGS(trans, path, new_pos), 1762 1763 TP_STRUCT__entry( 1764 __field(btree_path_idx_t, idx ) 1765 __field(u8, ref ) 1766 __field(u8, preserve ) 1767 __field(u8, btree_id ) 1768 TRACE_BPOS_entries(old_pos) 1769 TRACE_BPOS_entries(new_pos) 1770 __field(u8, locks_want ) 1771 __field(u8, nodes_locked ) 1772 __array(char, node0, 24 ) 1773 __array(char, node1, 24 ) 1774 __array(char, node2, 24 ) 1775 __array(char, node3, 24 ) 1776 ), 1777 1778 TP_fast_assign( 1779 __entry->idx = path - trans->paths; 1780 __entry->ref = path->ref; 1781 __entry->preserve = path->preserve; 1782 __entry->btree_id = path->btree_id; 1783 TRACE_BPOS_assign(old_pos, path->pos); 1784 TRACE_BPOS_assign(new_pos, *new_pos); 1785 1786 __entry->nodes_locked = path->nodes_locked; 1787 struct btree *b = path->l[0].b; 1788 if (IS_ERR(b)) 1789 strscpy(__entry->node0, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1790 else 1791 scnprintf(__entry->node0, sizeof(__entry->node0), "%px", &b->c); 1792 b = path->l[1].b; 1793 if (IS_ERR(b)) 1794 strscpy(__entry->node1, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1795 else 1796 scnprintf(__entry->node1, sizeof(__entry->node0), "%px", &b->c); 1797 b = path->l[2].b; 1798 if (IS_ERR(b)) 1799 strscpy(__entry->node2, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1800 else 1801 scnprintf(__entry->node2, sizeof(__entry->node0), "%px", &b->c); 1802 b = path->l[3].b; 1803 if (IS_ERR(b)) 1804 strscpy(__entry->node3, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node0)); 1805 else 1806 scnprintf(__entry->node3, sizeof(__entry->node0), "%px", &b->c); 1807 ), 1808 1809 TP_printk("\npath %3u ref %u preserve %u btree %s %llu:%llu:%u -> %llu:%llu:%u\n" 1810 "locks %u %u %u %u node %s %s %s %s", 1811 __entry->idx, 1812 __entry->ref, 1813 __entry->preserve, 1814 bch2_btree_id_str(__entry->btree_id), 1815 __entry->old_pos_inode, 1816 __entry->old_pos_offset, 1817 __entry->old_pos_snapshot, 1818 __entry->new_pos_inode, 1819 __entry->new_pos_offset, 1820 __entry->new_pos_snapshot, 1821 (__entry->nodes_locked >> 6) & 3, 1822 (__entry->nodes_locked >> 4) & 3, 1823 (__entry->nodes_locked >> 2) & 3, 1824 (__entry->nodes_locked >> 0) & 3, 1825 __entry->node3, 1826 __entry->node2, 1827 __entry->node1, 1828 __entry->node0) 1829 ); 1830 1831 TRACE_EVENT(btree_path_free, 1832 TP_PROTO(struct btree_trans *trans, btree_path_idx_t path, struct btree_path *dup), 1833 TP_ARGS(trans, path, dup), 1834 1835 TP_STRUCT__entry( 1836 __field(btree_path_idx_t, idx ) 1837 __field(u8, preserve ) 1838 __field(u8, should_be_locked) 1839 __field(s8, dup ) 1840 __field(u8, dup_locked ) 1841 ), 1842 1843 TP_fast_assign( 1844 __entry->idx = path; 1845 __entry->preserve = trans->paths[path].preserve; 1846 __entry->should_be_locked = trans->paths[path].should_be_locked; 1847 __entry->dup = dup ? dup - trans->paths : -1; 1848 __entry->dup_locked = dup ? btree_node_locked(dup, dup->level) : 0; 1849 ), 1850 1851 TP_printk(" path %3u %c %c dup %2i locked %u", __entry->idx, 1852 __entry->preserve ? 'P' : ' ', 1853 __entry->should_be_locked ? 'S' : ' ', 1854 __entry->dup, 1855 __entry->dup_locked) 1856 ); 1857 1858 TRACE_EVENT(btree_path_free_trans_begin, 1859 TP_PROTO(btree_path_idx_t path), 1860 TP_ARGS(path), 1861 1862 TP_STRUCT__entry( 1863 __field(btree_path_idx_t, idx ) 1864 ), 1865 1866 TP_fast_assign( 1867 __entry->idx = path; 1868 ), 1869 1870 TP_printk(" path %3u", __entry->idx) 1871 ); 1872 1873 #else /* CONFIG_BCACHEFS_PATH_TRACEPOINTS */ 1874 #ifndef _TRACE_BCACHEFS_H 1875 1876 static inline void trace_update_by_path(struct btree_trans *trans, struct btree_path *path, 1877 struct btree_insert_entry *i, bool overwrite) {} 1878 static inline void trace_btree_path_lock(struct btree_trans *trans, unsigned long caller_ip, struct btree_bkey_cached_common *b) {} 1879 static inline void trace_btree_path_get_ll(struct btree_trans *trans, struct btree_path *path) {} 1880 static inline void trace_btree_path_put_ll(struct btree_trans *trans, struct btree_path *path) {} 1881 static inline void trace_btree_path_should_be_locked(struct btree_trans *trans, struct btree_path *path) {} 1882 static inline void trace_btree_path_alloc(struct btree_trans *trans, struct btree_path *path) {} 1883 static inline void trace_btree_path_get(struct btree_trans *trans, struct btree_path *path, struct bpos *new_pos) {} 1884 static inline void trace_btree_path_clone(struct btree_trans *trans, struct btree_path *path, struct btree_path *new) {} 1885 static inline void trace_btree_path_save_pos(struct btree_trans *trans, struct btree_path *path, struct btree_path *new) {} 1886 static inline void trace_btree_path_traverse_start(struct btree_trans *trans, struct btree_path *path) {} 1887 static inline void trace_btree_path_traverse_end(struct btree_trans *trans, struct btree_path *path) {} 1888 static inline void trace_btree_path_set_pos(struct btree_trans *trans, struct btree_path *path, struct bpos *new_pos) {} 1889 static inline void trace_btree_path_free(struct btree_trans *trans, btree_path_idx_t path, struct btree_path *dup) {} 1890 static inline void trace_btree_path_free_trans_begin(btree_path_idx_t path) {} 1891 1892 #endif 1893 #endif /* CONFIG_BCACHEFS_PATH_TRACEPOINTS */ 1894 1895 #define _TRACE_BCACHEFS_H 1896 #endif /* _TRACE_BCACHEFS_H */ 1897 1898 /* This part must be outside protection */ 1899 #undef TRACE_INCLUDE_PATH 1900 #define TRACE_INCLUDE_PATH ../../fs/bcachefs 1901 1902 #undef TRACE_INCLUDE_FILE 1903 #define TRACE_INCLUDE_FILE trace 1904 1905 #include <trace/define_trace.h> 1906