11c6fdbd8SKent Overstreet /* SPDX-License-Identifier: GPL-2.0 */
21c6fdbd8SKent Overstreet #undef TRACE_SYSTEM
31c6fdbd8SKent Overstreet #define TRACE_SYSTEM bcachefs
41c6fdbd8SKent Overstreet
51c6fdbd8SKent Overstreet #if !defined(_TRACE_BCACHEFS_H) || defined(TRACE_HEADER_MULTI_READ)
61c6fdbd8SKent Overstreet
71c6fdbd8SKent Overstreet #include <linux/tracepoint.h>
81c6fdbd8SKent Overstreet
91c6fdbd8SKent Overstreet #define TRACE_BPOS_entries(name) \
109f96568cSKent Overstreet __field(u64, name##_inode ) \
119f96568cSKent Overstreet __field(u64, name##_offset ) \
129f96568cSKent Overstreet __field(u32, name##_snapshot )
139f96568cSKent Overstreet
149f96568cSKent Overstreet #define TRACE_BPOS_assign(dst, src) \
159f96568cSKent Overstreet __entry->dst##_inode = (src).inode; \
169f96568cSKent Overstreet __entry->dst##_offset = (src).offset; \
179f96568cSKent Overstreet __entry->dst##_snapshot = (src).snapshot
189f96568cSKent Overstreet
199f96568cSKent Overstreet DECLARE_EVENT_CLASS(bpos,
201c6fdbd8SKent Overstreet TP_PROTO(const struct bpos *p),
2112043cf1SKent Overstreet TP_ARGS(p),
221c6fdbd8SKent Overstreet
231c6fdbd8SKent Overstreet TP_STRUCT__entry(
241c6fdbd8SKent Overstreet TRACE_BPOS_entries(p)
259f96568cSKent Overstreet ),
261c6fdbd8SKent Overstreet
271c6fdbd8SKent Overstreet TP_fast_assign(
281c6fdbd8SKent Overstreet TRACE_BPOS_assign(p, *p);
299f96568cSKent Overstreet ),
301c6fdbd8SKent Overstreet
311c6fdbd8SKent Overstreet TP_printk("%llu:%llu:%u", __entry->p_inode, __entry->p_offset, __entry->p_snapshot)
329f96568cSKent Overstreet );
331c6fdbd8SKent Overstreet
341c6fdbd8SKent Overstreet DECLARE_EVENT_CLASS(fs_str,
35e153a0d7SKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
3625d1e39dSKent Overstreet TP_ARGS(c, str),
3725d1e39dSKent Overstreet
381c6fdbd8SKent Overstreet TP_STRUCT__entry(
391c6fdbd8SKent Overstreet __field(dev_t, dev )
4025d1e39dSKent Overstreet __string(str, str )
4125d1e39dSKent Overstreet ),
421c6fdbd8SKent Overstreet
431c6fdbd8SKent Overstreet TP_fast_assign(
441c6fdbd8SKent Overstreet __entry->dev = c->dev;
4525d1e39dSKent Overstreet __assign_str(str);
462c92ca84SSteven Rostedt (Google) ),
471c6fdbd8SKent Overstreet
481c6fdbd8SKent Overstreet TP_printk("%d,%d\n%s", MAJOR(__entry->dev), MINOR(__entry->dev), __get_str(str))
49e6a2566fSKent Overstreet );
501c6fdbd8SKent Overstreet
511c6fdbd8SKent Overstreet DECLARE_EVENT_CLASS(trans_str,
52e153a0d7SKent Overstreet TP_PROTO(struct btree_trans *trans, unsigned long caller_ip, const char *str),
53e153a0d7SKent Overstreet TP_ARGS(trans, caller_ip, str),
54e153a0d7SKent Overstreet
55e153a0d7SKent Overstreet TP_STRUCT__entry(
56e153a0d7SKent Overstreet __field(dev_t, dev )
57e153a0d7SKent Overstreet __array(char, trans_fn, 32 )
58e153a0d7SKent Overstreet __field(unsigned long, caller_ip )
59e153a0d7SKent Overstreet __string(str, str )
60e153a0d7SKent Overstreet ),
61e153a0d7SKent Overstreet
62e153a0d7SKent Overstreet TP_fast_assign(
63e153a0d7SKent Overstreet __entry->dev = trans->c->dev;
64e153a0d7SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
65e153a0d7SKent Overstreet __entry->caller_ip = caller_ip;
66e153a0d7SKent Overstreet __assign_str(str);
672c92ca84SSteven Rostedt (Google) ),
68e153a0d7SKent Overstreet
69e153a0d7SKent Overstreet TP_printk("%d,%d %s %pS %s",
70e153a0d7SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
71e153a0d7SKent Overstreet __entry->trans_fn, (void *) __entry->caller_ip, __get_str(str))
72e153a0d7SKent Overstreet );
73e153a0d7SKent Overstreet
74e153a0d7SKent Overstreet DECLARE_EVENT_CLASS(trans_str_nocaller,
75c13fbb7dSKent Overstreet TP_PROTO(struct btree_trans *trans, const char *str),
76c13fbb7dSKent Overstreet TP_ARGS(trans, str),
77c13fbb7dSKent Overstreet
78c13fbb7dSKent Overstreet TP_STRUCT__entry(
79c13fbb7dSKent Overstreet __field(dev_t, dev )
80c13fbb7dSKent Overstreet __array(char, trans_fn, 32 )
81c13fbb7dSKent Overstreet __string(str, str )
82c13fbb7dSKent Overstreet ),
83c13fbb7dSKent Overstreet
84c13fbb7dSKent Overstreet TP_fast_assign(
85c13fbb7dSKent Overstreet __entry->dev = trans->c->dev;
86c13fbb7dSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
87c13fbb7dSKent Overstreet __assign_str(str);
882c92ca84SSteven Rostedt (Google) ),
89c13fbb7dSKent Overstreet
90c13fbb7dSKent Overstreet TP_printk("%d,%d %s %s",
91c13fbb7dSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
92c13fbb7dSKent Overstreet __entry->trans_fn, __get_str(str))
93c13fbb7dSKent Overstreet );
94c13fbb7dSKent Overstreet
95c13fbb7dSKent Overstreet DECLARE_EVENT_CLASS(btree_node_nofs,
96a564c9faSKent Overstreet TP_PROTO(struct bch_fs *c, struct btree *b),
97674cfc26SKent Overstreet TP_ARGS(c, b),
98674cfc26SKent Overstreet
99674cfc26SKent Overstreet TP_STRUCT__entry(
100674cfc26SKent Overstreet __field(dev_t, dev )
101674cfc26SKent Overstreet __field(u8, level )
102674cfc26SKent Overstreet __field(u8, btree_id )
103674cfc26SKent Overstreet TRACE_BPOS_entries(pos)
104674cfc26SKent Overstreet ),
105674cfc26SKent Overstreet
106674cfc26SKent Overstreet TP_fast_assign(
107674cfc26SKent Overstreet __entry->dev = c->dev;
108674cfc26SKent Overstreet __entry->level = b->c.level;
109674cfc26SKent Overstreet __entry->btree_id = b->c.btree_id;
110674cfc26SKent Overstreet TRACE_BPOS_assign(pos, b->key.k.p);
111674cfc26SKent Overstreet ),
112674cfc26SKent Overstreet
113674cfc26SKent Overstreet TP_printk("%d,%d %u %s %llu:%llu:%u",
114674cfc26SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
115674cfc26SKent Overstreet __entry->level,
116674cfc26SKent Overstreet bch2_btree_id_str(__entry->btree_id),
11788dfe193SKent Overstreet __entry->pos_inode, __entry->pos_offset, __entry->pos_snapshot)
118674cfc26SKent Overstreet );
119674cfc26SKent Overstreet
120674cfc26SKent Overstreet DECLARE_EVENT_CLASS(btree_node,
121a564c9faSKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
122a564c9faSKent Overstreet TP_ARGS(trans, b),
123a564c9faSKent Overstreet
124a564c9faSKent Overstreet TP_STRUCT__entry(
125a564c9faSKent Overstreet __field(dev_t, dev )
126a564c9faSKent Overstreet __array(char, trans_fn, 32 )
127a564c9faSKent Overstreet __field(u8, level )
128a564c9faSKent Overstreet __field(u8, btree_id )
129a564c9faSKent Overstreet TRACE_BPOS_entries(pos)
130a564c9faSKent Overstreet ),
131a564c9faSKent Overstreet
132a564c9faSKent Overstreet TP_fast_assign(
133a564c9faSKent Overstreet __entry->dev = trans->c->dev;
134a564c9faSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
135a564c9faSKent Overstreet __entry->level = b->c.level;
136a564c9faSKent Overstreet __entry->btree_id = b->c.btree_id;
137a564c9faSKent Overstreet TRACE_BPOS_assign(pos, b->key.k.p);
138a564c9faSKent Overstreet ),
139a564c9faSKent Overstreet
140a564c9faSKent Overstreet TP_printk("%d,%d %s %u %s %llu:%llu:%u",
141a564c9faSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev), __entry->trans_fn,
142a564c9faSKent Overstreet __entry->level,
143a564c9faSKent Overstreet bch2_btree_id_str(__entry->btree_id),
144a564c9faSKent Overstreet __entry->pos_inode, __entry->pos_offset, __entry->pos_snapshot)
145a564c9faSKent Overstreet );
146a564c9faSKent Overstreet
147a564c9faSKent Overstreet DECLARE_EVENT_CLASS(bch_fs,
1481c6fdbd8SKent Overstreet TP_PROTO(struct bch_fs *c),
1491c6fdbd8SKent Overstreet TP_ARGS(c),
1501c6fdbd8SKent Overstreet
1511c6fdbd8SKent Overstreet TP_STRUCT__entry(
1521c6fdbd8SKent Overstreet __field(dev_t, dev )
153ddc7dd62SKent Overstreet ),
1541c6fdbd8SKent Overstreet
1551c6fdbd8SKent Overstreet TP_fast_assign(
1561c6fdbd8SKent Overstreet __entry->dev = c->dev;
157ddc7dd62SKent Overstreet ),
1581c6fdbd8SKent Overstreet
1591c6fdbd8SKent Overstreet TP_printk("%d,%d", MAJOR(__entry->dev), MINOR(__entry->dev))
160ddc7dd62SKent Overstreet );
1611c6fdbd8SKent Overstreet
1621c6fdbd8SKent Overstreet DECLARE_EVENT_CLASS(btree_trans,
163a564c9faSKent Overstreet TP_PROTO(struct btree_trans *trans),
164a564c9faSKent Overstreet TP_ARGS(trans),
165a564c9faSKent Overstreet
166a564c9faSKent Overstreet TP_STRUCT__entry(
167a564c9faSKent Overstreet __field(dev_t, dev )
168a564c9faSKent Overstreet __array(char, trans_fn, 32 )
169a564c9faSKent Overstreet ),
170a564c9faSKent Overstreet
171a564c9faSKent Overstreet TP_fast_assign(
172a564c9faSKent Overstreet __entry->dev = trans->c->dev;
173a564c9faSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
174a564c9faSKent Overstreet ),
175a564c9faSKent Overstreet
176a564c9faSKent Overstreet TP_printk("%d,%d %s", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->trans_fn)
177a564c9faSKent Overstreet );
178a564c9faSKent Overstreet
179a564c9faSKent Overstreet DECLARE_EVENT_CLASS(bio,
1801c6fdbd8SKent Overstreet TP_PROTO(struct bio *bio),
1811c6fdbd8SKent Overstreet TP_ARGS(bio),
1821c6fdbd8SKent Overstreet
1831c6fdbd8SKent Overstreet TP_STRUCT__entry(
1841c6fdbd8SKent Overstreet __field(dev_t, dev )
1851c6fdbd8SKent Overstreet __field(sector_t, sector )
1861c6fdbd8SKent Overstreet __field(unsigned int, nr_sector )
1871c6fdbd8SKent Overstreet __array(char, rwbs, 6 )
1881c6fdbd8SKent Overstreet ),
1891c6fdbd8SKent Overstreet
1901c6fdbd8SKent Overstreet TP_fast_assign(
1911c6fdbd8SKent Overstreet __entry->dev = bio->bi_bdev ? bio_dev(bio) : 0;
1921c6fdbd8SKent Overstreet __entry->sector = bio->bi_iter.bi_sector;
1931c6fdbd8SKent Overstreet __entry->nr_sector = bio->bi_iter.bi_size >> 9;
1941c6fdbd8SKent Overstreet blk_fill_rwbs(__entry->rwbs, bio->bi_opf);
1951c6fdbd8SKent Overstreet ),
1961c6fdbd8SKent Overstreet
1971c6fdbd8SKent Overstreet TP_printk("%d,%d %s %llu + %u",
1981c6fdbd8SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
1991c6fdbd8SKent Overstreet (unsigned long long)__entry->sector, __entry->nr_sector)
2001c6fdbd8SKent Overstreet );
2011c6fdbd8SKent Overstreet
2021c6fdbd8SKent Overstreet /* fs.c: */
203747d1d6cSYouling Tang TRACE_EVENT(bch2_sync_fs,
204747d1d6cSYouling Tang TP_PROTO(struct super_block *sb, int wait),
205747d1d6cSYouling Tang
206747d1d6cSYouling Tang TP_ARGS(sb, wait),
207747d1d6cSYouling Tang
208747d1d6cSYouling Tang TP_STRUCT__entry(
209747d1d6cSYouling Tang __field( dev_t, dev )
210747d1d6cSYouling Tang __field( int, wait )
211747d1d6cSYouling Tang
212747d1d6cSYouling Tang ),
213747d1d6cSYouling Tang
214747d1d6cSYouling Tang TP_fast_assign(
215747d1d6cSYouling Tang __entry->dev = sb->s_dev;
216747d1d6cSYouling Tang __entry->wait = wait;
217747d1d6cSYouling Tang ),
218747d1d6cSYouling Tang
219747d1d6cSYouling Tang TP_printk("dev %d,%d wait %d",
220747d1d6cSYouling Tang MAJOR(__entry->dev), MINOR(__entry->dev),
221747d1d6cSYouling Tang __entry->wait)
222747d1d6cSYouling Tang );
223747d1d6cSYouling Tang
224747d1d6cSYouling Tang /* fs-io.c: */
225747d1d6cSYouling Tang TRACE_EVENT(bch2_fsync,
226747d1d6cSYouling Tang TP_PROTO(struct file *file, int datasync),
227747d1d6cSYouling Tang
228747d1d6cSYouling Tang TP_ARGS(file, datasync),
229747d1d6cSYouling Tang
230747d1d6cSYouling Tang TP_STRUCT__entry(
231747d1d6cSYouling Tang __field( dev_t, dev )
232747d1d6cSYouling Tang __field( ino_t, ino )
233747d1d6cSYouling Tang __field( ino_t, parent )
234747d1d6cSYouling Tang __field( int, datasync )
235747d1d6cSYouling Tang ),
236747d1d6cSYouling Tang
237747d1d6cSYouling Tang TP_fast_assign(
238747d1d6cSYouling Tang struct dentry *dentry = file->f_path.dentry;
239747d1d6cSYouling Tang
240747d1d6cSYouling Tang __entry->dev = dentry->d_sb->s_dev;
241747d1d6cSYouling Tang __entry->ino = d_inode(dentry)->i_ino;
242747d1d6cSYouling Tang __entry->parent = d_inode(dentry->d_parent)->i_ino;
243747d1d6cSYouling Tang __entry->datasync = datasync;
244747d1d6cSYouling Tang ),
245747d1d6cSYouling Tang
246747d1d6cSYouling Tang TP_printk("dev %d,%d ino %lu parent %lu datasync %d ",
247747d1d6cSYouling Tang MAJOR(__entry->dev), MINOR(__entry->dev),
248747d1d6cSYouling Tang (unsigned long) __entry->ino,
249747d1d6cSYouling Tang (unsigned long) __entry->parent, __entry->datasync)
250747d1d6cSYouling Tang );
251747d1d6cSYouling Tang
252747d1d6cSYouling Tang /* super-io.c: */
2534254f5bfSKent Overstreet TRACE_EVENT(write_super,
2544254f5bfSKent Overstreet TP_PROTO(struct bch_fs *c, unsigned long ip),
2554254f5bfSKent Overstreet TP_ARGS(c, ip),
2564254f5bfSKent Overstreet
2574254f5bfSKent Overstreet TP_STRUCT__entry(
2584254f5bfSKent Overstreet __field(dev_t, dev )
2594254f5bfSKent Overstreet __field(unsigned long, ip )
2604254f5bfSKent Overstreet ),
2614254f5bfSKent Overstreet
2624254f5bfSKent Overstreet TP_fast_assign(
2634254f5bfSKent Overstreet __entry->dev = c->dev;
2644254f5bfSKent Overstreet __entry->ip = ip;
2654254f5bfSKent Overstreet ),
2664254f5bfSKent Overstreet
2674254f5bfSKent Overstreet TP_printk("%d,%d for %pS",
2684254f5bfSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
2694254f5bfSKent Overstreet (void *) __entry->ip)
2704254f5bfSKent Overstreet );
2714254f5bfSKent Overstreet
2724254f5bfSKent Overstreet /* io.c: */
2731c6fdbd8SKent Overstreet
2741c6fdbd8SKent Overstreet DEFINE_EVENT(bio, read_promote,
275674cfc26SKent Overstreet TP_PROTO(struct bio *bio),
2761c6fdbd8SKent Overstreet TP_ARGS(bio)
2771c6fdbd8SKent Overstreet );
2781c6fdbd8SKent Overstreet
2791c6fdbd8SKent Overstreet TRACE_EVENT(read_nopromote,
280feb5cc39SKent Overstreet TP_PROTO(struct bch_fs *c, int ret),
281feb5cc39SKent Overstreet TP_ARGS(c, ret),
282feb5cc39SKent Overstreet
283feb5cc39SKent Overstreet TP_STRUCT__entry(
284feb5cc39SKent Overstreet __field(dev_t, dev )
285feb5cc39SKent Overstreet __array(char, ret, 32 )
286feb5cc39SKent Overstreet ),
287feb5cc39SKent Overstreet
288feb5cc39SKent Overstreet TP_fast_assign(
289feb5cc39SKent Overstreet __entry->dev = c->dev;
290feb5cc39SKent Overstreet strscpy(__entry->ret, bch2_err_str(ret), sizeof(__entry->ret));
291feb5cc39SKent Overstreet ),
292feb5cc39SKent Overstreet
293feb5cc39SKent Overstreet TP_printk("%d,%d ret %s",
294feb5cc39SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
295feb5cc39SKent Overstreet __entry->ret)
296feb5cc39SKent Overstreet );
297feb5cc39SKent Overstreet
298feb5cc39SKent Overstreet DEFINE_EVENT(bio, read_bounce,
2991c6fdbd8SKent Overstreet TP_PROTO(struct bio *bio),
3001c6fdbd8SKent Overstreet TP_ARGS(bio)
3011c6fdbd8SKent Overstreet );
3021c6fdbd8SKent Overstreet
3031c6fdbd8SKent Overstreet DEFINE_EVENT(bio, read_split,
304674cfc26SKent Overstreet TP_PROTO(struct bio *bio),
305674cfc26SKent Overstreet TP_ARGS(bio)
306674cfc26SKent Overstreet );
307674cfc26SKent Overstreet
308674cfc26SKent Overstreet DEFINE_EVENT(bio, read_retry,
3091c6fdbd8SKent Overstreet TP_PROTO(struct bio *bio),
3101c6fdbd8SKent Overstreet TP_ARGS(bio)
3111c6fdbd8SKent Overstreet );
3121c6fdbd8SKent Overstreet
3131c6fdbd8SKent Overstreet DEFINE_EVENT(bio, read_reuse_race,
314674cfc26SKent Overstreet TP_PROTO(struct bio *bio),
3151c6fdbd8SKent Overstreet TP_ARGS(bio)
3161c6fdbd8SKent Overstreet );
3171c6fdbd8SKent Overstreet
3181c6fdbd8SKent Overstreet /* Journal */
3191c6fdbd8SKent Overstreet
3201c6fdbd8SKent Overstreet DEFINE_EVENT(bch_fs, journal_full,
3211c6fdbd8SKent Overstreet TP_PROTO(struct bch_fs *c),
3221c6fdbd8SKent Overstreet TP_ARGS(c)
3231c6fdbd8SKent Overstreet );
3241c6fdbd8SKent Overstreet
3251c6fdbd8SKent Overstreet DEFINE_EVENT(fs_str, journal_entry_full,
326e6a2566fSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
327e6a2566fSKent Overstreet TP_ARGS(c, str)
328e6a2566fSKent Overstreet );
3291c6fdbd8SKent Overstreet
3301c6fdbd8SKent Overstreet DEFINE_EVENT(fs_str, journal_entry_close,
331e6a2566fSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
332e6a2566fSKent Overstreet TP_ARGS(c, str)
333e6a2566fSKent Overstreet );
334ae0e6117SKent Overstreet
335ae0e6117SKent Overstreet DEFINE_EVENT(bio, journal_write,
3361c6fdbd8SKent Overstreet TP_PROTO(struct bio *bio),
3371c6fdbd8SKent Overstreet TP_ARGS(bio)
3381c6fdbd8SKent Overstreet );
3391c6fdbd8SKent Overstreet
3401c6fdbd8SKent Overstreet TRACE_EVENT(journal_reclaim_start,
3418a92e545SKent Overstreet TP_PROTO(struct bch_fs *c, bool direct, bool kicked,
3421f93726eSKent Overstreet u64 min_nr, u64 min_key_cache,
3431f93726eSKent Overstreet u64 btree_cache_dirty, u64 btree_cache_total,
3448a92e545SKent Overstreet u64 btree_key_cache_dirty, u64 btree_key_cache_total),
3458a92e545SKent Overstreet TP_ARGS(c, direct, kicked, min_nr, min_key_cache,
346006ccc30SKent Overstreet btree_cache_dirty, btree_cache_total,
3478a92e545SKent Overstreet btree_key_cache_dirty, btree_key_cache_total),
3488a92e545SKent Overstreet
3498a92e545SKent Overstreet TP_STRUCT__entry(
3508a92e545SKent Overstreet __field(dev_t, dev )
351ddc7dd62SKent Overstreet __field(bool, direct )
3521f93726eSKent Overstreet __field(bool, kicked )
3531f93726eSKent Overstreet __field(u64, min_nr )
3548a92e545SKent Overstreet __field(u64, min_key_cache )
3551f93726eSKent Overstreet __field(u64, btree_cache_dirty )
3568a92e545SKent Overstreet __field(u64, btree_cache_total )
3578a92e545SKent Overstreet __field(u64, btree_key_cache_dirty )
3588a92e545SKent Overstreet __field(u64, btree_key_cache_total )
3598a92e545SKent Overstreet ),
3608a92e545SKent Overstreet
3618a92e545SKent Overstreet TP_fast_assign(
3628a92e545SKent Overstreet __entry->dev = c->dev;
363ddc7dd62SKent Overstreet __entry->direct = direct;
3641f93726eSKent Overstreet __entry->kicked = kicked;
3651f93726eSKent Overstreet __entry->min_nr = min_nr;
3668a92e545SKent Overstreet __entry->min_key_cache = min_key_cache;
3671f93726eSKent Overstreet __entry->btree_cache_dirty = btree_cache_dirty;
3688a92e545SKent Overstreet __entry->btree_cache_total = btree_cache_total;
3698a92e545SKent Overstreet __entry->btree_key_cache_dirty = btree_key_cache_dirty;
3708a92e545SKent Overstreet __entry->btree_key_cache_total = btree_key_cache_total;
3718a92e545SKent Overstreet ),
3728a92e545SKent Overstreet
3738a92e545SKent Overstreet TP_printk("%d,%d direct %u kicked %u min %llu key cache %llu btree cache %llu/%llu key cache %llu/%llu",
374006ccc30SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
375ddc7dd62SKent Overstreet __entry->direct,
3761f93726eSKent Overstreet __entry->kicked,
3771f93726eSKent Overstreet __entry->min_nr,
3788a92e545SKent Overstreet __entry->min_key_cache,
3791f93726eSKent Overstreet __entry->btree_cache_dirty,
3808a92e545SKent Overstreet __entry->btree_cache_total,
3818a92e545SKent Overstreet __entry->btree_key_cache_dirty,
3828a92e545SKent Overstreet __entry->btree_key_cache_total)
3838a92e545SKent Overstreet );
3848a92e545SKent Overstreet
3858a92e545SKent Overstreet TRACE_EVENT(journal_reclaim_finish,
3868a92e545SKent Overstreet TP_PROTO(struct bch_fs *c, u64 nr_flushed),
3878a92e545SKent Overstreet TP_ARGS(c, nr_flushed),
3888a92e545SKent Overstreet
3898a92e545SKent Overstreet TP_STRUCT__entry(
3908a92e545SKent Overstreet __field(dev_t, dev )
391ddc7dd62SKent Overstreet __field(u64, nr_flushed )
3928a92e545SKent Overstreet ),
3938a92e545SKent Overstreet
3948a92e545SKent Overstreet TP_fast_assign(
3958a92e545SKent Overstreet __entry->dev = c->dev;
396ddc7dd62SKent Overstreet __entry->nr_flushed = nr_flushed;
3978a92e545SKent Overstreet ),
3988a92e545SKent Overstreet
3998a92e545SKent Overstreet TP_printk("%d,%d flushed %llu",
4001f93726eSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
401ddc7dd62SKent Overstreet __entry->nr_flushed)
402ddc7dd62SKent Overstreet );
4038a92e545SKent Overstreet
4048a92e545SKent Overstreet /* bset.c: */
4051c6fdbd8SKent Overstreet
4061c6fdbd8SKent Overstreet DEFINE_EVENT(bpos, bkey_pack_pos_fail,
4071c6fdbd8SKent Overstreet TP_PROTO(const struct bpos *p),
40812043cf1SKent Overstreet TP_ARGS(p)
4091c6fdbd8SKent Overstreet );
4101c6fdbd8SKent Overstreet
4111c6fdbd8SKent Overstreet /* Btree cache: */
412674cfc26SKent Overstreet
4131c6fdbd8SKent Overstreet TRACE_EVENT(btree_cache_scan,
414674cfc26SKent Overstreet TP_PROTO(long nr_to_scan, long can_free, long ret),
415674cfc26SKent Overstreet TP_ARGS(nr_to_scan, can_free, ret),
416674cfc26SKent Overstreet
4171c6fdbd8SKent Overstreet TP_STRUCT__entry(
4181c6fdbd8SKent Overstreet __field(long, nr_to_scan )
419674cfc26SKent Overstreet __field(long, can_free )
420674cfc26SKent Overstreet __field(long, ret )
421674cfc26SKent Overstreet ),
4221c6fdbd8SKent Overstreet
4231c6fdbd8SKent Overstreet TP_fast_assign(
4241c6fdbd8SKent Overstreet __entry->nr_to_scan = nr_to_scan;
425674cfc26SKent Overstreet __entry->can_free = can_free;
426674cfc26SKent Overstreet __entry->ret = ret;
427674cfc26SKent Overstreet ),
4281c6fdbd8SKent Overstreet
4291c6fdbd8SKent Overstreet TP_printk("scanned for %li nodes, can free %li, ret %li",
430674cfc26SKent Overstreet __entry->nr_to_scan, __entry->can_free, __entry->ret)
431674cfc26SKent Overstreet );
4321c6fdbd8SKent Overstreet
4331c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node_nofs, btree_cache_reap,
434a564c9faSKent Overstreet TP_PROTO(struct bch_fs *c, struct btree *b),
4351c6fdbd8SKent Overstreet TP_ARGS(c, b)
4361c6fdbd8SKent Overstreet );
4371c6fdbd8SKent Overstreet
4381c6fdbd8SKent Overstreet DEFINE_EVENT(btree_trans, btree_cache_cannibalize_lock_fail,
439a564c9faSKent Overstreet TP_PROTO(struct btree_trans *trans),
440a564c9faSKent Overstreet TP_ARGS(trans)
441a564c9faSKent Overstreet );
442674cfc26SKent Overstreet
443674cfc26SKent Overstreet DEFINE_EVENT(btree_trans, btree_cache_cannibalize_lock,
444a564c9faSKent Overstreet TP_PROTO(struct btree_trans *trans),
445a564c9faSKent Overstreet TP_ARGS(trans)
446a564c9faSKent Overstreet );
447674cfc26SKent Overstreet
448674cfc26SKent Overstreet DEFINE_EVENT(btree_trans, btree_cache_cannibalize,
449a564c9faSKent Overstreet TP_PROTO(struct btree_trans *trans),
450a564c9faSKent Overstreet TP_ARGS(trans)
451a564c9faSKent Overstreet );
452674cfc26SKent Overstreet
453674cfc26SKent Overstreet DEFINE_EVENT(btree_trans, btree_cache_cannibalize_unlock,
454a564c9faSKent Overstreet TP_PROTO(struct btree_trans *trans),
455a564c9faSKent Overstreet TP_ARGS(trans)
456a564c9faSKent Overstreet );
457674cfc26SKent Overstreet
458674cfc26SKent Overstreet /* Btree */
459674cfc26SKent Overstreet
460674cfc26SKent Overstreet DEFINE_EVENT(btree_node, btree_node_read,
461674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
462a564c9faSKent Overstreet TP_ARGS(trans, b)
463a564c9faSKent Overstreet );
464674cfc26SKent Overstreet
465674cfc26SKent Overstreet TRACE_EVENT(btree_node_write,
466674cfc26SKent Overstreet TP_PROTO(struct btree *b, unsigned bytes, unsigned sectors),
4671c6fdbd8SKent Overstreet TP_ARGS(b, bytes, sectors),
4681c6fdbd8SKent Overstreet
4691c6fdbd8SKent Overstreet TP_STRUCT__entry(
4701c6fdbd8SKent Overstreet __field(enum btree_node_type, type)
47126609b61SKent Overstreet __field(unsigned, bytes )
4721c6fdbd8SKent Overstreet __field(unsigned, sectors )
4731c6fdbd8SKent Overstreet ),
4741c6fdbd8SKent Overstreet
4751c6fdbd8SKent Overstreet TP_fast_assign(
4761c6fdbd8SKent Overstreet __entry->type = btree_node_type(b);
4771c6fdbd8SKent Overstreet __entry->bytes = bytes;
4781c6fdbd8SKent Overstreet __entry->sectors = sectors;
4791c6fdbd8SKent Overstreet ),
4801c6fdbd8SKent Overstreet
4811c6fdbd8SKent Overstreet TP_printk("bkey type %u bytes %u sectors %u",
4821c6fdbd8SKent Overstreet __entry->type , __entry->bytes, __entry->sectors)
4831c6fdbd8SKent Overstreet );
4841c6fdbd8SKent Overstreet
4851c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node, btree_node_alloc,
4861c6fdbd8SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
487a564c9faSKent Overstreet TP_ARGS(trans, b)
488a564c9faSKent Overstreet );
4891c6fdbd8SKent Overstreet
4901c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node, btree_node_free,
4911c6fdbd8SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
492a564c9faSKent Overstreet TP_ARGS(trans, b)
493a564c9faSKent Overstreet );
4941c6fdbd8SKent Overstreet
4951c6fdbd8SKent Overstreet TRACE_EVENT(btree_reserve_get_fail,
4961c6fdbd8SKent Overstreet TP_PROTO(const char *trans_fn,
4975f417394SKent Overstreet unsigned long caller_ip,
4985f417394SKent Overstreet size_t required,
499adf6360bSKent Overstreet int ret),
500adf6360bSKent Overstreet TP_ARGS(trans_fn, caller_ip, required, ret),
501adf6360bSKent Overstreet
5021c6fdbd8SKent Overstreet TP_STRUCT__entry(
5031c6fdbd8SKent Overstreet __array(char, trans_fn, 32 )
5045f1dd9a6SKent Overstreet __field(unsigned long, caller_ip )
5055f417394SKent Overstreet __field(size_t, required )
5061c6fdbd8SKent Overstreet __array(char, ret, 32 )
507adf6360bSKent Overstreet ),
5081c6fdbd8SKent Overstreet
5091c6fdbd8SKent Overstreet TP_fast_assign(
5101c6fdbd8SKent Overstreet strscpy(__entry->trans_fn, trans_fn, sizeof(__entry->trans_fn));
511a1019576SKent Overstreet __entry->caller_ip = caller_ip;
5125f417394SKent Overstreet __entry->required = required;
5131c6fdbd8SKent Overstreet strscpy(__entry->ret, bch2_err_str(ret), sizeof(__entry->ret));
514adf6360bSKent Overstreet ),
5151c6fdbd8SKent Overstreet
5161c6fdbd8SKent Overstreet TP_printk("%s %pS required %zu ret %s",
517adf6360bSKent Overstreet __entry->trans_fn,
5185f417394SKent Overstreet (void *) __entry->caller_ip,
5195f417394SKent Overstreet __entry->required,
520adf6360bSKent Overstreet __entry->ret)
521adf6360bSKent Overstreet );
5221c6fdbd8SKent Overstreet
5231c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node, btree_node_compact,
524674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
525a564c9faSKent Overstreet TP_ARGS(trans, b)
526a564c9faSKent Overstreet );
5271c6fdbd8SKent Overstreet
5281c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node, btree_node_merge,
529674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
530a564c9faSKent Overstreet TP_ARGS(trans, b)
531a564c9faSKent Overstreet );
5321c6fdbd8SKent Overstreet
5331c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node, btree_node_split,
534674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
535a564c9faSKent Overstreet TP_ARGS(trans, b)
536a564c9faSKent Overstreet );
5371c6fdbd8SKent Overstreet
5381c6fdbd8SKent Overstreet DEFINE_EVENT(btree_node, btree_node_rewrite,
539674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
540a564c9faSKent Overstreet TP_ARGS(trans, b)
541a564c9faSKent Overstreet );
5421f93726eSKent Overstreet
5431f93726eSKent Overstreet DEFINE_EVENT(btree_node, btree_node_set_root,
544674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree *b),
545a564c9faSKent Overstreet TP_ARGS(trans, b)
546a564c9faSKent Overstreet );
5471c6fdbd8SKent Overstreet
5481c6fdbd8SKent Overstreet TRACE_EVENT(btree_path_relock_fail,
549674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans,
5509f96568cSKent Overstreet unsigned long caller_ip,
551bc82d08bSKent Overstreet struct btree_path *path,
5529f96568cSKent Overstreet unsigned level),
5539f96568cSKent Overstreet TP_ARGS(trans, caller_ip, path, level),
5549f96568cSKent Overstreet
555bc82d08bSKent Overstreet TP_STRUCT__entry(
556bc82d08bSKent Overstreet __array(char, trans_fn, 32 )
5575f1dd9a6SKent Overstreet __field(unsigned long, caller_ip )
5584b59a319SKent Overstreet __field(u8, btree_id )
559bc82d08bSKent Overstreet __field(u8, level )
560367d72ddSKent Overstreet __field(u8, path_idx)
5619f96568cSKent Overstreet TRACE_BPOS_entries(pos)
5625f1dd9a6SKent Overstreet __array(char, node, 24 )
56355d5276dSKent Overstreet __field(u8, self_read_count )
56455d5276dSKent Overstreet __field(u8, self_intent_count)
56555d5276dSKent Overstreet __field(u8, read_count )
56655d5276dSKent Overstreet __field(u8, intent_count )
567bc82d08bSKent Overstreet __field(u32, iter_lock_seq )
568bc82d08bSKent Overstreet __field(u32, node_lock_seq )
569bc82d08bSKent Overstreet ),
570bc82d08bSKent Overstreet
571bc82d08bSKent Overstreet TP_fast_assign(
5725f1dd9a6SKent Overstreet struct btree *b = btree_path_node(path, level);
57355d5276dSKent Overstreet struct six_lock_count c;
5745f1dd9a6SKent Overstreet
575a1019576SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
5764b59a319SKent Overstreet __entry->caller_ip = caller_ip;
5779f96568cSKent Overstreet __entry->btree_id = path->btree_id;
578367d72ddSKent Overstreet __entry->level = level;
5799f96568cSKent Overstreet __entry->path_idx = path - trans->paths;
58055d5276dSKent Overstreet TRACE_BPOS_assign(pos, path->pos);
581b97de453SKent Overstreet
58255d5276dSKent Overstreet c = bch2_btree_node_lock_counts(trans, NULL, &path->l[level].b->c, level);
58355d5276dSKent Overstreet __entry->self_read_count = c.n[SIX_LOCK_read];
58455d5276dSKent Overstreet __entry->self_intent_count = c.n[SIX_LOCK_intent];
58555d5276dSKent Overstreet
5865f1dd9a6SKent Overstreet if (IS_ERR(b)) {
58755d5276dSKent Overstreet strscpy(__entry->node, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node));
58855d5276dSKent Overstreet } else {
58955d5276dSKent Overstreet c = six_lock_counts(&path->l[level].b->c.lock);
59055d5276dSKent Overstreet __entry->read_count = c.n[SIX_LOCK_read];
5915f1dd9a6SKent Overstreet __entry->intent_count = c.n[SIX_LOCK_intent];
59255d5276dSKent Overstreet scnprintf(__entry->node, sizeof(__entry->node), "%px", &b->c);
5939f96568cSKent Overstreet }
5941fb4fe63SKent Overstreet __entry->iter_lock_seq = path->l[level].lock_seq;
5951fb4fe63SKent Overstreet __entry->node_lock_seq = is_btree_node(path, level)
5961fb4fe63SKent Overstreet ? six_lock_seq(&path->l[level].b->c.lock)
597bc82d08bSKent Overstreet : 0;
598bc82d08bSKent Overstreet ),
59955d5276dSKent Overstreet
600bc82d08bSKent Overstreet 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",
6014b59a319SKent Overstreet __entry->trans_fn,
60288dfe193SKent Overstreet (void *) __entry->caller_ip,
603bc82d08bSKent Overstreet __entry->path_idx,
604bc82d08bSKent Overstreet bch2_btree_id_str(__entry->btree_id),
605bc82d08bSKent Overstreet __entry->pos_inode,
606367d72ddSKent Overstreet __entry->pos_offset,
607bc82d08bSKent Overstreet __entry->pos_snapshot,
60855d5276dSKent Overstreet __entry->level,
60955d5276dSKent Overstreet __entry->node,
61055d5276dSKent Overstreet __entry->self_read_count,
61155d5276dSKent Overstreet __entry->self_intent_count,
612bc82d08bSKent Overstreet __entry->read_count,
613bc82d08bSKent Overstreet __entry->intent_count,
614bc82d08bSKent Overstreet __entry->iter_lock_seq,
615bc82d08bSKent Overstreet __entry->node_lock_seq)
616674cfc26SKent Overstreet );
6179f96568cSKent Overstreet
61849e401faSKent Overstreet TRACE_EVENT(btree_path_upgrade_fail,
6199f96568cSKent Overstreet TP_PROTO(struct btree_trans *trans,
6209f96568cSKent Overstreet unsigned long caller_ip,
6219f96568cSKent Overstreet struct btree_path *path,
62249e401faSKent Overstreet unsigned level),
62349e401faSKent Overstreet TP_ARGS(trans, caller_ip, path, level),
6245f1dd9a6SKent Overstreet
62549e401faSKent Overstreet TP_STRUCT__entry(
62649e401faSKent Overstreet __array(char, trans_fn, 32 )
627367d72ddSKent Overstreet __field(unsigned long, caller_ip )
6289f96568cSKent Overstreet __field(u8, btree_id )
62949e401faSKent Overstreet __field(u8, level )
63049e401faSKent Overstreet __field(u8, path_idx)
63149e401faSKent Overstreet TRACE_BPOS_entries(pos)
6329f96568cSKent Overstreet __field(u8, locked )
63349e401faSKent Overstreet __field(u8, self_read_count )
634367d72ddSKent Overstreet __field(u8, self_intent_count)
635367d72ddSKent Overstreet __field(u8, read_count )
63649e401faSKent Overstreet __field(u8, intent_count )
63749e401faSKent Overstreet __field(u32, iter_lock_seq )
63849e401faSKent Overstreet __field(u32, node_lock_seq )
6399f96568cSKent Overstreet ),
6409f96568cSKent Overstreet
641a1019576SKent Overstreet TP_fast_assign(
64249e401faSKent Overstreet struct six_lock_count c;
6439f96568cSKent Overstreet
644367d72ddSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
6459f96568cSKent Overstreet __entry->caller_ip = caller_ip;
6469f96568cSKent Overstreet __entry->btree_id = path->btree_id;
6479f96568cSKent Overstreet __entry->level = level;
64814599cceSKent Overstreet __entry->path_idx = path - trans->paths;
649e3738c69SKent Overstreet TRACE_BPOS_assign(pos, path->pos);
650e3738c69SKent Overstreet __entry->locked = btree_node_locked(path, level);
6519f96568cSKent Overstreet
652e3738c69SKent Overstreet c = bch2_btree_node_lock_counts(trans, NULL, &path->l[level].b->c, level),
65355d5276dSKent Overstreet __entry->self_read_count = c.n[SIX_LOCK_read];
654367d72ddSKent Overstreet __entry->self_intent_count = c.n[SIX_LOCK_intent];
6551fb4fe63SKent Overstreet c = six_lock_counts(&path->l[level].b->c.lock);
6561fb4fe63SKent Overstreet __entry->read_count = c.n[SIX_LOCK_read];
6571fb4fe63SKent Overstreet __entry->intent_count = c.n[SIX_LOCK_intent];
65849e401faSKent Overstreet __entry->iter_lock_seq = path->l[level].lock_seq;
65949e401faSKent Overstreet __entry->node_lock_seq = is_btree_node(path, level)
660367d72ddSKent Overstreet ? six_lock_seq(&path->l[level].b->c.lock)
66149e401faSKent Overstreet : 0;
66249e401faSKent Overstreet ),
66388dfe193SKent Overstreet
66449e401faSKent Overstreet 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",
66549e401faSKent Overstreet __entry->trans_fn,
66649e401faSKent Overstreet (void *) __entry->caller_ip,
667367d72ddSKent Overstreet __entry->path_idx,
66849e401faSKent Overstreet bch2_btree_id_str(__entry->btree_id),
66949e401faSKent Overstreet __entry->pos_inode,
67049e401faSKent Overstreet __entry->pos_offset,
67149e401faSKent Overstreet __entry->pos_snapshot,
672367d72ddSKent Overstreet __entry->level,
673367d72ddSKent Overstreet __entry->locked,
674367d72ddSKent Overstreet __entry->self_read_count,
67549e401faSKent Overstreet __entry->self_intent_count,
67649e401faSKent Overstreet __entry->read_count,
6771c6fdbd8SKent Overstreet __entry->intent_count,
6781c6fdbd8SKent Overstreet __entry->iter_lock_seq,
6791f93726eSKent Overstreet __entry->node_lock_seq)
6801c6fdbd8SKent Overstreet );
6811c6fdbd8SKent Overstreet
6821c6fdbd8SKent Overstreet /* Garbage collection */
6831c6fdbd8SKent Overstreet
6841f93726eSKent Overstreet DEFINE_EVENT(bch_fs, gc_gens_start,
6851c6fdbd8SKent Overstreet TP_PROTO(struct bch_fs *c),
6861c6fdbd8SKent Overstreet TP_ARGS(c)
6871c6fdbd8SKent Overstreet );
6881c6fdbd8SKent Overstreet
6891c6fdbd8SKent Overstreet DEFINE_EVENT(bch_fs, gc_gens_end,
6901c6fdbd8SKent Overstreet TP_PROTO(struct bch_fs *c),
69140574946SKent Overstreet TP_ARGS(c)
69240574946SKent Overstreet );
69340574946SKent Overstreet
6941c6fdbd8SKent Overstreet /* Allocator */
6951c6fdbd8SKent Overstreet
69640574946SKent Overstreet DEFINE_EVENT(fs_str, bucket_alloc,
69740574946SKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
69840574946SKent Overstreet TP_ARGS(c, str)
6991c6fdbd8SKent Overstreet );
7001c6fdbd8SKent Overstreet
7011f93726eSKent Overstreet DEFINE_EVENT(fs_str, bucket_alloc_fail,
7021f93726eSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
703615f867cSKent Overstreet TP_ARGS(c, str)
704615f867cSKent Overstreet );
7051f93726eSKent Overstreet
7061f93726eSKent Overstreet TRACE_EVENT(discard_buckets,
7071f93726eSKent Overstreet TP_PROTO(struct bch_fs *c, u64 seen, u64 open,
7081f93726eSKent Overstreet u64 need_journal_commit, u64 discarded, const char *err),
7091f93726eSKent Overstreet TP_ARGS(c, seen, open, need_journal_commit, discarded, err),
7101f93726eSKent Overstreet
7111f93726eSKent Overstreet TP_STRUCT__entry(
712615f867cSKent Overstreet __field(dev_t, dev )
7131f93726eSKent Overstreet __field(u64, seen )
7141f93726eSKent Overstreet __field(u64, open )
7151f93726eSKent Overstreet __field(u64, need_journal_commit )
7161f93726eSKent Overstreet __field(u64, discarded )
7171f93726eSKent Overstreet __array(char, err, 16 )
7181f93726eSKent Overstreet ),
7191f93726eSKent Overstreet
7201f93726eSKent Overstreet TP_fast_assign(
721a1019576SKent Overstreet __entry->dev = c->dev;
7221f93726eSKent Overstreet __entry->seen = seen;
7231f93726eSKent Overstreet __entry->open = open;
724615f867cSKent Overstreet __entry->need_journal_commit = need_journal_commit;
7251f93726eSKent Overstreet __entry->discarded = discarded;
7261f93726eSKent Overstreet strscpy(__entry->err, err, sizeof(__entry->err));
7271f93726eSKent Overstreet ),
7281f93726eSKent Overstreet
7291f93726eSKent Overstreet TP_printk("%d%d seen %llu open %llu need_journal_commit %llu discarded %llu err %s",
730615f867cSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
7311f93726eSKent Overstreet __entry->seen,
7321f93726eSKent Overstreet __entry->open,
733674cfc26SKent Overstreet __entry->need_journal_commit,
73438585367SKent Overstreet __entry->discarded,
73538585367SKent Overstreet __entry->err)
7361f93726eSKent Overstreet );
7371f93726eSKent Overstreet
7381f93726eSKent Overstreet TRACE_EVENT(bucket_invalidate,
7391f93726eSKent Overstreet TP_PROTO(struct bch_fs *c, unsigned dev, u64 bucket, u32 sectors),
74038585367SKent Overstreet TP_ARGS(c, dev, bucket, sectors),
7411f93726eSKent Overstreet
7421f93726eSKent Overstreet TP_STRUCT__entry(
7431f93726eSKent Overstreet __field(dev_t, dev )
7441f93726eSKent Overstreet __field(u32, dev_idx )
7451f93726eSKent Overstreet __field(u32, sectors )
7461f93726eSKent Overstreet __field(u64, bucket )
74738585367SKent Overstreet ),
7481f93726eSKent Overstreet
7491f93726eSKent Overstreet TP_fast_assign(
7501f93726eSKent Overstreet __entry->dev = c->dev;
75138585367SKent Overstreet __entry->dev_idx = dev;
7521f93726eSKent Overstreet __entry->sectors = sectors;
75338585367SKent Overstreet __entry->bucket = bucket;
75438585367SKent Overstreet ),
7551f93726eSKent Overstreet
7561f93726eSKent Overstreet TP_printk("%d:%d invalidated %u:%llu cached sectors %u",
7571c6fdbd8SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
7581c6fdbd8SKent Overstreet __entry->dev_idx, __entry->bucket,
7595a21764dSKent Overstreet __entry->sectors)
7605a21764dSKent Overstreet );
7615a21764dSKent Overstreet
7625a21764dSKent Overstreet /* Moving IO */
7635a21764dSKent Overstreet
7645a21764dSKent Overstreet TRACE_EVENT(bucket_evacuate,
7655a21764dSKent Overstreet TP_PROTO(struct bch_fs *c, struct bpos *bucket),
7665a21764dSKent Overstreet TP_ARGS(c, bucket),
7675a21764dSKent Overstreet
7685a21764dSKent Overstreet TP_STRUCT__entry(
7695a21764dSKent Overstreet __field(dev_t, dev )
7705a21764dSKent Overstreet __field(u32, dev_idx )
7715a21764dSKent Overstreet __field(u64, bucket )
7725a21764dSKent Overstreet ),
7735a21764dSKent Overstreet
7745a21764dSKent Overstreet TP_fast_assign(
7755a21764dSKent Overstreet __entry->dev = c->dev;
7765a21764dSKent Overstreet __entry->dev_idx = bucket->inode;
7775a21764dSKent Overstreet __entry->bucket = bucket->offset;
7785a21764dSKent Overstreet ),
7795a21764dSKent Overstreet
780e153a0d7SKent Overstreet TP_printk("%d:%d %u:%llu",
781fa3185afSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
782fa3185afSKent Overstreet __entry->dev_idx, __entry->bucket)
7835a21764dSKent Overstreet );
7845a21764dSKent Overstreet
785e153a0d7SKent Overstreet DEFINE_EVENT(fs_str, move_extent,
786fa3185afSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
787fa3185afSKent Overstreet TP_ARGS(c, str)
7881c6fdbd8SKent Overstreet );
7891c6fdbd8SKent Overstreet
790e153a0d7SKent Overstreet DEFINE_EVENT(fs_str, move_extent_read,
791fa3185afSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
792fa3185afSKent Overstreet TP_ARGS(c, str)
7931c6fdbd8SKent Overstreet );
7941c6fdbd8SKent Overstreet
795e153a0d7SKent Overstreet DEFINE_EVENT(fs_str, move_extent_write,
796fa3185afSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
797fa3185afSKent Overstreet TP_ARGS(c, str)
798674cfc26SKent Overstreet );
799674cfc26SKent Overstreet
800fa3185afSKent Overstreet DEFINE_EVENT(fs_str, move_extent_finish,
801fa3185afSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
802fa3185afSKent Overstreet TP_ARGS(c, str)
803674cfc26SKent Overstreet );
804674cfc26SKent Overstreet
805e153a0d7SKent Overstreet DEFINE_EVENT(fs_str, move_extent_fail,
806ae4d612cSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
807ae4d612cSKent Overstreet TP_ARGS(c, str)
8081c6fdbd8SKent Overstreet );
8091c6fdbd8SKent Overstreet
8101c6fdbd8SKent Overstreet DEFINE_EVENT(fs_str, move_extent_start_fail,
81196a363a7SKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
81296a363a7SKent Overstreet TP_ARGS(c, str)
81396a363a7SKent Overstreet );
8141c6fdbd8SKent Overstreet
8151c6fdbd8SKent Overstreet TRACE_EVENT(move_data,
816ddc7dd62SKent Overstreet TP_PROTO(struct bch_fs *c,
8171c6fdbd8SKent Overstreet struct bch_move_stats *stats),
81896a363a7SKent Overstreet TP_ARGS(c, stats),
81996a363a7SKent Overstreet
82096a363a7SKent Overstreet TP_STRUCT__entry(
82196a363a7SKent Overstreet __field(dev_t, dev )
8221c6fdbd8SKent Overstreet __field(u64, keys_moved )
8231c6fdbd8SKent Overstreet __field(u64, keys_raced )
8241c6fdbd8SKent Overstreet __field(u64, sectors_seen )
825ddc7dd62SKent Overstreet __field(u64, sectors_moved )
82696a363a7SKent Overstreet __field(u64, sectors_raced )
82796a363a7SKent Overstreet ),
82896a363a7SKent Overstreet
82996a363a7SKent Overstreet TP_fast_assign(
83096a363a7SKent Overstreet __entry->dev = c->dev;
8311c6fdbd8SKent Overstreet __entry->keys_moved = atomic64_read(&stats->keys_moved);
8321c6fdbd8SKent Overstreet __entry->keys_raced = atomic64_read(&stats->keys_raced);
83396a363a7SKent Overstreet __entry->sectors_seen = atomic64_read(&stats->sectors_seen);
83496a363a7SKent Overstreet __entry->sectors_moved = atomic64_read(&stats->sectors_moved);
835ddc7dd62SKent Overstreet __entry->sectors_raced = atomic64_read(&stats->sectors_raced);
83696a363a7SKent Overstreet ),
83796a363a7SKent Overstreet
83896a363a7SKent Overstreet TP_printk("%d,%d keys moved %llu raced %llu"
83996a363a7SKent Overstreet "sectors seen %llu moved %llu raced %llu",
84096a363a7SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
8411c6fdbd8SKent Overstreet __entry->keys_moved,
8421c6fdbd8SKent Overstreet __entry->keys_raced,
8438e3f913eSKent Overstreet __entry->sectors_seen,
8448e3f913eSKent Overstreet __entry->sectors_moved,
8458e3f913eSKent Overstreet __entry->sectors_raced)
84680c33085SKent Overstreet );
84780c33085SKent Overstreet
8488e3f913eSKent Overstreet TRACE_EVENT(evacuate_bucket,
8498e3f913eSKent Overstreet TP_PROTO(struct bch_fs *c, struct bpos *bucket,
8508e3f913eSKent Overstreet unsigned sectors, unsigned bucket_size,
8518e3f913eSKent Overstreet u64 fragmentation, int ret),
8528e3f913eSKent Overstreet TP_ARGS(c, bucket, sectors, bucket_size, fragmentation, ret),
8538e3f913eSKent Overstreet
8548e3f913eSKent Overstreet TP_STRUCT__entry(
85580c33085SKent Overstreet __field(dev_t, dev )
8568e3f913eSKent Overstreet __field(u64, member )
8578e3f913eSKent Overstreet __field(u64, bucket )
8588e3f913eSKent Overstreet __field(u32, sectors )
8598e3f913eSKent Overstreet __field(u32, bucket_size )
8608e3f913eSKent Overstreet __field(u64, fragmentation )
8618e3f913eSKent Overstreet __field(int, ret )
8628e3f913eSKent Overstreet ),
8638e3f913eSKent Overstreet
8648e3f913eSKent Overstreet TP_fast_assign(
86580c33085SKent Overstreet __entry->dev = c->dev;
8668e3f913eSKent Overstreet __entry->member = bucket->inode;
8678e3f913eSKent Overstreet __entry->bucket = bucket->offset;
8688e3f913eSKent Overstreet __entry->sectors = sectors;
86980c33085SKent Overstreet __entry->bucket_size = bucket_size;
8708e3f913eSKent Overstreet __entry->fragmentation = fragmentation;
8718e3f913eSKent Overstreet __entry->ret = ret;
8728e3f913eSKent Overstreet ),
87380c33085SKent Overstreet
8748e3f913eSKent Overstreet TP_printk("%d,%d %llu:%llu sectors %u/%u fragmentation %llu ret %i",
8758e3f913eSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
8761c6fdbd8SKent Overstreet __entry->member, __entry->bucket,
877e6d11615SKent Overstreet __entry->sectors, __entry->bucket_size,
8781c6fdbd8SKent Overstreet __entry->fragmentation, __entry->ret)
8791c6fdbd8SKent Overstreet );
880e6d11615SKent Overstreet
8811c6fdbd8SKent Overstreet TRACE_EVENT(copygc,
8821c6fdbd8SKent Overstreet TP_PROTO(struct bch_fs *c,
8831c6fdbd8SKent Overstreet u64 sectors_moved, u64 sectors_not_moved,
8841c6fdbd8SKent Overstreet u64 buckets_moved, u64 buckets_not_moved),
885ddc7dd62SKent Overstreet TP_ARGS(c,
8861c6fdbd8SKent Overstreet sectors_moved, sectors_not_moved,
8871c6fdbd8SKent Overstreet buckets_moved, buckets_not_moved),
8881c6fdbd8SKent Overstreet
8891c6fdbd8SKent Overstreet TP_STRUCT__entry(
8901c6fdbd8SKent Overstreet __field(dev_t, dev )
8911c6fdbd8SKent Overstreet __field(u64, sectors_moved )
8921c6fdbd8SKent Overstreet __field(u64, sectors_not_moved )
893ddc7dd62SKent Overstreet __field(u64, buckets_moved )
8941c6fdbd8SKent Overstreet __field(u64, buckets_not_moved )
8951c6fdbd8SKent Overstreet ),
8961c6fdbd8SKent Overstreet
8971c6fdbd8SKent Overstreet TP_fast_assign(
8981c6fdbd8SKent Overstreet __entry->dev = c->dev;
8991c6fdbd8SKent Overstreet __entry->sectors_moved = sectors_moved;
900ddc7dd62SKent Overstreet __entry->sectors_not_moved = sectors_not_moved;
901ddc7dd62SKent Overstreet __entry->buckets_moved = buckets_moved;
9021c6fdbd8SKent Overstreet __entry->buckets_not_moved = buckets_moved;
9031c6fdbd8SKent Overstreet ),
9041c6fdbd8SKent Overstreet
9051c6fdbd8SKent Overstreet TP_printk("%d,%d sectors moved %llu remain %llu buckets moved %llu remain %llu",
90619d2819dSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
90719d2819dSKent Overstreet __entry->sectors_moved, __entry->sectors_not_moved,
90819d2819dSKent Overstreet __entry->buckets_moved, __entry->buckets_not_moved)
90919d2819dSKent Overstreet );
91019d2819dSKent Overstreet
91119d2819dSKent Overstreet TRACE_EVENT(copygc_wait,
912ddc7dd62SKent Overstreet TP_PROTO(struct bch_fs *c,
91319d2819dSKent Overstreet u64 wait_amount, u64 until),
91419d2819dSKent Overstreet TP_ARGS(c, wait_amount, until),
91519d2819dSKent Overstreet
91619d2819dSKent Overstreet TP_STRUCT__entry(
91719d2819dSKent Overstreet __field(dev_t, dev )
918ddc7dd62SKent Overstreet __field(u64, wait_amount )
91919d2819dSKent Overstreet __field(u64, until )
92019d2819dSKent Overstreet ),
92119d2819dSKent Overstreet
92219d2819dSKent Overstreet TP_fast_assign(
923ddc7dd62SKent Overstreet __entry->dev = c->dev;
924ddc7dd62SKent Overstreet __entry->wait_amount = wait_amount;
925ddc7dd62SKent Overstreet __entry->until = until;
92619d2819dSKent Overstreet ),
92719d2819dSKent Overstreet
92812043cf1SKent Overstreet TP_printk("%d,%u waiting for %llu sectors until %llu",
92912043cf1SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev),
9301f93726eSKent Overstreet __entry->wait_amount, __entry->until)
9319f96568cSKent Overstreet );
932531a0095SKent Overstreet
9339f96568cSKent Overstreet /* btree transactions: */
934ba5c6557SKent Overstreet
935ba5c6557SKent Overstreet DECLARE_EVENT_CLASS(transaction_event,
9365f1dd9a6SKent Overstreet TP_PROTO(struct btree_trans *trans,
937531a0095SKent Overstreet unsigned long caller_ip),
938ba5c6557SKent Overstreet TP_ARGS(trans, caller_ip),
939ba5c6557SKent Overstreet
940ba5c6557SKent Overstreet TP_STRUCT__entry(
941a1019576SKent Overstreet __array(char, trans_fn, 32 )
942531a0095SKent Overstreet __field(unsigned long, caller_ip )
943ba5c6557SKent Overstreet ),
944ba5c6557SKent Overstreet
945669f87a5SKent Overstreet TP_fast_assign(
946669f87a5SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
947669f87a5SKent Overstreet __entry->caller_ip = caller_ip;
9481f93726eSKent Overstreet ),
9499f96568cSKent Overstreet
950669f87a5SKent Overstreet TP_printk("%s %pS", __entry->trans_fn, (void *) __entry->caller_ip)
9519f96568cSKent Overstreet );
952ba5c6557SKent Overstreet
953ba5c6557SKent Overstreet DEFINE_EVENT(transaction_event, transaction_commit,
954674cfc26SKent Overstreet TP_PROTO(struct btree_trans *trans,
9559f96568cSKent Overstreet unsigned long caller_ip),
956a0cb8d78SKent Overstreet TP_ARGS(trans, caller_ip)
9579f96568cSKent Overstreet );
958a0cb8d78SKent Overstreet
959a0cb8d78SKent Overstreet DEFINE_EVENT(transaction_event, trans_restart_injected,
9603d86f13dSKent Overstreet TP_PROTO(struct btree_trans *trans,
961e151580dSKent Overstreet unsigned long caller_ip),
9623d86f13dSKent Overstreet TP_ARGS(trans, caller_ip)
9633d86f13dSKent Overstreet );
9643d86f13dSKent Overstreet
9653d86f13dSKent Overstreet TRACE_EVENT(trans_restart_split_race,
9663d86f13dSKent Overstreet TP_PROTO(struct btree_trans *trans,
9673d86f13dSKent Overstreet unsigned long caller_ip,
9683d86f13dSKent Overstreet struct btree *b),
9693d86f13dSKent Overstreet TP_ARGS(trans, caller_ip, b),
9703d86f13dSKent Overstreet
9713d86f13dSKent Overstreet TP_STRUCT__entry(
9723d86f13dSKent Overstreet __array(char, trans_fn, 32 )
9733d86f13dSKent Overstreet __field(unsigned long, caller_ip )
9743d86f13dSKent Overstreet __field(u8, level )
9753d86f13dSKent Overstreet __field(u16, written )
9763d86f13dSKent Overstreet __field(u16, blocks )
9773d86f13dSKent Overstreet __field(u16, u64s_remaining )
9783d86f13dSKent Overstreet ),
9793d86f13dSKent Overstreet
9803d86f13dSKent Overstreet TP_fast_assign(
981ec4edd7bSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
9823d86f13dSKent Overstreet __entry->caller_ip = caller_ip;
9833d86f13dSKent Overstreet __entry->level = b->c.level;
9843d86f13dSKent Overstreet __entry->written = b->written;
9853d86f13dSKent Overstreet __entry->blocks = btree_blocks(trans->c);
9863d86f13dSKent Overstreet __entry->u64s_remaining = bch2_btree_keys_u64s_remaining(b);
9873d86f13dSKent Overstreet ),
9883d86f13dSKent Overstreet
989e151580dSKent Overstreet TP_printk("%s %pS l=%u written %u/%u u64s remaining %u",
990e151580dSKent Overstreet __entry->trans_fn, (void *) __entry->caller_ip,
991*790666c8SKent Overstreet __entry->level,
9929f96568cSKent Overstreet __entry->written, __entry->blocks,
993531a0095SKent Overstreet __entry->u64s_remaining)
994*790666c8SKent Overstreet );
995*790666c8SKent Overstreet
996*790666c8SKent Overstreet TRACE_EVENT(trans_blocked_journal_reclaim,
997*790666c8SKent Overstreet TP_PROTO(struct btree_trans *trans,
998*790666c8SKent Overstreet unsigned long caller_ip),
999*790666c8SKent Overstreet TP_ARGS(trans, caller_ip),
1000*790666c8SKent Overstreet
1001*790666c8SKent Overstreet TP_STRUCT__entry(
1002*790666c8SKent Overstreet __array(char, trans_fn, 32 )
1003*790666c8SKent Overstreet __field(unsigned long, caller_ip )
1004*790666c8SKent Overstreet
1005*790666c8SKent Overstreet __field(unsigned long, key_cache_nr_keys )
1006*790666c8SKent Overstreet __field(unsigned long, key_cache_nr_dirty )
1007*790666c8SKent Overstreet __field(long, must_wait )
1008*790666c8SKent Overstreet ),
1009*790666c8SKent Overstreet
1010*790666c8SKent Overstreet TP_fast_assign(
1011*790666c8SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
1012*790666c8SKent Overstreet __entry->caller_ip = caller_ip;
1013*790666c8SKent Overstreet __entry->key_cache_nr_keys = atomic_long_read(&trans->c->btree_key_cache.nr_keys);
1014*790666c8SKent Overstreet __entry->key_cache_nr_dirty = atomic_long_read(&trans->c->btree_key_cache.nr_dirty);
1015*790666c8SKent Overstreet __entry->must_wait = __bch2_btree_key_cache_must_wait(trans->c);
1016*790666c8SKent Overstreet ),
1017*790666c8SKent Overstreet
1018531a0095SKent Overstreet TP_printk("%s %pS key cache keys %lu dirty %lu must_wait %li",
1019531a0095SKent Overstreet __entry->trans_fn, (void *) __entry->caller_ip,
1020ce56bf7fSKent Overstreet __entry->key_cache_nr_keys,
10219f96568cSKent Overstreet __entry->key_cache_nr_dirty,
1022ce56bf7fSKent Overstreet __entry->must_wait)
1023ce56bf7fSKent Overstreet );
1024ce56bf7fSKent Overstreet
1025ce56bf7fSKent Overstreet TRACE_EVENT(trans_restart_journal_preres_get,
1026ce56bf7fSKent Overstreet TP_PROTO(struct btree_trans *trans,
1027ce56bf7fSKent Overstreet unsigned long caller_ip,
1028ce56bf7fSKent Overstreet unsigned flags),
1029ce56bf7fSKent Overstreet TP_ARGS(trans, caller_ip, flags),
1030ce56bf7fSKent Overstreet
1031ce56bf7fSKent Overstreet TP_STRUCT__entry(
1032ce56bf7fSKent Overstreet __array(char, trans_fn, 32 )
1033a1019576SKent Overstreet __field(unsigned long, caller_ip )
1034ce56bf7fSKent Overstreet __field(unsigned, flags )
1035ce56bf7fSKent Overstreet ),
1036ce56bf7fSKent Overstreet
1037ce56bf7fSKent Overstreet TP_fast_assign(
1038ce56bf7fSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
1039ce56bf7fSKent Overstreet __entry->caller_ip = caller_ip;
1040ce56bf7fSKent Overstreet __entry->flags = flags;
1041531a0095SKent Overstreet ),
1042531a0095SKent Overstreet
10431f93726eSKent Overstreet TP_printk("%s %pS %x", __entry->trans_fn,
10449f96568cSKent Overstreet (void *) __entry->caller_ip,
1045531a0095SKent Overstreet __entry->flags)
10469f96568cSKent Overstreet );
1047531a0095SKent Overstreet
1048531a0095SKent Overstreet DEFINE_EVENT(transaction_event, trans_restart_fault_inject,
10491f93726eSKent Overstreet TP_PROTO(struct btree_trans *trans,
10509f96568cSKent Overstreet unsigned long caller_ip),
1051531a0095SKent Overstreet TP_ARGS(trans, caller_ip)
10529f96568cSKent Overstreet );
1053531a0095SKent Overstreet
1054531a0095SKent Overstreet DEFINE_EVENT(transaction_event, trans_traverse_all,
10551f93726eSKent Overstreet TP_PROTO(struct btree_trans *trans,
10569f96568cSKent Overstreet unsigned long caller_ip),
105712ce5b7dSKent Overstreet TP_ARGS(trans, caller_ip)
10589f96568cSKent Overstreet );
105912ce5b7dSKent Overstreet
106012ce5b7dSKent Overstreet DEFINE_EVENT(transaction_event, trans_restart_key_cache_raced,
1061e153a0d7SKent Overstreet TP_PROTO(struct btree_trans *trans,
10629f96568cSKent Overstreet unsigned long caller_ip),
1063e153a0d7SKent Overstreet TP_ARGS(trans, caller_ip)
1064e153a0d7SKent Overstreet );
1065e153a0d7SKent Overstreet
10660990efaeSKent Overstreet DEFINE_EVENT(trans_str, trans_restart_too_many_iters,
10670990efaeSKent Overstreet TP_PROTO(struct btree_trans *trans,
1068531a0095SKent Overstreet unsigned long caller_ip,
10699f96568cSKent Overstreet const char *paths),
1070531a0095SKent Overstreet TP_ARGS(trans, caller_ip, paths)
10719f96568cSKent Overstreet );
10729f96568cSKent Overstreet
1073531a0095SKent Overstreet DECLARE_EVENT_CLASS(transaction_restart_iter,
1074531a0095SKent Overstreet TP_PROTO(struct btree_trans *trans,
10755f1dd9a6SKent Overstreet unsigned long caller_ip,
10764b59a319SKent Overstreet struct btree_path *path),
1077531a0095SKent Overstreet TP_ARGS(trans, caller_ip, path),
10789f96568cSKent Overstreet
1079531a0095SKent Overstreet TP_STRUCT__entry(
1080531a0095SKent Overstreet __array(char, trans_fn, 32 )
1081531a0095SKent Overstreet __field(unsigned long, caller_ip )
1082a1019576SKent Overstreet __field(u8, btree_id )
10834b59a319SKent Overstreet TRACE_BPOS_entries(pos)
10849f96568cSKent Overstreet ),
10859f96568cSKent Overstreet
1086531a0095SKent Overstreet TP_fast_assign(
1087531a0095SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
10889f96568cSKent Overstreet __entry->caller_ip = caller_ip;
1089669f87a5SKent Overstreet __entry->btree_id = path->btree_id;
10904b59a319SKent Overstreet TRACE_BPOS_assign(pos, path->pos)
109188dfe193SKent Overstreet ),
1092531a0095SKent Overstreet
1093531a0095SKent Overstreet TP_printk("%s %pS btree %s pos %llu:%llu:%u",
1094531a0095SKent Overstreet __entry->trans_fn,
1095531a0095SKent Overstreet (void *) __entry->caller_ip,
1096531a0095SKent Overstreet bch2_btree_id_str(__entry->btree_id),
1097531a0095SKent Overstreet __entry->pos_inode,
10989f96568cSKent Overstreet __entry->pos_offset,
1099531a0095SKent Overstreet __entry->pos_snapshot)
11009f96568cSKent Overstreet );
11019f96568cSKent Overstreet
1102531a0095SKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_btree_node_reused,
1103531a0095SKent Overstreet TP_PROTO(struct btree_trans *trans,
1104531a0095SKent Overstreet unsigned long caller_ip,
11059f96568cSKent Overstreet struct btree_path *path),
1106531a0095SKent Overstreet TP_ARGS(trans, caller_ip, path)
11079f96568cSKent Overstreet );
11089f96568cSKent Overstreet
1109531a0095SKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_btree_node_split,
1110531a0095SKent Overstreet TP_PROTO(struct btree_trans *trans,
1111367d72ddSKent Overstreet unsigned long caller_ip,
11129f96568cSKent Overstreet struct btree_path *path),
1113531a0095SKent Overstreet TP_ARGS(trans, caller_ip, path)
1114367d72ddSKent Overstreet );
1115367d72ddSKent Overstreet
1116be9e782dSKent Overstreet TRACE_EVENT(trans_restart_upgrade,
1117be9e782dSKent Overstreet TP_PROTO(struct btree_trans *trans,
1118be9e782dSKent Overstreet unsigned long caller_ip,
1119531a0095SKent Overstreet struct btree_path *path,
1120367d72ddSKent Overstreet unsigned old_locks_want,
1121367d72ddSKent Overstreet unsigned new_locks_want,
1122367d72ddSKent Overstreet struct get_locks_fail *f),
1123367d72ddSKent Overstreet TP_ARGS(trans, caller_ip, path, old_locks_want, new_locks_want, f),
1124367d72ddSKent Overstreet
1125367d72ddSKent Overstreet TP_STRUCT__entry(
1126be9e782dSKent Overstreet __array(char, trans_fn, 32 )
1127be9e782dSKent Overstreet __field(unsigned long, caller_ip )
1128be9e782dSKent Overstreet __field(u8, btree_id )
1129367d72ddSKent Overstreet __field(u8, old_locks_want )
1130367d72ddSKent Overstreet __field(u8, new_locks_want )
1131367d72ddSKent Overstreet __field(u8, level )
1132367d72ddSKent Overstreet __field(u32, path_seq )
1133a1019576SKent Overstreet __field(u32, node_seq )
1134367d72ddSKent Overstreet TRACE_BPOS_entries(pos)
1135367d72ddSKent Overstreet ),
1136367d72ddSKent Overstreet
1137367d72ddSKent Overstreet TP_fast_assign(
1138be9e782dSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
1139be9e782dSKent Overstreet __entry->caller_ip = caller_ip;
1140be9e782dSKent Overstreet __entry->btree_id = path->btree_id;
1141367d72ddSKent Overstreet __entry->old_locks_want = old_locks_want;
1142367d72ddSKent Overstreet __entry->new_locks_want = new_locks_want;
1143367d72ddSKent Overstreet __entry->level = f->l;
1144a83b6c89SKent Overstreet __entry->path_seq = path->l[f->l].lock_seq;
1145367d72ddSKent Overstreet __entry->node_seq = IS_ERR_OR_NULL(f->b) ? 0 : f->b->c.lock.seq;
1146367d72ddSKent Overstreet TRACE_BPOS_assign(pos, path->pos)
114788dfe193SKent Overstreet ),
1148367d72ddSKent Overstreet
1149367d72ddSKent Overstreet TP_printk("%s %pS btree %s pos %llu:%llu:%u locks_want %u -> %u level %u path seq %u node seq %u",
1150367d72ddSKent Overstreet __entry->trans_fn,
1151367d72ddSKent Overstreet (void *) __entry->caller_ip,
1152be9e782dSKent Overstreet bch2_btree_id_str(__entry->btree_id),
1153be9e782dSKent Overstreet __entry->pos_inode,
1154be9e782dSKent Overstreet __entry->pos_offset,
1155a83b6c89SKent Overstreet __entry->pos_snapshot,
1156531a0095SKent Overstreet __entry->old_locks_want,
1157531a0095SKent Overstreet __entry->new_locks_want,
1158b97de453SKent Overstreet __entry->level,
1159b97de453SKent Overstreet __entry->path_seq,
1160b97de453SKent Overstreet __entry->node_seq)
1161531a0095SKent Overstreet );
1162531a0095SKent Overstreet
1163bc82d08bSKent Overstreet DEFINE_EVENT(trans_str, trans_restart_relock,
11649f96568cSKent Overstreet TP_PROTO(struct btree_trans *trans, unsigned long caller_ip, const char *str),
1165bc82d08bSKent Overstreet TP_ARGS(trans, caller_ip, str)
11669f96568cSKent Overstreet );
11679f96568cSKent Overstreet
1168bc82d08bSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_next_node,
1169bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
1170bc82d08bSKent Overstreet unsigned long caller_ip,
11719f96568cSKent Overstreet struct btree_path *path),
1172bc82d08bSKent Overstreet TP_ARGS(trans, caller_ip, path)
11739f96568cSKent Overstreet );
11749f96568cSKent Overstreet
1175bc82d08bSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_parent_for_fill,
1176bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
1177bc82d08bSKent Overstreet unsigned long caller_ip,
11789f96568cSKent Overstreet struct btree_path *path),
1179bc82d08bSKent Overstreet TP_ARGS(trans, caller_ip, path)
11809f96568cSKent Overstreet );
11819f96568cSKent Overstreet
1182bc82d08bSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_after_fill,
1183bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
1184674cfc26SKent Overstreet unsigned long caller_ip,
11859f96568cSKent Overstreet struct btree_path *path),
118649e401faSKent Overstreet TP_ARGS(trans, caller_ip, path)
11879f96568cSKent Overstreet );
118849e401faSKent Overstreet
118949e401faSKent Overstreet DEFINE_EVENT(transaction_event, trans_restart_key_cache_upgrade,
1190bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
11919f96568cSKent Overstreet unsigned long caller_ip),
1192bc82d08bSKent Overstreet TP_ARGS(trans, caller_ip)
11939f96568cSKent Overstreet );
11949f96568cSKent Overstreet
1195bc82d08bSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_key_cache_fill,
1196bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
1197bc82d08bSKent Overstreet unsigned long caller_ip,
11989f96568cSKent Overstreet struct btree_path *path),
1199bc82d08bSKent Overstreet TP_ARGS(trans, caller_ip, path)
12009f96568cSKent Overstreet );
12019f96568cSKent Overstreet
1202bc82d08bSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_path,
1203bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
1204bc82d08bSKent Overstreet unsigned long caller_ip,
12059f96568cSKent Overstreet struct btree_path *path),
1206bc82d08bSKent Overstreet TP_ARGS(trans, caller_ip, path)
12079f96568cSKent Overstreet );
12089f96568cSKent Overstreet
1209bc82d08bSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_relock_path_intent,
1210bc82d08bSKent Overstreet TP_PROTO(struct btree_trans *trans,
1211531a0095SKent Overstreet unsigned long caller_ip,
12129f96568cSKent Overstreet struct btree_path *path),
1213531a0095SKent Overstreet TP_ARGS(trans, caller_ip, path)
12149f96568cSKent Overstreet );
12159f96568cSKent Overstreet
1216531a0095SKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_traverse,
1217531a0095SKent Overstreet TP_PROTO(struct btree_trans *trans,
12188f9ad91aSKent Overstreet unsigned long caller_ip,
12199f96568cSKent Overstreet struct btree_path *path),
12208f9ad91aSKent Overstreet TP_ARGS(trans, caller_ip, path)
12219f96568cSKent Overstreet );
12229f96568cSKent Overstreet
12238f9ad91aSKent Overstreet DEFINE_EVENT(transaction_restart_iter, trans_restart_memory_allocation_failure,
12248f9ad91aSKent Overstreet TP_PROTO(struct btree_trans *trans,
1225c13fbb7dSKent Overstreet unsigned long caller_ip,
12269f96568cSKent Overstreet struct btree_path *path),
122733981244SKent Overstreet TP_ARGS(trans, caller_ip, path)
1228c13fbb7dSKent Overstreet );
1229ba5c6557SKent Overstreet
1230ba5c6557SKent Overstreet DEFINE_EVENT(trans_str_nocaller, trans_restart_would_deadlock,
123133bd5d06SKent Overstreet TP_PROTO(struct btree_trans *trans,
123233bd5d06SKent Overstreet const char *cycle),
123333bd5d06SKent Overstreet TP_ARGS(trans, cycle)
123433bd5d06SKent Overstreet );
123533bd5d06SKent Overstreet
123633bd5d06SKent Overstreet DEFINE_EVENT(transaction_event, trans_restart_would_deadlock_recursion_limit,
1237caaa66aaSKent Overstreet TP_PROTO(struct btree_trans *trans,
12389f96568cSKent Overstreet unsigned long caller_ip),
12399f96568cSKent Overstreet TP_ARGS(trans, caller_ip)
1240caaa66aaSKent Overstreet );
1241caaa66aaSKent Overstreet
12425f1dd9a6SKent Overstreet TRACE_EVENT(trans_restart_would_deadlock_write,
1243caaa66aaSKent Overstreet TP_PROTO(struct btree_trans *trans),
1244caaa66aaSKent Overstreet TP_ARGS(trans),
1245caaa66aaSKent Overstreet
1246a1019576SKent Overstreet TP_STRUCT__entry(
1247caaa66aaSKent Overstreet __array(char, trans_fn, 32 )
1248caaa66aaSKent Overstreet ),
1249669f87a5SKent Overstreet
1250caaa66aaSKent Overstreet TP_fast_assign(
1251caaa66aaSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
125220bceecbSKent Overstreet ),
12539f96568cSKent Overstreet
1254669f87a5SKent Overstreet TP_printk("%s", __entry->trans_fn)
125573a117d2SKent Overstreet );
12569f96568cSKent Overstreet
125720bceecbSKent Overstreet TRACE_EVENT(trans_restart_mem_realloced,
125820bceecbSKent Overstreet TP_PROTO(struct btree_trans *trans,
12595f1dd9a6SKent Overstreet unsigned long caller_ip,
126073a117d2SKent Overstreet unsigned long bytes),
126120bceecbSKent Overstreet TP_ARGS(trans, caller_ip, bytes),
126220bceecbSKent Overstreet
126320bceecbSKent Overstreet TP_STRUCT__entry(
126420bceecbSKent Overstreet __array(char, trans_fn, 32 )
1265a1019576SKent Overstreet __field(unsigned long, caller_ip )
126673a117d2SKent Overstreet __field(unsigned long, bytes )
126720bceecbSKent Overstreet ),
126820bceecbSKent Overstreet
126920bceecbSKent Overstreet TP_fast_assign(
1270669f87a5SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
1271669f87a5SKent Overstreet __entry->caller_ip = caller_ip;
127273a117d2SKent Overstreet __entry->bytes = bytes;
127373a117d2SKent Overstreet ),
1274ba5c6557SKent Overstreet
1275ba5c6557SKent Overstreet TP_printk("%s %pS bytes %lu",
12763a306f3cSKent Overstreet __entry->trans_fn,
12779f96568cSKent Overstreet (void *) __entry->caller_ip,
1278ddf11d8cSKent Overstreet __entry->bytes)
12799f96568cSKent Overstreet );
12803a306f3cSKent Overstreet
12813a306f3cSKent Overstreet TRACE_EVENT(trans_restart_key_cache_key_realloced,
12829f96568cSKent Overstreet TP_PROTO(struct btree_trans *trans,
12833a306f3cSKent Overstreet unsigned long caller_ip,
12843a306f3cSKent Overstreet struct btree_path *path,
12855f1dd9a6SKent Overstreet unsigned old_u64s,
12863a306f3cSKent Overstreet unsigned new_u64s),
12873a306f3cSKent Overstreet TP_ARGS(trans, caller_ip, path, old_u64s, new_u64s),
12889f96568cSKent Overstreet
12893a306f3cSKent Overstreet TP_STRUCT__entry(
12903a306f3cSKent Overstreet __array(char, trans_fn, 32 )
12913a306f3cSKent Overstreet __field(unsigned long, caller_ip )
12923a306f3cSKent Overstreet __field(enum btree_id, btree_id )
12933a306f3cSKent Overstreet TRACE_BPOS_entries(pos)
1294a1019576SKent Overstreet __field(u32, old_u64s )
12953a306f3cSKent Overstreet __field(u32, new_u64s )
12969f96568cSKent Overstreet ),
12979f96568cSKent Overstreet
12989f96568cSKent Overstreet TP_fast_assign(
12993a306f3cSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
13003a306f3cSKent Overstreet __entry->caller_ip = caller_ip;
13013a306f3cSKent Overstreet
13023a306f3cSKent Overstreet __entry->btree_id = path->btree_id;
13033a306f3cSKent Overstreet TRACE_BPOS_assign(pos, path->pos);
13043a306f3cSKent Overstreet __entry->old_u64s = old_u64s;
13053a306f3cSKent Overstreet __entry->new_u64s = new_u64s;
130688dfe193SKent Overstreet ),
130749e401faSKent Overstreet
130849e401faSKent Overstreet TP_printk("%s %pS btree %s pos %llu:%llu:%u old_u64s %u new_u64s %u",
13099f96568cSKent Overstreet __entry->trans_fn,
13109f96568cSKent Overstreet (void *) __entry->caller_ip,
13119f96568cSKent Overstreet bch2_btree_id_str(__entry->btree_id),
131249e401faSKent Overstreet __entry->pos_inode,
131349e401faSKent Overstreet __entry->pos_offset,
1314be9e782dSKent Overstreet __entry->pos_snapshot,
1315be9e782dSKent Overstreet __entry->old_u64s,
1316be9e782dSKent Overstreet __entry->new_u64s)
1317eb54e81fSKent Overstreet );
1318eb54e81fSKent Overstreet
1319eb54e81fSKent Overstreet TRACE_EVENT(path_downgrade,
1320be9e782dSKent Overstreet TP_PROTO(struct btree_trans *trans,
1321be9e782dSKent Overstreet unsigned long caller_ip,
1322be9e782dSKent Overstreet struct btree_path *path,
1323be9e782dSKent Overstreet unsigned old_locks_want),
1324eb54e81fSKent Overstreet TP_ARGS(trans, caller_ip, path, old_locks_want),
1325eb54e81fSKent Overstreet
1326eb54e81fSKent Overstreet TP_STRUCT__entry(
1327eb54e81fSKent Overstreet __array(char, trans_fn, 32 )
1328be9e782dSKent Overstreet __field(unsigned long, caller_ip )
1329be9e782dSKent Overstreet __field(unsigned, old_locks_want )
1330be9e782dSKent Overstreet __field(unsigned, new_locks_want )
1331be9e782dSKent Overstreet __field(unsigned, btree )
1332be9e782dSKent Overstreet TRACE_BPOS_entries(pos)
1333eb54e81fSKent Overstreet ),
1334eb54e81fSKent Overstreet
1335eb54e81fSKent Overstreet TP_fast_assign(
1336eb54e81fSKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
1337be9e782dSKent Overstreet __entry->caller_ip = caller_ip;
1338be9e782dSKent Overstreet __entry->old_locks_want = old_locks_want;
1339eb54e81fSKent Overstreet __entry->new_locks_want = path->locks_want;
1340be9e782dSKent Overstreet __entry->btree = path->btree_id;
1341eb54e81fSKent Overstreet TRACE_BPOS_assign(pos, path->pos);
1342eb54e81fSKent Overstreet ),
1343eb54e81fSKent Overstreet
1344eb54e81fSKent Overstreet TP_printk("%s %pS locks_want %u -> %u %s %llu:%llu:%u",
1345eb54e81fSKent Overstreet __entry->trans_fn,
1346eb54e81fSKent Overstreet (void *) __entry->caller_ip,
1347eb54e81fSKent Overstreet __entry->old_locks_want,
1348be9e782dSKent Overstreet __entry->new_locks_want,
1349be9e782dSKent Overstreet bch2_btree_id_str(__entry->btree),
1350920e69bcSKent Overstreet __entry->pos_inode,
1351920e69bcSKent Overstreet __entry->pos_offset,
1352920e69bcSKent Overstreet __entry->pos_snapshot)
1353920e69bcSKent Overstreet );
1354920e69bcSKent Overstreet
1355920e69bcSKent Overstreet DEFINE_EVENT(transaction_event, trans_restart_write_buffer_flush,
1356920e69bcSKent Overstreet TP_PROTO(struct btree_trans *trans,
1357920e69bcSKent Overstreet unsigned long caller_ip),
1358920e69bcSKent Overstreet TP_ARGS(trans, caller_ip)
1359920e69bcSKent Overstreet );
1360920e69bcSKent Overstreet
1361920e69bcSKent Overstreet TRACE_EVENT(write_buffer_flush,
1362920e69bcSKent Overstreet TP_PROTO(struct btree_trans *trans, size_t nr, size_t skipped, size_t fast, size_t size),
1363920e69bcSKent Overstreet TP_ARGS(trans, nr, skipped, fast, size),
1364920e69bcSKent Overstreet
1365920e69bcSKent Overstreet TP_STRUCT__entry(
1366920e69bcSKent Overstreet __field(size_t, nr )
1367920e69bcSKent Overstreet __field(size_t, skipped )
1368920e69bcSKent Overstreet __field(size_t, fast )
1369920e69bcSKent Overstreet __field(size_t, size )
1370920e69bcSKent Overstreet ),
1371920e69bcSKent Overstreet
1372920e69bcSKent Overstreet TP_fast_assign(
1373920e69bcSKent Overstreet __entry->nr = nr;
1374920e69bcSKent Overstreet __entry->skipped = skipped;
1375920e69bcSKent Overstreet __entry->fast = fast;
1376920e69bcSKent Overstreet __entry->size = size;
1377920e69bcSKent Overstreet ),
137856db2429SKent Overstreet
137956db2429SKent Overstreet TP_printk("%zu/%zu skipped %zu fast %zu",
138056db2429SKent Overstreet __entry->nr, __entry->size, __entry->skipped, __entry->fast)
1381920e69bcSKent Overstreet );
1382920e69bcSKent Overstreet
138356db2429SKent Overstreet TRACE_EVENT(write_buffer_flush_sync,
138456db2429SKent Overstreet TP_PROTO(struct btree_trans *trans, unsigned long caller_ip),
1385920e69bcSKent Overstreet TP_ARGS(trans, caller_ip),
1386920e69bcSKent Overstreet
1387920e69bcSKent Overstreet TP_STRUCT__entry(
138856db2429SKent Overstreet __array(char, trans_fn, 32 )
138956db2429SKent Overstreet __field(unsigned long, caller_ip )
1390920e69bcSKent Overstreet ),
1391920e69bcSKent Overstreet
139256db2429SKent Overstreet TP_fast_assign(
139356db2429SKent Overstreet strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
139456db2429SKent Overstreet __entry->caller_ip = caller_ip;
139556db2429SKent Overstreet ),
139656db2429SKent Overstreet
139756db2429SKent Overstreet TP_printk("%s %pS", __entry->trans_fn, (void *) __entry->caller_ip)
139856db2429SKent Overstreet );
139956db2429SKent Overstreet
140056db2429SKent Overstreet TRACE_EVENT(write_buffer_flush_slowpath,
140156db2429SKent Overstreet TP_PROTO(struct btree_trans *trans, size_t slowpath, size_t total),
140256db2429SKent Overstreet TP_ARGS(trans, slowpath, total),
140356db2429SKent Overstreet
140456db2429SKent Overstreet TP_STRUCT__entry(
140556db2429SKent Overstreet __field(size_t, slowpath )
140656db2429SKent Overstreet __field(size_t, total )
140756db2429SKent Overstreet ),
140856db2429SKent Overstreet
140956db2429SKent Overstreet TP_fast_assign(
1410920e69bcSKent Overstreet __entry->slowpath = slowpath;
1411920e69bcSKent Overstreet __entry->total = total;
1412e153a0d7SKent Overstreet ),
141325d1e39dSKent Overstreet
141425d1e39dSKent Overstreet TP_printk("%zu/%zu", __entry->slowpath, __entry->total)
141525d1e39dSKent Overstreet );
141625d1e39dSKent Overstreet
1417e153a0d7SKent Overstreet DEFINE_EVENT(fs_str, rebalance_extent,
141825d1e39dSKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
141925d1e39dSKent Overstreet TP_ARGS(c, str)
142025d1e39dSKent Overstreet );
142125d1e39dSKent Overstreet
1422eb386617SKent Overstreet DEFINE_EVENT(fs_str, data_update,
1423eb386617SKent Overstreet TP_PROTO(struct bch_fs *c, const char *str),
1424eb386617SKent Overstreet TP_ARGS(c, str)
1425eb386617SKent Overstreet );
1426eb386617SKent Overstreet
1427eb386617SKent Overstreet TRACE_EVENT(error_downcast,
1428eb386617SKent Overstreet TP_PROTO(int bch_err, int std_err, unsigned long ip),
1429eb386617SKent Overstreet TP_ARGS(bch_err, std_err, ip),
1430eb386617SKent Overstreet
1431eb386617SKent Overstreet TP_STRUCT__entry(
1432eb386617SKent Overstreet __array(char, bch_err, 32 )
1433eb386617SKent Overstreet __array(char, std_err, 32 )
1434eb386617SKent Overstreet __array(char, ip, 32 )
1435eb386617SKent Overstreet ),
1436eb386617SKent Overstreet
1437eb386617SKent Overstreet TP_fast_assign(
1438eb386617SKent Overstreet strscpy(__entry->bch_err, bch2_err_str(bch_err), sizeof(__entry->bch_err));
1439eb386617SKent Overstreet strscpy(__entry->std_err, bch2_err_str(std_err), sizeof(__entry->std_err));
1440eb386617SKent Overstreet snprintf(__entry->ip, sizeof(__entry->ip), "%ps", (void *) ip);
14411c6fdbd8SKent Overstreet ),
14421c6fdbd8SKent Overstreet
14431c6fdbd8SKent Overstreet TP_printk("%s -> %s %s", __entry->bch_err, __entry->std_err, __entry->ip)
14441c6fdbd8SKent Overstreet );
14451c6fdbd8SKent Overstreet
14461c6fdbd8SKent Overstreet #ifdef CONFIG_BCACHEFS_PATH_TRACEPOINTS
14471c6fdbd8SKent Overstreet
14481c6fdbd8SKent Overstreet TRACE_EVENT(update_by_path,
14491c6fdbd8SKent Overstreet TP_PROTO(struct btree_trans *trans, struct btree_path *path,
14501c6fdbd8SKent Overstreet 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