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
trace_update_by_path(struct btree_trans * trans,struct btree_path * path,struct btree_insert_entry * i,bool overwrite)1876 static inline void trace_update_by_path(struct btree_trans *trans, struct btree_path *path,
1877 struct btree_insert_entry *i, bool overwrite) {}
trace_btree_path_lock(struct btree_trans * trans,unsigned long caller_ip,struct btree_bkey_cached_common * b)1878 static inline void trace_btree_path_lock(struct btree_trans *trans, unsigned long caller_ip, struct btree_bkey_cached_common *b) {}
trace_btree_path_get_ll(struct btree_trans * trans,struct btree_path * path)1879 static inline void trace_btree_path_get_ll(struct btree_trans *trans, struct btree_path *path) {}
trace_btree_path_put_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) {}
trace_btree_path_should_be_locked(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) {}
trace_btree_path_alloc(struct btree_trans * trans,struct btree_path * path)1882 static inline void trace_btree_path_alloc(struct btree_trans *trans, struct btree_path *path) {}
trace_btree_path_get(struct btree_trans * trans,struct btree_path * path,struct bpos * new_pos)1883 static inline void trace_btree_path_get(struct btree_trans *trans, struct btree_path *path, struct bpos *new_pos) {}
trace_btree_path_clone(struct btree_trans * trans,struct btree_path * path,struct btree_path * new)1884 static inline void trace_btree_path_clone(struct btree_trans *trans, struct btree_path *path, struct btree_path *new) {}
trace_btree_path_save_pos(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) {}
trace_btree_path_traverse_start(struct btree_trans * trans,struct btree_path * path)1886 static inline void trace_btree_path_traverse_start(struct btree_trans *trans, struct btree_path *path) {}
trace_btree_path_traverse_end(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) {}
trace_btree_path_set_pos(struct btree_trans * trans,struct btree_path * path,struct bpos * new_pos)1888 static inline void trace_btree_path_set_pos(struct btree_trans *trans, struct btree_path *path, struct bpos *new_pos) {}
trace_btree_path_free(struct btree_trans * trans,btree_path_idx_t path,struct btree_path * dup)1889 static inline void trace_btree_path_free(struct btree_trans *trans, btree_path_idx_t path, struct btree_path *dup) {}
trace_btree_path_free_trans_begin(btree_path_idx_t path)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