xref: /openbmc/linux/fs/xfs/xfs_trace.h (revision 5f8b7d4b2e9604d03ae06f1a2dd5a1f34c33e533)
10b61f8a4SDave Chinner // SPDX-License-Identifier: GPL-2.0
2c59d87c4SChristoph Hellwig /*
3c59d87c4SChristoph Hellwig  * Copyright (c) 2009, Christoph Hellwig
4c59d87c4SChristoph Hellwig  * All Rights Reserved.
5e5f2e54aSDarrick J. Wong  *
6e5f2e54aSDarrick J. Wong  * NOTE: none of these tracepoints shall be considered a stable kernel ABI
7e5f2e54aSDarrick J. Wong  * as they can change at any time.
8e5f2e54aSDarrick J. Wong  *
9e5f2e54aSDarrick J. Wong  * Current conventions for printing numbers measuring specific units:
10e5f2e54aSDarrick J. Wong  *
11e5f2e54aSDarrick J. Wong  * agno: allocation group number
12e5f2e54aSDarrick J. Wong  *
13e5f2e54aSDarrick J. Wong  * agino: per-AG inode number
14e5f2e54aSDarrick J. Wong  * ino: filesystem inode number
15e5f2e54aSDarrick J. Wong  *
16e5f2e54aSDarrick J. Wong  * agbno: per-AG block number in fs blocks
17e5f2e54aSDarrick J. Wong  * startblock: physical block number for file mappings.  This is either a
18e5f2e54aSDarrick J. Wong  *             segmented fsblock for data device mappings, or a rfsblock
19e5f2e54aSDarrick J. Wong  *             for realtime device mappings
20e5f2e54aSDarrick J. Wong  * fsbcount: number of blocks in an extent, in fs blocks
21e5f2e54aSDarrick J. Wong  *
22e5f2e54aSDarrick J. Wong  * daddr: physical block number in 512b blocks
23e5f2e54aSDarrick J. Wong  * bbcount: number of blocks in a physical extent, in 512b blocks
24e5f2e54aSDarrick J. Wong  *
25526aab5fSDarrick J. Wong  * rtx: physical rt extent number for extent mappings
26526aab5fSDarrick J. Wong  * rtxcount: number of rt extents in an extent mapping
27526aab5fSDarrick J. Wong  *
28e5f2e54aSDarrick J. Wong  * owner: reverse-mapping owner, usually inodes
29e5f2e54aSDarrick J. Wong  *
30e5f2e54aSDarrick J. Wong  * fileoff: file offset, in fs blocks
31e5f2e54aSDarrick J. Wong  * pos: file offset, in bytes
32e5f2e54aSDarrick J. Wong  * bytecount: number of bytes
33e5f2e54aSDarrick J. Wong  *
34e5f2e54aSDarrick J. Wong  * disize: ondisk file size, in bytes
35e5f2e54aSDarrick J. Wong  * isize: incore file size, in bytes
36e5f2e54aSDarrick J. Wong  *
37e5f2e54aSDarrick J. Wong  * forkoff: inode fork offset, in bytes
38e5f2e54aSDarrick J. Wong  *
39e5f2e54aSDarrick J. Wong  * ireccount: number of inode records
40e5f2e54aSDarrick J. Wong  *
41e5f2e54aSDarrick J. Wong  * Numbers describing space allocations (blocks, extents, inodes) should be
42e5f2e54aSDarrick J. Wong  * formatted in hexadecimal.
43c59d87c4SChristoph Hellwig  */
44c59d87c4SChristoph Hellwig #undef TRACE_SYSTEM
45c59d87c4SChristoph Hellwig #define TRACE_SYSTEM xfs
46c59d87c4SChristoph Hellwig 
47c59d87c4SChristoph Hellwig #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ)
48c59d87c4SChristoph Hellwig #define _TRACE_XFS_H
49c59d87c4SChristoph Hellwig 
50c59d87c4SChristoph Hellwig #include <linux/tracepoint.h>
51c59d87c4SChristoph Hellwig 
52c59d87c4SChristoph Hellwig struct xfs_agf;
53c59d87c4SChristoph Hellwig struct xfs_alloc_arg;
54c59d87c4SChristoph Hellwig struct xfs_attr_list_context;
55c59d87c4SChristoph Hellwig struct xfs_buf_log_item;
56c59d87c4SChristoph Hellwig struct xfs_da_args;
57c59d87c4SChristoph Hellwig struct xfs_da_node_entry;
58c59d87c4SChristoph Hellwig struct xfs_dquot;
599e4c109aSChristoph Hellwig struct xfs_log_item;
60ad223e60SMark Tinguely struct xlog;
61750b9c90SDave Chinner struct xlog_ticket;
62c59d87c4SChristoph Hellwig struct xlog_recover;
63c59d87c4SChristoph Hellwig struct xlog_recover_item;
640ad95687SDave Chinner struct xlog_rec_header;
65956f6daaSDave Chinner struct xlog_in_core;
66c59d87c4SChristoph Hellwig struct xfs_buf_log_format;
67c59d87c4SChristoph Hellwig struct xfs_inode_log_format;
681ed845dfSAlex Elder struct xfs_bmbt_irec;
692c813ad6SDarrick J. Wong struct xfs_btree_cur;
701946b91cSDarrick J. Wong struct xfs_refcount_irec;
71e89c0413SDarrick J. Wong struct xfs_fsmap;
72e89c0413SDarrick J. Wong struct xfs_rmap_irec;
730ad95687SDave Chinner struct xfs_icreate_log;
740ad95687SDave Chinner struct xfs_owner_info;
750ad95687SDave Chinner struct xfs_trans_res;
760ad95687SDave Chinner struct xfs_inobt_rec_incore;
7760e3d707SDarrick J. Wong union xfs_btree_ptr;
782cb91babSDarrick J. Wong struct xfs_dqtrx;
79b26b2bf1SDarrick J. Wong struct xfs_icwalk;
80571e2592SDave Chinner struct xfs_perag;
81c59d87c4SChristoph Hellwig 
82d5f0f49aSChristoph Hellwig #define XFS_ATTR_FILTER_FLAGS \
83d5f0f49aSChristoph Hellwig 	{ XFS_ATTR_ROOT,	"ROOT" }, \
84254f800fSChristoph Hellwig 	{ XFS_ATTR_SECURE,	"SECURE" }, \
85254f800fSChristoph Hellwig 	{ XFS_ATTR_INCOMPLETE,	"INCOMPLETE" }
86d5f0f49aSChristoph Hellwig 
87c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_attr_list_class,
88c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_attr_list_context *ctx),
89c59d87c4SChristoph Hellwig 	TP_ARGS(ctx),
90c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
91c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
92c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
93c59d87c4SChristoph Hellwig 		__field(u32, hashval)
94c59d87c4SChristoph Hellwig 		__field(u32, blkno)
95c59d87c4SChristoph Hellwig 		__field(u32, offset)
96a9c8c69bSChristoph Hellwig 		__field(void *, buffer)
97c59d87c4SChristoph Hellwig 		__field(int, bufsize)
98c59d87c4SChristoph Hellwig 		__field(int, count)
99c59d87c4SChristoph Hellwig 		__field(int, firstu)
100c59d87c4SChristoph Hellwig 		__field(int, dupcnt)
101d5f0f49aSChristoph Hellwig 		__field(unsigned int, attr_filter)
102c59d87c4SChristoph Hellwig 	),
103c59d87c4SChristoph Hellwig 	TP_fast_assign(
104c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ctx->dp)->i_sb->s_dev;
105c59d87c4SChristoph Hellwig 		__entry->ino = ctx->dp->i_ino;
106e3a19cdeSChristoph Hellwig 		__entry->hashval = ctx->cursor.hashval;
107e3a19cdeSChristoph Hellwig 		__entry->blkno = ctx->cursor.blkno;
108e3a19cdeSChristoph Hellwig 		__entry->offset = ctx->cursor.offset;
109a9c8c69bSChristoph Hellwig 		__entry->buffer = ctx->buffer;
110c59d87c4SChristoph Hellwig 		__entry->bufsize = ctx->bufsize;
111c59d87c4SChristoph Hellwig 		__entry->count = ctx->count;
112c59d87c4SChristoph Hellwig 		__entry->firstu = ctx->firstu;
113d5f0f49aSChristoph Hellwig 		__entry->attr_filter = ctx->attr_filter;
114c59d87c4SChristoph Hellwig 	),
115c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "
116d5f0f49aSChristoph Hellwig 		  "buffer %p size %u count %u firstu %u filter %s",
117c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
118c59d87c4SChristoph Hellwig 		   __entry->ino,
119c59d87c4SChristoph Hellwig 		   __entry->hashval,
120c59d87c4SChristoph Hellwig 		   __entry->blkno,
121c59d87c4SChristoph Hellwig 		   __entry->offset,
122c59d87c4SChristoph Hellwig 		   __entry->dupcnt,
123a9c8c69bSChristoph Hellwig 		   __entry->buffer,
124c59d87c4SChristoph Hellwig 		   __entry->bufsize,
125c59d87c4SChristoph Hellwig 		   __entry->count,
126c59d87c4SChristoph Hellwig 		   __entry->firstu,
127d5f0f49aSChristoph Hellwig 		   __print_flags(__entry->attr_filter, "|",
128d5f0f49aSChristoph Hellwig 				 XFS_ATTR_FILTER_FLAGS)
129c59d87c4SChristoph Hellwig 	)
130c59d87c4SChristoph Hellwig )
131c59d87c4SChristoph Hellwig 
132c59d87c4SChristoph Hellwig #define DEFINE_ATTR_LIST_EVENT(name) \
133c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_attr_list_class, name, \
134c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_attr_list_context *ctx), \
135c59d87c4SChristoph Hellwig 	TP_ARGS(ctx))
136c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf);
137c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all);
138c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf);
139c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end);
140c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full);
141c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add);
142c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk);
143c59d87c4SChristoph Hellwig DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound);
144ee73259bSDave Chinner DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list);
145ee73259bSDave Chinner DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list);
146c59d87c4SChristoph Hellwig 
14763370326SDarrick J. Wong TRACE_EVENT(xlog_intent_recovery_failed,
14863370326SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, int error, void *function),
14963370326SDarrick J. Wong 	TP_ARGS(mp, error, function),
15063370326SDarrick J. Wong 	TP_STRUCT__entry(
15163370326SDarrick J. Wong 		__field(dev_t, dev)
15263370326SDarrick J. Wong 		__field(int, error)
15363370326SDarrick J. Wong 		__field(void *, function)
15463370326SDarrick J. Wong 	),
15563370326SDarrick J. Wong 	TP_fast_assign(
15663370326SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
15763370326SDarrick J. Wong 		__entry->error = error;
15863370326SDarrick J. Wong 		__entry->function = function;
15963370326SDarrick J. Wong 	),
16063370326SDarrick J. Wong 	TP_printk("dev %d:%d error %d function %pS",
16163370326SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
16263370326SDarrick J. Wong 		  __entry->error, __entry->function)
16363370326SDarrick J. Wong );
16463370326SDarrick J. Wong 
165c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_perag_class,
166368e2d09SDave Chinner 	TP_PROTO(struct xfs_perag *pag, unsigned long caller_ip),
167368e2d09SDave Chinner 	TP_ARGS(pag, caller_ip),
168c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
169c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
170c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
171c59d87c4SChristoph Hellwig 		__field(int, refcount)
172368e2d09SDave Chinner 		__field(int, active_refcount)
173c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
174c59d87c4SChristoph Hellwig 	),
175c59d87c4SChristoph Hellwig 	TP_fast_assign(
176368e2d09SDave Chinner 		__entry->dev = pag->pag_mount->m_super->s_dev;
177368e2d09SDave Chinner 		__entry->agno = pag->pag_agno;
178368e2d09SDave Chinner 		__entry->refcount = atomic_read(&pag->pag_ref);
179368e2d09SDave Chinner 		__entry->active_refcount = atomic_read(&pag->pag_active_ref);
180c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
181c59d87c4SChristoph Hellwig 	),
182368e2d09SDave Chinner 	TP_printk("dev %d:%d agno 0x%x passive refs %d active refs %d caller %pS",
183c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
184c59d87c4SChristoph Hellwig 		  __entry->agno,
185c59d87c4SChristoph Hellwig 		  __entry->refcount,
186368e2d09SDave Chinner 		  __entry->active_refcount,
187c59d87c4SChristoph Hellwig 		  (char *)__entry->caller_ip)
188c59d87c4SChristoph Hellwig );
189c59d87c4SChristoph Hellwig 
190c59d87c4SChristoph Hellwig #define DEFINE_PERAG_REF_EVENT(name)	\
191c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_perag_class, name,	\
192368e2d09SDave Chinner 	TP_PROTO(struct xfs_perag *pag, unsigned long caller_ip), \
193368e2d09SDave Chinner 	TP_ARGS(pag, caller_ip))
194c59d87c4SChristoph Hellwig DEFINE_PERAG_REF_EVENT(xfs_perag_get);
195c59d87c4SChristoph Hellwig DEFINE_PERAG_REF_EVENT(xfs_perag_get_tag);
1969b2e5a23SDarrick J. Wong DEFINE_PERAG_REF_EVENT(xfs_perag_hold);
197c59d87c4SChristoph Hellwig DEFINE_PERAG_REF_EVENT(xfs_perag_put);
198c4d5660aSDave Chinner DEFINE_PERAG_REF_EVENT(xfs_perag_grab);
199c4d5660aSDave Chinner DEFINE_PERAG_REF_EVENT(xfs_perag_grab_tag);
200c4d5660aSDave Chinner DEFINE_PERAG_REF_EVENT(xfs_perag_rele);
201c076ae7aSDarrick J. Wong DEFINE_PERAG_REF_EVENT(xfs_perag_set_inode_tag);
202c076ae7aSDarrick J. Wong DEFINE_PERAG_REF_EVENT(xfs_perag_clear_inode_tag);
203c59d87c4SChristoph Hellwig 
20440b1de00SDarrick J. Wong TRACE_EVENT(xfs_inodegc_worker,
20540b1de00SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, unsigned int shrinker_hits),
20640b1de00SDarrick J. Wong 	TP_ARGS(mp, shrinker_hits),
20740b1de00SDarrick J. Wong 	TP_STRUCT__entry(
20840b1de00SDarrick J. Wong 		__field(dev_t, dev)
20940b1de00SDarrick J. Wong 		__field(unsigned int, shrinker_hits)
21040b1de00SDarrick J. Wong 	),
21140b1de00SDarrick J. Wong 	TP_fast_assign(
21240b1de00SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
21340b1de00SDarrick J. Wong 		__entry->shrinker_hits = shrinker_hits;
21440b1de00SDarrick J. Wong 	),
21540b1de00SDarrick J. Wong 	TP_printk("dev %d:%d shrinker_hits %u",
21640b1de00SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
21740b1de00SDarrick J. Wong 		  __entry->shrinker_hits)
21840b1de00SDarrick J. Wong );
21940b1de00SDarrick J. Wong 
220ab23a776SDave Chinner DECLARE_EVENT_CLASS(xfs_fs_class,
221ab23a776SDave Chinner 	TP_PROTO(struct xfs_mount *mp, void *caller_ip),
222ab23a776SDave Chinner 	TP_ARGS(mp, caller_ip),
223ab23a776SDave Chinner 	TP_STRUCT__entry(
224ab23a776SDave Chinner 		__field(dev_t, dev)
225ab23a776SDave Chinner 		__field(unsigned long long, mflags)
226ab23a776SDave Chinner 		__field(unsigned long, opstate)
227ab23a776SDave Chinner 		__field(unsigned long, sbflags)
228ab23a776SDave Chinner 		__field(void *, caller_ip)
229ab23a776SDave Chinner 	),
230ab23a776SDave Chinner 	TP_fast_assign(
231ab23a776SDave Chinner 		if (mp) {
232ab23a776SDave Chinner 			__entry->dev = mp->m_super->s_dev;
2332e973b2cSDave Chinner 			__entry->mflags = mp->m_features;
234ab23a776SDave Chinner 			__entry->opstate = mp->m_opstate;
235ab23a776SDave Chinner 			__entry->sbflags = mp->m_super->s_flags;
236ab23a776SDave Chinner 		}
237ab23a776SDave Chinner 		__entry->caller_ip = caller_ip;
238ab23a776SDave Chinner 	),
2392e973b2cSDave Chinner 	TP_printk("dev %d:%d m_features 0x%llx opstate (%s) s_flags 0x%lx caller %pS",
240ab23a776SDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
241ab23a776SDave Chinner 		  __entry->mflags,
242ab23a776SDave Chinner 		  __print_flags(__entry->opstate, "|", XFS_OPSTATE_STRINGS),
243ab23a776SDave Chinner 		  __entry->sbflags,
244ab23a776SDave Chinner 		  __entry->caller_ip)
245ab23a776SDave Chinner );
246ab23a776SDave Chinner 
247ab23a776SDave Chinner #define DEFINE_FS_EVENT(name)	\
248ab23a776SDave Chinner DEFINE_EVENT(xfs_fs_class, name,					\
249ab23a776SDave Chinner 	TP_PROTO(struct xfs_mount *mp, void *caller_ip), \
250ab23a776SDave Chinner 	TP_ARGS(mp, caller_ip))
251ab23a776SDave Chinner DEFINE_FS_EVENT(xfs_inodegc_flush);
2525e672cd6SDave Chinner DEFINE_FS_EVENT(xfs_inodegc_push);
253ab23a776SDave Chinner DEFINE_FS_EVENT(xfs_inodegc_start);
254ab23a776SDave Chinner DEFINE_FS_EVENT(xfs_inodegc_stop);
255ab23a776SDave Chinner DEFINE_FS_EVENT(xfs_inodegc_queue);
256ab23a776SDave Chinner DEFINE_FS_EVENT(xfs_inodegc_throttle);
257ab23a776SDave Chinner DEFINE_FS_EVENT(xfs_fs_sync_fs);
2586f649091SDarrick J. Wong DEFINE_FS_EVENT(xfs_blockgc_start);
2596f649091SDarrick J. Wong DEFINE_FS_EVENT(xfs_blockgc_stop);
2606f649091SDarrick J. Wong DEFINE_FS_EVENT(xfs_blockgc_worker);
261e8d04c2aSDarrick J. Wong DEFINE_FS_EVENT(xfs_blockgc_flush_all);
262ab23a776SDave Chinner 
26340b1de00SDarrick J. Wong TRACE_EVENT(xfs_inodegc_shrinker_scan,
26440b1de00SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct shrink_control *sc,
26540b1de00SDarrick J. Wong 		 void *caller_ip),
26640b1de00SDarrick J. Wong 	TP_ARGS(mp, sc, caller_ip),
26740b1de00SDarrick J. Wong 	TP_STRUCT__entry(
26840b1de00SDarrick J. Wong 		__field(dev_t, dev)
26940b1de00SDarrick J. Wong 		__field(unsigned long, nr_to_scan)
27040b1de00SDarrick J. Wong 		__field(void *, caller_ip)
27140b1de00SDarrick J. Wong 	),
27240b1de00SDarrick J. Wong 	TP_fast_assign(
27340b1de00SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
27440b1de00SDarrick J. Wong 		__entry->nr_to_scan = sc->nr_to_scan;
27540b1de00SDarrick J. Wong 		__entry->caller_ip = caller_ip;
27640b1de00SDarrick J. Wong 	),
27740b1de00SDarrick J. Wong 	TP_printk("dev %d:%d nr_to_scan %lu caller %pS",
27840b1de00SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
27940b1de00SDarrick J. Wong 		  __entry->nr_to_scan,
28040b1de00SDarrick J. Wong 		  __entry->caller_ip)
28140b1de00SDarrick J. Wong );
28240b1de00SDarrick J. Wong 
283d123031aSDave Chinner DECLARE_EVENT_CLASS(xfs_ag_class,
284d123031aSDave Chinner 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno),
285d123031aSDave Chinner 	TP_ARGS(mp, agno),
286d123031aSDave Chinner 	TP_STRUCT__entry(
287d123031aSDave Chinner 		__field(dev_t, dev)
288d123031aSDave Chinner 		__field(xfs_agnumber_t, agno)
289d123031aSDave Chinner 	),
290d123031aSDave Chinner 	TP_fast_assign(
291d123031aSDave Chinner 		__entry->dev = mp->m_super->s_dev;
292d123031aSDave Chinner 		__entry->agno = agno;
293d123031aSDave Chinner 	),
2949febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x",
295d123031aSDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
296d123031aSDave Chinner 		  __entry->agno)
297d123031aSDave Chinner );
298d123031aSDave Chinner #define DEFINE_AG_EVENT(name)	\
299d123031aSDave Chinner DEFINE_EVENT(xfs_ag_class, name,	\
300d123031aSDave Chinner 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno),	\
301d123031aSDave Chinner 	TP_ARGS(mp, agno))
302d123031aSDave Chinner 
303d123031aSDave Chinner DEFINE_AG_EVENT(xfs_read_agf);
304d123031aSDave Chinner DEFINE_AG_EVENT(xfs_alloc_read_agf);
305d123031aSDave Chinner DEFINE_AG_EVENT(xfs_read_agi);
306d123031aSDave Chinner DEFINE_AG_EVENT(xfs_ialloc_read_agi);
307d123031aSDave Chinner 
308c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_attr_list_node_descend,
309c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_attr_list_context *ctx,
310c59d87c4SChristoph Hellwig 		 struct xfs_da_node_entry *btree),
311c59d87c4SChristoph Hellwig 	TP_ARGS(ctx, btree),
312c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
313c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
314c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
315c59d87c4SChristoph Hellwig 		__field(u32, hashval)
316c59d87c4SChristoph Hellwig 		__field(u32, blkno)
317c59d87c4SChristoph Hellwig 		__field(u32, offset)
318a9c8c69bSChristoph Hellwig 		__field(void *, buffer)
319c59d87c4SChristoph Hellwig 		__field(int, bufsize)
320c59d87c4SChristoph Hellwig 		__field(int, count)
321c59d87c4SChristoph Hellwig 		__field(int, firstu)
322c59d87c4SChristoph Hellwig 		__field(int, dupcnt)
323d5f0f49aSChristoph Hellwig 		__field(unsigned int, attr_filter)
324c59d87c4SChristoph Hellwig 		__field(u32, bt_hashval)
325c59d87c4SChristoph Hellwig 		__field(u32, bt_before)
326c59d87c4SChristoph Hellwig 	),
327c59d87c4SChristoph Hellwig 	TP_fast_assign(
328c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ctx->dp)->i_sb->s_dev;
329c59d87c4SChristoph Hellwig 		__entry->ino = ctx->dp->i_ino;
330e3a19cdeSChristoph Hellwig 		__entry->hashval = ctx->cursor.hashval;
331e3a19cdeSChristoph Hellwig 		__entry->blkno = ctx->cursor.blkno;
332e3a19cdeSChristoph Hellwig 		__entry->offset = ctx->cursor.offset;
333a9c8c69bSChristoph Hellwig 		__entry->buffer = ctx->buffer;
334c59d87c4SChristoph Hellwig 		__entry->bufsize = ctx->bufsize;
335c59d87c4SChristoph Hellwig 		__entry->count = ctx->count;
336c59d87c4SChristoph Hellwig 		__entry->firstu = ctx->firstu;
337d5f0f49aSChristoph Hellwig 		__entry->attr_filter = ctx->attr_filter;
338c59d87c4SChristoph Hellwig 		__entry->bt_hashval = be32_to_cpu(btree->hashval);
339c59d87c4SChristoph Hellwig 		__entry->bt_before = be32_to_cpu(btree->before);
340c59d87c4SChristoph Hellwig 	),
341c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "
342d5f0f49aSChristoph Hellwig 		  "buffer %p size %u count %u firstu %u filter %s "
343c59d87c4SChristoph Hellwig 		  "node hashval %u, node before %u",
344c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
345c59d87c4SChristoph Hellwig 		   __entry->ino,
346c59d87c4SChristoph Hellwig 		   __entry->hashval,
347c59d87c4SChristoph Hellwig 		   __entry->blkno,
348c59d87c4SChristoph Hellwig 		   __entry->offset,
349c59d87c4SChristoph Hellwig 		   __entry->dupcnt,
350a9c8c69bSChristoph Hellwig 		   __entry->buffer,
351c59d87c4SChristoph Hellwig 		   __entry->bufsize,
352c59d87c4SChristoph Hellwig 		   __entry->count,
353c59d87c4SChristoph Hellwig 		   __entry->firstu,
354d5f0f49aSChristoph Hellwig 		   __print_flags(__entry->attr_filter, "|",
355d5f0f49aSChristoph Hellwig 				 XFS_ATTR_FILTER_FLAGS),
356c59d87c4SChristoph Hellwig 		   __entry->bt_hashval,
357c59d87c4SChristoph Hellwig 		   __entry->bt_before)
358c59d87c4SChristoph Hellwig );
359c59d87c4SChristoph Hellwig 
360c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_bmap_class,
361b2b1712aSChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state,
362c59d87c4SChristoph Hellwig 		 unsigned long caller_ip),
363b2b1712aSChristoph Hellwig 	TP_ARGS(ip, cur, state, caller_ip),
364c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
365c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
366c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
36704ae87a5SPeter Zijlstra 		__field(void *, leaf)
36804ae87a5SPeter Zijlstra 		__field(int, pos)
369c59d87c4SChristoph Hellwig 		__field(xfs_fileoff_t, startoff)
370c59d87c4SChristoph Hellwig 		__field(xfs_fsblock_t, startblock)
371c59d87c4SChristoph Hellwig 		__field(xfs_filblks_t, blockcount)
372c59d87c4SChristoph Hellwig 		__field(xfs_exntst_t, state)
373c59d87c4SChristoph Hellwig 		__field(int, bmap_state)
374c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
375c59d87c4SChristoph Hellwig 	),
376c59d87c4SChristoph Hellwig 	TP_fast_assign(
3773993baebSDarrick J. Wong 		struct xfs_ifork	*ifp;
378c59d87c4SChristoph Hellwig 		struct xfs_bmbt_irec	r;
379c59d87c4SChristoph Hellwig 
3803993baebSDarrick J. Wong 		ifp = xfs_iext_state_to_fork(ip, state);
381b2b1712aSChristoph Hellwig 		xfs_iext_get_extent(ifp, cur, &r);
382c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
383c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
3846bdcf26aSChristoph Hellwig 		__entry->leaf = cur->leaf;
3856bdcf26aSChristoph Hellwig 		__entry->pos = cur->pos;
386c59d87c4SChristoph Hellwig 		__entry->startoff = r.br_startoff;
387c59d87c4SChristoph Hellwig 		__entry->startblock = r.br_startblock;
388c59d87c4SChristoph Hellwig 		__entry->blockcount = r.br_blockcount;
389c59d87c4SChristoph Hellwig 		__entry->state = r.br_state;
390c59d87c4SChristoph Hellwig 		__entry->bmap_state = state;
391c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
392c59d87c4SChristoph Hellwig 	),
3933d170aa2SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d "
394d538cf24SDarrick J. Wong 		  "fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx flag %d caller %pS",
395c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
396c59d87c4SChristoph Hellwig 		  __entry->ino,
397c59d87c4SChristoph Hellwig 		  __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS),
3986bdcf26aSChristoph Hellwig 		  __entry->leaf,
3996bdcf26aSChristoph Hellwig 		  __entry->pos,
400c59d87c4SChristoph Hellwig 		  __entry->startoff,
401c8ce540dSDarrick J. Wong 		  (int64_t)__entry->startblock,
402c59d87c4SChristoph Hellwig 		  __entry->blockcount,
403c59d87c4SChristoph Hellwig 		  __entry->state,
404c59d87c4SChristoph Hellwig 		  (char *)__entry->caller_ip)
405c59d87c4SChristoph Hellwig )
406c59d87c4SChristoph Hellwig 
407c59d87c4SChristoph Hellwig #define DEFINE_BMAP_EVENT(name) \
408c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_bmap_class, name, \
409b2b1712aSChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \
410c59d87c4SChristoph Hellwig 		 unsigned long caller_ip), \
411b2b1712aSChristoph Hellwig 	TP_ARGS(ip, cur, state, caller_ip))
4126bdcf26aSChristoph Hellwig DEFINE_BMAP_EVENT(xfs_iext_insert);
413c59d87c4SChristoph Hellwig DEFINE_BMAP_EVENT(xfs_iext_remove);
414c59d87c4SChristoph Hellwig DEFINE_BMAP_EVENT(xfs_bmap_pre_update);
415c59d87c4SChristoph Hellwig DEFINE_BMAP_EVENT(xfs_bmap_post_update);
416e8e0e170SChristoph Hellwig DEFINE_BMAP_EVENT(xfs_read_extent);
417e8e0e170SChristoph Hellwig DEFINE_BMAP_EVENT(xfs_write_extent);
418c59d87c4SChristoph Hellwig 
419c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_buf_class,
420c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip),
421c59d87c4SChristoph Hellwig 	TP_ARGS(bp, caller_ip),
422c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
423c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
424c59d87c4SChristoph Hellwig 		__field(xfs_daddr_t, bno)
4254e94b71bSDave Chinner 		__field(int, nblks)
426c59d87c4SChristoph Hellwig 		__field(int, hold)
427c59d87c4SChristoph Hellwig 		__field(int, pincount)
428c59d87c4SChristoph Hellwig 		__field(unsigned, lockval)
429c59d87c4SChristoph Hellwig 		__field(unsigned, flags)
430c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
431c46eef34SDarrick J. Wong 		__field(const void *, buf_ops)
432c59d87c4SChristoph Hellwig 	),
433c59d87c4SChristoph Hellwig 	TP_fast_assign(
434c59d87c4SChristoph Hellwig 		__entry->dev = bp->b_target->bt_dev;
4359343ee76SDave Chinner 		__entry->bno = xfs_buf_daddr(bp);
4364e94b71bSDave Chinner 		__entry->nblks = bp->b_length;
437c59d87c4SChristoph Hellwig 		__entry->hold = atomic_read(&bp->b_hold);
438c59d87c4SChristoph Hellwig 		__entry->pincount = atomic_read(&bp->b_pin_count);
439c59d87c4SChristoph Hellwig 		__entry->lockval = bp->b_sema.count;
440c59d87c4SChristoph Hellwig 		__entry->flags = bp->b_flags;
441c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
442c46eef34SDarrick J. Wong 		__entry->buf_ops = bp->b_ops;
443c59d87c4SChristoph Hellwig 	),
4447eac3029SDarrick J. Wong 	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "
445c46eef34SDarrick J. Wong 		  "lock %d flags %s bufops %pS caller %pS",
446c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
447c59d87c4SChristoph Hellwig 		  (unsigned long long)__entry->bno,
4484e94b71bSDave Chinner 		  __entry->nblks,
449c59d87c4SChristoph Hellwig 		  __entry->hold,
450c59d87c4SChristoph Hellwig 		  __entry->pincount,
451c59d87c4SChristoph Hellwig 		  __entry->lockval,
452c59d87c4SChristoph Hellwig 		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),
453c46eef34SDarrick J. Wong 		  __entry->buf_ops,
454c59d87c4SChristoph Hellwig 		  (void *)__entry->caller_ip)
455c59d87c4SChristoph Hellwig )
456c59d87c4SChristoph Hellwig 
457c59d87c4SChristoph Hellwig #define DEFINE_BUF_EVENT(name) \
458c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_buf_class, name, \
459c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \
460c59d87c4SChristoph Hellwig 	TP_ARGS(bp, caller_ip))
461c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_init);
462c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_free);
463c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_hold);
464c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_rele);
465c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_iodone);
466595bff75SDave Chinner DEFINE_BUF_EVENT(xfs_buf_submit);
467c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_lock);
468c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_lock_done);
469479c6412SDarrick J. Wong DEFINE_BUF_EVENT(xfs_buf_trylock_fail);
470c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_trylock);
471c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_unlock);
472c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_iowait);
473c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_iowait_done);
474c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_delwri_queue);
47543ff2122SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_delwri_queued);
476c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_delwri_split);
4777912e7feSBrian Foster DEFINE_BUF_EVENT(xfs_buf_delwri_pushbuf);
478c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_get_uncached);
479c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_item_relse);
480664ffb8aSChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_iodone_async);
481c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_buf_error_relse);
48210fb9ac1SBrian Foster DEFINE_BUF_EVENT(xfs_buf_drain_buftarg);
483c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_trans_read_buf_shut);
484c59d87c4SChristoph Hellwig 
485c59d87c4SChristoph Hellwig /* not really buffer traces, but the buf provides useful information */
486c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_btree_corrupt);
487c59d87c4SChristoph Hellwig DEFINE_BUF_EVENT(xfs_reset_dqcounts);
488c59d87c4SChristoph Hellwig 
489c59d87c4SChristoph Hellwig /* pass flags explicitly */
490c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_buf_flags_class,
491c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip),
492c59d87c4SChristoph Hellwig 	TP_ARGS(bp, flags, caller_ip),
493c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
494c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
495c59d87c4SChristoph Hellwig 		__field(xfs_daddr_t, bno)
4967eac3029SDarrick J. Wong 		__field(unsigned int, length)
497c59d87c4SChristoph Hellwig 		__field(int, hold)
498c59d87c4SChristoph Hellwig 		__field(int, pincount)
499c59d87c4SChristoph Hellwig 		__field(unsigned, lockval)
500c59d87c4SChristoph Hellwig 		__field(unsigned, flags)
501c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
502c59d87c4SChristoph Hellwig 	),
503c59d87c4SChristoph Hellwig 	TP_fast_assign(
504c59d87c4SChristoph Hellwig 		__entry->dev = bp->b_target->bt_dev;
5059343ee76SDave Chinner 		__entry->bno = xfs_buf_daddr(bp);
5067eac3029SDarrick J. Wong 		__entry->length = bp->b_length;
507c59d87c4SChristoph Hellwig 		__entry->flags = flags;
508c59d87c4SChristoph Hellwig 		__entry->hold = atomic_read(&bp->b_hold);
509c59d87c4SChristoph Hellwig 		__entry->pincount = atomic_read(&bp->b_pin_count);
510c59d87c4SChristoph Hellwig 		__entry->lockval = bp->b_sema.count;
511c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
512c59d87c4SChristoph Hellwig 	),
5137eac3029SDarrick J. Wong 	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "
514aff68a55SDarrick J. Wong 		  "lock %d flags %s caller %pS",
515c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
516c59d87c4SChristoph Hellwig 		  (unsigned long long)__entry->bno,
5177eac3029SDarrick J. Wong 		  __entry->length,
518c59d87c4SChristoph Hellwig 		  __entry->hold,
519c59d87c4SChristoph Hellwig 		  __entry->pincount,
520c59d87c4SChristoph Hellwig 		  __entry->lockval,
521c59d87c4SChristoph Hellwig 		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),
522c59d87c4SChristoph Hellwig 		  (void *)__entry->caller_ip)
523c59d87c4SChristoph Hellwig )
524c59d87c4SChristoph Hellwig 
525c59d87c4SChristoph Hellwig #define DEFINE_BUF_FLAGS_EVENT(name) \
526c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_buf_flags_class, name, \
527c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \
528c59d87c4SChristoph Hellwig 	TP_ARGS(bp, flags, caller_ip))
529c59d87c4SChristoph Hellwig DEFINE_BUF_FLAGS_EVENT(xfs_buf_find);
530c59d87c4SChristoph Hellwig DEFINE_BUF_FLAGS_EVENT(xfs_buf_get);
531c59d87c4SChristoph Hellwig DEFINE_BUF_FLAGS_EVENT(xfs_buf_read);
532c59d87c4SChristoph Hellwig 
533c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_buf_ioerror,
53431ca03c9SDarrick J. Wong 	TP_PROTO(struct xfs_buf *bp, int error, xfs_failaddr_t caller_ip),
535c59d87c4SChristoph Hellwig 	TP_ARGS(bp, error, caller_ip),
536c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
537c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
538c59d87c4SChristoph Hellwig 		__field(xfs_daddr_t, bno)
5397eac3029SDarrick J. Wong 		__field(unsigned int, length)
540c59d87c4SChristoph Hellwig 		__field(unsigned, flags)
541c59d87c4SChristoph Hellwig 		__field(int, hold)
542c59d87c4SChristoph Hellwig 		__field(int, pincount)
543c59d87c4SChristoph Hellwig 		__field(unsigned, lockval)
544c59d87c4SChristoph Hellwig 		__field(int, error)
54531ca03c9SDarrick J. Wong 		__field(xfs_failaddr_t, caller_ip)
546c59d87c4SChristoph Hellwig 	),
547c59d87c4SChristoph Hellwig 	TP_fast_assign(
548c59d87c4SChristoph Hellwig 		__entry->dev = bp->b_target->bt_dev;
5499343ee76SDave Chinner 		__entry->bno = xfs_buf_daddr(bp);
5507eac3029SDarrick J. Wong 		__entry->length = bp->b_length;
551c59d87c4SChristoph Hellwig 		__entry->hold = atomic_read(&bp->b_hold);
552c59d87c4SChristoph Hellwig 		__entry->pincount = atomic_read(&bp->b_pin_count);
553c59d87c4SChristoph Hellwig 		__entry->lockval = bp->b_sema.count;
554c59d87c4SChristoph Hellwig 		__entry->error = error;
555c59d87c4SChristoph Hellwig 		__entry->flags = bp->b_flags;
556c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
557c59d87c4SChristoph Hellwig 	),
5587eac3029SDarrick J. Wong 	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "
55931ca03c9SDarrick J. Wong 		  "lock %d error %d flags %s caller %pS",
560c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
561c59d87c4SChristoph Hellwig 		  (unsigned long long)__entry->bno,
5627eac3029SDarrick J. Wong 		  __entry->length,
563c59d87c4SChristoph Hellwig 		  __entry->hold,
564c59d87c4SChristoph Hellwig 		  __entry->pincount,
565c59d87c4SChristoph Hellwig 		  __entry->lockval,
566c59d87c4SChristoph Hellwig 		  __entry->error,
567c59d87c4SChristoph Hellwig 		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),
568c59d87c4SChristoph Hellwig 		  (void *)__entry->caller_ip)
569c59d87c4SChristoph Hellwig );
570c59d87c4SChristoph Hellwig 
571c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_buf_item_class,
572c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_buf_log_item *bip),
573c59d87c4SChristoph Hellwig 	TP_ARGS(bip),
574c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
575c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
576c59d87c4SChristoph Hellwig 		__field(xfs_daddr_t, buf_bno)
5777eac3029SDarrick J. Wong 		__field(unsigned int, buf_len)
578c59d87c4SChristoph Hellwig 		__field(int, buf_hold)
579c59d87c4SChristoph Hellwig 		__field(int, buf_pincount)
580c59d87c4SChristoph Hellwig 		__field(int, buf_lockval)
581c59d87c4SChristoph Hellwig 		__field(unsigned, buf_flags)
582c59d87c4SChristoph Hellwig 		__field(unsigned, bli_recur)
583c59d87c4SChristoph Hellwig 		__field(int, bli_refcount)
584c59d87c4SChristoph Hellwig 		__field(unsigned, bli_flags)
58522525c17SDave Chinner 		__field(unsigned long, li_flags)
586c59d87c4SChristoph Hellwig 	),
587c59d87c4SChristoph Hellwig 	TP_fast_assign(
588c59d87c4SChristoph Hellwig 		__entry->dev = bip->bli_buf->b_target->bt_dev;
589c59d87c4SChristoph Hellwig 		__entry->bli_flags = bip->bli_flags;
590c59d87c4SChristoph Hellwig 		__entry->bli_recur = bip->bli_recur;
591c59d87c4SChristoph Hellwig 		__entry->bli_refcount = atomic_read(&bip->bli_refcount);
5929343ee76SDave Chinner 		__entry->buf_bno = xfs_buf_daddr(bip->bli_buf);
5937eac3029SDarrick J. Wong 		__entry->buf_len = bip->bli_buf->b_length;
594c59d87c4SChristoph Hellwig 		__entry->buf_flags = bip->bli_buf->b_flags;
595c59d87c4SChristoph Hellwig 		__entry->buf_hold = atomic_read(&bip->bli_buf->b_hold);
596c59d87c4SChristoph Hellwig 		__entry->buf_pincount = atomic_read(&bip->bli_buf->b_pin_count);
597c59d87c4SChristoph Hellwig 		__entry->buf_lockval = bip->bli_buf->b_sema.count;
598c59d87c4SChristoph Hellwig 		__entry->li_flags = bip->bli_item.li_flags;
599c59d87c4SChristoph Hellwig 	),
6007eac3029SDarrick J. Wong 	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "
601c59d87c4SChristoph Hellwig 		  "lock %d flags %s recur %d refcount %d bliflags %s "
602e6631f85SDave Chinner 		  "liflags %s",
603c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
604c59d87c4SChristoph Hellwig 		  (unsigned long long)__entry->buf_bno,
605c59d87c4SChristoph Hellwig 		  __entry->buf_len,
606c59d87c4SChristoph Hellwig 		  __entry->buf_hold,
607c59d87c4SChristoph Hellwig 		  __entry->buf_pincount,
608c59d87c4SChristoph Hellwig 		  __entry->buf_lockval,
609c59d87c4SChristoph Hellwig 		  __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS),
610c59d87c4SChristoph Hellwig 		  __entry->bli_recur,
611c59d87c4SChristoph Hellwig 		  __entry->bli_refcount,
612c59d87c4SChristoph Hellwig 		  __print_flags(__entry->bli_flags, "|", XFS_BLI_FLAGS),
613c59d87c4SChristoph Hellwig 		  __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS))
614c59d87c4SChristoph Hellwig )
615c59d87c4SChristoph Hellwig 
616c59d87c4SChristoph Hellwig #define DEFINE_BUF_ITEM_EVENT(name) \
617c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_buf_item_class, name, \
618c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_buf_log_item *bip), \
619c59d87c4SChristoph Hellwig 	TP_ARGS(bip))
620c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size);
6215f6bed76SDave Chinner DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered);
622c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale);
623c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format);
624c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale);
6255f6bed76SDave Chinner DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered);
626c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin);
627c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin);
628c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale);
629ddf92053SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release);
630c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed);
631c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push);
632c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf);
633c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur);
634c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb);
635c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur);
636c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf);
637c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur);
638c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf);
639c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse);
640c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin);
641c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold);
642c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release);
643c59d87c4SChristoph Hellwig DEFINE_BUF_ITEM_EVENT(xfs_trans_binval);
644c59d87c4SChristoph Hellwig 
645b94acd47SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_filestream_class,
646571e2592SDave Chinner 	TP_PROTO(struct xfs_perag *pag, xfs_ino_t ino),
647571e2592SDave Chinner 	TP_ARGS(pag, ino),
648b94acd47SChristoph Hellwig 	TP_STRUCT__entry(
649b94acd47SChristoph Hellwig 		__field(dev_t, dev)
650b94acd47SChristoph Hellwig 		__field(xfs_ino_t, ino)
651b94acd47SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
652b94acd47SChristoph Hellwig 		__field(int, streams)
653b94acd47SChristoph Hellwig 	),
654b94acd47SChristoph Hellwig 	TP_fast_assign(
655571e2592SDave Chinner 		__entry->dev = pag->pag_mount->m_super->s_dev;
6567fcd3efaSChristoph Hellwig 		__entry->ino = ino;
657571e2592SDave Chinner 		__entry->agno = pag->pag_agno;
658571e2592SDave Chinner 		__entry->streams = atomic_read(&pag->pagf_fstrms);
659b94acd47SChristoph Hellwig 	),
6609febf39dSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx agno 0x%x streams %d",
661b94acd47SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
662b94acd47SChristoph Hellwig 		  __entry->ino,
663b94acd47SChristoph Hellwig 		  __entry->agno,
664b94acd47SChristoph Hellwig 		  __entry->streams)
665b94acd47SChristoph Hellwig )
666b94acd47SChristoph Hellwig #define DEFINE_FILESTREAM_EVENT(name) \
667b94acd47SChristoph Hellwig DEFINE_EVENT(xfs_filestream_class, name, \
668571e2592SDave Chinner 	TP_PROTO(struct xfs_perag *pag, xfs_ino_t ino), \
669571e2592SDave Chinner 	TP_ARGS(pag, ino))
670b94acd47SChristoph Hellwig DEFINE_FILESTREAM_EVENT(xfs_filestream_free);
671b94acd47SChristoph Hellwig DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup);
672b94acd47SChristoph Hellwig DEFINE_FILESTREAM_EVENT(xfs_filestream_scan);
673b94acd47SChristoph Hellwig 
674b94acd47SChristoph Hellwig TRACE_EVENT(xfs_filestream_pick,
675*77ddc732SChristoph Hellwig 	TP_PROTO(struct xfs_perag *pag, xfs_ino_t ino),
676*77ddc732SChristoph Hellwig 	TP_ARGS(pag, ino),
677b94acd47SChristoph Hellwig 	TP_STRUCT__entry(
678b94acd47SChristoph Hellwig 		__field(dev_t, dev)
679b94acd47SChristoph Hellwig 		__field(xfs_ino_t, ino)
680b94acd47SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
681b94acd47SChristoph Hellwig 		__field(int, streams)
682b94acd47SChristoph Hellwig 		__field(xfs_extlen_t, free)
683b94acd47SChristoph Hellwig 	),
684b94acd47SChristoph Hellwig 	TP_fast_assign(
685bd4f5d09SDave Chinner 		__entry->dev = pag->pag_mount->m_super->s_dev;
686bd4f5d09SDave Chinner 		__entry->ino = ino;
687571e2592SDave Chinner 		__entry->agno = pag->pag_agno;
688571e2592SDave Chinner 		__entry->streams = atomic_read(&pag->pagf_fstrms);
689*77ddc732SChristoph Hellwig 		__entry->free = pag->pagf_freeblks;
690b94acd47SChristoph Hellwig 	),
691571e2592SDave Chinner 	TP_printk("dev %d:%d ino 0x%llx agno 0x%x streams %d free %d",
692b94acd47SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
693b94acd47SChristoph Hellwig 		  __entry->ino,
694b94acd47SChristoph Hellwig 		  __entry->agno,
695b94acd47SChristoph Hellwig 		  __entry->streams,
696571e2592SDave Chinner 		  __entry->free)
697b94acd47SChristoph Hellwig );
698b94acd47SChristoph Hellwig 
699c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_lock_class,
700c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, unsigned lock_flags,
701c59d87c4SChristoph Hellwig 		 unsigned long caller_ip),
702c59d87c4SChristoph Hellwig 	TP_ARGS(ip,  lock_flags, caller_ip),
703c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
704c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
705c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
706c59d87c4SChristoph Hellwig 		__field(int, lock_flags)
707c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
708c59d87c4SChristoph Hellwig 	),
709c59d87c4SChristoph Hellwig 	TP_fast_assign(
710c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
711c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
712c59d87c4SChristoph Hellwig 		__entry->lock_flags = lock_flags;
713c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
714c59d87c4SChristoph Hellwig 	),
715aff68a55SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS",
716c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
717c59d87c4SChristoph Hellwig 		  __entry->ino,
718c59d87c4SChristoph Hellwig 		  __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS),
719c59d87c4SChristoph Hellwig 		  (void *)__entry->caller_ip)
720c59d87c4SChristoph Hellwig )
721c59d87c4SChristoph Hellwig 
722c59d87c4SChristoph Hellwig #define DEFINE_LOCK_EVENT(name) \
723c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_lock_class, name, \
724c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \
725c59d87c4SChristoph Hellwig 		 unsigned long caller_ip), \
726c59d87c4SChristoph Hellwig 	TP_ARGS(ip,  lock_flags, caller_ip))
727c59d87c4SChristoph Hellwig DEFINE_LOCK_EVENT(xfs_ilock);
728c59d87c4SChristoph Hellwig DEFINE_LOCK_EVENT(xfs_ilock_nowait);
729c59d87c4SChristoph Hellwig DEFINE_LOCK_EVENT(xfs_ilock_demote);
730c59d87c4SChristoph Hellwig DEFINE_LOCK_EVENT(xfs_iunlock);
731c59d87c4SChristoph Hellwig 
732c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_inode_class,
733c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip),
734c59d87c4SChristoph Hellwig 	TP_ARGS(ip),
735c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
736c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
737c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
738ab23a776SDave Chinner 		__field(unsigned long, iflags)
739c59d87c4SChristoph Hellwig 	),
740c59d87c4SChristoph Hellwig 	TP_fast_assign(
741c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
742c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
743ab23a776SDave Chinner 		__entry->iflags = ip->i_flags;
744c59d87c4SChristoph Hellwig 	),
745ab23a776SDave Chinner 	TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx",
746c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
747ab23a776SDave Chinner 		  __entry->ino,
748ab23a776SDave Chinner 		  __entry->iflags)
749c59d87c4SChristoph Hellwig )
750c59d87c4SChristoph Hellwig 
751c59d87c4SChristoph Hellwig #define DEFINE_INODE_EVENT(name) \
752c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_inode_class, name, \
753c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip), \
754c59d87c4SChristoph Hellwig 	TP_ARGS(ip))
755c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_iget_skip);
756ff7bebebSDarrick J. Wong DEFINE_INODE_EVENT(xfs_iget_recycle);
757ff7bebebSDarrick J. Wong DEFINE_INODE_EVENT(xfs_iget_recycle_fail);
758c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_iget_hit);
759c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_iget_miss);
760c59d87c4SChristoph Hellwig 
761c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_getattr);
762c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_setattr);
763c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_readlink);
764725eb1ebSMark Tinguely DEFINE_INODE_EVENT(xfs_inactive_symlink);
765c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_alloc_file_space);
766c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_free_file_space);
767897b73b6SDave Chinner DEFINE_INODE_EVENT(xfs_zero_file_space);
768e1d8fb88SNamjae Jeon DEFINE_INODE_EVENT(xfs_collapse_file_space);
769a904b1caSNamjae Jeon DEFINE_INODE_EVENT(xfs_insert_file_space);
770c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_readdir);
771c59d87c4SChristoph Hellwig #ifdef CONFIG_XFS_POSIX_ACL
772c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_get_acl);
773c59d87c4SChristoph Hellwig #endif
774c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_vm_bmap);
775c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_file_ioctl);
776c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_file_compat_ioctl);
777c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_ioctl_setattr);
7781da2f2dbSChristoph Hellwig DEFINE_INODE_EVENT(xfs_dir_fsync);
779c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_file_fsync);
780c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_destroy_inode);
78169ff2826SChristoph Hellwig DEFINE_INODE_EVENT(xfs_update_time);
782c59d87c4SChristoph Hellwig 
783c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_dquot_dqalloc);
784c59d87c4SChristoph Hellwig DEFINE_INODE_EVENT(xfs_dquot_dqdetach);
785c59d87c4SChristoph Hellwig 
78627b52867SBrian Foster DEFINE_INODE_EVENT(xfs_inode_set_eofblocks_tag);
78727b52867SBrian Foster DEFINE_INODE_EVENT(xfs_inode_clear_eofblocks_tag);
78841176a68SBrian Foster DEFINE_INODE_EVENT(xfs_inode_free_eofblocks_invalid);
78983104d44SDarrick J. Wong DEFINE_INODE_EVENT(xfs_inode_set_cowblocks_tag);
79083104d44SDarrick J. Wong DEFINE_INODE_EVENT(xfs_inode_clear_cowblocks_tag);
79183104d44SDarrick J. Wong DEFINE_INODE_EVENT(xfs_inode_free_cowblocks_invalid);
792ab23a776SDave Chinner DEFINE_INODE_EVENT(xfs_inode_set_reclaimable);
793ab23a776SDave Chinner DEFINE_INODE_EVENT(xfs_inode_reclaiming);
794ab23a776SDave Chinner DEFINE_INODE_EVENT(xfs_inode_set_need_inactive);
795ab23a776SDave Chinner DEFINE_INODE_EVENT(xfs_inode_inactivating);
79627b52867SBrian Foster 
79785f8dff0SDarrick J. Wong /*
79885f8dff0SDarrick J. Wong  * ftrace's __print_symbolic requires that all enum values be wrapped in the
79985f8dff0SDarrick J. Wong  * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
80085f8dff0SDarrick J. Wong  * ring buffer.  Somehow this was only worth mentioning in the ftrace sample
80185f8dff0SDarrick J. Wong  * code.
80285f8dff0SDarrick J. Wong  */
803571423a1SDarrick J. Wong TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);
804571423a1SDarrick J. Wong TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);
805571423a1SDarrick J. Wong 
806d522d569SChristoph Hellwig TRACE_EVENT(xfs_filemap_fault,
8071d024e7aSMatthew Wilcox (Oracle) 	TP_PROTO(struct xfs_inode *ip, unsigned int order, bool write_fault),
8081d024e7aSMatthew Wilcox (Oracle) 	TP_ARGS(ip, order, write_fault),
809d522d569SChristoph Hellwig 	TP_STRUCT__entry(
810d522d569SChristoph Hellwig 		__field(dev_t, dev)
811d522d569SChristoph Hellwig 		__field(xfs_ino_t, ino)
8121d024e7aSMatthew Wilcox (Oracle) 		__field(unsigned int, order)
813d522d569SChristoph Hellwig 		__field(bool, write_fault)
814d522d569SChristoph Hellwig 	),
815d522d569SChristoph Hellwig 	TP_fast_assign(
816d522d569SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
817d522d569SChristoph Hellwig 		__entry->ino = ip->i_ino;
8181d024e7aSMatthew Wilcox (Oracle) 		__entry->order = order;
819d522d569SChristoph Hellwig 		__entry->write_fault = write_fault;
820d522d569SChristoph Hellwig 	),
8211d024e7aSMatthew Wilcox (Oracle) 	TP_printk("dev %d:%d ino 0x%llx order %u write_fault %d",
822d522d569SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
823d522d569SChristoph Hellwig 		  __entry->ino,
8241d024e7aSMatthew Wilcox (Oracle) 		  __entry->order,
825d522d569SChristoph Hellwig 		  __entry->write_fault)
826d522d569SChristoph Hellwig )
827d522d569SChristoph Hellwig 
828c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_iref_class,
829c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip),
830c59d87c4SChristoph Hellwig 	TP_ARGS(ip, caller_ip),
831c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
832c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
833c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
834c59d87c4SChristoph Hellwig 		__field(int, count)
835c59d87c4SChristoph Hellwig 		__field(int, pincount)
836c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
837c59d87c4SChristoph Hellwig 	),
838c59d87c4SChristoph Hellwig 	TP_fast_assign(
839c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
840c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
841c59d87c4SChristoph Hellwig 		__entry->count = atomic_read(&VFS_I(ip)->i_count);
842c59d87c4SChristoph Hellwig 		__entry->pincount = atomic_read(&ip->i_pincount);
843c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
844c59d87c4SChristoph Hellwig 	),
845aff68a55SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pS",
846c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
847c59d87c4SChristoph Hellwig 		  __entry->ino,
848c59d87c4SChristoph Hellwig 		  __entry->count,
849c59d87c4SChristoph Hellwig 		  __entry->pincount,
850c59d87c4SChristoph Hellwig 		  (char *)__entry->caller_ip)
851c59d87c4SChristoph Hellwig )
852c59d87c4SChristoph Hellwig 
85319cb7e38SBrian Foster TRACE_EVENT(xfs_iomap_prealloc_size,
85419cb7e38SBrian Foster 	TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t blocks, int shift,
85519cb7e38SBrian Foster 		 unsigned int writeio_blocks),
85619cb7e38SBrian Foster 	TP_ARGS(ip, blocks, shift, writeio_blocks),
85719cb7e38SBrian Foster 	TP_STRUCT__entry(
85819cb7e38SBrian Foster 		__field(dev_t, dev)
85919cb7e38SBrian Foster 		__field(xfs_ino_t, ino)
86019cb7e38SBrian Foster 		__field(xfs_fsblock_t, blocks)
86119cb7e38SBrian Foster 		__field(int, shift)
86219cb7e38SBrian Foster 		__field(unsigned int, writeio_blocks)
86319cb7e38SBrian Foster 	),
86419cb7e38SBrian Foster 	TP_fast_assign(
86519cb7e38SBrian Foster 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
86619cb7e38SBrian Foster 		__entry->ino = ip->i_ino;
86719cb7e38SBrian Foster 		__entry->blocks = blocks;
86819cb7e38SBrian Foster 		__entry->shift = shift;
86919cb7e38SBrian Foster 		__entry->writeio_blocks = writeio_blocks;
87019cb7e38SBrian Foster 	),
87119cb7e38SBrian Foster 	TP_printk("dev %d:%d ino 0x%llx prealloc blocks %llu shift %d "
8725da8a07cSChristoph Hellwig 		  "m_allocsize_blocks %u",
87319cb7e38SBrian Foster 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino,
87419cb7e38SBrian Foster 		  __entry->blocks, __entry->shift, __entry->writeio_blocks)
87519cb7e38SBrian Foster )
87619cb7e38SBrian Foster 
87756d1115cSBrian Foster TRACE_EVENT(xfs_irec_merge_pre,
87856d1115cSBrian Foster 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,
87956d1115cSBrian Foster 		 uint16_t holemask, xfs_agino_t nagino, uint16_t nholemask),
88056d1115cSBrian Foster 	TP_ARGS(mp, agno, agino, holemask, nagino, nholemask),
88156d1115cSBrian Foster 	TP_STRUCT__entry(
88256d1115cSBrian Foster 		__field(dev_t, dev)
88356d1115cSBrian Foster 		__field(xfs_agnumber_t, agno)
88456d1115cSBrian Foster 		__field(xfs_agino_t, agino)
88556d1115cSBrian Foster 		__field(uint16_t, holemask)
88656d1115cSBrian Foster 		__field(xfs_agino_t, nagino)
88756d1115cSBrian Foster 		__field(uint16_t, nholemask)
88856d1115cSBrian Foster 	),
88956d1115cSBrian Foster 	TP_fast_assign(
89056d1115cSBrian Foster 		__entry->dev = mp->m_super->s_dev;
89156d1115cSBrian Foster 		__entry->agno = agno;
89256d1115cSBrian Foster 		__entry->agino = agino;
89356d1115cSBrian Foster 		__entry->holemask = holemask;
89456d1115cSBrian Foster 		__entry->nagino = nagino;
89556d1115cSBrian Foster 		__entry->nholemask = holemask;
89656d1115cSBrian Foster 	),
8979febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x new_agino 0x%x new_holemask 0x%x",
898af6265a0SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
899af6265a0SDarrick J. Wong 		  __entry->agno,
900af6265a0SDarrick J. Wong 		  __entry->agino,
901af6265a0SDarrick J. Wong 		  __entry->holemask,
902af6265a0SDarrick J. Wong 		  __entry->nagino,
90356d1115cSBrian Foster 		  __entry->nholemask)
90456d1115cSBrian Foster )
90556d1115cSBrian Foster 
90656d1115cSBrian Foster TRACE_EVENT(xfs_irec_merge_post,
90756d1115cSBrian Foster 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,
90856d1115cSBrian Foster 		 uint16_t holemask),
90956d1115cSBrian Foster 	TP_ARGS(mp, agno, agino, holemask),
91056d1115cSBrian Foster 	TP_STRUCT__entry(
91156d1115cSBrian Foster 		__field(dev_t, dev)
91256d1115cSBrian Foster 		__field(xfs_agnumber_t, agno)
91356d1115cSBrian Foster 		__field(xfs_agino_t, agino)
91456d1115cSBrian Foster 		__field(uint16_t, holemask)
91556d1115cSBrian Foster 	),
91656d1115cSBrian Foster 	TP_fast_assign(
91756d1115cSBrian Foster 		__entry->dev = mp->m_super->s_dev;
91856d1115cSBrian Foster 		__entry->agno = agno;
91956d1115cSBrian Foster 		__entry->agino = agino;
92056d1115cSBrian Foster 		__entry->holemask = holemask;
92156d1115cSBrian Foster 	),
9229febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x",
923af6265a0SDarrick J. Wong 		  MAJOR(__entry->dev),
924af6265a0SDarrick J. Wong 		  MINOR(__entry->dev),
925af6265a0SDarrick J. Wong 		  __entry->agno,
926af6265a0SDarrick J. Wong 		  __entry->agino,
92756d1115cSBrian Foster 		  __entry->holemask)
92856d1115cSBrian Foster )
92956d1115cSBrian Foster 
930c59d87c4SChristoph Hellwig #define DEFINE_IREF_EVENT(name) \
931c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_iref_class, name, \
932c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), \
933c59d87c4SChristoph Hellwig 	TP_ARGS(ip, caller_ip))
934c59d87c4SChristoph Hellwig DEFINE_IREF_EVENT(xfs_irele);
935c59d87c4SChristoph Hellwig DEFINE_IREF_EVENT(xfs_inode_pin);
936c59d87c4SChristoph Hellwig DEFINE_IREF_EVENT(xfs_inode_unpin);
937c59d87c4SChristoph Hellwig DEFINE_IREF_EVENT(xfs_inode_unpin_nowait);
938c59d87c4SChristoph Hellwig 
939c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_namespace_class,
940996b2329SDarrick J. Wong 	TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name),
941c59d87c4SChristoph Hellwig 	TP_ARGS(dp, name),
942c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
943c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
944c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, dp_ino)
945f6161375SChristoph Hellwig 		__field(int, namelen)
946c59d87c4SChristoph Hellwig 		__dynamic_array(char, name, name->len)
947c59d87c4SChristoph Hellwig 	),
948c59d87c4SChristoph Hellwig 	TP_fast_assign(
949c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(dp)->i_sb->s_dev;
950c59d87c4SChristoph Hellwig 		__entry->dp_ino = dp->i_ino;
951f6161375SChristoph Hellwig 		__entry->namelen = name->len;
952c59d87c4SChristoph Hellwig 		memcpy(__get_str(name), name->name, name->len);
953c59d87c4SChristoph Hellwig 	),
954f6161375SChristoph Hellwig 	TP_printk("dev %d:%d dp ino 0x%llx name %.*s",
955c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
956c59d87c4SChristoph Hellwig 		  __entry->dp_ino,
957f6161375SChristoph Hellwig 		  __entry->namelen,
958c59d87c4SChristoph Hellwig 		  __get_str(name))
959c59d87c4SChristoph Hellwig )
960c59d87c4SChristoph Hellwig 
961c59d87c4SChristoph Hellwig #define DEFINE_NAMESPACE_EVENT(name) \
962c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_namespace_class, name, \
963996b2329SDarrick J. Wong 	TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name), \
964c59d87c4SChristoph Hellwig 	TP_ARGS(dp, name))
965c59d87c4SChristoph Hellwig DEFINE_NAMESPACE_EVENT(xfs_remove);
966c59d87c4SChristoph Hellwig DEFINE_NAMESPACE_EVENT(xfs_link);
967c59d87c4SChristoph Hellwig DEFINE_NAMESPACE_EVENT(xfs_lookup);
968c59d87c4SChristoph Hellwig DEFINE_NAMESPACE_EVENT(xfs_create);
969c59d87c4SChristoph Hellwig DEFINE_NAMESPACE_EVENT(xfs_symlink);
970c59d87c4SChristoph Hellwig 
971c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_rename,
972c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *src_dp, struct xfs_inode *target_dp,
973c59d87c4SChristoph Hellwig 		 struct xfs_name *src_name, struct xfs_name *target_name),
974c59d87c4SChristoph Hellwig 	TP_ARGS(src_dp, target_dp, src_name, target_name),
975c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
976c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
977c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, src_dp_ino)
978c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, target_dp_ino)
979f6161375SChristoph Hellwig 		__field(int, src_namelen)
980f6161375SChristoph Hellwig 		__field(int, target_namelen)
981c59d87c4SChristoph Hellwig 		__dynamic_array(char, src_name, src_name->len)
982c59d87c4SChristoph Hellwig 		__dynamic_array(char, target_name, target_name->len)
983c59d87c4SChristoph Hellwig 	),
984c59d87c4SChristoph Hellwig 	TP_fast_assign(
985c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(src_dp)->i_sb->s_dev;
986c59d87c4SChristoph Hellwig 		__entry->src_dp_ino = src_dp->i_ino;
987c59d87c4SChristoph Hellwig 		__entry->target_dp_ino = target_dp->i_ino;
988f6161375SChristoph Hellwig 		__entry->src_namelen = src_name->len;
989f6161375SChristoph Hellwig 		__entry->target_namelen = target_name->len;
990c59d87c4SChristoph Hellwig 		memcpy(__get_str(src_name), src_name->name, src_name->len);
991f6161375SChristoph Hellwig 		memcpy(__get_str(target_name), target_name->name,
992f6161375SChristoph Hellwig 			target_name->len);
993c59d87c4SChristoph Hellwig 	),
994c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx"
995f6161375SChristoph Hellwig 		  " src name %.*s target name %.*s",
996c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
997c59d87c4SChristoph Hellwig 		  __entry->src_dp_ino,
998c59d87c4SChristoph Hellwig 		  __entry->target_dp_ino,
999f6161375SChristoph Hellwig 		  __entry->src_namelen,
1000c59d87c4SChristoph Hellwig 		  __get_str(src_name),
1001f6161375SChristoph Hellwig 		  __entry->target_namelen,
1002c59d87c4SChristoph Hellwig 		  __get_str(target_name))
1003c59d87c4SChristoph Hellwig )
1004c59d87c4SChristoph Hellwig 
1005c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_dquot_class,
1006c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_dquot *dqp),
1007c59d87c4SChristoph Hellwig 	TP_ARGS(dqp),
1008c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1009c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1010c59d87c4SChristoph Hellwig 		__field(u32, id)
10111a7ed271SDarrick J. Wong 		__field(xfs_dqtype_t, type)
1012c59d87c4SChristoph Hellwig 		__field(unsigned, flags)
1013c59d87c4SChristoph Hellwig 		__field(unsigned, nrefs)
1014c59d87c4SChristoph Hellwig 		__field(unsigned long long, res_bcount)
10152cb91babSDarrick J. Wong 		__field(unsigned long long, res_rtbcount)
10162cb91babSDarrick J. Wong 		__field(unsigned long long, res_icount)
10172cb91babSDarrick J. Wong 
1018c59d87c4SChristoph Hellwig 		__field(unsigned long long, bcount)
10192cb91babSDarrick J. Wong 		__field(unsigned long long, rtbcount)
1020c59d87c4SChristoph Hellwig 		__field(unsigned long long, icount)
10212cb91babSDarrick J. Wong 
1022c59d87c4SChristoph Hellwig 		__field(unsigned long long, blk_hardlimit)
1023c59d87c4SChristoph Hellwig 		__field(unsigned long long, blk_softlimit)
10242cb91babSDarrick J. Wong 		__field(unsigned long long, rtb_hardlimit)
10252cb91babSDarrick J. Wong 		__field(unsigned long long, rtb_softlimit)
1026c59d87c4SChristoph Hellwig 		__field(unsigned long long, ino_hardlimit)
1027c59d87c4SChristoph Hellwig 		__field(unsigned long long, ino_softlimit)
10282cb91babSDarrick J. Wong 	),
1029c59d87c4SChristoph Hellwig 	TP_fast_assign(
1030c59d87c4SChristoph Hellwig 		__entry->dev = dqp->q_mount->m_super->s_dev;
1031c51df733SDarrick J. Wong 		__entry->id = dqp->q_id;
10321a7ed271SDarrick J. Wong 		__entry->type = dqp->q_type;
10331a7ed271SDarrick J. Wong 		__entry->flags = dqp->q_flags;
1034c59d87c4SChristoph Hellwig 		__entry->nrefs = dqp->q_nrefs;
10352cb91babSDarrick J. Wong 
1036784e80f5SDarrick J. Wong 		__entry->res_bcount = dqp->q_blk.reserved;
10372cb91babSDarrick J. Wong 		__entry->res_rtbcount = dqp->q_rtb.reserved;
10382cb91babSDarrick J. Wong 		__entry->res_icount = dqp->q_ino.reserved;
10392cb91babSDarrick J. Wong 
1040be37d40cSDarrick J. Wong 		__entry->bcount = dqp->q_blk.count;
10412cb91babSDarrick J. Wong 		__entry->rtbcount = dqp->q_rtb.count;
1042be37d40cSDarrick J. Wong 		__entry->icount = dqp->q_ino.count;
10432cb91babSDarrick J. Wong 
1044d3537cf9SDarrick J. Wong 		__entry->blk_hardlimit = dqp->q_blk.hardlimit;
1045d3537cf9SDarrick J. Wong 		__entry->blk_softlimit = dqp->q_blk.softlimit;
10462cb91babSDarrick J. Wong 		__entry->rtb_hardlimit = dqp->q_rtb.hardlimit;
10472cb91babSDarrick J. Wong 		__entry->rtb_softlimit = dqp->q_rtb.softlimit;
1048d3537cf9SDarrick J. Wong 		__entry->ino_hardlimit = dqp->q_ino.hardlimit;
1049d3537cf9SDarrick J. Wong 		__entry->ino_softlimit = dqp->q_ino.softlimit;
1050c59d87c4SChristoph Hellwig 	),
10511a7ed271SDarrick J. Wong 	TP_printk("dev %d:%d id 0x%x type %s flags %s nrefs %u "
10522cb91babSDarrick J. Wong 		  "res_bc 0x%llx res_rtbc 0x%llx res_ic 0x%llx "
1053c59d87c4SChristoph Hellwig 		  "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx "
10542cb91babSDarrick J. Wong 		  "rtbcnt 0x%llx rtbhardlimit 0x%llx rtbsoftlimit 0x%llx "
1055c59d87c4SChristoph Hellwig 		  "icnt 0x%llx ihardlimit 0x%llx isoftlimit 0x%llx]",
1056c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1057c59d87c4SChristoph Hellwig 		  __entry->id,
10581a7ed271SDarrick J. Wong 		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
1059985a78fdSDarrick J. Wong 		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),
1060c59d87c4SChristoph Hellwig 		  __entry->nrefs,
1061c59d87c4SChristoph Hellwig 		  __entry->res_bcount,
10622cb91babSDarrick J. Wong 		  __entry->res_rtbcount,
10632cb91babSDarrick J. Wong 		  __entry->res_icount,
1064c59d87c4SChristoph Hellwig 		  __entry->bcount,
1065c59d87c4SChristoph Hellwig 		  __entry->blk_hardlimit,
1066c59d87c4SChristoph Hellwig 		  __entry->blk_softlimit,
10672cb91babSDarrick J. Wong 		  __entry->rtbcount,
10682cb91babSDarrick J. Wong 		  __entry->rtb_hardlimit,
10692cb91babSDarrick J. Wong 		  __entry->rtb_softlimit,
1070c59d87c4SChristoph Hellwig 		  __entry->icount,
1071c59d87c4SChristoph Hellwig 		  __entry->ino_hardlimit,
1072c59d87c4SChristoph Hellwig 		  __entry->ino_softlimit)
1073c59d87c4SChristoph Hellwig )
1074c59d87c4SChristoph Hellwig 
1075c59d87c4SChristoph Hellwig #define DEFINE_DQUOT_EVENT(name) \
1076c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_dquot_class, name, \
1077c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_dquot *dqp), \
1078c59d87c4SChristoph Hellwig 	TP_ARGS(dqp))
1079c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqadjust);
1080c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqreclaim_want);
1081c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty);
108292b2e5b3SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy);
108392b2e5b3SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqreclaim_done);
1084c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqattach_found);
1085c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqattach_get);
1086c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqalloc);
1087c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqtobp_read);
1088c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqread);
1089c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqread_fail);
1090c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqget_hit);
1091c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqget_miss);
10929f920f11SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqget_freeing);
10939f920f11SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqget_dup);
1094c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqput);
1095c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqput_free);
1096c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqrele);
1097c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqflush);
1098c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqflush_force);
1099c59d87c4SChristoph Hellwig DEFINE_DQUOT_EVENT(xfs_dqflush_done);
11002cb91babSDarrick J. Wong DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_before);
11012cb91babSDarrick J. Wong DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_after);
11022cb91babSDarrick J. Wong 
11032cb91babSDarrick J. Wong TRACE_EVENT(xfs_trans_mod_dquot,
11042cb91babSDarrick J. Wong 	TP_PROTO(struct xfs_trans *tp, struct xfs_dquot *dqp,
11052cb91babSDarrick J. Wong 		 unsigned int field, int64_t delta),
11062cb91babSDarrick J. Wong 	TP_ARGS(tp, dqp, field, delta),
11072cb91babSDarrick J. Wong 	TP_STRUCT__entry(
11082cb91babSDarrick J. Wong 		__field(dev_t, dev)
11091a7ed271SDarrick J. Wong 		__field(xfs_dqtype_t, type)
11102cb91babSDarrick J. Wong 		__field(unsigned int, flags)
11112cb91babSDarrick J. Wong 		__field(unsigned int, dqid)
11122cb91babSDarrick J. Wong 		__field(unsigned int, field)
11132cb91babSDarrick J. Wong 		__field(int64_t, delta)
11142cb91babSDarrick J. Wong 	),
11152cb91babSDarrick J. Wong 	TP_fast_assign(
11162cb91babSDarrick J. Wong 		__entry->dev = tp->t_mountp->m_super->s_dev;
11171a7ed271SDarrick J. Wong 		__entry->type = dqp->q_type;
11181a7ed271SDarrick J. Wong 		__entry->flags = dqp->q_flags;
11192cb91babSDarrick J. Wong 		__entry->dqid = dqp->q_id;
11202cb91babSDarrick J. Wong 		__entry->field = field;
11212cb91babSDarrick J. Wong 		__entry->delta = delta;
11222cb91babSDarrick J. Wong 	),
11231a7ed271SDarrick J. Wong 	TP_printk("dev %d:%d dquot id 0x%x type %s flags %s field %s delta %lld",
11242cb91babSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
11252cb91babSDarrick J. Wong 		  __entry->dqid,
11261a7ed271SDarrick J. Wong 		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
11272cb91babSDarrick J. Wong 		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),
11282cb91babSDarrick J. Wong 		  __print_flags(__entry->field, "|", XFS_QMOPT_FLAGS),
11292cb91babSDarrick J. Wong 		  __entry->delta)
11302cb91babSDarrick J. Wong );
11312cb91babSDarrick J. Wong 
11322cb91babSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_dqtrx_class,
11332cb91babSDarrick J. Wong 	TP_PROTO(struct xfs_dqtrx *qtrx),
11342cb91babSDarrick J. Wong 	TP_ARGS(qtrx),
11352cb91babSDarrick J. Wong 	TP_STRUCT__entry(
11362cb91babSDarrick J. Wong 		__field(dev_t, dev)
11371a7ed271SDarrick J. Wong 		__field(xfs_dqtype_t, type)
11382cb91babSDarrick J. Wong 		__field(unsigned int, flags)
11392cb91babSDarrick J. Wong 		__field(u32, dqid)
11402cb91babSDarrick J. Wong 
11412cb91babSDarrick J. Wong 		__field(uint64_t, blk_res)
11422cb91babSDarrick J. Wong 		__field(int64_t,  bcount_delta)
11432cb91babSDarrick J. Wong 		__field(int64_t,  delbcnt_delta)
11442cb91babSDarrick J. Wong 
11452cb91babSDarrick J. Wong 		__field(uint64_t, rtblk_res)
11462cb91babSDarrick J. Wong 		__field(uint64_t, rtblk_res_used)
11472cb91babSDarrick J. Wong 		__field(int64_t,  rtbcount_delta)
11482cb91babSDarrick J. Wong 		__field(int64_t,  delrtb_delta)
11492cb91babSDarrick J. Wong 
11502cb91babSDarrick J. Wong 		__field(uint64_t, ino_res)
11512cb91babSDarrick J. Wong 		__field(uint64_t, ino_res_used)
11522cb91babSDarrick J. Wong 		__field(int64_t,  icount_delta)
11532cb91babSDarrick J. Wong 	),
11542cb91babSDarrick J. Wong 	TP_fast_assign(
11552cb91babSDarrick J. Wong 		__entry->dev = qtrx->qt_dquot->q_mount->m_super->s_dev;
11561a7ed271SDarrick J. Wong 		__entry->type = qtrx->qt_dquot->q_type;
11571a7ed271SDarrick J. Wong 		__entry->flags = qtrx->qt_dquot->q_flags;
11582cb91babSDarrick J. Wong 		__entry->dqid = qtrx->qt_dquot->q_id;
11592cb91babSDarrick J. Wong 
11602cb91babSDarrick J. Wong 		__entry->blk_res = qtrx->qt_blk_res;
11612cb91babSDarrick J. Wong 		__entry->bcount_delta = qtrx->qt_bcount_delta;
11622cb91babSDarrick J. Wong 		__entry->delbcnt_delta = qtrx->qt_delbcnt_delta;
11632cb91babSDarrick J. Wong 
11642cb91babSDarrick J. Wong 		__entry->rtblk_res = qtrx->qt_rtblk_res;
11652cb91babSDarrick J. Wong 		__entry->rtblk_res_used = qtrx->qt_rtblk_res_used;
11662cb91babSDarrick J. Wong 		__entry->rtbcount_delta = qtrx->qt_rtbcount_delta;
11672cb91babSDarrick J. Wong 		__entry->delrtb_delta = qtrx->qt_delrtb_delta;
11682cb91babSDarrick J. Wong 
11692cb91babSDarrick J. Wong 		__entry->ino_res = qtrx->qt_ino_res;
11702cb91babSDarrick J. Wong 		__entry->ino_res_used = qtrx->qt_ino_res_used;
11712cb91babSDarrick J. Wong 		__entry->icount_delta = qtrx->qt_icount_delta;
11722cb91babSDarrick J. Wong 	),
11731a7ed271SDarrick J. Wong 	TP_printk("dev %d:%d dquot id 0x%x type %s flags %s "
11742cb91babSDarrick J. Wong 		  "blk_res %llu bcount_delta %lld delbcnt_delta %lld "
11752cb91babSDarrick J. Wong 		  "rtblk_res %llu rtblk_res_used %llu rtbcount_delta %lld delrtb_delta %lld "
11762cb91babSDarrick J. Wong 		  "ino_res %llu ino_res_used %llu icount_delta %lld",
11772cb91babSDarrick J. Wong 		MAJOR(__entry->dev), MINOR(__entry->dev),
11782cb91babSDarrick J. Wong 		__entry->dqid,
11791a7ed271SDarrick J. Wong 		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
11802cb91babSDarrick J. Wong 		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),
11812cb91babSDarrick J. Wong 
11822cb91babSDarrick J. Wong 		__entry->blk_res,
11832cb91babSDarrick J. Wong 		__entry->bcount_delta,
11842cb91babSDarrick J. Wong 		__entry->delbcnt_delta,
11852cb91babSDarrick J. Wong 
11862cb91babSDarrick J. Wong 		__entry->rtblk_res,
11872cb91babSDarrick J. Wong 		__entry->rtblk_res_used,
11882cb91babSDarrick J. Wong 		__entry->rtbcount_delta,
11892cb91babSDarrick J. Wong 		__entry->delrtb_delta,
11902cb91babSDarrick J. Wong 
11912cb91babSDarrick J. Wong 		__entry->ino_res,
11922cb91babSDarrick J. Wong 		__entry->ino_res_used,
11932cb91babSDarrick J. Wong 		__entry->icount_delta)
11942cb91babSDarrick J. Wong )
11952cb91babSDarrick J. Wong 
11962cb91babSDarrick J. Wong #define DEFINE_DQTRX_EVENT(name) \
11972cb91babSDarrick J. Wong DEFINE_EVENT(xfs_dqtrx_class, name, \
11982cb91babSDarrick J. Wong 	TP_PROTO(struct xfs_dqtrx *qtrx), \
11992cb91babSDarrick J. Wong 	TP_ARGS(qtrx))
12002cb91babSDarrick J. Wong DEFINE_DQTRX_EVENT(xfs_trans_apply_dquot_deltas);
12012cb91babSDarrick J. Wong DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_before);
12022cb91babSDarrick J. Wong DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_after);
1203c59d87c4SChristoph Hellwig 
1204c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_loggrant_class,
1205ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xlog_ticket *tic),
1206c59d87c4SChristoph Hellwig 	TP_ARGS(log, tic),
1207c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1208c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1209c59d87c4SChristoph Hellwig 		__field(char, ocnt)
1210c59d87c4SChristoph Hellwig 		__field(char, cnt)
1211c59d87c4SChristoph Hellwig 		__field(int, curr_res)
1212c59d87c4SChristoph Hellwig 		__field(int, unit_res)
1213c59d87c4SChristoph Hellwig 		__field(unsigned int, flags)
1214c59d87c4SChristoph Hellwig 		__field(int, reserveq)
1215c59d87c4SChristoph Hellwig 		__field(int, writeq)
1216c59d87c4SChristoph Hellwig 		__field(int, grant_reserve_cycle)
1217c59d87c4SChristoph Hellwig 		__field(int, grant_reserve_bytes)
1218c59d87c4SChristoph Hellwig 		__field(int, grant_write_cycle)
1219c59d87c4SChristoph Hellwig 		__field(int, grant_write_bytes)
1220c59d87c4SChristoph Hellwig 		__field(int, curr_cycle)
1221c59d87c4SChristoph Hellwig 		__field(int, curr_block)
1222c59d87c4SChristoph Hellwig 		__field(xfs_lsn_t, tail_lsn)
1223c59d87c4SChristoph Hellwig 	),
1224c59d87c4SChristoph Hellwig 	TP_fast_assign(
1225c59d87c4SChristoph Hellwig 		__entry->dev = log->l_mp->m_super->s_dev;
1226c59d87c4SChristoph Hellwig 		__entry->ocnt = tic->t_ocnt;
1227c59d87c4SChristoph Hellwig 		__entry->cnt = tic->t_cnt;
1228c59d87c4SChristoph Hellwig 		__entry->curr_res = tic->t_curr_res;
1229c59d87c4SChristoph Hellwig 		__entry->unit_res = tic->t_unit_res;
1230c59d87c4SChristoph Hellwig 		__entry->flags = tic->t_flags;
123128496968SChristoph Hellwig 		__entry->reserveq = list_empty(&log->l_reserve_head.waiters);
123228496968SChristoph Hellwig 		__entry->writeq = list_empty(&log->l_write_head.waiters);
123328496968SChristoph Hellwig 		xlog_crack_grant_head(&log->l_reserve_head.grant,
1234c59d87c4SChristoph Hellwig 				&__entry->grant_reserve_cycle,
1235c59d87c4SChristoph Hellwig 				&__entry->grant_reserve_bytes);
123628496968SChristoph Hellwig 		xlog_crack_grant_head(&log->l_write_head.grant,
1237c59d87c4SChristoph Hellwig 				&__entry->grant_write_cycle,
1238c59d87c4SChristoph Hellwig 				&__entry->grant_write_bytes);
1239c59d87c4SChristoph Hellwig 		__entry->curr_cycle = log->l_curr_cycle;
1240c59d87c4SChristoph Hellwig 		__entry->curr_block = log->l_curr_block;
1241c59d87c4SChristoph Hellwig 		__entry->tail_lsn = atomic64_read(&log->l_tail_lsn);
1242c59d87c4SChristoph Hellwig 	),
1243710b1e2cSChristoph Hellwig 	TP_printk("dev %d:%d t_ocnt %u t_cnt %u t_curr_res %u "
1244c59d87c4SChristoph Hellwig 		  "t_unit_res %u t_flags %s reserveq %s "
1245c59d87c4SChristoph Hellwig 		  "writeq %s grant_reserve_cycle %d "
1246c59d87c4SChristoph Hellwig 		  "grant_reserve_bytes %d grant_write_cycle %d "
1247c59d87c4SChristoph Hellwig 		  "grant_write_bytes %d curr_cycle %d curr_block %d "
1248c59d87c4SChristoph Hellwig 		  "tail_cycle %d tail_block %d",
1249c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1250c59d87c4SChristoph Hellwig 		  __entry->ocnt,
1251c59d87c4SChristoph Hellwig 		  __entry->cnt,
1252c59d87c4SChristoph Hellwig 		  __entry->curr_res,
1253c59d87c4SChristoph Hellwig 		  __entry->unit_res,
1254c59d87c4SChristoph Hellwig 		  __print_flags(__entry->flags, "|", XLOG_TIC_FLAGS),
1255c59d87c4SChristoph Hellwig 		  __entry->reserveq ? "empty" : "active",
1256c59d87c4SChristoph Hellwig 		  __entry->writeq ? "empty" : "active",
1257c59d87c4SChristoph Hellwig 		  __entry->grant_reserve_cycle,
1258c59d87c4SChristoph Hellwig 		  __entry->grant_reserve_bytes,
1259c59d87c4SChristoph Hellwig 		  __entry->grant_write_cycle,
1260c59d87c4SChristoph Hellwig 		  __entry->grant_write_bytes,
1261c59d87c4SChristoph Hellwig 		  __entry->curr_cycle,
1262c59d87c4SChristoph Hellwig 		  __entry->curr_block,
1263c59d87c4SChristoph Hellwig 		  CYCLE_LSN(__entry->tail_lsn),
1264c59d87c4SChristoph Hellwig 		  BLOCK_LSN(__entry->tail_lsn)
1265c59d87c4SChristoph Hellwig 	)
1266c59d87c4SChristoph Hellwig )
1267c59d87c4SChristoph Hellwig 
1268c59d87c4SChristoph Hellwig #define DEFINE_LOGGRANT_EVENT(name) \
1269c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_loggrant_class, name, \
1270ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \
1271c59d87c4SChristoph Hellwig 	TP_ARGS(log, tic))
1272c59d87c4SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_umount_write);
12739f9c19ecSChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep);
12749f9c19ecSChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake);
1275c59d87c4SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up);
12769006fb91SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_reserve);
12779006fb91SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit);
12789006fb91SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_regrant);
12799006fb91SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit);
12808b41e3f9SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant);
12818b41e3f9SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit);
12828b41e3f9SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub);
12838b41e3f9SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant);
12848b41e3f9SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub);
12858b41e3f9SChristoph Hellwig DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit);
12860e7ab7efSDave Chinner DEFINE_LOGGRANT_EVENT(xfs_log_cil_wait);
1287c59d87c4SChristoph Hellwig 
12889e4c109aSChristoph Hellwig DECLARE_EVENT_CLASS(xfs_log_item_class,
12899e4c109aSChristoph Hellwig 	TP_PROTO(struct xfs_log_item *lip),
12909e4c109aSChristoph Hellwig 	TP_ARGS(lip),
12919e4c109aSChristoph Hellwig 	TP_STRUCT__entry(
12929e4c109aSChristoph Hellwig 		__field(dev_t, dev)
12939e4c109aSChristoph Hellwig 		__field(void *, lip)
12949e4c109aSChristoph Hellwig 		__field(uint, type)
129522525c17SDave Chinner 		__field(unsigned long, flags)
12969e4c109aSChristoph Hellwig 		__field(xfs_lsn_t, lsn)
12979e4c109aSChristoph Hellwig 	),
12989e4c109aSChristoph Hellwig 	TP_fast_assign(
1299d86142ddSDave Chinner 		__entry->dev = lip->li_log->l_mp->m_super->s_dev;
13009e4c109aSChristoph Hellwig 		__entry->lip = lip;
13019e4c109aSChristoph Hellwig 		__entry->type = lip->li_type;
13029e4c109aSChristoph Hellwig 		__entry->flags = lip->li_flags;
13039e4c109aSChristoph Hellwig 		__entry->lsn = lip->li_lsn;
13049e4c109aSChristoph Hellwig 	),
13053d170aa2SDarrick J. Wong 	TP_printk("dev %d:%d lip %p lsn %d/%d type %s flags %s",
13069e4c109aSChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
13079e4c109aSChristoph Hellwig 		  __entry->lip,
13089e4c109aSChristoph Hellwig 		  CYCLE_LSN(__entry->lsn), BLOCK_LSN(__entry->lsn),
13099e4c109aSChristoph Hellwig 		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
13109e4c109aSChristoph Hellwig 		  __print_flags(__entry->flags, "|", XFS_LI_FLAGS))
13119e4c109aSChristoph Hellwig )
13129e4c109aSChristoph Hellwig 
131314c26c6aSDave Chinner TRACE_EVENT(xfs_log_force,
13149f27889fSCarlos Maiolino 	TP_PROTO(struct xfs_mount *mp, xfs_lsn_t lsn, unsigned long caller_ip),
13159f27889fSCarlos Maiolino 	TP_ARGS(mp, lsn, caller_ip),
131614c26c6aSDave Chinner 	TP_STRUCT__entry(
131714c26c6aSDave Chinner 		__field(dev_t, dev)
131814c26c6aSDave Chinner 		__field(xfs_lsn_t, lsn)
13199f27889fSCarlos Maiolino 		__field(unsigned long, caller_ip)
132014c26c6aSDave Chinner 	),
132114c26c6aSDave Chinner 	TP_fast_assign(
132214c26c6aSDave Chinner 		__entry->dev = mp->m_super->s_dev;
132314c26c6aSDave Chinner 		__entry->lsn = lsn;
13249f27889fSCarlos Maiolino 		__entry->caller_ip = caller_ip;
132514c26c6aSDave Chinner 	),
1326aff68a55SDarrick J. Wong 	TP_printk("dev %d:%d lsn 0x%llx caller %pS",
132714c26c6aSDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
13289f27889fSCarlos Maiolino 		  __entry->lsn, (void *)__entry->caller_ip)
132914c26c6aSDave Chinner )
133014c26c6aSDave Chinner 
13319e4c109aSChristoph Hellwig #define DEFINE_LOG_ITEM_EVENT(name) \
13329e4c109aSChristoph Hellwig DEFINE_EVENT(xfs_log_item_class, name, \
13339e4c109aSChristoph Hellwig 	TP_PROTO(struct xfs_log_item *lip), \
13349e4c109aSChristoph Hellwig 	TP_ARGS(lip))
13359e4c109aSChristoph Hellwig DEFINE_LOG_ITEM_EVENT(xfs_ail_push);
13369e4c109aSChristoph Hellwig DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned);
13379e4c109aSChristoph Hellwig DEFINE_LOG_ITEM_EVENT(xfs_ail_locked);
133843ff2122SChristoph Hellwig DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing);
13390d227466SDave Chinner DEFINE_LOG_ITEM_EVENT(xfs_cil_whiteout_mark);
13400d227466SDave Chinner DEFINE_LOG_ITEM_EVENT(xfs_cil_whiteout_skip);
13410d227466SDave Chinner DEFINE_LOG_ITEM_EVENT(xfs_cil_whiteout_unpin);
13429e4c109aSChristoph Hellwig 
1343750b9c90SDave Chinner DECLARE_EVENT_CLASS(xfs_ail_class,
1344750b9c90SDave Chinner 	TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn),
1345750b9c90SDave Chinner 	TP_ARGS(lip, old_lsn, new_lsn),
1346750b9c90SDave Chinner 	TP_STRUCT__entry(
1347750b9c90SDave Chinner 		__field(dev_t, dev)
1348750b9c90SDave Chinner 		__field(void *, lip)
1349750b9c90SDave Chinner 		__field(uint, type)
135022525c17SDave Chinner 		__field(unsigned long, flags)
1351750b9c90SDave Chinner 		__field(xfs_lsn_t, old_lsn)
1352750b9c90SDave Chinner 		__field(xfs_lsn_t, new_lsn)
1353750b9c90SDave Chinner 	),
1354750b9c90SDave Chinner 	TP_fast_assign(
1355d86142ddSDave Chinner 		__entry->dev = lip->li_log->l_mp->m_super->s_dev;
1356750b9c90SDave Chinner 		__entry->lip = lip;
1357750b9c90SDave Chinner 		__entry->type = lip->li_type;
1358750b9c90SDave Chinner 		__entry->flags = lip->li_flags;
1359750b9c90SDave Chinner 		__entry->old_lsn = old_lsn;
1360750b9c90SDave Chinner 		__entry->new_lsn = new_lsn;
1361750b9c90SDave Chinner 	),
13623d170aa2SDarrick J. Wong 	TP_printk("dev %d:%d lip %p old lsn %d/%d new lsn %d/%d type %s flags %s",
1363750b9c90SDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1364750b9c90SDave Chinner 		  __entry->lip,
1365750b9c90SDave Chinner 		  CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn),
1366750b9c90SDave Chinner 		  CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn),
1367750b9c90SDave Chinner 		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
1368750b9c90SDave Chinner 		  __print_flags(__entry->flags, "|", XFS_LI_FLAGS))
1369750b9c90SDave Chinner )
1370750b9c90SDave Chinner 
1371750b9c90SDave Chinner #define DEFINE_AIL_EVENT(name) \
1372750b9c90SDave Chinner DEFINE_EVENT(xfs_ail_class, name, \
1373750b9c90SDave Chinner 	TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), \
1374750b9c90SDave Chinner 	TP_ARGS(lip, old_lsn, new_lsn))
1375750b9c90SDave Chinner DEFINE_AIL_EVENT(xfs_ail_insert);
1376750b9c90SDave Chinner DEFINE_AIL_EVENT(xfs_ail_move);
1377750b9c90SDave Chinner DEFINE_AIL_EVENT(xfs_ail_delete);
1378750b9c90SDave Chinner 
1379750b9c90SDave Chinner TRACE_EVENT(xfs_log_assign_tail_lsn,
1380750b9c90SDave Chinner 	TP_PROTO(struct xlog *log, xfs_lsn_t new_lsn),
1381750b9c90SDave Chinner 	TP_ARGS(log, new_lsn),
1382750b9c90SDave Chinner 	TP_STRUCT__entry(
1383750b9c90SDave Chinner 		__field(dev_t, dev)
1384750b9c90SDave Chinner 		__field(xfs_lsn_t, new_lsn)
1385750b9c90SDave Chinner 		__field(xfs_lsn_t, old_lsn)
1386750b9c90SDave Chinner 		__field(xfs_lsn_t, last_sync_lsn)
1387750b9c90SDave Chinner 	),
1388750b9c90SDave Chinner 	TP_fast_assign(
1389750b9c90SDave Chinner 		__entry->dev = log->l_mp->m_super->s_dev;
1390750b9c90SDave Chinner 		__entry->new_lsn = new_lsn;
1391750b9c90SDave Chinner 		__entry->old_lsn = atomic64_read(&log->l_tail_lsn);
1392750b9c90SDave Chinner 		__entry->last_sync_lsn = atomic64_read(&log->l_last_sync_lsn);
1393750b9c90SDave Chinner 	),
1394750b9c90SDave Chinner 	TP_printk("dev %d:%d new tail lsn %d/%d, old lsn %d/%d, last sync %d/%d",
1395750b9c90SDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1396750b9c90SDave Chinner 		  CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn),
1397750b9c90SDave Chinner 		  CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn),
1398750b9c90SDave Chinner 		  CYCLE_LSN(__entry->last_sync_lsn), BLOCK_LSN(__entry->last_sync_lsn))
1399750b9c90SDave Chinner )
14009e4c109aSChristoph Hellwig 
1401c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_file_class,
14023e40b13cSChristoph Hellwig 	TP_PROTO(struct kiocb *iocb, struct iov_iter *iter),
14033e40b13cSChristoph Hellwig 	TP_ARGS(iocb, iter),
1404c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1405c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1406c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1407c59d87c4SChristoph Hellwig 		__field(xfs_fsize_t, size)
1408c59d87c4SChristoph Hellwig 		__field(loff_t, offset)
1409c59d87c4SChristoph Hellwig 		__field(size_t, count)
1410c59d87c4SChristoph Hellwig 	),
1411c59d87c4SChristoph Hellwig 	TP_fast_assign(
14123e40b13cSChristoph Hellwig 		__entry->dev = file_inode(iocb->ki_filp)->i_sb->s_dev;
14133e40b13cSChristoph Hellwig 		__entry->ino = XFS_I(file_inode(iocb->ki_filp))->i_ino;
141413d2c10bSChristoph Hellwig 		__entry->size = XFS_I(file_inode(iocb->ki_filp))->i_disk_size;
14153e40b13cSChristoph Hellwig 		__entry->offset = iocb->ki_pos;
14163e40b13cSChristoph Hellwig 		__entry->count = iov_iter_count(iter);
1417c59d87c4SChristoph Hellwig 	),
1418c23460ebSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx pos 0x%llx bytecount 0x%zx",
1419c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1420c59d87c4SChristoph Hellwig 		  __entry->ino,
1421c59d87c4SChristoph Hellwig 		  __entry->size,
1422c59d87c4SChristoph Hellwig 		  __entry->offset,
14233176c3e0SChristoph Hellwig 		  __entry->count)
1424c59d87c4SChristoph Hellwig )
1425c59d87c4SChristoph Hellwig 
1426c59d87c4SChristoph Hellwig #define DEFINE_RW_EVENT(name)		\
1427c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_file_class, name,	\
14283e40b13cSChristoph Hellwig 	TP_PROTO(struct kiocb *iocb, struct iov_iter *iter),		\
14293e40b13cSChristoph Hellwig 	TP_ARGS(iocb, iter))
14303176c3e0SChristoph Hellwig DEFINE_RW_EVENT(xfs_file_buffered_read);
14313176c3e0SChristoph Hellwig DEFINE_RW_EVENT(xfs_file_direct_read);
143216d4d435SChristoph Hellwig DEFINE_RW_EVENT(xfs_file_dax_read);
1433c59d87c4SChristoph Hellwig DEFINE_RW_EVENT(xfs_file_buffered_write);
1434c59d87c4SChristoph Hellwig DEFINE_RW_EVENT(xfs_file_direct_write);
143516d4d435SChristoph Hellwig DEFINE_RW_EVENT(xfs_file_dax_write);
1436896f72d0SChristoph Hellwig DEFINE_RW_EVENT(xfs_reflink_bounce_dio_write);
1437896f72d0SChristoph Hellwig 
1438c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_imap_class,
1439c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,
1440be225fecSChristoph Hellwig 		 int whichfork, struct xfs_bmbt_irec *irec),
1441be225fecSChristoph Hellwig 	TP_ARGS(ip, offset, count, whichfork, irec),
1442c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1443c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1444c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1445c59d87c4SChristoph Hellwig 		__field(loff_t, size)
1446c59d87c4SChristoph Hellwig 		__field(loff_t, offset)
1447c59d87c4SChristoph Hellwig 		__field(size_t, count)
1448be225fecSChristoph Hellwig 		__field(int, whichfork)
1449c59d87c4SChristoph Hellwig 		__field(xfs_fileoff_t, startoff)
1450c59d87c4SChristoph Hellwig 		__field(xfs_fsblock_t, startblock)
1451c59d87c4SChristoph Hellwig 		__field(xfs_filblks_t, blockcount)
1452c59d87c4SChristoph Hellwig 	),
1453c59d87c4SChristoph Hellwig 	TP_fast_assign(
1454c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1455c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
145613d2c10bSChristoph Hellwig 		__entry->size = ip->i_disk_size;
1457c59d87c4SChristoph Hellwig 		__entry->offset = offset;
1458c59d87c4SChristoph Hellwig 		__entry->count = count;
1459be225fecSChristoph Hellwig 		__entry->whichfork = whichfork;
1460c59d87c4SChristoph Hellwig 		__entry->startoff = irec ? irec->br_startoff : 0;
1461c59d87c4SChristoph Hellwig 		__entry->startblock = irec ? irec->br_startblock : 0;
1462c59d87c4SChristoph Hellwig 		__entry->blockcount = irec ? irec->br_blockcount : 0;
1463c59d87c4SChristoph Hellwig 	),
1464c23460ebSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx pos 0x%llx bytecount 0x%zx "
14657989acccSDarrick J. Wong 		  "fork %s startoff 0x%llx startblock 0x%llx fsbcount 0x%llx",
1466c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1467c59d87c4SChristoph Hellwig 		  __entry->ino,
1468c59d87c4SChristoph Hellwig 		  __entry->size,
1469c59d87c4SChristoph Hellwig 		  __entry->offset,
1470c59d87c4SChristoph Hellwig 		  __entry->count,
1471f93f85f7SDarrick J. Wong 		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
1472c59d87c4SChristoph Hellwig 		  __entry->startoff,
1473c8ce540dSDarrick J. Wong 		  (int64_t)__entry->startblock,
1474c59d87c4SChristoph Hellwig 		  __entry->blockcount)
1475c59d87c4SChristoph Hellwig )
1476c59d87c4SChristoph Hellwig 
1477be225fecSChristoph Hellwig #define DEFINE_IMAP_EVENT(name)	\
1478c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_imap_class, name,	\
1479c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,	\
1480be225fecSChristoph Hellwig 		 int whichfork, struct xfs_bmbt_irec *irec),		\
1481be225fecSChristoph Hellwig 	TP_ARGS(ip, offset, count, whichfork, irec))
1482be225fecSChristoph Hellwig DEFINE_IMAP_EVENT(xfs_map_blocks_found);
1483be225fecSChristoph Hellwig DEFINE_IMAP_EVENT(xfs_map_blocks_alloc);
1484be225fecSChristoph Hellwig DEFINE_IMAP_EVENT(xfs_iomap_alloc);
1485be225fecSChristoph Hellwig DEFINE_IMAP_EVENT(xfs_iomap_found);
1486c59d87c4SChristoph Hellwig 
1487c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_simple_io_class,
1488c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count),
1489c59d87c4SChristoph Hellwig 	TP_ARGS(ip, offset, count),
1490c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1491c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1492c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1493c59d87c4SChristoph Hellwig 		__field(loff_t, isize)
1494c59d87c4SChristoph Hellwig 		__field(loff_t, disize)
1495c59d87c4SChristoph Hellwig 		__field(loff_t, offset)
1496c59d87c4SChristoph Hellwig 		__field(size_t, count)
1497c59d87c4SChristoph Hellwig 	),
1498c59d87c4SChristoph Hellwig 	TP_fast_assign(
1499c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1500c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
1501ce7ae151SChristoph Hellwig 		__entry->isize = VFS_I(ip)->i_size;
150213d2c10bSChristoph Hellwig 		__entry->disize = ip->i_disk_size;
1503c59d87c4SChristoph Hellwig 		__entry->offset = offset;
1504c59d87c4SChristoph Hellwig 		__entry->count = count;
1505c59d87c4SChristoph Hellwig 	),
15062813d682SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx "
1507d538cf24SDarrick J. Wong 		  "pos 0x%llx bytecount 0x%zx",
1508c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1509c59d87c4SChristoph Hellwig 		  __entry->ino,
1510c59d87c4SChristoph Hellwig 		  __entry->isize,
1511c59d87c4SChristoph Hellwig 		  __entry->disize,
1512c59d87c4SChristoph Hellwig 		  __entry->offset,
1513c59d87c4SChristoph Hellwig 		  __entry->count)
1514c59d87c4SChristoph Hellwig );
1515c59d87c4SChristoph Hellwig 
1516c59d87c4SChristoph Hellwig #define DEFINE_SIMPLE_IO_EVENT(name)	\
1517c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_simple_io_class, name,	\
1518c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count),	\
1519c59d87c4SChristoph Hellwig 	TP_ARGS(ip, offset, count))
1520c59d87c4SChristoph Hellwig DEFINE_SIMPLE_IO_EVENT(xfs_delalloc_enospc);
1521c59d87c4SChristoph Hellwig DEFINE_SIMPLE_IO_EVENT(xfs_unwritten_convert);
1522c59d87c4SChristoph Hellwig DEFINE_SIMPLE_IO_EVENT(xfs_setfilesize);
15230a50f162SBrian Foster DEFINE_SIMPLE_IO_EVENT(xfs_zero_eof);
1524273dda76SChristoph Hellwig DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write);
1525273dda76SChristoph Hellwig DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_unwritten);
1526273dda76SChristoph Hellwig DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_append);
152754919f94SDavid Howells DEFINE_SIMPLE_IO_EVENT(xfs_file_splice_read);
1528c59d87c4SChristoph Hellwig 
1529c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_itrunc_class,
1530c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size),
1531c59d87c4SChristoph Hellwig 	TP_ARGS(ip, new_size),
1532c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1533c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1534c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1535c59d87c4SChristoph Hellwig 		__field(xfs_fsize_t, size)
1536c59d87c4SChristoph Hellwig 		__field(xfs_fsize_t, new_size)
1537c59d87c4SChristoph Hellwig 	),
1538c59d87c4SChristoph Hellwig 	TP_fast_assign(
1539c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1540c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
154113d2c10bSChristoph Hellwig 		__entry->size = ip->i_disk_size;
1542c59d87c4SChristoph Hellwig 		__entry->new_size = new_size;
1543c59d87c4SChristoph Hellwig 	),
1544c23460ebSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx new_size 0x%llx",
1545c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1546c59d87c4SChristoph Hellwig 		  __entry->ino,
1547c59d87c4SChristoph Hellwig 		  __entry->size,
1548c59d87c4SChristoph Hellwig 		  __entry->new_size)
1549c59d87c4SChristoph Hellwig )
1550c59d87c4SChristoph Hellwig 
1551c59d87c4SChristoph Hellwig #define DEFINE_ITRUNC_EVENT(name) \
1552c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_itrunc_class, name, \
1553c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \
1554c59d87c4SChristoph Hellwig 	TP_ARGS(ip, new_size))
1555673e8e59SChristoph Hellwig DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start);
1556673e8e59SChristoph Hellwig DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end);
1557c59d87c4SChristoph Hellwig 
1558c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_pagecache_inval,
1559c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish),
1560c59d87c4SChristoph Hellwig 	TP_ARGS(ip, start, finish),
1561c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1562c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1563c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1564c59d87c4SChristoph Hellwig 		__field(xfs_fsize_t, size)
1565c59d87c4SChristoph Hellwig 		__field(xfs_off_t, start)
1566c59d87c4SChristoph Hellwig 		__field(xfs_off_t, finish)
1567c59d87c4SChristoph Hellwig 	),
1568c59d87c4SChristoph Hellwig 	TP_fast_assign(
1569c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1570c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
157113d2c10bSChristoph Hellwig 		__entry->size = ip->i_disk_size;
1572c59d87c4SChristoph Hellwig 		__entry->start = start;
1573c59d87c4SChristoph Hellwig 		__entry->finish = finish;
1574c59d87c4SChristoph Hellwig 	),
1575c23460ebSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx start 0x%llx finish 0x%llx",
1576c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1577c59d87c4SChristoph Hellwig 		  __entry->ino,
1578c59d87c4SChristoph Hellwig 		  __entry->size,
1579c59d87c4SChristoph Hellwig 		  __entry->start,
1580c59d87c4SChristoph Hellwig 		  __entry->finish)
1581c59d87c4SChristoph Hellwig );
1582c59d87c4SChristoph Hellwig 
1583c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_bunmap,
15846f25b211SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t fileoff, xfs_filblks_t len,
1585c59d87c4SChristoph Hellwig 		 int flags, unsigned long caller_ip),
15866f25b211SDarrick J. Wong 	TP_ARGS(ip, fileoff, len, flags, caller_ip),
1587c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1588c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1589c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1590c59d87c4SChristoph Hellwig 		__field(xfs_fsize_t, size)
15916f25b211SDarrick J. Wong 		__field(xfs_fileoff_t, fileoff)
1592c59d87c4SChristoph Hellwig 		__field(xfs_filblks_t, len)
1593c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
1594c59d87c4SChristoph Hellwig 		__field(int, flags)
1595c59d87c4SChristoph Hellwig 	),
1596c59d87c4SChristoph Hellwig 	TP_fast_assign(
1597c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1598c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
159913d2c10bSChristoph Hellwig 		__entry->size = ip->i_disk_size;
16006f25b211SDarrick J. Wong 		__entry->fileoff = fileoff;
1601c59d87c4SChristoph Hellwig 		__entry->len = len;
1602c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
1603c59d87c4SChristoph Hellwig 		__entry->flags = flags;
1604c59d87c4SChristoph Hellwig 	),
1605c23460ebSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx fileoff 0x%llx fsbcount 0x%llx "
1606aff68a55SDarrick J. Wong 		  "flags %s caller %pS",
1607c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1608c59d87c4SChristoph Hellwig 		  __entry->ino,
1609c59d87c4SChristoph Hellwig 		  __entry->size,
16106f25b211SDarrick J. Wong 		  __entry->fileoff,
1611c59d87c4SChristoph Hellwig 		  __entry->len,
1612c59d87c4SChristoph Hellwig 		  __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS),
1613c59d87c4SChristoph Hellwig 		  (void *)__entry->caller_ip)
1614c59d87c4SChristoph Hellwig 
1615c59d87c4SChristoph Hellwig );
1616c59d87c4SChristoph Hellwig 
16174ecbfe63SDave Chinner DECLARE_EVENT_CLASS(xfs_extent_busy_class,
1618c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1619c59d87c4SChristoph Hellwig 		 xfs_agblock_t agbno, xfs_extlen_t len),
1620c59d87c4SChristoph Hellwig 	TP_ARGS(mp, agno, agbno, len),
1621c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1622c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1623c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
1624c59d87c4SChristoph Hellwig 		__field(xfs_agblock_t, agbno)
1625c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, len)
1626c59d87c4SChristoph Hellwig 	),
1627c59d87c4SChristoph Hellwig 	TP_fast_assign(
1628c59d87c4SChristoph Hellwig 		__entry->dev = mp->m_super->s_dev;
1629c59d87c4SChristoph Hellwig 		__entry->agno = agno;
1630c59d87c4SChristoph Hellwig 		__entry->agbno = agbno;
1631c59d87c4SChristoph Hellwig 		__entry->len = len;
1632c59d87c4SChristoph Hellwig 	),
16337989acccSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
1634c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1635c59d87c4SChristoph Hellwig 		  __entry->agno,
1636c59d87c4SChristoph Hellwig 		  __entry->agbno,
1637c59d87c4SChristoph Hellwig 		  __entry->len)
1638c59d87c4SChristoph Hellwig );
1639c59d87c4SChristoph Hellwig #define DEFINE_BUSY_EVENT(name) \
16404ecbfe63SDave Chinner DEFINE_EVENT(xfs_extent_busy_class, name, \
1641c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
1642c59d87c4SChristoph Hellwig 		 xfs_agblock_t agbno, xfs_extlen_t len), \
1643c59d87c4SChristoph Hellwig 	TP_ARGS(mp, agno, agbno, len))
16444ecbfe63SDave Chinner DEFINE_BUSY_EVENT(xfs_extent_busy);
16454ecbfe63SDave Chinner DEFINE_BUSY_EVENT(xfs_extent_busy_enomem);
16464ecbfe63SDave Chinner DEFINE_BUSY_EVENT(xfs_extent_busy_force);
16474ecbfe63SDave Chinner DEFINE_BUSY_EVENT(xfs_extent_busy_reuse);
16484ecbfe63SDave Chinner DEFINE_BUSY_EVENT(xfs_extent_busy_clear);
1649c59d87c4SChristoph Hellwig 
16504ecbfe63SDave Chinner TRACE_EVENT(xfs_extent_busy_trim,
1651c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1652c59d87c4SChristoph Hellwig 		 xfs_agblock_t agbno, xfs_extlen_t len,
1653c59d87c4SChristoph Hellwig 		 xfs_agblock_t tbno, xfs_extlen_t tlen),
1654c59d87c4SChristoph Hellwig 	TP_ARGS(mp, agno, agbno, len, tbno, tlen),
1655c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1656c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1657c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
1658c59d87c4SChristoph Hellwig 		__field(xfs_agblock_t, agbno)
1659c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, len)
1660c59d87c4SChristoph Hellwig 		__field(xfs_agblock_t, tbno)
1661c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, tlen)
1662c59d87c4SChristoph Hellwig 	),
1663c59d87c4SChristoph Hellwig 	TP_fast_assign(
1664c59d87c4SChristoph Hellwig 		__entry->dev = mp->m_super->s_dev;
1665c59d87c4SChristoph Hellwig 		__entry->agno = agno;
1666c59d87c4SChristoph Hellwig 		__entry->agbno = agbno;
1667c59d87c4SChristoph Hellwig 		__entry->len = len;
1668c59d87c4SChristoph Hellwig 		__entry->tbno = tbno;
1669c59d87c4SChristoph Hellwig 		__entry->tlen = tlen;
1670c59d87c4SChristoph Hellwig 	),
16717989acccSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x found_agbno 0x%x found_fsbcount 0x%x",
1672c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1673c59d87c4SChristoph Hellwig 		  __entry->agno,
1674c59d87c4SChristoph Hellwig 		  __entry->agbno,
1675c59d87c4SChristoph Hellwig 		  __entry->len,
1676c59d87c4SChristoph Hellwig 		  __entry->tbno,
1677c59d87c4SChristoph Hellwig 		  __entry->tlen)
1678c59d87c4SChristoph Hellwig );
1679c59d87c4SChristoph Hellwig 
1680a27ba260SBrian Foster DECLARE_EVENT_CLASS(xfs_agf_class,
1681c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags,
1682c59d87c4SChristoph Hellwig 		 unsigned long caller_ip),
1683c59d87c4SChristoph Hellwig 	TP_ARGS(mp, agf, flags, caller_ip),
1684c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1685c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1686c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
1687c59d87c4SChristoph Hellwig 		__field(int, flags)
1688c59d87c4SChristoph Hellwig 		__field(__u32, length)
1689c59d87c4SChristoph Hellwig 		__field(__u32, bno_root)
1690c59d87c4SChristoph Hellwig 		__field(__u32, cnt_root)
1691c59d87c4SChristoph Hellwig 		__field(__u32, bno_level)
1692c59d87c4SChristoph Hellwig 		__field(__u32, cnt_level)
1693c59d87c4SChristoph Hellwig 		__field(__u32, flfirst)
1694c59d87c4SChristoph Hellwig 		__field(__u32, fllast)
1695c59d87c4SChristoph Hellwig 		__field(__u32, flcount)
1696c59d87c4SChristoph Hellwig 		__field(__u32, freeblks)
1697c59d87c4SChristoph Hellwig 		__field(__u32, longest)
1698c59d87c4SChristoph Hellwig 		__field(unsigned long, caller_ip)
1699c59d87c4SChristoph Hellwig 	),
1700c59d87c4SChristoph Hellwig 	TP_fast_assign(
1701c59d87c4SChristoph Hellwig 		__entry->dev = mp->m_super->s_dev;
1702c59d87c4SChristoph Hellwig 		__entry->agno = be32_to_cpu(agf->agf_seqno),
1703c59d87c4SChristoph Hellwig 		__entry->flags = flags;
1704c59d87c4SChristoph Hellwig 		__entry->length = be32_to_cpu(agf->agf_length),
1705c59d87c4SChristoph Hellwig 		__entry->bno_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]),
1706c59d87c4SChristoph Hellwig 		__entry->cnt_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]),
1707c59d87c4SChristoph Hellwig 		__entry->bno_level =
1708c59d87c4SChristoph Hellwig 				be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]),
1709c59d87c4SChristoph Hellwig 		__entry->cnt_level =
1710c59d87c4SChristoph Hellwig 				be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]),
1711c59d87c4SChristoph Hellwig 		__entry->flfirst = be32_to_cpu(agf->agf_flfirst),
1712c59d87c4SChristoph Hellwig 		__entry->fllast = be32_to_cpu(agf->agf_fllast),
1713c59d87c4SChristoph Hellwig 		__entry->flcount = be32_to_cpu(agf->agf_flcount),
1714c59d87c4SChristoph Hellwig 		__entry->freeblks = be32_to_cpu(agf->agf_freeblks),
1715c59d87c4SChristoph Hellwig 		__entry->longest = be32_to_cpu(agf->agf_longest);
1716c59d87c4SChristoph Hellwig 		__entry->caller_ip = caller_ip;
1717c59d87c4SChristoph Hellwig 	),
17189febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x flags %s length %u roots b %u c %u "
1719c59d87c4SChristoph Hellwig 		  "levels b %u c %u flfirst %u fllast %u flcount %u "
1720aff68a55SDarrick J. Wong 		  "freeblks %u longest %u caller %pS",
1721c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1722c59d87c4SChristoph Hellwig 		  __entry->agno,
1723c59d87c4SChristoph Hellwig 		  __print_flags(__entry->flags, "|", XFS_AGF_FLAGS),
1724c59d87c4SChristoph Hellwig 		  __entry->length,
1725c59d87c4SChristoph Hellwig 		  __entry->bno_root,
1726c59d87c4SChristoph Hellwig 		  __entry->cnt_root,
1727c59d87c4SChristoph Hellwig 		  __entry->bno_level,
1728c59d87c4SChristoph Hellwig 		  __entry->cnt_level,
1729c59d87c4SChristoph Hellwig 		  __entry->flfirst,
1730c59d87c4SChristoph Hellwig 		  __entry->fllast,
1731c59d87c4SChristoph Hellwig 		  __entry->flcount,
1732c59d87c4SChristoph Hellwig 		  __entry->freeblks,
1733c59d87c4SChristoph Hellwig 		  __entry->longest,
1734c59d87c4SChristoph Hellwig 		  (void *)__entry->caller_ip)
1735c59d87c4SChristoph Hellwig );
1736a27ba260SBrian Foster #define DEFINE_AGF_EVENT(name) \
1737a27ba260SBrian Foster DEFINE_EVENT(xfs_agf_class, name, \
1738a27ba260SBrian Foster 	TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, \
1739a27ba260SBrian Foster 		 unsigned long caller_ip), \
1740a27ba260SBrian Foster 	TP_ARGS(mp, agf, flags, caller_ip))
1741a27ba260SBrian Foster DEFINE_AGF_EVENT(xfs_agf);
1742a27ba260SBrian Foster DEFINE_AGF_EVENT(xfs_agfl_reset);
1743c59d87c4SChristoph Hellwig 
1744c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_free_extent,
1745c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
17463fd129b6SDarrick J. Wong 		 xfs_extlen_t len, enum xfs_ag_resv_type resv, int haveleft,
17473fd129b6SDarrick J. Wong 		 int haveright),
17483fd129b6SDarrick J. Wong 	TP_ARGS(mp, agno, agbno, len, resv, haveleft, haveright),
1749c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1750c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1751c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
1752c59d87c4SChristoph Hellwig 		__field(xfs_agblock_t, agbno)
1753c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, len)
17543fd129b6SDarrick J. Wong 		__field(int, resv)
1755c59d87c4SChristoph Hellwig 		__field(int, haveleft)
1756c59d87c4SChristoph Hellwig 		__field(int, haveright)
1757c59d87c4SChristoph Hellwig 	),
1758c59d87c4SChristoph Hellwig 	TP_fast_assign(
1759c59d87c4SChristoph Hellwig 		__entry->dev = mp->m_super->s_dev;
1760c59d87c4SChristoph Hellwig 		__entry->agno = agno;
1761c59d87c4SChristoph Hellwig 		__entry->agbno = agbno;
1762c59d87c4SChristoph Hellwig 		__entry->len = len;
17633fd129b6SDarrick J. Wong 		__entry->resv = resv;
1764c59d87c4SChristoph Hellwig 		__entry->haveleft = haveleft;
1765c59d87c4SChristoph Hellwig 		__entry->haveright = haveright;
1766c59d87c4SChristoph Hellwig 	),
17677989acccSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x resv %d %s",
1768c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1769c59d87c4SChristoph Hellwig 		  __entry->agno,
1770c59d87c4SChristoph Hellwig 		  __entry->agbno,
1771c59d87c4SChristoph Hellwig 		  __entry->len,
17723fd129b6SDarrick J. Wong 		  __entry->resv,
1773c59d87c4SChristoph Hellwig 		  __entry->haveleft ?
1774c59d87c4SChristoph Hellwig 			(__entry->haveright ? "both" : "left") :
1775c59d87c4SChristoph Hellwig 			(__entry->haveright ? "right" : "none"))
1776c59d87c4SChristoph Hellwig 
1777c59d87c4SChristoph Hellwig );
1778c59d87c4SChristoph Hellwig 
1779c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_alloc_class,
1780c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_alloc_arg *args),
1781c59d87c4SChristoph Hellwig 	TP_ARGS(args),
1782c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1783c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1784c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
1785c59d87c4SChristoph Hellwig 		__field(xfs_agblock_t, agbno)
1786c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, minlen)
1787c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, maxlen)
1788c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, mod)
1789c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, prod)
1790c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, minleft)
1791c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, total)
1792c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, alignment)
1793c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, minalignslop)
1794c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, len)
1795c59d87c4SChristoph Hellwig 		__field(char, wasdel)
1796c59d87c4SChristoph Hellwig 		__field(char, wasfromfl)
17973fd129b6SDarrick J. Wong 		__field(int, resv)
1798292378edSDave Chinner 		__field(int, datatype)
1799692b6cddSDave Chinner 		__field(xfs_agnumber_t, highest_agno)
1800c59d87c4SChristoph Hellwig 	),
1801c59d87c4SChristoph Hellwig 	TP_fast_assign(
1802c59d87c4SChristoph Hellwig 		__entry->dev = args->mp->m_super->s_dev;
1803c59d87c4SChristoph Hellwig 		__entry->agno = args->agno;
1804c59d87c4SChristoph Hellwig 		__entry->agbno = args->agbno;
1805c59d87c4SChristoph Hellwig 		__entry->minlen = args->minlen;
1806c59d87c4SChristoph Hellwig 		__entry->maxlen = args->maxlen;
1807c59d87c4SChristoph Hellwig 		__entry->mod = args->mod;
1808c59d87c4SChristoph Hellwig 		__entry->prod = args->prod;
1809c59d87c4SChristoph Hellwig 		__entry->minleft = args->minleft;
1810c59d87c4SChristoph Hellwig 		__entry->total = args->total;
1811c59d87c4SChristoph Hellwig 		__entry->alignment = args->alignment;
1812c59d87c4SChristoph Hellwig 		__entry->minalignslop = args->minalignslop;
1813c59d87c4SChristoph Hellwig 		__entry->len = args->len;
1814c59d87c4SChristoph Hellwig 		__entry->wasdel = args->wasdel;
1815c59d87c4SChristoph Hellwig 		__entry->wasfromfl = args->wasfromfl;
18163fd129b6SDarrick J. Wong 		__entry->resv = args->resv;
1817292378edSDave Chinner 		__entry->datatype = args->datatype;
1818692b6cddSDave Chinner 		__entry->highest_agno = args->tp->t_highest_agno;
1819c59d87c4SChristoph Hellwig 	),
1820f7b08163SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x minlen %u maxlen %u mod %u "
1821c59d87c4SChristoph Hellwig 		  "prod %u minleft %u total %u alignment %u minalignslop %u "
1822230e8fe8SDave Chinner 		  "len %u wasdel %d wasfromfl %d resv %d "
1823692b6cddSDave Chinner 		  "datatype 0x%x highest_agno 0x%x",
1824c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1825c59d87c4SChristoph Hellwig 		  __entry->agno,
1826c59d87c4SChristoph Hellwig 		  __entry->agbno,
1827c59d87c4SChristoph Hellwig 		  __entry->minlen,
1828c59d87c4SChristoph Hellwig 		  __entry->maxlen,
1829c59d87c4SChristoph Hellwig 		  __entry->mod,
1830c59d87c4SChristoph Hellwig 		  __entry->prod,
1831c59d87c4SChristoph Hellwig 		  __entry->minleft,
1832c59d87c4SChristoph Hellwig 		  __entry->total,
1833c59d87c4SChristoph Hellwig 		  __entry->alignment,
1834c59d87c4SChristoph Hellwig 		  __entry->minalignslop,
1835c59d87c4SChristoph Hellwig 		  __entry->len,
1836c59d87c4SChristoph Hellwig 		  __entry->wasdel,
1837c59d87c4SChristoph Hellwig 		  __entry->wasfromfl,
18383fd129b6SDarrick J. Wong 		  __entry->resv,
1839292378edSDave Chinner 		  __entry->datatype,
1840692b6cddSDave Chinner 		  __entry->highest_agno)
1841c59d87c4SChristoph Hellwig )
1842c59d87c4SChristoph Hellwig 
1843c59d87c4SChristoph Hellwig #define DEFINE_ALLOC_EVENT(name) \
1844c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_alloc_class, name, \
1845c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_alloc_arg *args), \
1846c59d87c4SChristoph Hellwig 	TP_ARGS(args))
1847c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_exact_done);
1848c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_exact_notfound);
1849c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_exact_error);
1850c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_near_nominleft);
1851c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_near_first);
1852d2968825SBrian Foster DEFINE_ALLOC_EVENT(xfs_alloc_cur);
1853fec0afdaSBrian Foster DEFINE_ALLOC_EVENT(xfs_alloc_cur_right);
1854fec0afdaSBrian Foster DEFINE_ALLOC_EVENT(xfs_alloc_cur_left);
1855dc8e69bdSBrian Foster DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup);
1856dc8e69bdSBrian Foster DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup_done);
1857c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_near_error);
1858c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_near_noentry);
1859c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_near_busy);
1860c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_size_neither);
1861c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_size_noentry);
1862c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_size_nominleft);
1863c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_size_done);
1864c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_size_error);
1865c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_size_busy);
1866c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_small_freelist);
1867c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_small_notenough);
1868c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_small_done);
1869c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_small_error);
1870c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_vextent_badargs);
18711dd0510fSDave Chinner DEFINE_ALLOC_EVENT(xfs_alloc_vextent_skip_deadlock);
1872c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_vextent_nofix);
1873c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_vextent_noagbp);
1874c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_vextent_loopfailed);
1875c59d87c4SChristoph Hellwig DEFINE_ALLOC_EVENT(xfs_alloc_vextent_allfailed);
1876c59d87c4SChristoph Hellwig 
1877e6fbb716SDarrick J. Wong DEFINE_ALLOC_EVENT(xfs_alloc_vextent_this_ag);
1878e6fbb716SDarrick J. Wong DEFINE_ALLOC_EVENT(xfs_alloc_vextent_start_ag);
1879e6fbb716SDarrick J. Wong DEFINE_ALLOC_EVENT(xfs_alloc_vextent_first_ag);
1880e6fbb716SDarrick J. Wong DEFINE_ALLOC_EVENT(xfs_alloc_vextent_exact_bno);
1881e6fbb716SDarrick J. Wong DEFINE_ALLOC_EVENT(xfs_alloc_vextent_near_bno);
1882e6fbb716SDarrick J. Wong DEFINE_ALLOC_EVENT(xfs_alloc_vextent_finish);
1883e6fbb716SDarrick J. Wong 
1884396bbf3cSBrian Foster TRACE_EVENT(xfs_alloc_cur_check,
1885396bbf3cSBrian Foster 	TP_PROTO(struct xfs_mount *mp, xfs_btnum_t btnum, xfs_agblock_t bno,
1886396bbf3cSBrian Foster 		 xfs_extlen_t len, xfs_extlen_t diff, bool new),
1887396bbf3cSBrian Foster 	TP_ARGS(mp, btnum, bno, len, diff, new),
1888396bbf3cSBrian Foster 	TP_STRUCT__entry(
1889396bbf3cSBrian Foster 		__field(dev_t, dev)
1890396bbf3cSBrian Foster 		__field(xfs_btnum_t, btnum)
1891396bbf3cSBrian Foster 		__field(xfs_agblock_t, bno)
1892396bbf3cSBrian Foster 		__field(xfs_extlen_t, len)
1893396bbf3cSBrian Foster 		__field(xfs_extlen_t, diff)
1894396bbf3cSBrian Foster 		__field(bool, new)
1895396bbf3cSBrian Foster 	),
1896396bbf3cSBrian Foster 	TP_fast_assign(
1897396bbf3cSBrian Foster 		__entry->dev = mp->m_super->s_dev;
1898396bbf3cSBrian Foster 		__entry->btnum = btnum;
1899396bbf3cSBrian Foster 		__entry->bno = bno;
1900396bbf3cSBrian Foster 		__entry->len = len;
1901396bbf3cSBrian Foster 		__entry->diff = diff;
1902396bbf3cSBrian Foster 		__entry->new = new;
1903396bbf3cSBrian Foster 	),
19047989acccSDarrick J. Wong 	TP_printk("dev %d:%d btree %s agbno 0x%x fsbcount 0x%x diff 0x%x new %d",
1905396bbf3cSBrian Foster 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1906396bbf3cSBrian Foster 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
1907396bbf3cSBrian Foster 		  __entry->bno, __entry->len, __entry->diff, __entry->new)
1908396bbf3cSBrian Foster )
1909396bbf3cSBrian Foster 
19105a5881cdSDave Chinner DECLARE_EVENT_CLASS(xfs_da_class,
1911c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_da_args *args),
1912c59d87c4SChristoph Hellwig 	TP_ARGS(args),
1913c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
1914c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
1915c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
1916c59d87c4SChristoph Hellwig 		__dynamic_array(char, name, args->namelen)
1917c59d87c4SChristoph Hellwig 		__field(int, namelen)
1918c59d87c4SChristoph Hellwig 		__field(xfs_dahash_t, hashval)
1919c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, inumber)
19203402d931SDave Chinner 		__field(uint32_t, op_flags)
1921c59d87c4SChristoph Hellwig 	),
1922c59d87c4SChristoph Hellwig 	TP_fast_assign(
1923c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
1924c59d87c4SChristoph Hellwig 		__entry->ino = args->dp->i_ino;
1925c59d87c4SChristoph Hellwig 		if (args->namelen)
1926c59d87c4SChristoph Hellwig 			memcpy(__get_str(name), args->name, args->namelen);
1927c59d87c4SChristoph Hellwig 		__entry->namelen = args->namelen;
1928c59d87c4SChristoph Hellwig 		__entry->hashval = args->hashval;
1929c59d87c4SChristoph Hellwig 		__entry->inumber = args->inumber;
1930c59d87c4SChristoph Hellwig 		__entry->op_flags = args->op_flags;
1931c59d87c4SChristoph Hellwig 	),
1932c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d hashval 0x%x "
1933c59d87c4SChristoph Hellwig 		  "inumber 0x%llx op_flags %s",
1934c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1935c59d87c4SChristoph Hellwig 		  __entry->ino,
1936c59d87c4SChristoph Hellwig 		  __entry->namelen,
1937c59d87c4SChristoph Hellwig 		  __entry->namelen ? __get_str(name) : NULL,
1938c59d87c4SChristoph Hellwig 		  __entry->namelen,
1939c59d87c4SChristoph Hellwig 		  __entry->hashval,
1940c59d87c4SChristoph Hellwig 		  __entry->inumber,
1941c59d87c4SChristoph Hellwig 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS))
1942c59d87c4SChristoph Hellwig )
1943c59d87c4SChristoph Hellwig 
1944c59d87c4SChristoph Hellwig #define DEFINE_DIR2_EVENT(name) \
19455a5881cdSDave Chinner DEFINE_EVENT(xfs_da_class, name, \
1946c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_da_args *args), \
1947c59d87c4SChristoph Hellwig 	TP_ARGS(args))
1948c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_addname);
1949c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_create);
1950c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_lookup);
1951c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_replace);
1952c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_removename);
1953c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_toino4);
1954c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_toino8);
1955c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_sf_to_block);
1956c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_block_addname);
1957c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_block_lookup);
1958c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_block_replace);
1959c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_block_removename);
1960c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_block_to_sf);
1961c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_block_to_leaf);
1962c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_leaf_addname);
1963c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_leaf_lookup);
1964c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_leaf_replace);
1965c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_leaf_removename);
1966c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_block);
1967c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_node);
1968c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_node_addname);
1969c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_node_lookup);
1970c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_node_replace);
1971c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_node_removename);
1972c59d87c4SChristoph Hellwig DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf);
1973c59d87c4SChristoph Hellwig 
1974ee73259bSDave Chinner DECLARE_EVENT_CLASS(xfs_attr_class,
1975ee73259bSDave Chinner 	TP_PROTO(struct xfs_da_args *args),
1976ee73259bSDave Chinner 	TP_ARGS(args),
1977ee73259bSDave Chinner 	TP_STRUCT__entry(
1978ee73259bSDave Chinner 		__field(dev_t, dev)
1979ee73259bSDave Chinner 		__field(xfs_ino_t, ino)
1980ee73259bSDave Chinner 		__dynamic_array(char, name, args->namelen)
1981ee73259bSDave Chinner 		__field(int, namelen)
1982ee73259bSDave Chinner 		__field(int, valuelen)
1983ee73259bSDave Chinner 		__field(xfs_dahash_t, hashval)
1984d5f0f49aSChristoph Hellwig 		__field(unsigned int, attr_filter)
1985d5f0f49aSChristoph Hellwig 		__field(unsigned int, attr_flags)
19863402d931SDave Chinner 		__field(uint32_t, op_flags)
1987ee73259bSDave Chinner 	),
1988ee73259bSDave Chinner 	TP_fast_assign(
1989ee73259bSDave Chinner 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
1990ee73259bSDave Chinner 		__entry->ino = args->dp->i_ino;
1991ee73259bSDave Chinner 		if (args->namelen)
1992ee73259bSDave Chinner 			memcpy(__get_str(name), args->name, args->namelen);
1993ee73259bSDave Chinner 		__entry->namelen = args->namelen;
1994ee73259bSDave Chinner 		__entry->valuelen = args->valuelen;
1995ee73259bSDave Chinner 		__entry->hashval = args->hashval;
1996d5f0f49aSChristoph Hellwig 		__entry->attr_filter = args->attr_filter;
1997d5f0f49aSChristoph Hellwig 		__entry->attr_flags = args->attr_flags;
1998ee73259bSDave Chinner 		__entry->op_flags = args->op_flags;
1999ee73259bSDave Chinner 	),
2000ee73259bSDave Chinner 	TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d "
2001d5f0f49aSChristoph Hellwig 		  "hashval 0x%x filter %s flags %s op_flags %s",
2002ee73259bSDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2003ee73259bSDave Chinner 		  __entry->ino,
2004ee73259bSDave Chinner 		  __entry->namelen,
2005ee73259bSDave Chinner 		  __entry->namelen ? __get_str(name) : NULL,
2006ee73259bSDave Chinner 		  __entry->namelen,
2007ee73259bSDave Chinner 		  __entry->valuelen,
2008ee73259bSDave Chinner 		  __entry->hashval,
2009d5f0f49aSChristoph Hellwig 		  __print_flags(__entry->attr_filter, "|",
2010d5f0f49aSChristoph Hellwig 				XFS_ATTR_FILTER_FLAGS),
2011d5f0f49aSChristoph Hellwig 		   __print_flags(__entry->attr_flags, "|",
2012d5f0f49aSChristoph Hellwig 				{ XATTR_CREATE,		"CREATE" },
2013d5f0f49aSChristoph Hellwig 				{ XATTR_REPLACE,	"REPLACE" }),
2014ee73259bSDave Chinner 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS))
2015ee73259bSDave Chinner )
2016ee73259bSDave Chinner 
20175a5881cdSDave Chinner #define DEFINE_ATTR_EVENT(name) \
2018ee73259bSDave Chinner DEFINE_EVENT(xfs_attr_class, name, \
20195a5881cdSDave Chinner 	TP_PROTO(struct xfs_da_args *args), \
20205a5881cdSDave Chinner 	TP_ARGS(args))
20215a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_sf_add);
20225a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_sf_addname);
20235a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_sf_create);
20245a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_sf_lookup);
20255a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_sf_remove);
20265a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf);
20275a5881cdSDave Chinner 
20285a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_add);
20295a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old);
20305a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new);
2031ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work);
20325a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_create);
2033ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_compact);
2034ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_get);
20355a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup);
20365a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_replace);
2037ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_remove);
20385a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_removename);
20395a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_split);
20405a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before);
20415a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_split_after);
20425a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_clearflag);
20435a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_setflag);
20445a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_flipflags);
20455a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf);
20465a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node);
20475a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance);
20485a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance);
2049ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall);
20505a5881cdSDave Chinner 
20515a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_node_addname);
2052ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_node_get);
20535a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_node_replace);
20545a5881cdSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_node_removename);
20555a5881cdSDave Chinner 
2056ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_fillstate);
2057ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_refillstate);
2058ee73259bSDave Chinner 
2059ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_rmtval_get);
2060ee73259bSDave Chinner DEFINE_ATTR_EVENT(xfs_attr_rmtval_set);
2061ee73259bSDave Chinner 
20625a5881cdSDave Chinner #define DEFINE_DA_EVENT(name) \
20635a5881cdSDave Chinner DEFINE_EVENT(xfs_da_class, name, \
20645a5881cdSDave Chinner 	TP_PROTO(struct xfs_da_args *args), \
20655a5881cdSDave Chinner 	TP_ARGS(args))
20665a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_split);
20675a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_join);
20685a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_link_before);
20695a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_link_after);
20705a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_unlink_back);
20715a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_unlink_forward);
20725a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_root_split);
20735a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_root_join);
20745a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_node_add);
20755a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_node_create);
20765a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_node_split);
20775a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_node_remove);
20785a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_node_rebalance);
20795a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_node_unbalance);
2080ee73259bSDave Chinner DEFINE_DA_EVENT(xfs_da_node_toosmall);
20815a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_swap_lastblock);
20825a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_grow_inode);
20835a5881cdSDave Chinner DEFINE_DA_EVENT(xfs_da_shrink_inode);
2084ee73259bSDave Chinner DEFINE_DA_EVENT(xfs_da_fixhashpath);
2085ee73259bSDave Chinner DEFINE_DA_EVENT(xfs_da_path_shift);
20865a5881cdSDave Chinner 
2087c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_dir2_space_class,
2088c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_da_args *args, int idx),
2089c59d87c4SChristoph Hellwig 	TP_ARGS(args, idx),
2090c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2091c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2092c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
20933402d931SDave Chinner 		__field(uint32_t, op_flags)
2094c59d87c4SChristoph Hellwig 		__field(int, idx)
2095c59d87c4SChristoph Hellwig 	),
2096c59d87c4SChristoph Hellwig 	TP_fast_assign(
2097c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
2098c59d87c4SChristoph Hellwig 		__entry->ino = args->dp->i_ino;
2099c59d87c4SChristoph Hellwig 		__entry->op_flags = args->op_flags;
2100c59d87c4SChristoph Hellwig 		__entry->idx = idx;
2101c59d87c4SChristoph Hellwig 	),
2102c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx op_flags %s index %d",
2103c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2104c59d87c4SChristoph Hellwig 		  __entry->ino,
2105c59d87c4SChristoph Hellwig 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),
2106c59d87c4SChristoph Hellwig 		  __entry->idx)
2107c59d87c4SChristoph Hellwig )
2108c59d87c4SChristoph Hellwig 
2109c59d87c4SChristoph Hellwig #define DEFINE_DIR2_SPACE_EVENT(name) \
2110c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_dir2_space_class, name, \
2111c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_da_args *args, int idx), \
2112c59d87c4SChristoph Hellwig 	TP_ARGS(args, idx))
2113c59d87c4SChristoph Hellwig DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_add);
2114c59d87c4SChristoph Hellwig DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_remove);
2115c59d87c4SChristoph Hellwig DEFINE_DIR2_SPACE_EVENT(xfs_dir2_grow_inode);
2116c59d87c4SChristoph Hellwig DEFINE_DIR2_SPACE_EVENT(xfs_dir2_shrink_inode);
2117c59d87c4SChristoph Hellwig 
2118c59d87c4SChristoph Hellwig TRACE_EVENT(xfs_dir2_leafn_moveents,
2119c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_da_args *args, int src_idx, int dst_idx, int count),
2120c59d87c4SChristoph Hellwig 	TP_ARGS(args, src_idx, dst_idx, count),
2121c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2122c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2123c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
21243402d931SDave Chinner 		__field(uint32_t, op_flags)
2125c59d87c4SChristoph Hellwig 		__field(int, src_idx)
2126c59d87c4SChristoph Hellwig 		__field(int, dst_idx)
2127c59d87c4SChristoph Hellwig 		__field(int, count)
2128c59d87c4SChristoph Hellwig 	),
2129c59d87c4SChristoph Hellwig 	TP_fast_assign(
2130c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
2131c59d87c4SChristoph Hellwig 		__entry->ino = args->dp->i_ino;
2132c59d87c4SChristoph Hellwig 		__entry->op_flags = args->op_flags;
2133c59d87c4SChristoph Hellwig 		__entry->src_idx = src_idx;
2134c59d87c4SChristoph Hellwig 		__entry->dst_idx = dst_idx;
2135c59d87c4SChristoph Hellwig 		__entry->count = count;
2136c59d87c4SChristoph Hellwig 	),
2137c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx op_flags %s "
2138c59d87c4SChristoph Hellwig 		  "src_idx %d dst_idx %d count %d",
2139c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2140c59d87c4SChristoph Hellwig 		  __entry->ino,
2141c59d87c4SChristoph Hellwig 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),
2142c59d87c4SChristoph Hellwig 		  __entry->src_idx,
2143c59d87c4SChristoph Hellwig 		  __entry->dst_idx,
2144c59d87c4SChristoph Hellwig 		  __entry->count)
2145c59d87c4SChristoph Hellwig );
2146c59d87c4SChristoph Hellwig 
2147c59d87c4SChristoph Hellwig #define XFS_SWAPEXT_INODES \
2148c59d87c4SChristoph Hellwig 	{ 0,	"target" }, \
2149c59d87c4SChristoph Hellwig 	{ 1,	"temp" }
2150c59d87c4SChristoph Hellwig 
21510357d21aSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_DINODE_FMT_DEV);
21520357d21aSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_DINODE_FMT_LOCAL);
21530357d21aSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_DINODE_FMT_EXTENTS);
21540357d21aSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_DINODE_FMT_BTREE);
21550357d21aSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_DINODE_FMT_UUID);
2156c59d87c4SChristoph Hellwig 
2157c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_swap_extent_class,
2158c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, int which),
2159c59d87c4SChristoph Hellwig 	TP_ARGS(ip, which),
2160c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2161c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2162c59d87c4SChristoph Hellwig 		__field(int, which)
2163c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
2164c59d87c4SChristoph Hellwig 		__field(int, format)
2165bb1d5049SChandan Babu R 		__field(xfs_extnum_t, nex)
2166c59d87c4SChristoph Hellwig 		__field(int, broot_size)
2167c59d87c4SChristoph Hellwig 		__field(int, fork_off)
2168c59d87c4SChristoph Hellwig 	),
2169c59d87c4SChristoph Hellwig 	TP_fast_assign(
2170c59d87c4SChristoph Hellwig 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
2171c59d87c4SChristoph Hellwig 		__entry->which = which;
2172c59d87c4SChristoph Hellwig 		__entry->ino = ip->i_ino;
2173f7e67b20SChristoph Hellwig 		__entry->format = ip->i_df.if_format;
2174daf83964SChristoph Hellwig 		__entry->nex = ip->i_df.if_nextents;
2175c59d87c4SChristoph Hellwig 		__entry->broot_size = ip->i_df.if_broot_bytes;
2176c01147d9SDarrick J. Wong 		__entry->fork_off = xfs_inode_fork_boff(ip);
2177c59d87c4SChristoph Hellwig 	),
2178755c38ffSChandan Babu R 	TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %llu, "
217949e68c91SDarrick J. Wong 		  "broot size %d, forkoff 0x%x",
2180c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2181c59d87c4SChristoph Hellwig 		  __entry->ino,
2182c59d87c4SChristoph Hellwig 		  __print_symbolic(__entry->which, XFS_SWAPEXT_INODES),
2183c59d87c4SChristoph Hellwig 		  __print_symbolic(__entry->format, XFS_INODE_FORMAT_STR),
2184c59d87c4SChristoph Hellwig 		  __entry->nex,
2185c59d87c4SChristoph Hellwig 		  __entry->broot_size,
2186c59d87c4SChristoph Hellwig 		  __entry->fork_off)
2187c59d87c4SChristoph Hellwig )
2188c59d87c4SChristoph Hellwig 
2189c59d87c4SChristoph Hellwig #define DEFINE_SWAPEXT_EVENT(name) \
2190c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_swap_extent_class, name, \
2191c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_inode *ip, int which), \
2192c59d87c4SChristoph Hellwig 	TP_ARGS(ip, which))
2193c59d87c4SChristoph Hellwig 
2194c59d87c4SChristoph Hellwig DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before);
2195c59d87c4SChristoph Hellwig DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after);
2196c59d87c4SChristoph Hellwig 
2197e67d3d42SBrian Foster TRACE_EVENT(xfs_log_recover,
2198e67d3d42SBrian Foster 	TP_PROTO(struct xlog *log, xfs_daddr_t headblk, xfs_daddr_t tailblk),
2199e67d3d42SBrian Foster 	TP_ARGS(log, headblk, tailblk),
2200e67d3d42SBrian Foster 	TP_STRUCT__entry(
2201e67d3d42SBrian Foster 		__field(dev_t, dev)
2202e67d3d42SBrian Foster 		__field(xfs_daddr_t, headblk)
2203e67d3d42SBrian Foster 		__field(xfs_daddr_t, tailblk)
2204e67d3d42SBrian Foster 	),
2205e67d3d42SBrian Foster 	TP_fast_assign(
2206e67d3d42SBrian Foster 		__entry->dev = log->l_mp->m_super->s_dev;
2207e67d3d42SBrian Foster 		__entry->headblk = headblk;
2208e67d3d42SBrian Foster 		__entry->tailblk = tailblk;
2209e67d3d42SBrian Foster 	),
2210e67d3d42SBrian Foster 	TP_printk("dev %d:%d headblk 0x%llx tailblk 0x%llx",
2211e67d3d42SBrian Foster 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->headblk,
2212e67d3d42SBrian Foster 		  __entry->tailblk)
2213e67d3d42SBrian Foster )
2214e67d3d42SBrian Foster 
22155cd9cee9SBrian Foster TRACE_EVENT(xfs_log_recover_record,
22165cd9cee9SBrian Foster 	TP_PROTO(struct xlog *log, struct xlog_rec_header *rhead, int pass),
22175cd9cee9SBrian Foster 	TP_ARGS(log, rhead, pass),
22185cd9cee9SBrian Foster 	TP_STRUCT__entry(
22195cd9cee9SBrian Foster 		__field(dev_t, dev)
22205cd9cee9SBrian Foster 		__field(xfs_lsn_t, lsn)
22215cd9cee9SBrian Foster 		__field(int, len)
22225cd9cee9SBrian Foster 		__field(int, num_logops)
22235cd9cee9SBrian Foster 		__field(int, pass)
22245cd9cee9SBrian Foster 	),
22255cd9cee9SBrian Foster 	TP_fast_assign(
22265cd9cee9SBrian Foster 		__entry->dev = log->l_mp->m_super->s_dev;
22275cd9cee9SBrian Foster 		__entry->lsn = be64_to_cpu(rhead->h_lsn);
22285cd9cee9SBrian Foster 		__entry->len = be32_to_cpu(rhead->h_len);
22295cd9cee9SBrian Foster 		__entry->num_logops = be32_to_cpu(rhead->h_num_logops);
22305cd9cee9SBrian Foster 		__entry->pass = pass;
22315cd9cee9SBrian Foster 	),
22325cd9cee9SBrian Foster 	TP_printk("dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d",
22335cd9cee9SBrian Foster 		  MAJOR(__entry->dev), MINOR(__entry->dev),
22345cd9cee9SBrian Foster 		  __entry->lsn, __entry->len, __entry->num_logops,
22355cd9cee9SBrian Foster 		   __entry->pass)
22365cd9cee9SBrian Foster )
22375cd9cee9SBrian Foster 
2238c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_log_recover_item_class,
2239ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xlog_recover *trans,
2240c59d87c4SChristoph Hellwig 		struct xlog_recover_item *item, int pass),
2241c59d87c4SChristoph Hellwig 	TP_ARGS(log, trans, item, pass),
2242c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2243c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2244c59d87c4SChristoph Hellwig 		__field(unsigned long, item)
2245c59d87c4SChristoph Hellwig 		__field(xlog_tid_t, tid)
22465cd9cee9SBrian Foster 		__field(xfs_lsn_t, lsn)
2247c59d87c4SChristoph Hellwig 		__field(int, type)
2248c59d87c4SChristoph Hellwig 		__field(int, pass)
2249c59d87c4SChristoph Hellwig 		__field(int, count)
2250c59d87c4SChristoph Hellwig 		__field(int, total)
2251c59d87c4SChristoph Hellwig 	),
2252c59d87c4SChristoph Hellwig 	TP_fast_assign(
2253c59d87c4SChristoph Hellwig 		__entry->dev = log->l_mp->m_super->s_dev;
2254c59d87c4SChristoph Hellwig 		__entry->item = (unsigned long)item;
2255c59d87c4SChristoph Hellwig 		__entry->tid = trans->r_log_tid;
22565cd9cee9SBrian Foster 		__entry->lsn = trans->r_lsn;
2257c59d87c4SChristoph Hellwig 		__entry->type = ITEM_TYPE(item);
2258c59d87c4SChristoph Hellwig 		__entry->pass = pass;
2259c59d87c4SChristoph Hellwig 		__entry->count = item->ri_cnt;
2260c59d87c4SChristoph Hellwig 		__entry->total = item->ri_total;
2261c59d87c4SChristoph Hellwig 	),
22623d170aa2SDarrick J. Wong 	TP_printk("dev %d:%d tid 0x%x lsn 0x%llx, pass %d, item %p, "
22635cd9cee9SBrian Foster 		  "item type %s item region count/total %d/%d",
2264c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2265c59d87c4SChristoph Hellwig 		  __entry->tid,
22665cd9cee9SBrian Foster 		  __entry->lsn,
2267c59d87c4SChristoph Hellwig 		  __entry->pass,
2268c59d87c4SChristoph Hellwig 		  (void *)__entry->item,
2269c59d87c4SChristoph Hellwig 		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
2270c59d87c4SChristoph Hellwig 		  __entry->count,
2271c59d87c4SChristoph Hellwig 		  __entry->total)
2272c59d87c4SChristoph Hellwig )
2273c59d87c4SChristoph Hellwig 
2274c59d87c4SChristoph Hellwig #define DEFINE_LOG_RECOVER_ITEM(name) \
2275c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_log_recover_item_class, name, \
2276ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xlog_recover *trans, \
2277c59d87c4SChristoph Hellwig 		struct xlog_recover_item *item, int pass), \
2278c59d87c4SChristoph Hellwig 	TP_ARGS(log, trans, item, pass))
2279c59d87c4SChristoph Hellwig 
2280c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add);
2281c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont);
2282c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head);
2283c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail);
2284c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover);
2285c59d87c4SChristoph Hellwig 
2286c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class,
2287ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f),
2288c59d87c4SChristoph Hellwig 	TP_ARGS(log, buf_f),
2289c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2290c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2291c8ce540dSDarrick J. Wong 		__field(int64_t, blkno)
2292c59d87c4SChristoph Hellwig 		__field(unsigned short, len)
2293c59d87c4SChristoph Hellwig 		__field(unsigned short, flags)
2294c59d87c4SChristoph Hellwig 		__field(unsigned short, size)
2295c59d87c4SChristoph Hellwig 		__field(unsigned int, map_size)
2296c59d87c4SChristoph Hellwig 	),
2297c59d87c4SChristoph Hellwig 	TP_fast_assign(
2298c59d87c4SChristoph Hellwig 		__entry->dev = log->l_mp->m_super->s_dev;
2299c59d87c4SChristoph Hellwig 		__entry->blkno = buf_f->blf_blkno;
2300c59d87c4SChristoph Hellwig 		__entry->len = buf_f->blf_len;
2301c59d87c4SChristoph Hellwig 		__entry->flags = buf_f->blf_flags;
2302c59d87c4SChristoph Hellwig 		__entry->size = buf_f->blf_size;
2303c59d87c4SChristoph Hellwig 		__entry->map_size = buf_f->blf_map_size;
2304c59d87c4SChristoph Hellwig 	),
23057989acccSDarrick J. Wong 	TP_printk("dev %d:%d daddr 0x%llx, bbcount 0x%x, flags 0x%x, size %d, "
2306c59d87c4SChristoph Hellwig 			"map_size %d",
2307c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2308c59d87c4SChristoph Hellwig 		  __entry->blkno,
2309c59d87c4SChristoph Hellwig 		  __entry->len,
2310c59d87c4SChristoph Hellwig 		  __entry->flags,
2311c59d87c4SChristoph Hellwig 		  __entry->size,
2312c59d87c4SChristoph Hellwig 		  __entry->map_size)
2313c59d87c4SChristoph Hellwig )
2314c59d87c4SChristoph Hellwig 
2315c59d87c4SChristoph Hellwig #define DEFINE_LOG_RECOVER_BUF_ITEM(name) \
2316c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \
2317ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), \
2318c59d87c4SChristoph Hellwig 	TP_ARGS(log, buf_f))
2319c59d87c4SChristoph Hellwig 
2320c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel);
2321c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel);
2322c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add);
2323c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc);
2324c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover);
23255cd9cee9SBrian Foster DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_skip);
2326c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf);
2327c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf);
2328c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf);
2329c59d87c4SChristoph Hellwig 
2330c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class,
2331ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f),
2332c59d87c4SChristoph Hellwig 	TP_ARGS(log, in_f),
2333c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2334c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2335c59d87c4SChristoph Hellwig 		__field(xfs_ino_t, ino)
2336c59d87c4SChristoph Hellwig 		__field(unsigned short, size)
2337c59d87c4SChristoph Hellwig 		__field(int, fields)
2338c59d87c4SChristoph Hellwig 		__field(unsigned short, asize)
2339c59d87c4SChristoph Hellwig 		__field(unsigned short, dsize)
2340c8ce540dSDarrick J. Wong 		__field(int64_t, blkno)
2341c59d87c4SChristoph Hellwig 		__field(int, len)
2342c59d87c4SChristoph Hellwig 		__field(int, boffset)
2343c59d87c4SChristoph Hellwig 	),
2344c59d87c4SChristoph Hellwig 	TP_fast_assign(
2345c59d87c4SChristoph Hellwig 		__entry->dev = log->l_mp->m_super->s_dev;
2346c59d87c4SChristoph Hellwig 		__entry->ino = in_f->ilf_ino;
2347c59d87c4SChristoph Hellwig 		__entry->size = in_f->ilf_size;
2348c59d87c4SChristoph Hellwig 		__entry->fields = in_f->ilf_fields;
2349c59d87c4SChristoph Hellwig 		__entry->asize = in_f->ilf_asize;
2350c59d87c4SChristoph Hellwig 		__entry->dsize = in_f->ilf_dsize;
2351c59d87c4SChristoph Hellwig 		__entry->blkno = in_f->ilf_blkno;
2352c59d87c4SChristoph Hellwig 		__entry->len = in_f->ilf_len;
2353c59d87c4SChristoph Hellwig 		__entry->boffset = in_f->ilf_boffset;
2354c59d87c4SChristoph Hellwig 	),
2355c59d87c4SChristoph Hellwig 	TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, "
23567989acccSDarrick J. Wong 			"dsize %d, daddr 0x%llx, bbcount 0x%x, boffset %d",
2357c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2358c59d87c4SChristoph Hellwig 		  __entry->ino,
2359c59d87c4SChristoph Hellwig 		  __entry->size,
2360c59d87c4SChristoph Hellwig 		  __entry->fields,
2361c59d87c4SChristoph Hellwig 		  __entry->asize,
2362c59d87c4SChristoph Hellwig 		  __entry->dsize,
2363c59d87c4SChristoph Hellwig 		  __entry->blkno,
2364c59d87c4SChristoph Hellwig 		  __entry->len,
2365c59d87c4SChristoph Hellwig 		  __entry->boffset)
2366c59d87c4SChristoph Hellwig )
2367c59d87c4SChristoph Hellwig #define DEFINE_LOG_RECOVER_INO_ITEM(name) \
2368c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \
2369ad223e60SMark Tinguely 	TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), \
2370c59d87c4SChristoph Hellwig 	TP_ARGS(log, in_f))
2371c59d87c4SChristoph Hellwig 
2372c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover);
2373c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel);
2374c59d87c4SChristoph Hellwig DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip);
2375c59d87c4SChristoph Hellwig 
237678d57e45SBrian Foster DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class,
237778d57e45SBrian Foster 	TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f),
237878d57e45SBrian Foster 	TP_ARGS(log, in_f),
237978d57e45SBrian Foster 	TP_STRUCT__entry(
238078d57e45SBrian Foster 		__field(dev_t, dev)
238178d57e45SBrian Foster 		__field(xfs_agnumber_t, agno)
238278d57e45SBrian Foster 		__field(xfs_agblock_t, agbno)
238378d57e45SBrian Foster 		__field(unsigned int, count)
238478d57e45SBrian Foster 		__field(unsigned int, isize)
238578d57e45SBrian Foster 		__field(xfs_agblock_t, length)
238678d57e45SBrian Foster 		__field(unsigned int, gen)
238778d57e45SBrian Foster 	),
238878d57e45SBrian Foster 	TP_fast_assign(
238978d57e45SBrian Foster 		__entry->dev = log->l_mp->m_super->s_dev;
239078d57e45SBrian Foster 		__entry->agno = be32_to_cpu(in_f->icl_ag);
239178d57e45SBrian Foster 		__entry->agbno = be32_to_cpu(in_f->icl_agbno);
239278d57e45SBrian Foster 		__entry->count = be32_to_cpu(in_f->icl_count);
239378d57e45SBrian Foster 		__entry->isize = be32_to_cpu(in_f->icl_isize);
239478d57e45SBrian Foster 		__entry->length = be32_to_cpu(in_f->icl_length);
239578d57e45SBrian Foster 		__entry->gen = be32_to_cpu(in_f->icl_gen);
239678d57e45SBrian Foster 	),
2397b641851cSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x ireccount %u isize %u gen 0x%x",
23987989acccSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
23997989acccSDarrick J. Wong 		  __entry->agno,
24007989acccSDarrick J. Wong 		  __entry->agbno,
24017989acccSDarrick J. Wong 		  __entry->length,
24027989acccSDarrick J. Wong 		  __entry->count,
24037989acccSDarrick J. Wong 		  __entry->isize,
24047989acccSDarrick J. Wong 		  __entry->gen)
240578d57e45SBrian Foster )
240678d57e45SBrian Foster #define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \
240778d57e45SBrian Foster DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \
240878d57e45SBrian Foster 	TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), \
240978d57e45SBrian Foster 	TP_ARGS(log, in_f))
241078d57e45SBrian Foster 
241178d57e45SBrian Foster DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_cancel);
241278d57e45SBrian Foster DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_recover);
241378d57e45SBrian Foster 
2414c59d87c4SChristoph Hellwig DECLARE_EVENT_CLASS(xfs_discard_class,
2415c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2416c59d87c4SChristoph Hellwig 		 xfs_agblock_t agbno, xfs_extlen_t len),
2417c59d87c4SChristoph Hellwig 	TP_ARGS(mp, agno, agbno, len),
2418c59d87c4SChristoph Hellwig 	TP_STRUCT__entry(
2419c59d87c4SChristoph Hellwig 		__field(dev_t, dev)
2420c59d87c4SChristoph Hellwig 		__field(xfs_agnumber_t, agno)
2421c59d87c4SChristoph Hellwig 		__field(xfs_agblock_t, agbno)
2422c59d87c4SChristoph Hellwig 		__field(xfs_extlen_t, len)
2423c59d87c4SChristoph Hellwig 	),
2424c59d87c4SChristoph Hellwig 	TP_fast_assign(
2425c59d87c4SChristoph Hellwig 		__entry->dev = mp->m_super->s_dev;
2426c59d87c4SChristoph Hellwig 		__entry->agno = agno;
2427c59d87c4SChristoph Hellwig 		__entry->agbno = agbno;
2428c59d87c4SChristoph Hellwig 		__entry->len = len;
2429c59d87c4SChristoph Hellwig 	),
24307989acccSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
2431c59d87c4SChristoph Hellwig 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2432c59d87c4SChristoph Hellwig 		  __entry->agno,
2433c59d87c4SChristoph Hellwig 		  __entry->agbno,
2434c59d87c4SChristoph Hellwig 		  __entry->len)
2435c59d87c4SChristoph Hellwig )
2436c59d87c4SChristoph Hellwig 
2437c59d87c4SChristoph Hellwig #define DEFINE_DISCARD_EVENT(name) \
2438c59d87c4SChristoph Hellwig DEFINE_EVENT(xfs_discard_class, name, \
2439c59d87c4SChristoph Hellwig 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2440c59d87c4SChristoph Hellwig 		 xfs_agblock_t agbno, xfs_extlen_t len), \
2441c59d87c4SChristoph Hellwig 	TP_ARGS(mp, agno, agbno, len))
2442c59d87c4SChristoph Hellwig DEFINE_DISCARD_EVENT(xfs_discard_extent);
2443c59d87c4SChristoph Hellwig DEFINE_DISCARD_EVENT(xfs_discard_toosmall);
2444c59d87c4SChristoph Hellwig DEFINE_DISCARD_EVENT(xfs_discard_exclude);
2445c59d87c4SChristoph Hellwig DEFINE_DISCARD_EVENT(xfs_discard_busy);
2446c59d87c4SChristoph Hellwig 
24472c813ad6SDarrick J. Wong /* btree cursor events */
2448c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi);
2449c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi);
2450c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi);
2451c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_INOi);
2452c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi);
2453c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi);
2454c494213fSDarrick J. Wong TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi);
2455c494213fSDarrick J. Wong 
24562c813ad6SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_btree_cur_class,
24572c813ad6SDarrick J. Wong 	TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp),
24582c813ad6SDarrick J. Wong 	TP_ARGS(cur, level, bp),
24592c813ad6SDarrick J. Wong 	TP_STRUCT__entry(
24602c813ad6SDarrick J. Wong 		__field(dev_t, dev)
24612c813ad6SDarrick J. Wong 		__field(xfs_btnum_t, btnum)
24622c813ad6SDarrick J. Wong 		__field(int, level)
24632c813ad6SDarrick J. Wong 		__field(int, nlevels)
24642c813ad6SDarrick J. Wong 		__field(int, ptr)
24652c813ad6SDarrick J. Wong 		__field(xfs_daddr_t, daddr)
24662c813ad6SDarrick J. Wong 	),
24672c813ad6SDarrick J. Wong 	TP_fast_assign(
24682c813ad6SDarrick J. Wong 		__entry->dev = cur->bc_mp->m_super->s_dev;
24692c813ad6SDarrick J. Wong 		__entry->btnum = cur->bc_btnum;
24702c813ad6SDarrick J. Wong 		__entry->level = level;
24712c813ad6SDarrick J. Wong 		__entry->nlevels = cur->bc_nlevels;
24726ca444cfSDarrick J. Wong 		__entry->ptr = cur->bc_levels[level].ptr;
24739343ee76SDave Chinner 		__entry->daddr = bp ? xfs_buf_daddr(bp) : -1;
24742c813ad6SDarrick J. Wong 	),
2475c494213fSDarrick J. Wong 	TP_printk("dev %d:%d btree %s level %d/%d ptr %d daddr 0x%llx",
24762c813ad6SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2477c494213fSDarrick J. Wong 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
24782c813ad6SDarrick J. Wong 		  __entry->level,
24792c813ad6SDarrick J. Wong 		  __entry->nlevels,
24802c813ad6SDarrick J. Wong 		  __entry->ptr,
24812c813ad6SDarrick J. Wong 		  (unsigned long long)__entry->daddr)
24822c813ad6SDarrick J. Wong )
24832c813ad6SDarrick J. Wong 
24842c813ad6SDarrick J. Wong #define DEFINE_BTREE_CUR_EVENT(name) \
24852c813ad6SDarrick J. Wong DEFINE_EVENT(xfs_btree_cur_class, name, \
24862c813ad6SDarrick J. Wong 	TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \
24872c813ad6SDarrick J. Wong 	TP_ARGS(cur, level, bp))
24882c813ad6SDarrick J. Wong DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys);
2489105f7d83SDarrick J. Wong DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range);
24902c813ad6SDarrick J. Wong 
24913cd48abcSDarrick J. Wong /* deferred ops */
24923cd48abcSDarrick J. Wong struct xfs_defer_pending;
24933cd48abcSDarrick J. Wong 
24943cd48abcSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_defer_class,
24959d9e6233SBrian Foster 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip),
24969d9e6233SBrian Foster 	TP_ARGS(tp, caller_ip),
24973cd48abcSDarrick J. Wong 	TP_STRUCT__entry(
24983cd48abcSDarrick J. Wong 		__field(dev_t, dev)
24999d9e6233SBrian Foster 		__field(struct xfs_trans *, tp)
25003f88a15aSChristoph Hellwig 		__field(char, committed)
2501e632a569SDave Chinner 		__field(unsigned long, caller_ip)
25023cd48abcSDarrick J. Wong 	),
25033cd48abcSDarrick J. Wong 	TP_fast_assign(
25049d9e6233SBrian Foster 		__entry->dev = tp->t_mountp->m_super->s_dev;
25059d9e6233SBrian Foster 		__entry->tp = tp;
2506e632a569SDave Chinner 		__entry->caller_ip = caller_ip;
25073cd48abcSDarrick J. Wong 	),
25089d9e6233SBrian Foster 	TP_printk("dev %d:%d tp %p caller %pS",
25093cd48abcSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25109d9e6233SBrian Foster 		  __entry->tp,
2511e632a569SDave Chinner 		  (char *)__entry->caller_ip)
25123cd48abcSDarrick J. Wong )
25133cd48abcSDarrick J. Wong #define DEFINE_DEFER_EVENT(name) \
25143cd48abcSDarrick J. Wong DEFINE_EVENT(xfs_defer_class, name, \
25159d9e6233SBrian Foster 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \
25169d9e6233SBrian Foster 	TP_ARGS(tp, caller_ip))
25173cd48abcSDarrick J. Wong 
25183cd48abcSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_defer_error_class,
25199d9e6233SBrian Foster 	TP_PROTO(struct xfs_trans *tp, int error),
25209d9e6233SBrian Foster 	TP_ARGS(tp, error),
25213cd48abcSDarrick J. Wong 	TP_STRUCT__entry(
25223cd48abcSDarrick J. Wong 		__field(dev_t, dev)
25239d9e6233SBrian Foster 		__field(struct xfs_trans *, tp)
25243f88a15aSChristoph Hellwig 		__field(char, committed)
25253cd48abcSDarrick J. Wong 		__field(int, error)
25263cd48abcSDarrick J. Wong 	),
25273cd48abcSDarrick J. Wong 	TP_fast_assign(
25289d9e6233SBrian Foster 		__entry->dev = tp->t_mountp->m_super->s_dev;
25299d9e6233SBrian Foster 		__entry->tp = tp;
25303cd48abcSDarrick J. Wong 		__entry->error = error;
25313cd48abcSDarrick J. Wong 	),
25329d9e6233SBrian Foster 	TP_printk("dev %d:%d tp %p err %d",
25333cd48abcSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25349d9e6233SBrian Foster 		  __entry->tp,
25353cd48abcSDarrick J. Wong 		  __entry->error)
25363cd48abcSDarrick J. Wong )
25373cd48abcSDarrick J. Wong #define DEFINE_DEFER_ERROR_EVENT(name) \
25383cd48abcSDarrick J. Wong DEFINE_EVENT(xfs_defer_error_class, name, \
25399d9e6233SBrian Foster 	TP_PROTO(struct xfs_trans *tp, int error), \
25409d9e6233SBrian Foster 	TP_ARGS(tp, error))
25413cd48abcSDarrick J. Wong 
25423cd48abcSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_defer_pending_class,
25433cd48abcSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp),
25443cd48abcSDarrick J. Wong 	TP_ARGS(mp, dfp),
25453cd48abcSDarrick J. Wong 	TP_STRUCT__entry(
25463cd48abcSDarrick J. Wong 		__field(dev_t, dev)
25473cd48abcSDarrick J. Wong 		__field(int, type)
25483cd48abcSDarrick J. Wong 		__field(void *, intent)
25493f88a15aSChristoph Hellwig 		__field(char, committed)
25503cd48abcSDarrick J. Wong 		__field(int, nr)
25513cd48abcSDarrick J. Wong 	),
25523cd48abcSDarrick J. Wong 	TP_fast_assign(
25533cd48abcSDarrick J. Wong 		__entry->dev = mp ? mp->m_super->s_dev : 0;
255402b100fbSDarrick J. Wong 		__entry->type = dfp->dfp_type;
25553cd48abcSDarrick J. Wong 		__entry->intent = dfp->dfp_intent;
2556ea78d808SDarrick J. Wong 		__entry->committed = dfp->dfp_done != NULL;
25573cd48abcSDarrick J. Wong 		__entry->nr = dfp->dfp_count;
25583cd48abcSDarrick J. Wong 	),
255942bf9dbaSHou Tao 	TP_printk("dev %d:%d optype %d intent %p committed %d nr %d",
25603cd48abcSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25613cd48abcSDarrick J. Wong 		  __entry->type,
25623cd48abcSDarrick J. Wong 		  __entry->intent,
25633cd48abcSDarrick J. Wong 		  __entry->committed,
25643cd48abcSDarrick J. Wong 		  __entry->nr)
25653cd48abcSDarrick J. Wong )
25663cd48abcSDarrick J. Wong #define DEFINE_DEFER_PENDING_EVENT(name) \
25673cd48abcSDarrick J. Wong DEFINE_EVENT(xfs_defer_pending_class, name, \
25683cd48abcSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), \
25693cd48abcSDarrick J. Wong 	TP_ARGS(mp, dfp))
25703cd48abcSDarrick J. Wong 
25713cd48abcSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_phys_extent_deferred_class,
25723cd48abcSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
25733cd48abcSDarrick J. Wong 		 int type, xfs_agblock_t agbno, xfs_extlen_t len),
25743cd48abcSDarrick J. Wong 	TP_ARGS(mp, agno, type, agbno, len),
25753cd48abcSDarrick J. Wong 	TP_STRUCT__entry(
25763cd48abcSDarrick J. Wong 		__field(dev_t, dev)
25773cd48abcSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
25783cd48abcSDarrick J. Wong 		__field(int, type)
25793cd48abcSDarrick J. Wong 		__field(xfs_agblock_t, agbno)
25803cd48abcSDarrick J. Wong 		__field(xfs_extlen_t, len)
25813cd48abcSDarrick J. Wong 	),
25823cd48abcSDarrick J. Wong 	TP_fast_assign(
25833cd48abcSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
25843cd48abcSDarrick J. Wong 		__entry->agno = agno;
25853cd48abcSDarrick J. Wong 		__entry->type = type;
25863cd48abcSDarrick J. Wong 		__entry->agbno = agbno;
25873cd48abcSDarrick J. Wong 		__entry->len = len;
25883cd48abcSDarrick J. Wong 	),
25897989acccSDarrick J. Wong 	TP_printk("dev %d:%d op %d agno 0x%x agbno 0x%x fsbcount 0x%x",
25903cd48abcSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25913cd48abcSDarrick J. Wong 		  __entry->type,
25923cd48abcSDarrick J. Wong 		  __entry->agno,
25933cd48abcSDarrick J. Wong 		  __entry->agbno,
25943cd48abcSDarrick J. Wong 		  __entry->len)
25953cd48abcSDarrick J. Wong );
25963cd48abcSDarrick J. Wong #define DEFINE_PHYS_EXTENT_DEFERRED_EVENT(name) \
25973cd48abcSDarrick J. Wong DEFINE_EVENT(xfs_phys_extent_deferred_class, name, \
25983cd48abcSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
25993cd48abcSDarrick J. Wong 		 int type, \
26003cd48abcSDarrick J. Wong 		 xfs_agblock_t bno, \
26013cd48abcSDarrick J. Wong 		 xfs_extlen_t len), \
26023cd48abcSDarrick J. Wong 	TP_ARGS(mp, agno, type, bno, len))
26033cd48abcSDarrick J. Wong 
26043cd48abcSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_map_extent_deferred_class,
26053cd48abcSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
26063cd48abcSDarrick J. Wong 		 int op,
26073cd48abcSDarrick J. Wong 		 xfs_agblock_t agbno,
26083cd48abcSDarrick J. Wong 		 xfs_ino_t ino,
26093cd48abcSDarrick J. Wong 		 int whichfork,
26103cd48abcSDarrick J. Wong 		 xfs_fileoff_t offset,
26113cd48abcSDarrick J. Wong 		 xfs_filblks_t len,
26123cd48abcSDarrick J. Wong 		 xfs_exntst_t state),
26133cd48abcSDarrick J. Wong 	TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state),
26143cd48abcSDarrick J. Wong 	TP_STRUCT__entry(
26153cd48abcSDarrick J. Wong 		__field(dev_t, dev)
26163cd48abcSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
26173cd48abcSDarrick J. Wong 		__field(xfs_ino_t, ino)
26183cd48abcSDarrick J. Wong 		__field(xfs_agblock_t, agbno)
26193cd48abcSDarrick J. Wong 		__field(int, whichfork)
26203cd48abcSDarrick J. Wong 		__field(xfs_fileoff_t, l_loff)
26213cd48abcSDarrick J. Wong 		__field(xfs_filblks_t, l_len)
26223cd48abcSDarrick J. Wong 		__field(xfs_exntst_t, l_state)
26233cd48abcSDarrick J. Wong 		__field(int, op)
26243cd48abcSDarrick J. Wong 	),
26253cd48abcSDarrick J. Wong 	TP_fast_assign(
26263cd48abcSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
26273cd48abcSDarrick J. Wong 		__entry->agno = agno;
26283cd48abcSDarrick J. Wong 		__entry->ino = ino;
26293cd48abcSDarrick J. Wong 		__entry->agbno = agbno;
26303cd48abcSDarrick J. Wong 		__entry->whichfork = whichfork;
26313cd48abcSDarrick J. Wong 		__entry->l_loff = offset;
26323cd48abcSDarrick J. Wong 		__entry->l_len = len;
26333cd48abcSDarrick J. Wong 		__entry->l_state = state;
26343cd48abcSDarrick J. Wong 		__entry->op = op;
26353cd48abcSDarrick J. Wong 	),
26367989acccSDarrick J. Wong 	TP_printk("dev %d:%d op %d agno 0x%x agbno 0x%x owner 0x%llx %s fileoff 0x%llx fsbcount 0x%llx state %d",
26373cd48abcSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
26383cd48abcSDarrick J. Wong 		  __entry->op,
26393cd48abcSDarrick J. Wong 		  __entry->agno,
26403cd48abcSDarrick J. Wong 		  __entry->agbno,
26413cd48abcSDarrick J. Wong 		  __entry->ino,
2642f93f85f7SDarrick J. Wong 		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
26433cd48abcSDarrick J. Wong 		  __entry->l_loff,
26443cd48abcSDarrick J. Wong 		  __entry->l_len,
26453cd48abcSDarrick J. Wong 		  __entry->l_state)
26463cd48abcSDarrick J. Wong );
26473cd48abcSDarrick J. Wong #define DEFINE_MAP_EXTENT_DEFERRED_EVENT(name) \
26483cd48abcSDarrick J. Wong DEFINE_EVENT(xfs_map_extent_deferred_class, name, \
26493cd48abcSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
26503cd48abcSDarrick J. Wong 		 int op, \
26513cd48abcSDarrick J. Wong 		 xfs_agblock_t agbno, \
26523cd48abcSDarrick J. Wong 		 xfs_ino_t ino, \
26533cd48abcSDarrick J. Wong 		 int whichfork, \
26543cd48abcSDarrick J. Wong 		 xfs_fileoff_t offset, \
26553cd48abcSDarrick J. Wong 		 xfs_filblks_t len, \
26563cd48abcSDarrick J. Wong 		 xfs_exntst_t state), \
26573cd48abcSDarrick J. Wong 	TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state))
26583cd48abcSDarrick J. Wong 
26593cd48abcSDarrick J. Wong DEFINE_DEFER_EVENT(xfs_defer_cancel);
26603cd48abcSDarrick J. Wong DEFINE_DEFER_EVENT(xfs_defer_trans_roll);
26613cd48abcSDarrick J. Wong DEFINE_DEFER_EVENT(xfs_defer_trans_abort);
26623cd48abcSDarrick J. Wong DEFINE_DEFER_EVENT(xfs_defer_finish);
26633cd48abcSDarrick J. Wong DEFINE_DEFER_EVENT(xfs_defer_finish_done);
26643cd48abcSDarrick J. Wong 
26653cd48abcSDarrick J. Wong DEFINE_DEFER_ERROR_EVENT(xfs_defer_trans_roll_error);
26663cd48abcSDarrick J. Wong DEFINE_DEFER_ERROR_EVENT(xfs_defer_finish_error);
26673cd48abcSDarrick J. Wong 
26681ae093cbSBrian Foster DEFINE_DEFER_PENDING_EVENT(xfs_defer_create_intent);
26691ae093cbSBrian Foster DEFINE_DEFER_PENDING_EVENT(xfs_defer_cancel_list);
26703cd48abcSDarrick J. Wong DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish);
26713cd48abcSDarrick J. Wong DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort);
26724e919af7SDarrick J. Wong DEFINE_DEFER_PENDING_EVENT(xfs_defer_relog_intent);
26733cd48abcSDarrick J. Wong 
2674ba9e7802SDarrick J. Wong #define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT
2675ba9e7802SDarrick J. Wong DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer);
2676ba9e7802SDarrick J. Wong DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred);
2677f8f2835aSBrian Foster DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_defer);
2678f8f2835aSBrian Foster DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_deferred);
2679ba9e7802SDarrick J. Wong 
2680d5c88131SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_defer_pending_item_class,
2681d5c88131SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp,
2682d5c88131SDarrick J. Wong 		 void *item),
2683d5c88131SDarrick J. Wong 	TP_ARGS(mp, dfp, item),
2684d5c88131SDarrick J. Wong 	TP_STRUCT__entry(
2685d5c88131SDarrick J. Wong 		__field(dev_t, dev)
2686d5c88131SDarrick J. Wong 		__field(int, type)
2687d5c88131SDarrick J. Wong 		__field(void *, intent)
2688d5c88131SDarrick J. Wong 		__field(void *, item)
2689d5c88131SDarrick J. Wong 		__field(char, committed)
2690d5c88131SDarrick J. Wong 		__field(int, nr)
2691d5c88131SDarrick J. Wong 	),
2692d5c88131SDarrick J. Wong 	TP_fast_assign(
2693d5c88131SDarrick J. Wong 		__entry->dev = mp ? mp->m_super->s_dev : 0;
2694d5c88131SDarrick J. Wong 		__entry->type = dfp->dfp_type;
2695d5c88131SDarrick J. Wong 		__entry->intent = dfp->dfp_intent;
2696d5c88131SDarrick J. Wong 		__entry->item = item;
2697d5c88131SDarrick J. Wong 		__entry->committed = dfp->dfp_done != NULL;
2698d5c88131SDarrick J. Wong 		__entry->nr = dfp->dfp_count;
2699d5c88131SDarrick J. Wong 	),
2700d5c88131SDarrick J. Wong 	TP_printk("dev %d:%d optype %d intent %p item %p committed %d nr %d",
2701d5c88131SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2702d5c88131SDarrick J. Wong 		  __entry->type,
2703d5c88131SDarrick J. Wong 		  __entry->intent,
2704d5c88131SDarrick J. Wong 		  __entry->item,
2705d5c88131SDarrick J. Wong 		  __entry->committed,
2706d5c88131SDarrick J. Wong 		  __entry->nr)
2707d5c88131SDarrick J. Wong )
2708d5c88131SDarrick J. Wong #define DEFINE_DEFER_PENDING_ITEM_EVENT(name) \
2709d5c88131SDarrick J. Wong DEFINE_EVENT(xfs_defer_pending_item_class, name, \
2710d5c88131SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp, \
2711d5c88131SDarrick J. Wong 		 void *item), \
2712d5c88131SDarrick J. Wong 	TP_ARGS(mp, dfp, item))
2713d5c88131SDarrick J. Wong 
2714d5c88131SDarrick J. Wong DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_add_item);
2715d5c88131SDarrick J. Wong DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_cancel_item);
2716d5c88131SDarrick J. Wong DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_finish_item);
2717d5c88131SDarrick J. Wong 
2718673930c3SDarrick J. Wong /* rmap tracepoints */
2719673930c3SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_rmap_class,
2720673930c3SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2721673930c3SDarrick J. Wong 		 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten,
272266e3237eSDarrick J. Wong 		 const struct xfs_owner_info *oinfo),
2723673930c3SDarrick J. Wong 	TP_ARGS(mp, agno, agbno, len, unwritten, oinfo),
2724673930c3SDarrick J. Wong 	TP_STRUCT__entry(
2725673930c3SDarrick J. Wong 		__field(dev_t, dev)
2726673930c3SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
2727673930c3SDarrick J. Wong 		__field(xfs_agblock_t, agbno)
2728673930c3SDarrick J. Wong 		__field(xfs_extlen_t, len)
2729673930c3SDarrick J. Wong 		__field(uint64_t, owner)
2730673930c3SDarrick J. Wong 		__field(uint64_t, offset)
2731673930c3SDarrick J. Wong 		__field(unsigned long, flags)
2732673930c3SDarrick J. Wong 	),
2733673930c3SDarrick J. Wong 	TP_fast_assign(
2734673930c3SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
2735673930c3SDarrick J. Wong 		__entry->agno = agno;
2736673930c3SDarrick J. Wong 		__entry->agbno = agbno;
2737673930c3SDarrick J. Wong 		__entry->len = len;
2738673930c3SDarrick J. Wong 		__entry->owner = oinfo->oi_owner;
2739673930c3SDarrick J. Wong 		__entry->offset = oinfo->oi_offset;
2740673930c3SDarrick J. Wong 		__entry->flags = oinfo->oi_flags;
2741035e00acSDarrick J. Wong 		if (unwritten)
2742035e00acSDarrick J. Wong 			__entry->flags |= XFS_RMAP_UNWRITTEN;
2743673930c3SDarrick J. Wong 	),
27447989acccSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%lx",
2745673930c3SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2746673930c3SDarrick J. Wong 		  __entry->agno,
2747673930c3SDarrick J. Wong 		  __entry->agbno,
2748673930c3SDarrick J. Wong 		  __entry->len,
2749673930c3SDarrick J. Wong 		  __entry->owner,
2750673930c3SDarrick J. Wong 		  __entry->offset,
2751673930c3SDarrick J. Wong 		  __entry->flags)
2752673930c3SDarrick J. Wong );
2753673930c3SDarrick J. Wong #define DEFINE_RMAP_EVENT(name) \
2754673930c3SDarrick J. Wong DEFINE_EVENT(xfs_rmap_class, name, \
2755673930c3SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2756673930c3SDarrick J. Wong 		 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \
275766e3237eSDarrick J. Wong 		 const struct xfs_owner_info *oinfo), \
2758673930c3SDarrick J. Wong 	TP_ARGS(mp, agno, agbno, len, unwritten, oinfo))
2759673930c3SDarrick J. Wong 
2760673930c3SDarrick J. Wong /* simple AG-based error/%ip tracepoint class */
2761673930c3SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_ag_error_class,
2762673930c3SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error,
2763673930c3SDarrick J. Wong 		 unsigned long caller_ip),
2764673930c3SDarrick J. Wong 	TP_ARGS(mp, agno, error, caller_ip),
2765673930c3SDarrick J. Wong 	TP_STRUCT__entry(
2766673930c3SDarrick J. Wong 		__field(dev_t, dev)
2767673930c3SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
2768673930c3SDarrick J. Wong 		__field(int, error)
2769673930c3SDarrick J. Wong 		__field(unsigned long, caller_ip)
2770673930c3SDarrick J. Wong 	),
2771673930c3SDarrick J. Wong 	TP_fast_assign(
2772673930c3SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
2773673930c3SDarrick J. Wong 		__entry->agno = agno;
2774673930c3SDarrick J. Wong 		__entry->error = error;
2775673930c3SDarrick J. Wong 		__entry->caller_ip = caller_ip;
2776673930c3SDarrick J. Wong 	),
27779febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x error %d caller %pS",
2778673930c3SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2779673930c3SDarrick J. Wong 		  __entry->agno,
2780673930c3SDarrick J. Wong 		  __entry->error,
2781673930c3SDarrick J. Wong 		  (char *)__entry->caller_ip)
2782673930c3SDarrick J. Wong );
2783673930c3SDarrick J. Wong 
2784673930c3SDarrick J. Wong #define DEFINE_AG_ERROR_EVENT(name) \
2785673930c3SDarrick J. Wong DEFINE_EVENT(xfs_ag_error_class, name, \
2786673930c3SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \
2787673930c3SDarrick J. Wong 		 unsigned long caller_ip), \
2788673930c3SDarrick J. Wong 	TP_ARGS(mp, agno, error, caller_ip))
2789673930c3SDarrick J. Wong 
2790673930c3SDarrick J. Wong DEFINE_RMAP_EVENT(xfs_rmap_unmap);
2791673930c3SDarrick J. Wong DEFINE_RMAP_EVENT(xfs_rmap_unmap_done);
2792673930c3SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_unmap_error);
2793673930c3SDarrick J. Wong DEFINE_RMAP_EVENT(xfs_rmap_map);
2794673930c3SDarrick J. Wong DEFINE_RMAP_EVENT(xfs_rmap_map_done);
2795673930c3SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_map_error);
2796fb7d9267SDarrick J. Wong DEFINE_RMAP_EVENT(xfs_rmap_convert);
2797fb7d9267SDarrick J. Wong DEFINE_RMAP_EVENT(xfs_rmap_convert_done);
2798fb7d9267SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_error);
2799fb7d9267SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_state);
2800673930c3SDarrick J. Wong 
2801aa966d84SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_rmapbt_class,
2802aa966d84SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2803aa966d84SDarrick J. Wong 		 xfs_agblock_t agbno, xfs_extlen_t len,
2804aa966d84SDarrick J. Wong 		 uint64_t owner, uint64_t offset, unsigned int flags),
2805aa966d84SDarrick J. Wong 	TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
2806aa966d84SDarrick J. Wong 	TP_STRUCT__entry(
2807aa966d84SDarrick J. Wong 		__field(dev_t, dev)
2808aa966d84SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
2809aa966d84SDarrick J. Wong 		__field(xfs_agblock_t, agbno)
2810aa966d84SDarrick J. Wong 		__field(xfs_extlen_t, len)
2811aa966d84SDarrick J. Wong 		__field(uint64_t, owner)
2812aa966d84SDarrick J. Wong 		__field(uint64_t, offset)
2813aa966d84SDarrick J. Wong 		__field(unsigned int, flags)
2814aa966d84SDarrick J. Wong 	),
2815aa966d84SDarrick J. Wong 	TP_fast_assign(
2816aa966d84SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
2817aa966d84SDarrick J. Wong 		__entry->agno = agno;
2818aa966d84SDarrick J. Wong 		__entry->agbno = agbno;
2819aa966d84SDarrick J. Wong 		__entry->len = len;
2820aa966d84SDarrick J. Wong 		__entry->owner = owner;
2821aa966d84SDarrick J. Wong 		__entry->offset = offset;
2822aa966d84SDarrick J. Wong 		__entry->flags = flags;
2823aa966d84SDarrick J. Wong 	),
28247989acccSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
2825aa966d84SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2826aa966d84SDarrick J. Wong 		  __entry->agno,
2827aa966d84SDarrick J. Wong 		  __entry->agbno,
2828aa966d84SDarrick J. Wong 		  __entry->len,
2829aa966d84SDarrick J. Wong 		  __entry->owner,
2830aa966d84SDarrick J. Wong 		  __entry->offset,
2831aa966d84SDarrick J. Wong 		  __entry->flags)
2832aa966d84SDarrick J. Wong );
2833aa966d84SDarrick J. Wong #define DEFINE_RMAPBT_EVENT(name) \
2834aa966d84SDarrick J. Wong DEFINE_EVENT(xfs_rmapbt_class, name, \
2835aa966d84SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2836aa966d84SDarrick J. Wong 		 xfs_agblock_t agbno, xfs_extlen_t len, \
2837aa966d84SDarrick J. Wong 		 uint64_t owner, uint64_t offset, unsigned int flags), \
2838aa966d84SDarrick J. Wong 	TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
2839aa966d84SDarrick J. Wong 
2840aa966d84SDarrick J. Wong #define DEFINE_RMAP_DEFERRED_EVENT DEFINE_MAP_EXTENT_DEFERRED_EVENT
2841aa966d84SDarrick J. Wong DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer);
2842aa966d84SDarrick J. Wong DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred);
2843aa966d84SDarrick J. Wong 
28444b8ed677SDarrick J. Wong DEFINE_BUSY_EVENT(xfs_rmapbt_alloc_block);
28454b8ed677SDarrick J. Wong DEFINE_BUSY_EVENT(xfs_rmapbt_free_block);
2846aa966d84SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_update);
2847aa966d84SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_insert);
2848aa966d84SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_delete);
2849aa966d84SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_insert_error);
2850aa966d84SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_delete_error);
2851aa966d84SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_rmap_update_error);
2852ceeb9c83SDarrick J. Wong 
2853ceeb9c83SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_candidate);
2854ceeb9c83SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_query);
2855ceeb9c83SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_candidate);
2856ceeb9c83SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range);
28570a1b0b38SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_result);
28580a1b0b38SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_find_right_neighbor_result);
2859fb7d9267SDarrick J. Wong DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_result);
28604b8ed677SDarrick J. Wong 
28619f3afb57SDarrick J. Wong /* deferred bmbt updates */
28629f3afb57SDarrick J. Wong #define DEFINE_BMAP_DEFERRED_EVENT	DEFINE_RMAP_DEFERRED_EVENT
28639f3afb57SDarrick J. Wong DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_defer);
28649f3afb57SDarrick J. Wong DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred);
28659f3afb57SDarrick J. Wong 
28663fd129b6SDarrick J. Wong /* per-AG reservation */
28673fd129b6SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_ag_resv_class,
28683fd129b6SDarrick J. Wong 	TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type resv,
28693fd129b6SDarrick J. Wong 		 xfs_extlen_t len),
28703fd129b6SDarrick J. Wong 	TP_ARGS(pag, resv, len),
28713fd129b6SDarrick J. Wong 	TP_STRUCT__entry(
28723fd129b6SDarrick J. Wong 		__field(dev_t, dev)
28733fd129b6SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
28743fd129b6SDarrick J. Wong 		__field(int, resv)
28753fd129b6SDarrick J. Wong 		__field(xfs_extlen_t, freeblks)
28763fd129b6SDarrick J. Wong 		__field(xfs_extlen_t, flcount)
28773fd129b6SDarrick J. Wong 		__field(xfs_extlen_t, reserved)
28783fd129b6SDarrick J. Wong 		__field(xfs_extlen_t, asked)
28793fd129b6SDarrick J. Wong 		__field(xfs_extlen_t, len)
28803fd129b6SDarrick J. Wong 	),
28813fd129b6SDarrick J. Wong 	TP_fast_assign(
28823fd129b6SDarrick J. Wong 		struct xfs_ag_resv	*r = xfs_perag_resv(pag, resv);
28833fd129b6SDarrick J. Wong 
28843fd129b6SDarrick J. Wong 		__entry->dev = pag->pag_mount->m_super->s_dev;
28853fd129b6SDarrick J. Wong 		__entry->agno = pag->pag_agno;
28863fd129b6SDarrick J. Wong 		__entry->resv = resv;
28873fd129b6SDarrick J. Wong 		__entry->freeblks = pag->pagf_freeblks;
28883fd129b6SDarrick J. Wong 		__entry->flcount = pag->pagf_flcount;
28893fd129b6SDarrick J. Wong 		__entry->reserved = r ? r->ar_reserved : 0;
28903fd129b6SDarrick J. Wong 		__entry->asked = r ? r->ar_asked : 0;
28913fd129b6SDarrick J. Wong 		__entry->len = len;
28923fd129b6SDarrick J. Wong 	),
28939febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x resv %d freeblks %u flcount %u "
289442bf9dbaSHou Tao 		  "resv %u ask %u len %u",
28953fd129b6SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
28963fd129b6SDarrick J. Wong 		  __entry->agno,
28973fd129b6SDarrick J. Wong 		  __entry->resv,
28983fd129b6SDarrick J. Wong 		  __entry->freeblks,
28993fd129b6SDarrick J. Wong 		  __entry->flcount,
29003fd129b6SDarrick J. Wong 		  __entry->reserved,
29013fd129b6SDarrick J. Wong 		  __entry->asked,
29023fd129b6SDarrick J. Wong 		  __entry->len)
29033fd129b6SDarrick J. Wong )
29043fd129b6SDarrick J. Wong #define DEFINE_AG_RESV_EVENT(name) \
29053fd129b6SDarrick J. Wong DEFINE_EVENT(xfs_ag_resv_class, name, \
29063fd129b6SDarrick J. Wong 	TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \
29073fd129b6SDarrick J. Wong 		 xfs_extlen_t len), \
29083fd129b6SDarrick J. Wong 	TP_ARGS(pag, type, len))
29093fd129b6SDarrick J. Wong 
29103fd129b6SDarrick J. Wong /* per-AG reservation tracepoints */
29113fd129b6SDarrick J. Wong DEFINE_AG_RESV_EVENT(xfs_ag_resv_init);
29123fd129b6SDarrick J. Wong DEFINE_AG_RESV_EVENT(xfs_ag_resv_free);
29133fd129b6SDarrick J. Wong DEFINE_AG_RESV_EVENT(xfs_ag_resv_alloc_extent);
29143fd129b6SDarrick J. Wong DEFINE_AG_RESV_EVENT(xfs_ag_resv_free_extent);
29153fd129b6SDarrick J. Wong DEFINE_AG_RESV_EVENT(xfs_ag_resv_critical);
29163fd129b6SDarrick J. Wong DEFINE_AG_RESV_EVENT(xfs_ag_resv_needed);
29173fd129b6SDarrick J. Wong 
29183fd129b6SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_ag_resv_free_error);
29193fd129b6SDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_ag_resv_init_error);
29203fd129b6SDarrick J. Wong 
2921c75c752dSDarrick J. Wong /* refcount tracepoint classes */
2922c75c752dSDarrick J. Wong 
2923c75c752dSDarrick J. Wong /* reuse the discard trace class for agbno/aglen-based traces */
2924c75c752dSDarrick J. Wong #define DEFINE_AG_EXTENT_EVENT(name) DEFINE_DISCARD_EVENT(name)
2925c75c752dSDarrick J. Wong 
2926c75c752dSDarrick J. Wong /* ag btree lookup tracepoint class */
292785f8dff0SDarrick J. Wong TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi);
292885f8dff0SDarrick J. Wong TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi);
292985f8dff0SDarrick J. Wong TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi);
2930c75c752dSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_ag_btree_lookup_class,
2931c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2932c75c752dSDarrick J. Wong 		 xfs_agblock_t agbno, xfs_lookup_t dir),
2933c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, agbno, dir),
2934c75c752dSDarrick J. Wong 	TP_STRUCT__entry(
2935c75c752dSDarrick J. Wong 		__field(dev_t, dev)
2936c75c752dSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
2937c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, agbno)
2938c75c752dSDarrick J. Wong 		__field(xfs_lookup_t, dir)
2939c75c752dSDarrick J. Wong 	),
2940c75c752dSDarrick J. Wong 	TP_fast_assign(
2941c75c752dSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
2942c75c752dSDarrick J. Wong 		__entry->agno = agno;
2943c75c752dSDarrick J. Wong 		__entry->agbno = agbno;
2944c75c752dSDarrick J. Wong 		__entry->dir = dir;
2945c75c752dSDarrick J. Wong 	),
2946f7b08163SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agbno 0x%x cmp %s(%d)",
2947c75c752dSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2948c75c752dSDarrick J. Wong 		  __entry->agno,
2949c75c752dSDarrick J. Wong 		  __entry->agbno,
2950c75c752dSDarrick J. Wong 		  __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR),
2951c75c752dSDarrick J. Wong 		  __entry->dir)
2952c75c752dSDarrick J. Wong )
2953c75c752dSDarrick J. Wong 
2954c75c752dSDarrick J. Wong #define DEFINE_AG_BTREE_LOOKUP_EVENT(name) \
2955c75c752dSDarrick J. Wong DEFINE_EVENT(xfs_ag_btree_lookup_class, name, \
2956c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2957c75c752dSDarrick J. Wong 		 xfs_agblock_t agbno, xfs_lookup_t dir), \
2958c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, agbno, dir))
2959c75c752dSDarrick J. Wong 
2960c75c752dSDarrick J. Wong /* single-rcext tracepoint class */
2961c75c752dSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_refcount_extent_class,
2962c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2963c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *irec),
2964c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, irec),
2965c75c752dSDarrick J. Wong 	TP_STRUCT__entry(
2966c75c752dSDarrick J. Wong 		__field(dev_t, dev)
2967c75c752dSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
2968571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, domain)
2969c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, startblock)
2970c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, blockcount)
2971c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, refcount)
2972c75c752dSDarrick J. Wong 	),
2973c75c752dSDarrick J. Wong 	TP_fast_assign(
2974c75c752dSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
2975c75c752dSDarrick J. Wong 		__entry->agno = agno;
2976571423a1SDarrick J. Wong 		__entry->domain = irec->rc_domain;
2977c75c752dSDarrick J. Wong 		__entry->startblock = irec->rc_startblock;
2978c75c752dSDarrick J. Wong 		__entry->blockcount = irec->rc_blockcount;
2979c75c752dSDarrick J. Wong 		__entry->refcount = irec->rc_refcount;
2980c75c752dSDarrick J. Wong 	),
2981571423a1SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u",
2982c75c752dSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2983c75c752dSDarrick J. Wong 		  __entry->agno,
2984571423a1SDarrick J. Wong 		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
2985c75c752dSDarrick J. Wong 		  __entry->startblock,
2986c75c752dSDarrick J. Wong 		  __entry->blockcount,
2987c75c752dSDarrick J. Wong 		  __entry->refcount)
2988c75c752dSDarrick J. Wong )
2989c75c752dSDarrick J. Wong 
2990c75c752dSDarrick J. Wong #define DEFINE_REFCOUNT_EXTENT_EVENT(name) \
2991c75c752dSDarrick J. Wong DEFINE_EVENT(xfs_refcount_extent_class, name, \
2992c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2993c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *irec), \
2994c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, irec))
2995c75c752dSDarrick J. Wong 
2996c75c752dSDarrick J. Wong /* single-rcext and an agbno tracepoint class */
2997c75c752dSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class,
2998c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2999c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *irec, xfs_agblock_t agbno),
3000c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, irec, agbno),
3001c75c752dSDarrick J. Wong 	TP_STRUCT__entry(
3002c75c752dSDarrick J. Wong 		__field(dev_t, dev)
3003c75c752dSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3004571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, domain)
3005c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, startblock)
3006c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, blockcount)
3007c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, refcount)
3008c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, agbno)
3009c75c752dSDarrick J. Wong 	),
3010c75c752dSDarrick J. Wong 	TP_fast_assign(
3011c75c752dSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3012c75c752dSDarrick J. Wong 		__entry->agno = agno;
3013571423a1SDarrick J. Wong 		__entry->domain = irec->rc_domain;
3014c75c752dSDarrick J. Wong 		__entry->startblock = irec->rc_startblock;
3015c75c752dSDarrick J. Wong 		__entry->blockcount = irec->rc_blockcount;
3016c75c752dSDarrick J. Wong 		__entry->refcount = irec->rc_refcount;
3017c75c752dSDarrick J. Wong 		__entry->agbno = agbno;
3018c75c752dSDarrick J. Wong 	),
3019571423a1SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",
3020c75c752dSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3021c75c752dSDarrick J. Wong 		  __entry->agno,
3022571423a1SDarrick J. Wong 		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
3023c75c752dSDarrick J. Wong 		  __entry->startblock,
3024c75c752dSDarrick J. Wong 		  __entry->blockcount,
3025c75c752dSDarrick J. Wong 		  __entry->refcount,
3026c75c752dSDarrick J. Wong 		  __entry->agbno)
3027c75c752dSDarrick J. Wong )
3028c75c752dSDarrick J. Wong 
3029c75c752dSDarrick J. Wong #define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \
3030c75c752dSDarrick J. Wong DEFINE_EVENT(xfs_refcount_extent_at_class, name, \
3031c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
3032c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *irec, xfs_agblock_t agbno), \
3033c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, irec, agbno))
3034c75c752dSDarrick J. Wong 
3035c75c752dSDarrick J. Wong /* double-rcext tracepoint class */
3036c75c752dSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,
3037c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3038c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2),
3039c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, i1, i2),
3040c75c752dSDarrick J. Wong 	TP_STRUCT__entry(
3041c75c752dSDarrick J. Wong 		__field(dev_t, dev)
3042c75c752dSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3043571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i1_domain)
3044c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i1_startblock)
3045c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i1_blockcount)
3046c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i1_refcount)
3047571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i2_domain)
3048c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i2_startblock)
3049c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i2_blockcount)
3050c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i2_refcount)
3051c75c752dSDarrick J. Wong 	),
3052c75c752dSDarrick J. Wong 	TP_fast_assign(
3053c75c752dSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3054c75c752dSDarrick J. Wong 		__entry->agno = agno;
3055571423a1SDarrick J. Wong 		__entry->i1_domain = i1->rc_domain;
3056c75c752dSDarrick J. Wong 		__entry->i1_startblock = i1->rc_startblock;
3057c75c752dSDarrick J. Wong 		__entry->i1_blockcount = i1->rc_blockcount;
3058c75c752dSDarrick J. Wong 		__entry->i1_refcount = i1->rc_refcount;
3059571423a1SDarrick J. Wong 		__entry->i2_domain = i2->rc_domain;
3060c75c752dSDarrick J. Wong 		__entry->i2_startblock = i2->rc_startblock;
3061c75c752dSDarrick J. Wong 		__entry->i2_blockcount = i2->rc_blockcount;
3062c75c752dSDarrick J. Wong 		__entry->i2_refcount = i2->rc_refcount;
3063c75c752dSDarrick J. Wong 	),
3064571423a1SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
3065571423a1SDarrick J. Wong 		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u",
3066c75c752dSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3067c75c752dSDarrick J. Wong 		  __entry->agno,
3068571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),
3069c75c752dSDarrick J. Wong 		  __entry->i1_startblock,
3070c75c752dSDarrick J. Wong 		  __entry->i1_blockcount,
3071c75c752dSDarrick J. Wong 		  __entry->i1_refcount,
3072571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS),
3073c75c752dSDarrick J. Wong 		  __entry->i2_startblock,
3074c75c752dSDarrick J. Wong 		  __entry->i2_blockcount,
3075c75c752dSDarrick J. Wong 		  __entry->i2_refcount)
3076c75c752dSDarrick J. Wong )
3077c75c752dSDarrick J. Wong 
3078c75c752dSDarrick J. Wong #define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \
3079c75c752dSDarrick J. Wong DEFINE_EVENT(xfs_refcount_double_extent_class, name, \
3080c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
3081c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), \
3082c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, i1, i2))
3083c75c752dSDarrick J. Wong 
3084c75c752dSDarrick J. Wong /* double-rcext and an agbno tracepoint class */
3085c75c752dSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
3086c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3087c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2,
3088c75c752dSDarrick J. Wong 		 xfs_agblock_t agbno),
3089c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, i1, i2, agbno),
3090c75c752dSDarrick J. Wong 	TP_STRUCT__entry(
3091c75c752dSDarrick J. Wong 		__field(dev_t, dev)
3092c75c752dSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3093571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i1_domain)
3094c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i1_startblock)
3095c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i1_blockcount)
3096c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i1_refcount)
3097571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i2_domain)
3098c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i2_startblock)
3099c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i2_blockcount)
3100c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i2_refcount)
3101c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, agbno)
3102c75c752dSDarrick J. Wong 	),
3103c75c752dSDarrick J. Wong 	TP_fast_assign(
3104c75c752dSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3105c75c752dSDarrick J. Wong 		__entry->agno = agno;
3106571423a1SDarrick J. Wong 		__entry->i1_domain = i1->rc_domain;
3107c75c752dSDarrick J. Wong 		__entry->i1_startblock = i1->rc_startblock;
3108c75c752dSDarrick J. Wong 		__entry->i1_blockcount = i1->rc_blockcount;
3109c75c752dSDarrick J. Wong 		__entry->i1_refcount = i1->rc_refcount;
3110571423a1SDarrick J. Wong 		__entry->i2_domain = i2->rc_domain;
3111c75c752dSDarrick J. Wong 		__entry->i2_startblock = i2->rc_startblock;
3112c75c752dSDarrick J. Wong 		__entry->i2_blockcount = i2->rc_blockcount;
3113c75c752dSDarrick J. Wong 		__entry->i2_refcount = i2->rc_refcount;
3114c75c752dSDarrick J. Wong 		__entry->agbno = agbno;
3115c75c752dSDarrick J. Wong 	),
3116571423a1SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
3117571423a1SDarrick J. Wong 		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",
3118c75c752dSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3119c75c752dSDarrick J. Wong 		  __entry->agno,
3120571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),
3121c75c752dSDarrick J. Wong 		  __entry->i1_startblock,
3122c75c752dSDarrick J. Wong 		  __entry->i1_blockcount,
3123c75c752dSDarrick J. Wong 		  __entry->i1_refcount,
3124571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS),
3125c75c752dSDarrick J. Wong 		  __entry->i2_startblock,
3126c75c752dSDarrick J. Wong 		  __entry->i2_blockcount,
3127c75c752dSDarrick J. Wong 		  __entry->i2_refcount,
3128c75c752dSDarrick J. Wong 		  __entry->agbno)
3129c75c752dSDarrick J. Wong )
3130c75c752dSDarrick J. Wong 
3131c75c752dSDarrick J. Wong #define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \
3132c75c752dSDarrick J. Wong DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \
3133c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
3134c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \
3135c75c752dSDarrick J. Wong 		 xfs_agblock_t agbno), \
3136c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, i1, i2, agbno))
3137c75c752dSDarrick J. Wong 
3138c75c752dSDarrick J. Wong /* triple-rcext tracepoint class */
3139c75c752dSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
3140c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3141c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2,
3142c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i3),
3143c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, i1, i2, i3),
3144c75c752dSDarrick J. Wong 	TP_STRUCT__entry(
3145c75c752dSDarrick J. Wong 		__field(dev_t, dev)
3146c75c752dSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3147571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i1_domain)
3148c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i1_startblock)
3149c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i1_blockcount)
3150c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i1_refcount)
3151571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i2_domain)
3152c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i2_startblock)
3153c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i2_blockcount)
3154c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i2_refcount)
3155571423a1SDarrick J. Wong 		__field(enum xfs_refc_domain, i3_domain)
3156c75c752dSDarrick J. Wong 		__field(xfs_agblock_t, i3_startblock)
3157c75c752dSDarrick J. Wong 		__field(xfs_extlen_t, i3_blockcount)
3158c75c752dSDarrick J. Wong 		__field(xfs_nlink_t, i3_refcount)
3159c75c752dSDarrick J. Wong 	),
3160c75c752dSDarrick J. Wong 	TP_fast_assign(
3161c75c752dSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3162c75c752dSDarrick J. Wong 		__entry->agno = agno;
3163571423a1SDarrick J. Wong 		__entry->i1_domain = i1->rc_domain;
3164c75c752dSDarrick J. Wong 		__entry->i1_startblock = i1->rc_startblock;
3165c75c752dSDarrick J. Wong 		__entry->i1_blockcount = i1->rc_blockcount;
3166c75c752dSDarrick J. Wong 		__entry->i1_refcount = i1->rc_refcount;
3167571423a1SDarrick J. Wong 		__entry->i2_domain = i2->rc_domain;
3168c75c752dSDarrick J. Wong 		__entry->i2_startblock = i2->rc_startblock;
3169c75c752dSDarrick J. Wong 		__entry->i2_blockcount = i2->rc_blockcount;
3170c75c752dSDarrick J. Wong 		__entry->i2_refcount = i2->rc_refcount;
3171571423a1SDarrick J. Wong 		__entry->i3_domain = i3->rc_domain;
3172c75c752dSDarrick J. Wong 		__entry->i3_startblock = i3->rc_startblock;
3173c75c752dSDarrick J. Wong 		__entry->i3_blockcount = i3->rc_blockcount;
3174c75c752dSDarrick J. Wong 		__entry->i3_refcount = i3->rc_refcount;
3175c75c752dSDarrick J. Wong 	),
3176571423a1SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
3177571423a1SDarrick J. Wong 		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
3178571423a1SDarrick J. Wong 		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u",
3179c75c752dSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3180c75c752dSDarrick J. Wong 		  __entry->agno,
3181571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),
3182c75c752dSDarrick J. Wong 		  __entry->i1_startblock,
3183c75c752dSDarrick J. Wong 		  __entry->i1_blockcount,
3184c75c752dSDarrick J. Wong 		  __entry->i1_refcount,
3185571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS),
3186c75c752dSDarrick J. Wong 		  __entry->i2_startblock,
3187c75c752dSDarrick J. Wong 		  __entry->i2_blockcount,
3188c75c752dSDarrick J. Wong 		  __entry->i2_refcount,
3189571423a1SDarrick J. Wong 		  __print_symbolic(__entry->i3_domain, XFS_REFC_DOMAIN_STRINGS),
3190c75c752dSDarrick J. Wong 		  __entry->i3_startblock,
3191c75c752dSDarrick J. Wong 		  __entry->i3_blockcount,
3192c75c752dSDarrick J. Wong 		  __entry->i3_refcount)
3193c75c752dSDarrick J. Wong );
3194c75c752dSDarrick J. Wong 
3195c75c752dSDarrick J. Wong #define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \
3196c75c752dSDarrick J. Wong DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \
3197c75c752dSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
3198c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \
3199c75c752dSDarrick J. Wong 		 struct xfs_refcount_irec *i3), \
3200c75c752dSDarrick J. Wong 	TP_ARGS(mp, agno, i1, i2, i3))
3201c75c752dSDarrick J. Wong 
3202c75c752dSDarrick J. Wong /* refcount btree tracepoints */
3203c75c752dSDarrick J. Wong DEFINE_BUSY_EVENT(xfs_refcountbt_alloc_block);
3204c75c752dSDarrick J. Wong DEFINE_BUSY_EVENT(xfs_refcountbt_free_block);
3205c75c752dSDarrick J. Wong DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcount_lookup);
3206c75c752dSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get);
3207c75c752dSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update);
3208c75c752dSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_insert);
3209c75c752dSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_delete);
3210c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_insert_error);
3211c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_delete_error);
3212c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_update_error);
3213c75c752dSDarrick J. Wong 
3214c75c752dSDarrick J. Wong /* refcount adjustment tracepoints */
3215c75c752dSDarrick J. Wong DEFINE_AG_EXTENT_EVENT(xfs_refcount_increase);
3216c75c752dSDarrick J. Wong DEFINE_AG_EXTENT_EVENT(xfs_refcount_decrease);
3217174edb0eSDarrick J. Wong DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_increase);
3218174edb0eSDarrick J. Wong DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_decrease);
3219c75c752dSDarrick J. Wong DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents);
3220c75c752dSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent);
3221174edb0eSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_recover_extent);
3222c75c752dSDarrick J. Wong DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_extent);
3223c75c752dSDarrick J. Wong DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent);
3224c75c752dSDarrick J. Wong DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent);
3225c75c752dSDarrick J. Wong DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent);
3226c75c752dSDarrick J. Wong DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent);
3227c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_error);
3228174edb0eSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_cow_error);
3229c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_center_extents_error);
3230c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_modify_extent_error);
3231c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_split_extent_error);
3232c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_left_extent_error);
3233c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_right_extent_error);
3234c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_find_left_extent_error);
3235c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_find_right_extent_error);
3236c75c752dSDarrick J. Wong 
3237c75c752dSDarrick J. Wong /* reflink helpers */
3238c75c752dSDarrick J. Wong DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared);
3239c75c752dSDarrick J. Wong DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared_result);
3240c75c752dSDarrick J. Wong DEFINE_AG_ERROR_EVENT(xfs_refcount_find_shared_error);
324133ba6129SDarrick J. Wong #define DEFINE_REFCOUNT_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT
324233ba6129SDarrick J. Wong DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_defer);
324333ba6129SDarrick J. Wong DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_deferred);
3244c75c752dSDarrick J. Wong 
3245f997ee21SDarrick J. Wong TRACE_EVENT(xfs_refcount_finish_one_leftover,
3246f997ee21SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
32470b11553eSDarrick J. Wong 		 int type, xfs_agblock_t agbno, xfs_extlen_t len),
32480b11553eSDarrick J. Wong 	TP_ARGS(mp, agno, type, agbno, len),
3249f997ee21SDarrick J. Wong 	TP_STRUCT__entry(
3250f997ee21SDarrick J. Wong 		__field(dev_t, dev)
3251f997ee21SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3252f997ee21SDarrick J. Wong 		__field(int, type)
3253f997ee21SDarrick J. Wong 		__field(xfs_agblock_t, agbno)
3254f997ee21SDarrick J. Wong 		__field(xfs_extlen_t, len)
3255f997ee21SDarrick J. Wong 	),
3256f997ee21SDarrick J. Wong 	TP_fast_assign(
3257f997ee21SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3258f997ee21SDarrick J. Wong 		__entry->agno = agno;
3259f997ee21SDarrick J. Wong 		__entry->type = type;
3260f997ee21SDarrick J. Wong 		__entry->agbno = agbno;
3261f997ee21SDarrick J. Wong 		__entry->len = len;
3262f997ee21SDarrick J. Wong 	),
32630b11553eSDarrick J. Wong 	TP_printk("dev %d:%d type %d agno 0x%x agbno 0x%x fsbcount 0x%x",
3264f997ee21SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3265f997ee21SDarrick J. Wong 		  __entry->type,
3266f997ee21SDarrick J. Wong 		  __entry->agno,
3267f997ee21SDarrick J. Wong 		  __entry->agbno,
32680b11553eSDarrick J. Wong 		  __entry->len)
3269f997ee21SDarrick J. Wong );
3270f997ee21SDarrick J. Wong 
3271f65306eaSDarrick J. Wong /* simple inode-based error/%ip tracepoint class */
3272f65306eaSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_inode_error_class,
3273f65306eaSDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, int error, unsigned long caller_ip),
3274f65306eaSDarrick J. Wong 	TP_ARGS(ip, error, caller_ip),
3275f65306eaSDarrick J. Wong 	TP_STRUCT__entry(
3276f65306eaSDarrick J. Wong 		__field(dev_t, dev)
3277f65306eaSDarrick J. Wong 		__field(xfs_ino_t, ino)
3278f65306eaSDarrick J. Wong 		__field(int, error)
3279f65306eaSDarrick J. Wong 		__field(unsigned long, caller_ip)
3280f65306eaSDarrick J. Wong 	),
3281f65306eaSDarrick J. Wong 	TP_fast_assign(
3282f65306eaSDarrick J. Wong 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
3283f65306eaSDarrick J. Wong 		__entry->ino = ip->i_ino;
3284f65306eaSDarrick J. Wong 		__entry->error = error;
3285f65306eaSDarrick J. Wong 		__entry->caller_ip = caller_ip;
3286f65306eaSDarrick J. Wong 	),
3287af6265a0SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx error %d caller %pS",
3288f65306eaSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3289f65306eaSDarrick J. Wong 		  __entry->ino,
3290f65306eaSDarrick J. Wong 		  __entry->error,
3291f65306eaSDarrick J. Wong 		  (char *)__entry->caller_ip)
3292f65306eaSDarrick J. Wong );
3293f65306eaSDarrick J. Wong 
3294f65306eaSDarrick J. Wong #define DEFINE_INODE_ERROR_EVENT(name) \
3295f65306eaSDarrick J. Wong DEFINE_EVENT(xfs_inode_error_class, name, \
3296f65306eaSDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, int error, \
3297f65306eaSDarrick J. Wong 		 unsigned long caller_ip), \
3298f65306eaSDarrick J. Wong 	TP_ARGS(ip, error, caller_ip))
3299f65306eaSDarrick J. Wong 
330053aa1c34SDarrick J. Wong /* reflink tracepoint classes */
330153aa1c34SDarrick J. Wong 
330253aa1c34SDarrick J. Wong /* two-file io tracepoint class */
330353aa1c34SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_double_io_class,
330453aa1c34SDarrick J. Wong 	TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len,
330553aa1c34SDarrick J. Wong 		 struct xfs_inode *dest, xfs_off_t doffset),
330653aa1c34SDarrick J. Wong 	TP_ARGS(src, soffset, len, dest, doffset),
330753aa1c34SDarrick J. Wong 	TP_STRUCT__entry(
330853aa1c34SDarrick J. Wong 		__field(dev_t, dev)
330953aa1c34SDarrick J. Wong 		__field(xfs_ino_t, src_ino)
331053aa1c34SDarrick J. Wong 		__field(loff_t, src_isize)
331153aa1c34SDarrick J. Wong 		__field(loff_t, src_disize)
331253aa1c34SDarrick J. Wong 		__field(loff_t, src_offset)
3313d538cf24SDarrick J. Wong 		__field(long long, len)
331453aa1c34SDarrick J. Wong 		__field(xfs_ino_t, dest_ino)
331553aa1c34SDarrick J. Wong 		__field(loff_t, dest_isize)
331653aa1c34SDarrick J. Wong 		__field(loff_t, dest_disize)
331753aa1c34SDarrick J. Wong 		__field(loff_t, dest_offset)
331853aa1c34SDarrick J. Wong 	),
331953aa1c34SDarrick J. Wong 	TP_fast_assign(
332053aa1c34SDarrick J. Wong 		__entry->dev = VFS_I(src)->i_sb->s_dev;
332153aa1c34SDarrick J. Wong 		__entry->src_ino = src->i_ino;
332253aa1c34SDarrick J. Wong 		__entry->src_isize = VFS_I(src)->i_size;
332313d2c10bSChristoph Hellwig 		__entry->src_disize = src->i_disk_size;
332453aa1c34SDarrick J. Wong 		__entry->src_offset = soffset;
332553aa1c34SDarrick J. Wong 		__entry->len = len;
332653aa1c34SDarrick J. Wong 		__entry->dest_ino = dest->i_ino;
332753aa1c34SDarrick J. Wong 		__entry->dest_isize = VFS_I(dest)->i_size;
332813d2c10bSChristoph Hellwig 		__entry->dest_disize = dest->i_disk_size;
332953aa1c34SDarrick J. Wong 		__entry->dest_offset = doffset;
333053aa1c34SDarrick J. Wong 	),
3331d538cf24SDarrick J. Wong 	TP_printk("dev %d:%d bytecount 0x%llx "
333249e68c91SDarrick J. Wong 		  "ino 0x%llx isize 0x%llx disize 0x%llx pos 0x%llx -> "
333349e68c91SDarrick J. Wong 		  "ino 0x%llx isize 0x%llx disize 0x%llx pos 0x%llx",
333453aa1c34SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
333553aa1c34SDarrick J. Wong 		  __entry->len,
333653aa1c34SDarrick J. Wong 		  __entry->src_ino,
333753aa1c34SDarrick J. Wong 		  __entry->src_isize,
333853aa1c34SDarrick J. Wong 		  __entry->src_disize,
333953aa1c34SDarrick J. Wong 		  __entry->src_offset,
334053aa1c34SDarrick J. Wong 		  __entry->dest_ino,
334153aa1c34SDarrick J. Wong 		  __entry->dest_isize,
334253aa1c34SDarrick J. Wong 		  __entry->dest_disize,
334353aa1c34SDarrick J. Wong 		  __entry->dest_offset)
334453aa1c34SDarrick J. Wong )
334553aa1c34SDarrick J. Wong 
334653aa1c34SDarrick J. Wong #define DEFINE_DOUBLE_IO_EVENT(name)	\
334753aa1c34SDarrick J. Wong DEFINE_EVENT(xfs_double_io_class, name,	\
334853aa1c34SDarrick J. Wong 	TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \
334953aa1c34SDarrick J. Wong 		 struct xfs_inode *dest, xfs_off_t doffset), \
335053aa1c34SDarrick J. Wong 	TP_ARGS(src, soffset, len, dest, doffset))
335153aa1c34SDarrick J. Wong 
335253aa1c34SDarrick J. Wong /* inode/irec events */
335353aa1c34SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_inode_irec_class,
335453aa1c34SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec),
335553aa1c34SDarrick J. Wong 	TP_ARGS(ip, irec),
335653aa1c34SDarrick J. Wong 	TP_STRUCT__entry(
335753aa1c34SDarrick J. Wong 		__field(dev_t, dev)
335853aa1c34SDarrick J. Wong 		__field(xfs_ino_t, ino)
335953aa1c34SDarrick J. Wong 		__field(xfs_fileoff_t, lblk)
336053aa1c34SDarrick J. Wong 		__field(xfs_extlen_t, len)
336153aa1c34SDarrick J. Wong 		__field(xfs_fsblock_t, pblk)
33625eda4300SDarrick J. Wong 		__field(int, state)
336353aa1c34SDarrick J. Wong 	),
336453aa1c34SDarrick J. Wong 	TP_fast_assign(
336553aa1c34SDarrick J. Wong 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
336653aa1c34SDarrick J. Wong 		__entry->ino = ip->i_ino;
336753aa1c34SDarrick J. Wong 		__entry->lblk = irec->br_startoff;
336853aa1c34SDarrick J. Wong 		__entry->len = irec->br_blockcount;
336953aa1c34SDarrick J. Wong 		__entry->pblk = irec->br_startblock;
33705eda4300SDarrick J. Wong 		__entry->state = irec->br_state;
337153aa1c34SDarrick J. Wong 	),
33727989acccSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx fsbcount 0x%x startblock 0x%llx st %d",
337353aa1c34SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
337453aa1c34SDarrick J. Wong 		  __entry->ino,
337553aa1c34SDarrick J. Wong 		  __entry->lblk,
337653aa1c34SDarrick J. Wong 		  __entry->len,
33775eda4300SDarrick J. Wong 		  __entry->pblk,
33785eda4300SDarrick J. Wong 		  __entry->state)
337953aa1c34SDarrick J. Wong );
338053aa1c34SDarrick J. Wong #define DEFINE_INODE_IREC_EVENT(name) \
338153aa1c34SDarrick J. Wong DEFINE_EVENT(xfs_inode_irec_class, name, \
338253aa1c34SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), \
338353aa1c34SDarrick J. Wong 	TP_ARGS(ip, irec))
338453aa1c34SDarrick J. Wong 
3385c2beff99SDarrick J. Wong /* inode iomap invalidation events */
3386c2beff99SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_wb_invalid_class,
3387c2beff99SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap, unsigned int wpcseq, int whichfork),
3388c2beff99SDarrick J. Wong 	TP_ARGS(ip, iomap, wpcseq, whichfork),
3389c2beff99SDarrick J. Wong 	TP_STRUCT__entry(
3390c2beff99SDarrick J. Wong 		__field(dev_t, dev)
3391c2beff99SDarrick J. Wong 		__field(xfs_ino_t, ino)
3392c2beff99SDarrick J. Wong 		__field(u64, addr)
3393c2beff99SDarrick J. Wong 		__field(loff_t, pos)
3394c2beff99SDarrick J. Wong 		__field(u64, len)
3395c2beff99SDarrick J. Wong 		__field(u16, type)
3396c2beff99SDarrick J. Wong 		__field(u16, flags)
3397c2beff99SDarrick J. Wong 		__field(u32, wpcseq)
3398c2beff99SDarrick J. Wong 		__field(u32, forkseq)
3399c2beff99SDarrick J. Wong 	),
3400c2beff99SDarrick J. Wong 	TP_fast_assign(
3401c2beff99SDarrick J. Wong 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
3402c2beff99SDarrick J. Wong 		__entry->ino = ip->i_ino;
3403c2beff99SDarrick J. Wong 		__entry->addr = iomap->addr;
3404c2beff99SDarrick J. Wong 		__entry->pos = iomap->offset;
3405c2beff99SDarrick J. Wong 		__entry->len = iomap->length;
3406c2beff99SDarrick J. Wong 		__entry->type = iomap->type;
3407c2beff99SDarrick J. Wong 		__entry->flags = iomap->flags;
3408c2beff99SDarrick J. Wong 		__entry->wpcseq = wpcseq;
3409c2beff99SDarrick J. Wong 		__entry->forkseq = READ_ONCE(xfs_ifork_ptr(ip, whichfork)->if_seq);
3410c2beff99SDarrick J. Wong 	),
3411c2beff99SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx pos 0x%llx addr 0x%llx bytecount 0x%llx type 0x%x flags 0x%x wpcseq 0x%x forkseq 0x%x",
3412c2beff99SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3413c2beff99SDarrick J. Wong 		  __entry->ino,
3414c2beff99SDarrick J. Wong 		  __entry->pos,
3415c2beff99SDarrick J. Wong 		  __entry->addr,
3416c2beff99SDarrick J. Wong 		  __entry->len,
3417c2beff99SDarrick J. Wong 		  __entry->type,
3418c2beff99SDarrick J. Wong 		  __entry->flags,
3419c2beff99SDarrick J. Wong 		  __entry->wpcseq,
3420c2beff99SDarrick J. Wong 		  __entry->forkseq)
3421c2beff99SDarrick J. Wong );
3422c2beff99SDarrick J. Wong #define DEFINE_WB_INVALID_EVENT(name) \
3423c2beff99SDarrick J. Wong DEFINE_EVENT(xfs_wb_invalid_class, name, \
3424c2beff99SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap, unsigned int wpcseq, int whichfork), \
3425c2beff99SDarrick J. Wong 	TP_ARGS(ip, iomap, wpcseq, whichfork))
3426c2beff99SDarrick J. Wong DEFINE_WB_INVALID_EVENT(xfs_wb_cow_iomap_invalid);
3427c2beff99SDarrick J. Wong DEFINE_WB_INVALID_EVENT(xfs_wb_data_iomap_invalid);
3428c2beff99SDarrick J. Wong 
3429254e3459SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_iomap_invalid_class,
3430254e3459SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap),
3431254e3459SDarrick J. Wong 	TP_ARGS(ip, iomap),
3432254e3459SDarrick J. Wong 	TP_STRUCT__entry(
3433254e3459SDarrick J. Wong 		__field(dev_t, dev)
3434254e3459SDarrick J. Wong 		__field(xfs_ino_t, ino)
3435254e3459SDarrick J. Wong 		__field(u64, addr)
3436254e3459SDarrick J. Wong 		__field(loff_t, pos)
3437254e3459SDarrick J. Wong 		__field(u64, len)
3438254e3459SDarrick J. Wong 		__field(u64, validity_cookie)
3439254e3459SDarrick J. Wong 		__field(u64, inodeseq)
3440254e3459SDarrick J. Wong 		__field(u16, type)
3441254e3459SDarrick J. Wong 		__field(u16, flags)
3442254e3459SDarrick J. Wong 	),
3443254e3459SDarrick J. Wong 	TP_fast_assign(
3444254e3459SDarrick J. Wong 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
3445254e3459SDarrick J. Wong 		__entry->ino = ip->i_ino;
3446254e3459SDarrick J. Wong 		__entry->addr = iomap->addr;
3447254e3459SDarrick J. Wong 		__entry->pos = iomap->offset;
3448254e3459SDarrick J. Wong 		__entry->len = iomap->length;
3449254e3459SDarrick J. Wong 		__entry->validity_cookie = iomap->validity_cookie;
3450254e3459SDarrick J. Wong 		__entry->type = iomap->type;
3451254e3459SDarrick J. Wong 		__entry->flags = iomap->flags;
3452254e3459SDarrick J. Wong 		__entry->inodeseq = xfs_iomap_inode_sequence(ip, iomap->flags);
3453254e3459SDarrick J. Wong 	),
3454254e3459SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx pos 0x%llx addr 0x%llx bytecount 0x%llx type 0x%x flags 0x%x validity_cookie 0x%llx inodeseq 0x%llx",
3455254e3459SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3456254e3459SDarrick J. Wong 		  __entry->ino,
3457254e3459SDarrick J. Wong 		  __entry->pos,
3458254e3459SDarrick J. Wong 		  __entry->addr,
3459254e3459SDarrick J. Wong 		  __entry->len,
3460254e3459SDarrick J. Wong 		  __entry->type,
3461254e3459SDarrick J. Wong 		  __entry->flags,
3462254e3459SDarrick J. Wong 		  __entry->validity_cookie,
3463254e3459SDarrick J. Wong 		  __entry->inodeseq)
3464254e3459SDarrick J. Wong );
3465254e3459SDarrick J. Wong #define DEFINE_IOMAP_INVALID_EVENT(name) \
3466254e3459SDarrick J. Wong DEFINE_EVENT(xfs_iomap_invalid_class, name, \
3467254e3459SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap), \
3468254e3459SDarrick J. Wong 	TP_ARGS(ip, iomap))
3469254e3459SDarrick J. Wong DEFINE_IOMAP_INVALID_EVENT(xfs_iomap_invalid);
3470254e3459SDarrick J. Wong 
347153aa1c34SDarrick J. Wong /* refcount/reflink tracepoint definitions */
347253aa1c34SDarrick J. Wong 
347353aa1c34SDarrick J. Wong /* reflink tracepoints */
347453aa1c34SDarrick J. Wong DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag);
347553aa1c34SDarrick J. Wong DEFINE_INODE_EVENT(xfs_reflink_unset_inode_flag);
347653aa1c34SDarrick J. Wong DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size);
347700fd1d56SDarrick J. Wong TRACE_EVENT(xfs_reflink_remap_blocks,
347853aa1c34SDarrick J. Wong 	TP_PROTO(struct xfs_inode *src, xfs_fileoff_t soffset,
347953aa1c34SDarrick J. Wong 		 xfs_filblks_t len, struct xfs_inode *dest,
348053aa1c34SDarrick J. Wong 		 xfs_fileoff_t doffset),
348153aa1c34SDarrick J. Wong 	TP_ARGS(src, soffset, len, dest, doffset),
348253aa1c34SDarrick J. Wong 	TP_STRUCT__entry(
348353aa1c34SDarrick J. Wong 		__field(dev_t, dev)
348453aa1c34SDarrick J. Wong 		__field(xfs_ino_t, src_ino)
348553aa1c34SDarrick J. Wong 		__field(xfs_fileoff_t, src_lblk)
348653aa1c34SDarrick J. Wong 		__field(xfs_filblks_t, len)
348753aa1c34SDarrick J. Wong 		__field(xfs_ino_t, dest_ino)
348853aa1c34SDarrick J. Wong 		__field(xfs_fileoff_t, dest_lblk)
348953aa1c34SDarrick J. Wong 	),
349053aa1c34SDarrick J. Wong 	TP_fast_assign(
349153aa1c34SDarrick J. Wong 		__entry->dev = VFS_I(src)->i_sb->s_dev;
349253aa1c34SDarrick J. Wong 		__entry->src_ino = src->i_ino;
349353aa1c34SDarrick J. Wong 		__entry->src_lblk = soffset;
349453aa1c34SDarrick J. Wong 		__entry->len = len;
349553aa1c34SDarrick J. Wong 		__entry->dest_ino = dest->i_ino;
349653aa1c34SDarrick J. Wong 		__entry->dest_lblk = doffset;
349753aa1c34SDarrick J. Wong 	),
34987989acccSDarrick J. Wong 	TP_printk("dev %d:%d fsbcount 0x%llx "
349949e68c91SDarrick J. Wong 		  "ino 0x%llx fileoff 0x%llx -> ino 0x%llx fileoff 0x%llx",
350053aa1c34SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
350153aa1c34SDarrick J. Wong 		  __entry->len,
350253aa1c34SDarrick J. Wong 		  __entry->src_ino,
350353aa1c34SDarrick J. Wong 		  __entry->src_lblk,
350453aa1c34SDarrick J. Wong 		  __entry->dest_ino,
350553aa1c34SDarrick J. Wong 		  __entry->dest_lblk)
350653aa1c34SDarrick J. Wong );
350753aa1c34SDarrick J. Wong DEFINE_DOUBLE_IO_EVENT(xfs_reflink_remap_range);
350853aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error);
350953aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error);
351053aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error);
351153aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_blocks_error);
351253aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_extent_error);
351300fd1d56SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_src);
351400fd1d56SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_dest);
351553aa1c34SDarrick J. Wong 
351653aa1c34SDarrick J. Wong /* dedupe tracepoints */
351753aa1c34SDarrick J. Wong DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents);
351853aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error);
351953aa1c34SDarrick J. Wong 
352053aa1c34SDarrick J. Wong /* ioctl tracepoints */
352153aa1c34SDarrick J. Wong TRACE_EVENT(xfs_ioctl_clone,
352253aa1c34SDarrick J. Wong 	TP_PROTO(struct inode *src, struct inode *dest),
352353aa1c34SDarrick J. Wong 	TP_ARGS(src, dest),
352453aa1c34SDarrick J. Wong 	TP_STRUCT__entry(
352553aa1c34SDarrick J. Wong 		__field(dev_t, dev)
352653aa1c34SDarrick J. Wong 		__field(unsigned long, src_ino)
352753aa1c34SDarrick J. Wong 		__field(loff_t, src_isize)
352853aa1c34SDarrick J. Wong 		__field(unsigned long, dest_ino)
352953aa1c34SDarrick J. Wong 		__field(loff_t, dest_isize)
353053aa1c34SDarrick J. Wong 	),
353153aa1c34SDarrick J. Wong 	TP_fast_assign(
353253aa1c34SDarrick J. Wong 		__entry->dev = src->i_sb->s_dev;
353353aa1c34SDarrick J. Wong 		__entry->src_ino = src->i_ino;
353453aa1c34SDarrick J. Wong 		__entry->src_isize = i_size_read(src);
353553aa1c34SDarrick J. Wong 		__entry->dest_ino = dest->i_ino;
353653aa1c34SDarrick J. Wong 		__entry->dest_isize = i_size_read(dest);
353753aa1c34SDarrick J. Wong 	),
3538c23460ebSDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%lx isize 0x%llx -> ino 0x%lx isize 0x%llx",
353953aa1c34SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
354053aa1c34SDarrick J. Wong 		  __entry->src_ino,
354153aa1c34SDarrick J. Wong 		  __entry->src_isize,
354253aa1c34SDarrick J. Wong 		  __entry->dest_ino,
354353aa1c34SDarrick J. Wong 		  __entry->dest_isize)
354453aa1c34SDarrick J. Wong );
354553aa1c34SDarrick J. Wong 
354653aa1c34SDarrick J. Wong /* unshare tracepoints */
354753aa1c34SDarrick J. Wong DEFINE_SIMPLE_IO_EVENT(xfs_reflink_unshare);
354853aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_unshare_error);
354953aa1c34SDarrick J. Wong 
355053aa1c34SDarrick J. Wong /* copy on write */
355153aa1c34SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_trim_around_shared);
3552be51f811SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_found);
3553be51f811SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc);
35545eda4300SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_convert_cow);
355553aa1c34SDarrick J. Wong 
355653aa1c34SDarrick J. Wong DEFINE_SIMPLE_IO_EVENT(xfs_reflink_cancel_cow_range);
355753aa1c34SDarrick J. Wong DEFINE_SIMPLE_IO_EVENT(xfs_reflink_end_cow);
3558df2fd88fSDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap_from);
3559df2fd88fSDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap_to);
356053aa1c34SDarrick J. Wong 
356153aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_cancel_cow_range_error);
356253aa1c34SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_cow_error);
356353aa1c34SDarrick J. Wong 
356453aa1c34SDarrick J. Wong 
356553aa1c34SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_reflink_cancel_cow);
356653aa1c34SDarrick J. Wong 
35671f08af52SDarrick J. Wong /* rmap swapext tracepoints */
35681f08af52SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap);
35691f08af52SDarrick J. Wong DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap_piece);
35701f08af52SDarrick J. Wong DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error);
35711f08af52SDarrick J. Wong 
3572e89c0413SDarrick J. Wong /* fsmap traces */
3573e89c0413SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_fsmap_class,
3574e89c0413SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno,
3575159eb69dSDarrick J. Wong 		 const struct xfs_rmap_irec *rmap),
3576e89c0413SDarrick J. Wong 	TP_ARGS(mp, keydev, agno, rmap),
3577e89c0413SDarrick J. Wong 	TP_STRUCT__entry(
3578e89c0413SDarrick J. Wong 		__field(dev_t, dev)
3579e89c0413SDarrick J. Wong 		__field(dev_t, keydev)
3580e89c0413SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3581e89c0413SDarrick J. Wong 		__field(xfs_fsblock_t, bno)
3582e89c0413SDarrick J. Wong 		__field(xfs_filblks_t, len)
3583c8ce540dSDarrick J. Wong 		__field(uint64_t, owner)
3584c8ce540dSDarrick J. Wong 		__field(uint64_t, offset)
3585e89c0413SDarrick J. Wong 		__field(unsigned int, flags)
3586e89c0413SDarrick J. Wong 	),
3587e89c0413SDarrick J. Wong 	TP_fast_assign(
3588e89c0413SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3589e89c0413SDarrick J. Wong 		__entry->keydev = new_decode_dev(keydev);
3590e89c0413SDarrick J. Wong 		__entry->agno = agno;
3591e89c0413SDarrick J. Wong 		__entry->bno = rmap->rm_startblock;
3592e89c0413SDarrick J. Wong 		__entry->len = rmap->rm_blockcount;
3593e89c0413SDarrick J. Wong 		__entry->owner = rmap->rm_owner;
3594e89c0413SDarrick J. Wong 		__entry->offset = rmap->rm_offset;
3595e89c0413SDarrick J. Wong 		__entry->flags = rmap->rm_flags;
3596e89c0413SDarrick J. Wong 	),
35977989acccSDarrick J. Wong 	TP_printk("dev %d:%d keydev %d:%d agno 0x%x startblock 0x%llx fsbcount 0x%llx owner 0x%llx fileoff 0x%llx flags 0x%x",
3598e89c0413SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3599e89c0413SDarrick J. Wong 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
3600e89c0413SDarrick J. Wong 		  __entry->agno,
3601e89c0413SDarrick J. Wong 		  __entry->bno,
3602e89c0413SDarrick J. Wong 		  __entry->len,
3603e89c0413SDarrick J. Wong 		  __entry->owner,
3604e89c0413SDarrick J. Wong 		  __entry->offset,
3605e89c0413SDarrick J. Wong 		  __entry->flags)
3606e89c0413SDarrick J. Wong )
3607e89c0413SDarrick J. Wong #define DEFINE_FSMAP_EVENT(name) \
3608e89c0413SDarrick J. Wong DEFINE_EVENT(xfs_fsmap_class, name, \
3609e89c0413SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \
3610159eb69dSDarrick J. Wong 		 const struct xfs_rmap_irec *rmap), \
3611e89c0413SDarrick J. Wong 	TP_ARGS(mp, keydev, agno, rmap))
3612e89c0413SDarrick J. Wong DEFINE_FSMAP_EVENT(xfs_fsmap_low_key);
3613e89c0413SDarrick J. Wong DEFINE_FSMAP_EVENT(xfs_fsmap_high_key);
3614e89c0413SDarrick J. Wong DEFINE_FSMAP_EVENT(xfs_fsmap_mapping);
3615e89c0413SDarrick J. Wong 
3616f045dd00SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_fsmap_linear_class,
3617f045dd00SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, u32 keydev, uint64_t bno),
3618f045dd00SDarrick J. Wong 	TP_ARGS(mp, keydev, bno),
3619f045dd00SDarrick J. Wong 	TP_STRUCT__entry(
3620f045dd00SDarrick J. Wong 		__field(dev_t, dev)
3621f045dd00SDarrick J. Wong 		__field(dev_t, keydev)
3622f045dd00SDarrick J. Wong 		__field(xfs_fsblock_t, bno)
3623f045dd00SDarrick J. Wong 	),
3624f045dd00SDarrick J. Wong 	TP_fast_assign(
3625f045dd00SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3626f045dd00SDarrick J. Wong 		__entry->keydev = new_decode_dev(keydev);
3627f045dd00SDarrick J. Wong 		__entry->bno = bno;
3628f045dd00SDarrick J. Wong 	),
3629f045dd00SDarrick J. Wong 	TP_printk("dev %d:%d keydev %d:%d bno 0x%llx",
3630f045dd00SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3631f045dd00SDarrick J. Wong 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
3632f045dd00SDarrick J. Wong 		  __entry->bno)
3633f045dd00SDarrick J. Wong )
3634f045dd00SDarrick J. Wong #define DEFINE_FSMAP_LINEAR_EVENT(name) \
3635f045dd00SDarrick J. Wong DEFINE_EVENT(xfs_fsmap_linear_class, name, \
3636f045dd00SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, u32 keydev, uint64_t bno), \
3637f045dd00SDarrick J. Wong 	TP_ARGS(mp, keydev, bno))
3638f045dd00SDarrick J. Wong DEFINE_FSMAP_LINEAR_EVENT(xfs_fsmap_low_key_linear);
3639f045dd00SDarrick J. Wong DEFINE_FSMAP_LINEAR_EVENT(xfs_fsmap_high_key_linear);
3640f045dd00SDarrick J. Wong 
3641e89c0413SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_getfsmap_class,
3642e89c0413SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap),
3643e89c0413SDarrick J. Wong 	TP_ARGS(mp, fsmap),
3644e89c0413SDarrick J. Wong 	TP_STRUCT__entry(
3645e89c0413SDarrick J. Wong 		__field(dev_t, dev)
3646e89c0413SDarrick J. Wong 		__field(dev_t, keydev)
3647e89c0413SDarrick J. Wong 		__field(xfs_daddr_t, block)
3648e89c0413SDarrick J. Wong 		__field(xfs_daddr_t, len)
3649c8ce540dSDarrick J. Wong 		__field(uint64_t, owner)
3650c8ce540dSDarrick J. Wong 		__field(uint64_t, offset)
3651c8ce540dSDarrick J. Wong 		__field(uint64_t, flags)
3652e89c0413SDarrick J. Wong 	),
3653e89c0413SDarrick J. Wong 	TP_fast_assign(
3654e89c0413SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3655e89c0413SDarrick J. Wong 		__entry->keydev = new_decode_dev(fsmap->fmr_device);
3656e89c0413SDarrick J. Wong 		__entry->block = fsmap->fmr_physical;
3657e89c0413SDarrick J. Wong 		__entry->len = fsmap->fmr_length;
3658e89c0413SDarrick J. Wong 		__entry->owner = fsmap->fmr_owner;
3659e89c0413SDarrick J. Wong 		__entry->offset = fsmap->fmr_offset;
3660e89c0413SDarrick J. Wong 		__entry->flags = fsmap->fmr_flags;
3661e89c0413SDarrick J. Wong 	),
36627989acccSDarrick J. Wong 	TP_printk("dev %d:%d keydev %d:%d daddr 0x%llx bbcount 0x%llx owner 0x%llx fileoff_daddr 0x%llx flags 0x%llx",
3663e89c0413SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3664e89c0413SDarrick J. Wong 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
3665e89c0413SDarrick J. Wong 		  __entry->block,
3666e89c0413SDarrick J. Wong 		  __entry->len,
3667e89c0413SDarrick J. Wong 		  __entry->owner,
3668e89c0413SDarrick J. Wong 		  __entry->offset,
3669e89c0413SDarrick J. Wong 		  __entry->flags)
3670e89c0413SDarrick J. Wong )
3671e89c0413SDarrick J. Wong #define DEFINE_GETFSMAP_EVENT(name) \
3672e89c0413SDarrick J. Wong DEFINE_EVENT(xfs_getfsmap_class, name, \
3673e89c0413SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), \
3674e89c0413SDarrick J. Wong 	TP_ARGS(mp, fsmap))
3675e89c0413SDarrick J. Wong DEFINE_GETFSMAP_EVENT(xfs_getfsmap_low_key);
3676e89c0413SDarrick J. Wong DEFINE_GETFSMAP_EVENT(xfs_getfsmap_high_key);
3677e89c0413SDarrick J. Wong DEFINE_GETFSMAP_EVENT(xfs_getfsmap_mapping);
3678e89c0413SDarrick J. Wong 
367952d8ea4fSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_trans_resv_class,
3680b872af2cSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, unsigned int type,
3681b872af2cSDarrick J. Wong 		 struct xfs_trans_res *res),
3682b872af2cSDarrick J. Wong 	TP_ARGS(mp, type, res),
3683b872af2cSDarrick J. Wong 	TP_STRUCT__entry(
3684b872af2cSDarrick J. Wong 		__field(dev_t, dev)
3685b872af2cSDarrick J. Wong 		__field(int, type)
3686b872af2cSDarrick J. Wong 		__field(uint, logres)
3687b872af2cSDarrick J. Wong 		__field(int, logcount)
3688b872af2cSDarrick J. Wong 		__field(int, logflags)
3689b872af2cSDarrick J. Wong 	),
3690b872af2cSDarrick J. Wong 	TP_fast_assign(
3691b872af2cSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3692b872af2cSDarrick J. Wong 		__entry->type = type;
3693b872af2cSDarrick J. Wong 		__entry->logres = res->tr_logres;
3694b872af2cSDarrick J. Wong 		__entry->logcount = res->tr_logcount;
3695b872af2cSDarrick J. Wong 		__entry->logflags = res->tr_logflags;
3696b872af2cSDarrick J. Wong 	),
3697b872af2cSDarrick J. Wong 	TP_printk("dev %d:%d type %d logres %u logcount %d flags 0x%x",
3698b872af2cSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3699b872af2cSDarrick J. Wong 		  __entry->type,
3700b872af2cSDarrick J. Wong 		  __entry->logres,
3701b872af2cSDarrick J. Wong 		  __entry->logcount,
3702b872af2cSDarrick J. Wong 		  __entry->logflags)
370352d8ea4fSDarrick J. Wong )
370452d8ea4fSDarrick J. Wong 
370552d8ea4fSDarrick J. Wong #define DEFINE_TRANS_RESV_EVENT(name) \
370652d8ea4fSDarrick J. Wong DEFINE_EVENT(xfs_trans_resv_class, name, \
370752d8ea4fSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, unsigned int type, \
370852d8ea4fSDarrick J. Wong 		 struct xfs_trans_res *res), \
370952d8ea4fSDarrick J. Wong 	TP_ARGS(mp, type, res))
371052d8ea4fSDarrick J. Wong DEFINE_TRANS_RESV_EVENT(xfs_trans_resv_calc);
371152d8ea4fSDarrick J. Wong DEFINE_TRANS_RESV_EVENT(xfs_trans_resv_calc_minlogsize);
3712b872af2cSDarrick J. Wong 
3713918247ceSDarrick J. Wong TRACE_EVENT(xfs_log_get_max_trans_res,
3714918247ceSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, const struct xfs_trans_res *res),
3715918247ceSDarrick J. Wong 	TP_ARGS(mp, res),
3716918247ceSDarrick J. Wong 	TP_STRUCT__entry(
3717918247ceSDarrick J. Wong 		__field(dev_t, dev)
3718918247ceSDarrick J. Wong 		__field(uint, logres)
3719918247ceSDarrick J. Wong 		__field(int, logcount)
3720918247ceSDarrick J. Wong 	),
3721918247ceSDarrick J. Wong 	TP_fast_assign(
3722918247ceSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3723918247ceSDarrick J. Wong 		__entry->logres = res->tr_logres;
3724918247ceSDarrick J. Wong 		__entry->logcount = res->tr_logcount;
3725918247ceSDarrick J. Wong 	),
3726918247ceSDarrick J. Wong 	TP_printk("dev %d:%d logres %u logcount %d",
3727918247ceSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3728918247ceSDarrick J. Wong 		  __entry->logres,
3729918247ceSDarrick J. Wong 		  __entry->logcount)
3730c59d87c4SChristoph Hellwig );
3731c59d87c4SChristoph Hellwig 
3732ba18781bSDave Chinner DECLARE_EVENT_CLASS(xfs_trans_class,
3733ba18781bSDave Chinner 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip),
3734ba18781bSDave Chinner 	TP_ARGS(tp, caller_ip),
3735ba18781bSDave Chinner 	TP_STRUCT__entry(
3736ba18781bSDave Chinner 		__field(dev_t, dev)
3737ba18781bSDave Chinner 		__field(uint32_t, tid)
3738ba18781bSDave Chinner 		__field(uint32_t, flags)
3739ba18781bSDave Chinner 		__field(unsigned long, caller_ip)
3740ba18781bSDave Chinner 	),
3741ba18781bSDave Chinner 	TP_fast_assign(
3742ba18781bSDave Chinner 		__entry->dev = tp->t_mountp->m_super->s_dev;
3743ba18781bSDave Chinner 		__entry->tid = 0;
3744ba18781bSDave Chinner 		if (tp->t_ticket)
3745ba18781bSDave Chinner 			__entry->tid = tp->t_ticket->t_tid;
3746ba18781bSDave Chinner 		__entry->flags = tp->t_flags;
3747ba18781bSDave Chinner 		__entry->caller_ip = caller_ip;
3748ba18781bSDave Chinner 	),
3749ba18781bSDave Chinner 	TP_printk("dev %d:%d trans %x flags 0x%x caller %pS",
3750ba18781bSDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3751ba18781bSDave Chinner 		  __entry->tid,
3752ba18781bSDave Chinner 		  __entry->flags,
3753ba18781bSDave Chinner 		  (char *)__entry->caller_ip)
3754ba18781bSDave Chinner )
3755ba18781bSDave Chinner 
3756ba18781bSDave Chinner #define DEFINE_TRANS_EVENT(name) \
3757ba18781bSDave Chinner DEFINE_EVENT(xfs_trans_class, name, \
3758ba18781bSDave Chinner 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \
3759ba18781bSDave Chinner 	TP_ARGS(tp, caller_ip))
3760ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_alloc);
3761ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_cancel);
3762ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_commit);
3763ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_dup);
3764ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_free);
3765ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_roll);
3766ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_add_item);
3767195cd83dSChristoph Hellwig DEFINE_TRANS_EVENT(xfs_trans_commit_items);
3768ba18781bSDave Chinner DEFINE_TRANS_EVENT(xfs_trans_free_items);
3769ba18781bSDave Chinner 
37709a4a5118SDarrick J. Wong TRACE_EVENT(xfs_iunlink_update_bucket,
37719a4a5118SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int bucket,
37729a4a5118SDarrick J. Wong 		 xfs_agino_t old_ptr, xfs_agino_t new_ptr),
37739a4a5118SDarrick J. Wong 	TP_ARGS(mp, agno, bucket, old_ptr, new_ptr),
37749a4a5118SDarrick J. Wong 	TP_STRUCT__entry(
37759a4a5118SDarrick J. Wong 		__field(dev_t, dev)
37769a4a5118SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
37779a4a5118SDarrick J. Wong 		__field(unsigned int, bucket)
37789a4a5118SDarrick J. Wong 		__field(xfs_agino_t, old_ptr)
37799a4a5118SDarrick J. Wong 		__field(xfs_agino_t, new_ptr)
37809a4a5118SDarrick J. Wong 	),
37819a4a5118SDarrick J. Wong 	TP_fast_assign(
37829a4a5118SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
37839a4a5118SDarrick J. Wong 		__entry->agno = agno;
37849a4a5118SDarrick J. Wong 		__entry->bucket = bucket;
37859a4a5118SDarrick J. Wong 		__entry->old_ptr = old_ptr;
37869a4a5118SDarrick J. Wong 		__entry->new_ptr = new_ptr;
37879a4a5118SDarrick J. Wong 	),
37889febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x bucket %u old 0x%x new 0x%x",
37899a4a5118SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
37909a4a5118SDarrick J. Wong 		  __entry->agno,
37919a4a5118SDarrick J. Wong 		  __entry->bucket,
37929a4a5118SDarrick J. Wong 		  __entry->old_ptr,
37939a4a5118SDarrick J. Wong 		  __entry->new_ptr)
37949a4a5118SDarrick J. Wong );
37959a4a5118SDarrick J. Wong 
3796f2fc16a3SDarrick J. Wong TRACE_EVENT(xfs_iunlink_update_dinode,
3797f2fc16a3SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,
3798f2fc16a3SDarrick J. Wong 		 xfs_agino_t old_ptr, xfs_agino_t new_ptr),
3799f2fc16a3SDarrick J. Wong 	TP_ARGS(mp, agno, agino, old_ptr, new_ptr),
3800f2fc16a3SDarrick J. Wong 	TP_STRUCT__entry(
3801f2fc16a3SDarrick J. Wong 		__field(dev_t, dev)
3802f2fc16a3SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3803f2fc16a3SDarrick J. Wong 		__field(xfs_agino_t, agino)
3804f2fc16a3SDarrick J. Wong 		__field(xfs_agino_t, old_ptr)
3805f2fc16a3SDarrick J. Wong 		__field(xfs_agino_t, new_ptr)
3806f2fc16a3SDarrick J. Wong 	),
3807f2fc16a3SDarrick J. Wong 	TP_fast_assign(
3808f2fc16a3SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3809f2fc16a3SDarrick J. Wong 		__entry->agno = agno;
3810f2fc16a3SDarrick J. Wong 		__entry->agino = agino;
3811f2fc16a3SDarrick J. Wong 		__entry->old_ptr = old_ptr;
3812f2fc16a3SDarrick J. Wong 		__entry->new_ptr = new_ptr;
3813f2fc16a3SDarrick J. Wong 	),
38149febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agino 0x%x old 0x%x new 0x%x",
3815f2fc16a3SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3816f2fc16a3SDarrick J. Wong 		  __entry->agno,
3817f2fc16a3SDarrick J. Wong 		  __entry->agino,
3818f2fc16a3SDarrick J. Wong 		  __entry->old_ptr,
3819f2fc16a3SDarrick J. Wong 		  __entry->new_ptr)
3820f2fc16a3SDarrick J. Wong );
3821f2fc16a3SDarrick J. Wong 
382268b957f6SDarrick J. Wong TRACE_EVENT(xfs_iunlink_reload_next,
382368b957f6SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip),
382468b957f6SDarrick J. Wong 	TP_ARGS(ip),
382568b957f6SDarrick J. Wong 	TP_STRUCT__entry(
382668b957f6SDarrick J. Wong 		__field(dev_t, dev)
382768b957f6SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
382868b957f6SDarrick J. Wong 		__field(xfs_agino_t, agino)
382968b957f6SDarrick J. Wong 		__field(xfs_agino_t, prev_agino)
383068b957f6SDarrick J. Wong 		__field(xfs_agino_t, next_agino)
383168b957f6SDarrick J. Wong 	),
383268b957f6SDarrick J. Wong 	TP_fast_assign(
383368b957f6SDarrick J. Wong 		__entry->dev = ip->i_mount->m_super->s_dev;
383468b957f6SDarrick J. Wong 		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
383568b957f6SDarrick J. Wong 		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
383668b957f6SDarrick J. Wong 		__entry->prev_agino = ip->i_prev_unlinked;
383768b957f6SDarrick J. Wong 		__entry->next_agino = ip->i_next_unlinked;
383868b957f6SDarrick J. Wong 	),
383968b957f6SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agino 0x%x prev_unlinked 0x%x next_unlinked 0x%x",
384068b957f6SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
384168b957f6SDarrick J. Wong 		  __entry->agno,
384268b957f6SDarrick J. Wong 		  __entry->agino,
384368b957f6SDarrick J. Wong 		  __entry->prev_agino,
384468b957f6SDarrick J. Wong 		  __entry->next_agino)
384568b957f6SDarrick J. Wong );
384668b957f6SDarrick J. Wong 
384783771c50SDarrick J. Wong TRACE_EVENT(xfs_inode_reload_unlinked_bucket,
384883771c50SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip),
384983771c50SDarrick J. Wong 	TP_ARGS(ip),
385083771c50SDarrick J. Wong 	TP_STRUCT__entry(
385183771c50SDarrick J. Wong 		__field(dev_t, dev)
385283771c50SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
385383771c50SDarrick J. Wong 		__field(xfs_agino_t, agino)
385483771c50SDarrick J. Wong 	),
385583771c50SDarrick J. Wong 	TP_fast_assign(
385683771c50SDarrick J. Wong 		__entry->dev = ip->i_mount->m_super->s_dev;
385783771c50SDarrick J. Wong 		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
385883771c50SDarrick J. Wong 		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
385983771c50SDarrick J. Wong 	),
386083771c50SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agino 0x%x bucket %u",
386183771c50SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
386283771c50SDarrick J. Wong 		  __entry->agno,
386383771c50SDarrick J. Wong 		  __entry->agino,
386483771c50SDarrick J. Wong 		  __entry->agino % XFS_AGI_UNLINKED_BUCKETS)
386583771c50SDarrick J. Wong );
386683771c50SDarrick J. Wong 
38674664c66cSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_ag_inode_class,
38684664c66cSDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip),
38694664c66cSDarrick J. Wong 	TP_ARGS(ip),
38704664c66cSDarrick J. Wong 	TP_STRUCT__entry(
38714664c66cSDarrick J. Wong 		__field(dev_t, dev)
38724664c66cSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
38734664c66cSDarrick J. Wong 		__field(xfs_agino_t, agino)
38744664c66cSDarrick J. Wong 	),
38754664c66cSDarrick J. Wong 	TP_fast_assign(
38764664c66cSDarrick J. Wong 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
38774664c66cSDarrick J. Wong 		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
38784664c66cSDarrick J. Wong 		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
38794664c66cSDarrick J. Wong 	),
38809febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x agino 0x%x",
38814664c66cSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
38824664c66cSDarrick J. Wong 		  __entry->agno, __entry->agino)
38834664c66cSDarrick J. Wong )
38844664c66cSDarrick J. Wong 
38854664c66cSDarrick J. Wong #define DEFINE_AGINODE_EVENT(name) \
38864664c66cSDarrick J. Wong DEFINE_EVENT(xfs_ag_inode_class, name, \
38874664c66cSDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip), \
38884664c66cSDarrick J. Wong 	TP_ARGS(ip))
38894664c66cSDarrick J. Wong DEFINE_AGINODE_EVENT(xfs_iunlink);
38904664c66cSDarrick J. Wong DEFINE_AGINODE_EVENT(xfs_iunlink_remove);
38914664c66cSDarrick J. Wong 
38926772c1f1SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_fs_corrupt_class,
38936772c1f1SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, unsigned int flags),
38946772c1f1SDarrick J. Wong 	TP_ARGS(mp, flags),
38956772c1f1SDarrick J. Wong 	TP_STRUCT__entry(
38966772c1f1SDarrick J. Wong 		__field(dev_t, dev)
38976772c1f1SDarrick J. Wong 		__field(unsigned int, flags)
38986772c1f1SDarrick J. Wong 	),
38996772c1f1SDarrick J. Wong 	TP_fast_assign(
39006772c1f1SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
39016772c1f1SDarrick J. Wong 		__entry->flags = flags;
39026772c1f1SDarrick J. Wong 	),
39036772c1f1SDarrick J. Wong 	TP_printk("dev %d:%d flags 0x%x",
39046772c1f1SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
39056772c1f1SDarrick J. Wong 		  __entry->flags)
39066772c1f1SDarrick J. Wong );
39076772c1f1SDarrick J. Wong #define DEFINE_FS_CORRUPT_EVENT(name)	\
39086772c1f1SDarrick J. Wong DEFINE_EVENT(xfs_fs_corrupt_class, name,	\
39096772c1f1SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, unsigned int flags), \
39106772c1f1SDarrick J. Wong 	TP_ARGS(mp, flags))
39116772c1f1SDarrick J. Wong DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_sick);
39126772c1f1SDarrick J. Wong DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_healthy);
3913519841c2SDarrick J. Wong DEFINE_FS_CORRUPT_EVENT(xfs_fs_unfixed_corruption);
39146772c1f1SDarrick J. Wong DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_sick);
39156772c1f1SDarrick J. Wong DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_healthy);
3916519841c2SDarrick J. Wong DEFINE_FS_CORRUPT_EVENT(xfs_rt_unfixed_corruption);
39176772c1f1SDarrick J. Wong 
39186772c1f1SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_ag_corrupt_class,
39196772c1f1SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int flags),
39206772c1f1SDarrick J. Wong 	TP_ARGS(mp, agno, flags),
39216772c1f1SDarrick J. Wong 	TP_STRUCT__entry(
39226772c1f1SDarrick J. Wong 		__field(dev_t, dev)
39236772c1f1SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
39246772c1f1SDarrick J. Wong 		__field(unsigned int, flags)
39256772c1f1SDarrick J. Wong 	),
39266772c1f1SDarrick J. Wong 	TP_fast_assign(
39276772c1f1SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
39286772c1f1SDarrick J. Wong 		__entry->agno = agno;
39296772c1f1SDarrick J. Wong 		__entry->flags = flags;
39306772c1f1SDarrick J. Wong 	),
39319febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x flags 0x%x",
39326772c1f1SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
39336772c1f1SDarrick J. Wong 		  __entry->agno, __entry->flags)
39346772c1f1SDarrick J. Wong );
39356772c1f1SDarrick J. Wong #define DEFINE_AG_CORRUPT_EVENT(name)	\
39366772c1f1SDarrick J. Wong DEFINE_EVENT(xfs_ag_corrupt_class, name,	\
39376772c1f1SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
39386772c1f1SDarrick J. Wong 		 unsigned int flags), \
39396772c1f1SDarrick J. Wong 	TP_ARGS(mp, agno, flags))
39406772c1f1SDarrick J. Wong DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_sick);
39416772c1f1SDarrick J. Wong DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_healthy);
3942519841c2SDarrick J. Wong DEFINE_AG_CORRUPT_EVENT(xfs_ag_unfixed_corruption);
39436772c1f1SDarrick J. Wong 
39446772c1f1SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_inode_corrupt_class,
39456772c1f1SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, unsigned int flags),
39466772c1f1SDarrick J. Wong 	TP_ARGS(ip, flags),
39476772c1f1SDarrick J. Wong 	TP_STRUCT__entry(
39486772c1f1SDarrick J. Wong 		__field(dev_t, dev)
39496772c1f1SDarrick J. Wong 		__field(xfs_ino_t, ino)
39506772c1f1SDarrick J. Wong 		__field(unsigned int, flags)
39516772c1f1SDarrick J. Wong 	),
39526772c1f1SDarrick J. Wong 	TP_fast_assign(
39536772c1f1SDarrick J. Wong 		__entry->dev = ip->i_mount->m_super->s_dev;
39546772c1f1SDarrick J. Wong 		__entry->ino = ip->i_ino;
39556772c1f1SDarrick J. Wong 		__entry->flags = flags;
39566772c1f1SDarrick J. Wong 	),
39576772c1f1SDarrick J. Wong 	TP_printk("dev %d:%d ino 0x%llx flags 0x%x",
39586772c1f1SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
39596772c1f1SDarrick J. Wong 		  __entry->ino, __entry->flags)
39606772c1f1SDarrick J. Wong );
39616772c1f1SDarrick J. Wong #define DEFINE_INODE_CORRUPT_EVENT(name)	\
39626772c1f1SDarrick J. Wong DEFINE_EVENT(xfs_inode_corrupt_class, name,	\
39636772c1f1SDarrick J. Wong 	TP_PROTO(struct xfs_inode *ip, unsigned int flags), \
39646772c1f1SDarrick J. Wong 	TP_ARGS(ip, flags))
39656772c1f1SDarrick J. Wong DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_sick);
39666772c1f1SDarrick J. Wong DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_healthy);
39676772c1f1SDarrick J. Wong 
3968a211432cSDarrick J. Wong TRACE_EVENT(xfs_iwalk_ag,
3969a211432cSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3970a211432cSDarrick J. Wong 		 xfs_agino_t startino),
3971a211432cSDarrick J. Wong 	TP_ARGS(mp, agno, startino),
3972a211432cSDarrick J. Wong 	TP_STRUCT__entry(
3973a211432cSDarrick J. Wong 		__field(dev_t, dev)
3974a211432cSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3975a211432cSDarrick J. Wong 		__field(xfs_agino_t, startino)
3976a211432cSDarrick J. Wong 	),
3977a211432cSDarrick J. Wong 	TP_fast_assign(
3978a211432cSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3979a211432cSDarrick J. Wong 		__entry->agno = agno;
3980a211432cSDarrick J. Wong 		__entry->startino = startino;
3981a211432cSDarrick J. Wong 	),
39829febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x startino 0x%x",
3983a211432cSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,
3984a211432cSDarrick J. Wong 		  __entry->startino)
3985a211432cSDarrick J. Wong )
3986a211432cSDarrick J. Wong 
3987a211432cSDarrick J. Wong TRACE_EVENT(xfs_iwalk_ag_rec,
3988a211432cSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3989a211432cSDarrick J. Wong 		 struct xfs_inobt_rec_incore *irec),
3990a211432cSDarrick J. Wong 	TP_ARGS(mp, agno, irec),
3991a211432cSDarrick J. Wong 	TP_STRUCT__entry(
3992a211432cSDarrick J. Wong 		__field(dev_t, dev)
3993a211432cSDarrick J. Wong 		__field(xfs_agnumber_t, agno)
3994a211432cSDarrick J. Wong 		__field(xfs_agino_t, startino)
3995a211432cSDarrick J. Wong 		__field(uint64_t, freemask)
3996a211432cSDarrick J. Wong 	),
3997a211432cSDarrick J. Wong 	TP_fast_assign(
3998a211432cSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
3999a211432cSDarrick J. Wong 		__entry->agno = agno;
4000a211432cSDarrick J. Wong 		__entry->startino = irec->ir_startino;
4001a211432cSDarrick J. Wong 		__entry->freemask = irec->ir_free;
4002a211432cSDarrick J. Wong 	),
40039febf39dSDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x startino 0x%x freemask 0x%llx",
4004a211432cSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,
4005a211432cSDarrick J. Wong 		  __entry->startino, __entry->freemask)
4006a211432cSDarrick J. Wong )
4007a211432cSDarrick J. Wong 
400840786717SDarrick J. Wong TRACE_EVENT(xfs_pwork_init,
400940786717SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, unsigned int nr_threads, pid_t pid),
401040786717SDarrick J. Wong 	TP_ARGS(mp, nr_threads, pid),
401140786717SDarrick J. Wong 	TP_STRUCT__entry(
401240786717SDarrick J. Wong 		__field(dev_t, dev)
401340786717SDarrick J. Wong 		__field(unsigned int, nr_threads)
401440786717SDarrick J. Wong 		__field(pid_t, pid)
401540786717SDarrick J. Wong 	),
401640786717SDarrick J. Wong 	TP_fast_assign(
401740786717SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
401840786717SDarrick J. Wong 		__entry->nr_threads = nr_threads;
401940786717SDarrick J. Wong 		__entry->pid = pid;
402040786717SDarrick J. Wong 	),
402140786717SDarrick J. Wong 	TP_printk("dev %d:%d nr_threads %u pid %u",
402240786717SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
402340786717SDarrick J. Wong 		  __entry->nr_threads, __entry->pid)
402440786717SDarrick J. Wong )
402540786717SDarrick J. Wong 
40260ad95687SDave Chinner DECLARE_EVENT_CLASS(xfs_kmem_class,
40270ad95687SDave Chinner 	TP_PROTO(ssize_t size, int flags, unsigned long caller_ip),
40280ad95687SDave Chinner 	TP_ARGS(size, flags, caller_ip),
40290ad95687SDave Chinner 	TP_STRUCT__entry(
40300ad95687SDave Chinner 		__field(ssize_t, size)
40310ad95687SDave Chinner 		__field(int, flags)
40320ad95687SDave Chinner 		__field(unsigned long, caller_ip)
40330ad95687SDave Chinner 	),
40340ad95687SDave Chinner 	TP_fast_assign(
40350ad95687SDave Chinner 		__entry->size = size;
40360ad95687SDave Chinner 		__entry->flags = flags;
40370ad95687SDave Chinner 		__entry->caller_ip = caller_ip;
40380ad95687SDave Chinner 	),
40390ad95687SDave Chinner 	TP_printk("size %zd flags 0x%x caller %pS",
40400ad95687SDave Chinner 		  __entry->size,
40410ad95687SDave Chinner 		  __entry->flags,
40420ad95687SDave Chinner 		  (char *)__entry->caller_ip)
40430ad95687SDave Chinner )
40440ad95687SDave Chinner 
40450ad95687SDave Chinner #define DEFINE_KMEM_EVENT(name) \
40460ad95687SDave Chinner DEFINE_EVENT(xfs_kmem_class, name, \
40470ad95687SDave Chinner 	TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), \
40480ad95687SDave Chinner 	TP_ARGS(size, flags, caller_ip))
40490ad95687SDave Chinner DEFINE_KMEM_EVENT(kmem_alloc);
40500ad95687SDave Chinner 
405113eaec4bSDarrick J. Wong TRACE_EVENT(xfs_check_new_dalign,
405213eaec4bSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, int new_dalign, xfs_ino_t calc_rootino),
405313eaec4bSDarrick J. Wong 	TP_ARGS(mp, new_dalign, calc_rootino),
405413eaec4bSDarrick J. Wong 	TP_STRUCT__entry(
405513eaec4bSDarrick J. Wong 		__field(dev_t, dev)
405613eaec4bSDarrick J. Wong 		__field(int, new_dalign)
405713eaec4bSDarrick J. Wong 		__field(xfs_ino_t, sb_rootino)
405813eaec4bSDarrick J. Wong 		__field(xfs_ino_t, calc_rootino)
405913eaec4bSDarrick J. Wong 	),
406013eaec4bSDarrick J. Wong 	TP_fast_assign(
406113eaec4bSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
406213eaec4bSDarrick J. Wong 		__entry->new_dalign = new_dalign;
406313eaec4bSDarrick J. Wong 		__entry->sb_rootino = mp->m_sb.sb_rootino;
406413eaec4bSDarrick J. Wong 		__entry->calc_rootino = calc_rootino;
406513eaec4bSDarrick J. Wong 	),
4066af6265a0SDarrick J. Wong 	TP_printk("dev %d:%d new_dalign %d sb_rootino 0x%llx calc_rootino 0x%llx",
406713eaec4bSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
406813eaec4bSDarrick J. Wong 		  __entry->new_dalign, __entry->sb_rootino,
406913eaec4bSDarrick J. Wong 		  __entry->calc_rootino)
407013eaec4bSDarrick J. Wong )
407113eaec4bSDarrick J. Wong 
4072e06536a6SDarrick J. Wong TRACE_EVENT(xfs_btree_commit_afakeroot,
4073e06536a6SDarrick J. Wong 	TP_PROTO(struct xfs_btree_cur *cur),
4074e06536a6SDarrick J. Wong 	TP_ARGS(cur),
4075e06536a6SDarrick J. Wong 	TP_STRUCT__entry(
4076e06536a6SDarrick J. Wong 		__field(dev_t, dev)
4077e06536a6SDarrick J. Wong 		__field(xfs_btnum_t, btnum)
4078e06536a6SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
4079e06536a6SDarrick J. Wong 		__field(xfs_agblock_t, agbno)
4080e06536a6SDarrick J. Wong 		__field(unsigned int, levels)
4081e06536a6SDarrick J. Wong 		__field(unsigned int, blocks)
4082e06536a6SDarrick J. Wong 	),
4083e06536a6SDarrick J. Wong 	TP_fast_assign(
4084e06536a6SDarrick J. Wong 		__entry->dev = cur->bc_mp->m_super->s_dev;
4085e06536a6SDarrick J. Wong 		__entry->btnum = cur->bc_btnum;
408650f02fe3SDave Chinner 		__entry->agno = cur->bc_ag.pag->pag_agno;
4087e06536a6SDarrick J. Wong 		__entry->agbno = cur->bc_ag.afake->af_root;
4088e06536a6SDarrick J. Wong 		__entry->levels = cur->bc_ag.afake->af_levels;
4089e06536a6SDarrick J. Wong 		__entry->blocks = cur->bc_ag.afake->af_blocks;
4090e06536a6SDarrick J. Wong 	),
40919febf39dSDarrick J. Wong 	TP_printk("dev %d:%d btree %s agno 0x%x levels %u blocks %u root %u",
4092e06536a6SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
4093e06536a6SDarrick J. Wong 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
4094e06536a6SDarrick J. Wong 		  __entry->agno,
4095e06536a6SDarrick J. Wong 		  __entry->levels,
4096e06536a6SDarrick J. Wong 		  __entry->blocks,
4097e06536a6SDarrick J. Wong 		  __entry->agbno)
4098e06536a6SDarrick J. Wong )
4099e06536a6SDarrick J. Wong 
4100349e1c03SDarrick J. Wong TRACE_EVENT(xfs_btree_commit_ifakeroot,
4101349e1c03SDarrick J. Wong 	TP_PROTO(struct xfs_btree_cur *cur),
4102349e1c03SDarrick J. Wong 	TP_ARGS(cur),
4103349e1c03SDarrick J. Wong 	TP_STRUCT__entry(
4104349e1c03SDarrick J. Wong 		__field(dev_t, dev)
4105349e1c03SDarrick J. Wong 		__field(xfs_btnum_t, btnum)
4106349e1c03SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
4107349e1c03SDarrick J. Wong 		__field(xfs_agino_t, agino)
4108349e1c03SDarrick J. Wong 		__field(unsigned int, levels)
4109349e1c03SDarrick J. Wong 		__field(unsigned int, blocks)
4110349e1c03SDarrick J. Wong 		__field(int, whichfork)
4111349e1c03SDarrick J. Wong 	),
4112349e1c03SDarrick J. Wong 	TP_fast_assign(
4113349e1c03SDarrick J. Wong 		__entry->dev = cur->bc_mp->m_super->s_dev;
4114349e1c03SDarrick J. Wong 		__entry->btnum = cur->bc_btnum;
4115349e1c03SDarrick J. Wong 		__entry->agno = XFS_INO_TO_AGNO(cur->bc_mp,
4116349e1c03SDarrick J. Wong 					cur->bc_ino.ip->i_ino);
4117349e1c03SDarrick J. Wong 		__entry->agino = XFS_INO_TO_AGINO(cur->bc_mp,
4118349e1c03SDarrick J. Wong 					cur->bc_ino.ip->i_ino);
4119349e1c03SDarrick J. Wong 		__entry->levels = cur->bc_ino.ifake->if_levels;
4120349e1c03SDarrick J. Wong 		__entry->blocks = cur->bc_ino.ifake->if_blocks;
4121349e1c03SDarrick J. Wong 		__entry->whichfork = cur->bc_ino.whichfork;
4122349e1c03SDarrick J. Wong 	),
41239febf39dSDarrick J. Wong 	TP_printk("dev %d:%d btree %s agno 0x%x agino 0x%x whichfork %s levels %u blocks %u",
4124349e1c03SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
4125349e1c03SDarrick J. Wong 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
4126349e1c03SDarrick J. Wong 		  __entry->agno,
4127349e1c03SDarrick J. Wong 		  __entry->agino,
4128f93f85f7SDarrick J. Wong 		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
4129349e1c03SDarrick J. Wong 		  __entry->levels,
4130349e1c03SDarrick J. Wong 		  __entry->blocks)
4131349e1c03SDarrick J. Wong )
4132349e1c03SDarrick J. Wong 
413360e3d707SDarrick J. Wong TRACE_EVENT(xfs_btree_bload_level_geometry,
413460e3d707SDarrick J. Wong 	TP_PROTO(struct xfs_btree_cur *cur, unsigned int level,
413560e3d707SDarrick J. Wong 		 uint64_t nr_this_level, unsigned int nr_per_block,
413660e3d707SDarrick J. Wong 		 unsigned int desired_npb, uint64_t blocks,
413760e3d707SDarrick J. Wong 		 uint64_t blocks_with_extra),
413860e3d707SDarrick J. Wong 	TP_ARGS(cur, level, nr_this_level, nr_per_block, desired_npb, blocks,
413960e3d707SDarrick J. Wong 		blocks_with_extra),
414060e3d707SDarrick J. Wong 	TP_STRUCT__entry(
414160e3d707SDarrick J. Wong 		__field(dev_t, dev)
414260e3d707SDarrick J. Wong 		__field(xfs_btnum_t, btnum)
414360e3d707SDarrick J. Wong 		__field(unsigned int, level)
414460e3d707SDarrick J. Wong 		__field(unsigned int, nlevels)
414560e3d707SDarrick J. Wong 		__field(uint64_t, nr_this_level)
414660e3d707SDarrick J. Wong 		__field(unsigned int, nr_per_block)
414760e3d707SDarrick J. Wong 		__field(unsigned int, desired_npb)
414860e3d707SDarrick J. Wong 		__field(unsigned long long, blocks)
414960e3d707SDarrick J. Wong 		__field(unsigned long long, blocks_with_extra)
415060e3d707SDarrick J. Wong 	),
415160e3d707SDarrick J. Wong 	TP_fast_assign(
415260e3d707SDarrick J. Wong 		__entry->dev = cur->bc_mp->m_super->s_dev;
415360e3d707SDarrick J. Wong 		__entry->btnum = cur->bc_btnum;
415460e3d707SDarrick J. Wong 		__entry->level = level;
415560e3d707SDarrick J. Wong 		__entry->nlevels = cur->bc_nlevels;
415660e3d707SDarrick J. Wong 		__entry->nr_this_level = nr_this_level;
415760e3d707SDarrick J. Wong 		__entry->nr_per_block = nr_per_block;
415860e3d707SDarrick J. Wong 		__entry->desired_npb = desired_npb;
415960e3d707SDarrick J. Wong 		__entry->blocks = blocks;
416060e3d707SDarrick J. Wong 		__entry->blocks_with_extra = blocks_with_extra;
416160e3d707SDarrick J. Wong 	),
416260e3d707SDarrick J. Wong 	TP_printk("dev %d:%d btree %s level %u/%u nr_this_level %llu nr_per_block %u desired_npb %u blocks %llu blocks_with_extra %llu",
416360e3d707SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
416460e3d707SDarrick J. Wong 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
416560e3d707SDarrick J. Wong 		  __entry->level,
416660e3d707SDarrick J. Wong 		  __entry->nlevels,
416760e3d707SDarrick J. Wong 		  __entry->nr_this_level,
416860e3d707SDarrick J. Wong 		  __entry->nr_per_block,
416960e3d707SDarrick J. Wong 		  __entry->desired_npb,
417060e3d707SDarrick J. Wong 		  __entry->blocks,
417160e3d707SDarrick J. Wong 		  __entry->blocks_with_extra)
417260e3d707SDarrick J. Wong )
417360e3d707SDarrick J. Wong 
417460e3d707SDarrick J. Wong TRACE_EVENT(xfs_btree_bload_block,
417560e3d707SDarrick J. Wong 	TP_PROTO(struct xfs_btree_cur *cur, unsigned int level,
417660e3d707SDarrick J. Wong 		 uint64_t block_idx, uint64_t nr_blocks,
417760e3d707SDarrick J. Wong 		 union xfs_btree_ptr *ptr, unsigned int nr_records),
417860e3d707SDarrick J. Wong 	TP_ARGS(cur, level, block_idx, nr_blocks, ptr, nr_records),
417960e3d707SDarrick J. Wong 	TP_STRUCT__entry(
418060e3d707SDarrick J. Wong 		__field(dev_t, dev)
418160e3d707SDarrick J. Wong 		__field(xfs_btnum_t, btnum)
418260e3d707SDarrick J. Wong 		__field(unsigned int, level)
418360e3d707SDarrick J. Wong 		__field(unsigned long long, block_idx)
418460e3d707SDarrick J. Wong 		__field(unsigned long long, nr_blocks)
418560e3d707SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
418660e3d707SDarrick J. Wong 		__field(xfs_agblock_t, agbno)
418760e3d707SDarrick J. Wong 		__field(unsigned int, nr_records)
418860e3d707SDarrick J. Wong 	),
418960e3d707SDarrick J. Wong 	TP_fast_assign(
419060e3d707SDarrick J. Wong 		__entry->dev = cur->bc_mp->m_super->s_dev;
419160e3d707SDarrick J. Wong 		__entry->btnum = cur->bc_btnum;
419260e3d707SDarrick J. Wong 		__entry->level = level;
419360e3d707SDarrick J. Wong 		__entry->block_idx = block_idx;
419460e3d707SDarrick J. Wong 		__entry->nr_blocks = nr_blocks;
419560e3d707SDarrick J. Wong 		if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
419660e3d707SDarrick J. Wong 			xfs_fsblock_t	fsb = be64_to_cpu(ptr->l);
419760e3d707SDarrick J. Wong 
419860e3d707SDarrick J. Wong 			__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsb);
419960e3d707SDarrick J. Wong 			__entry->agbno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsb);
420060e3d707SDarrick J. Wong 		} else {
420150f02fe3SDave Chinner 			__entry->agno = cur->bc_ag.pag->pag_agno;
420260e3d707SDarrick J. Wong 			__entry->agbno = be32_to_cpu(ptr->s);
420360e3d707SDarrick J. Wong 		}
420460e3d707SDarrick J. Wong 		__entry->nr_records = nr_records;
420560e3d707SDarrick J. Wong 	),
4206f7b08163SDarrick J. Wong 	TP_printk("dev %d:%d btree %s level %u block %llu/%llu agno 0x%x agbno 0x%x recs %u",
420760e3d707SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
420860e3d707SDarrick J. Wong 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
420960e3d707SDarrick J. Wong 		  __entry->level,
421060e3d707SDarrick J. Wong 		  __entry->block_idx,
421160e3d707SDarrick J. Wong 		  __entry->nr_blocks,
421260e3d707SDarrick J. Wong 		  __entry->agno,
421360e3d707SDarrick J. Wong 		  __entry->agbno,
421460e3d707SDarrick J. Wong 		  __entry->nr_records)
421560e3d707SDarrick J. Wong )
421660e3d707SDarrick J. Wong 
421706dbf82bSDarrick J. Wong DECLARE_EVENT_CLASS(xfs_timestamp_range_class,
421806dbf82bSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, time64_t min, time64_t max),
421906dbf82bSDarrick J. Wong 	TP_ARGS(mp, min, max),
422006dbf82bSDarrick J. Wong 	TP_STRUCT__entry(
422106dbf82bSDarrick J. Wong 		__field(dev_t, dev)
422206dbf82bSDarrick J. Wong 		__field(long long, min)
422306dbf82bSDarrick J. Wong 		__field(long long, max)
422406dbf82bSDarrick J. Wong 	),
422506dbf82bSDarrick J. Wong 	TP_fast_assign(
422606dbf82bSDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
422706dbf82bSDarrick J. Wong 		__entry->min = min;
422806dbf82bSDarrick J. Wong 		__entry->max = max;
422906dbf82bSDarrick J. Wong 	),
423006dbf82bSDarrick J. Wong 	TP_printk("dev %d:%d min %lld max %lld",
423106dbf82bSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
423206dbf82bSDarrick J. Wong 		  __entry->min,
423306dbf82bSDarrick J. Wong 		  __entry->max)
423406dbf82bSDarrick J. Wong )
423506dbf82bSDarrick J. Wong 
423606dbf82bSDarrick J. Wong #define DEFINE_TIMESTAMP_RANGE_EVENT(name) \
423706dbf82bSDarrick J. Wong DEFINE_EVENT(xfs_timestamp_range_class, name, \
423806dbf82bSDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, long long min, long long max), \
423906dbf82bSDarrick J. Wong 	TP_ARGS(mp, min, max))
424006dbf82bSDarrick J. Wong DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range);
424106dbf82bSDarrick J. Wong DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range);
424206dbf82bSDarrick J. Wong 
4243b26b2bf1SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_icwalk_class,
4244b26b2bf1SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_icwalk *icw,
424538899f80SDarrick J. Wong 		 unsigned long caller_ip),
4246b26b2bf1SDarrick J. Wong 	TP_ARGS(mp, icw, caller_ip),
424738899f80SDarrick J. Wong 	TP_STRUCT__entry(
424838899f80SDarrick J. Wong 		__field(dev_t, dev)
424938899f80SDarrick J. Wong 		__field(__u32, flags)
425038899f80SDarrick J. Wong 		__field(uint32_t, uid)
425138899f80SDarrick J. Wong 		__field(uint32_t, gid)
425238899f80SDarrick J. Wong 		__field(prid_t, prid)
425338899f80SDarrick J. Wong 		__field(__u64, min_file_size)
425410be350bSDarrick J. Wong 		__field(long, scan_limit)
425538899f80SDarrick J. Wong 		__field(unsigned long, caller_ip)
425638899f80SDarrick J. Wong 	),
425738899f80SDarrick J. Wong 	TP_fast_assign(
425838899f80SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
4259b26b2bf1SDarrick J. Wong 		__entry->flags = icw ? icw->icw_flags : 0;
4260b26b2bf1SDarrick J. Wong 		__entry->uid = icw ? from_kuid(mp->m_super->s_user_ns,
4261b26b2bf1SDarrick J. Wong 						icw->icw_uid) : 0;
4262b26b2bf1SDarrick J. Wong 		__entry->gid = icw ? from_kgid(mp->m_super->s_user_ns,
4263b26b2bf1SDarrick J. Wong 						icw->icw_gid) : 0;
4264b26b2bf1SDarrick J. Wong 		__entry->prid = icw ? icw->icw_prid : 0;
4265b26b2bf1SDarrick J. Wong 		__entry->min_file_size = icw ? icw->icw_min_file_size : 0;
4266b26b2bf1SDarrick J. Wong 		__entry->scan_limit = icw ? icw->icw_scan_limit : 0;
426738899f80SDarrick J. Wong 		__entry->caller_ip = caller_ip;
426838899f80SDarrick J. Wong 	),
426910be350bSDarrick J. Wong 	TP_printk("dev %d:%d flags 0x%x uid %u gid %u prid %u minsize %llu scan_limit %ld caller %pS",
427038899f80SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
427138899f80SDarrick J. Wong 		  __entry->flags,
427238899f80SDarrick J. Wong 		  __entry->uid,
427338899f80SDarrick J. Wong 		  __entry->gid,
427438899f80SDarrick J. Wong 		  __entry->prid,
427538899f80SDarrick J. Wong 		  __entry->min_file_size,
4276f1bc5c56SDarrick J. Wong 		  __entry->scan_limit,
427738899f80SDarrick J. Wong 		  (char *)__entry->caller_ip)
427838899f80SDarrick J. Wong );
4279b26b2bf1SDarrick J. Wong #define DEFINE_ICWALK_EVENT(name)	\
4280b26b2bf1SDarrick J. Wong DEFINE_EVENT(xfs_icwalk_class, name,	\
4281b26b2bf1SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, struct xfs_icwalk *icw, \
428238899f80SDarrick J. Wong 		 unsigned long caller_ip), \
4283b26b2bf1SDarrick J. Wong 	TP_ARGS(mp, icw, caller_ip))
4284b26b2bf1SDarrick J. Wong DEFINE_ICWALK_EVENT(xfs_ioc_free_eofblocks);
4285b26b2bf1SDarrick J. Wong DEFINE_ICWALK_EVENT(xfs_blockgc_free_space);
428638899f80SDarrick J. Wong 
4287956f6daaSDave Chinner TRACE_DEFINE_ENUM(XLOG_STATE_ACTIVE);
4288956f6daaSDave Chinner TRACE_DEFINE_ENUM(XLOG_STATE_WANT_SYNC);
4289956f6daaSDave Chinner TRACE_DEFINE_ENUM(XLOG_STATE_SYNCING);
4290956f6daaSDave Chinner TRACE_DEFINE_ENUM(XLOG_STATE_DONE_SYNC);
4291956f6daaSDave Chinner TRACE_DEFINE_ENUM(XLOG_STATE_CALLBACK);
4292956f6daaSDave Chinner TRACE_DEFINE_ENUM(XLOG_STATE_DIRTY);
4293956f6daaSDave Chinner 
4294956f6daaSDave Chinner DECLARE_EVENT_CLASS(xlog_iclog_class,
4295956f6daaSDave Chinner 	TP_PROTO(struct xlog_in_core *iclog, unsigned long caller_ip),
4296956f6daaSDave Chinner 	TP_ARGS(iclog, caller_ip),
4297956f6daaSDave Chinner 	TP_STRUCT__entry(
4298956f6daaSDave Chinner 		__field(dev_t, dev)
4299956f6daaSDave Chinner 		__field(uint32_t, state)
4300956f6daaSDave Chinner 		__field(int32_t, refcount)
4301956f6daaSDave Chinner 		__field(uint32_t, offset)
4302b2ae3a9eSDave Chinner 		__field(uint32_t, flags)
4303956f6daaSDave Chinner 		__field(unsigned long long, lsn)
4304956f6daaSDave Chinner 		__field(unsigned long, caller_ip)
4305956f6daaSDave Chinner 	),
4306956f6daaSDave Chinner 	TP_fast_assign(
4307956f6daaSDave Chinner 		__entry->dev = iclog->ic_log->l_mp->m_super->s_dev;
4308956f6daaSDave Chinner 		__entry->state = iclog->ic_state;
4309956f6daaSDave Chinner 		__entry->refcount = atomic_read(&iclog->ic_refcnt);
4310956f6daaSDave Chinner 		__entry->offset = iclog->ic_offset;
4311b2ae3a9eSDave Chinner 		__entry->flags = iclog->ic_flags;
4312956f6daaSDave Chinner 		__entry->lsn = be64_to_cpu(iclog->ic_header.h_lsn);
4313956f6daaSDave Chinner 		__entry->caller_ip = caller_ip;
4314956f6daaSDave Chinner 	),
4315b2ae3a9eSDave Chinner 	TP_printk("dev %d:%d state %s refcnt %d offset %u lsn 0x%llx flags %s caller %pS",
4316956f6daaSDave Chinner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
4317956f6daaSDave Chinner 		  __print_symbolic(__entry->state, XLOG_STATE_STRINGS),
4318956f6daaSDave Chinner 		  __entry->refcount,
4319956f6daaSDave Chinner 		  __entry->offset,
4320956f6daaSDave Chinner 		  __entry->lsn,
4321b2ae3a9eSDave Chinner 		  __print_flags(__entry->flags, "|", XLOG_ICL_STRINGS),
4322956f6daaSDave Chinner 		  (char *)__entry->caller_ip)
4323956f6daaSDave Chinner 
4324956f6daaSDave Chinner );
4325956f6daaSDave Chinner 
4326956f6daaSDave Chinner #define DEFINE_ICLOG_EVENT(name)	\
4327956f6daaSDave Chinner DEFINE_EVENT(xlog_iclog_class, name,	\
4328956f6daaSDave Chinner 	TP_PROTO(struct xlog_in_core *iclog, unsigned long caller_ip), \
4329956f6daaSDave Chinner 	TP_ARGS(iclog, caller_ip))
4330956f6daaSDave Chinner 
4331956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_activate);
4332956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_clean);
4333956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_callback);
4334956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_callbacks_start);
4335956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_callbacks_done);
4336956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_force);
4337956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_force_lsn);
4338956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_get_space);
4339956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_release);
4340956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_switch);
4341956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_sync);
4342956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_syncing);
4343956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_sync_done);
4344956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_want_sync);
4345956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_wait_on);
4346956f6daaSDave Chinner DEFINE_ICLOG_EVENT(xlog_iclog_write);
4347956f6daaSDave Chinner 
4348e0c41089SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_UNINIT);
4349e0c41089SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_SF_ADD);
4350e5d5596aSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_SF_REMOVE);
4351fdaf1bb3SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_ADD);
4352e5d5596aSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE);
4353fdaf1bb3SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_ADD);
4354e5d5596aSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE);
43557d035336SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_SET_RMT);
43562157d169SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_ALLOC_RMT);
43577d035336SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REPLACE);
4358411b434aSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE_OLD);
43592e7ef218SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE_RMT);
4360b11fa61bSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE_ATTR);
43617d035336SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_SET_RMT);
43627d035336SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_ALLOC_RMT);
43637d035336SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_REPLACE);
4364411b434aSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE_OLD);
43652e7ef218SDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE_RMT);
4366b11fa61bSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE_ATTR);
4367b11fa61bSDave Chinner TRACE_DEFINE_ENUM(XFS_DAS_DONE);
4368e0c41089SDave Chinner 
4369df082631SAllison Henderson DECLARE_EVENT_CLASS(xfs_das_state_class,
4370df082631SAllison Henderson 	TP_PROTO(int das, struct xfs_inode *ip),
4371df082631SAllison Henderson 	TP_ARGS(das, ip),
4372df082631SAllison Henderson 	TP_STRUCT__entry(
4373df082631SAllison Henderson 		__field(int, das)
4374df082631SAllison Henderson 		__field(xfs_ino_t, ino)
4375df082631SAllison Henderson 	),
4376df082631SAllison Henderson 	TP_fast_assign(
4377df082631SAllison Henderson 		__entry->das = das;
4378df082631SAllison Henderson 		__entry->ino = ip->i_ino;
4379df082631SAllison Henderson 	),
4380e0c41089SDave Chinner 	TP_printk("state change %s ino 0x%llx",
4381e0c41089SDave Chinner 		  __print_symbolic(__entry->das, XFS_DAS_STRINGS),
4382e0c41089SDave Chinner 		  __entry->ino)
4383df082631SAllison Henderson )
4384df082631SAllison Henderson 
4385df082631SAllison Henderson #define DEFINE_DAS_STATE_EVENT(name) \
4386df082631SAllison Henderson DEFINE_EVENT(xfs_das_state_class, name, \
4387df082631SAllison Henderson 	TP_PROTO(int das, struct xfs_inode *ip), \
4388df082631SAllison Henderson 	TP_ARGS(das, ip))
4389df082631SAllison Henderson DEFINE_DAS_STATE_EVENT(xfs_attr_sf_addname_return);
4390df082631SAllison Henderson DEFINE_DAS_STATE_EVENT(xfs_attr_set_iter_return);
4391cd1549d6SAllison Henderson DEFINE_DAS_STATE_EVENT(xfs_attr_leaf_addname_return);
4392df082631SAllison Henderson DEFINE_DAS_STATE_EVENT(xfs_attr_node_addname_return);
4393df082631SAllison Henderson DEFINE_DAS_STATE_EVENT(xfs_attr_remove_iter_return);
43947d035336SDave Chinner DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_alloc);
4395df082631SAllison Henderson DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_remove_return);
4396709c8632SDave Chinner DEFINE_DAS_STATE_EVENT(xfs_attr_defer_add);
4397709c8632SDave Chinner DEFINE_DAS_STATE_EVENT(xfs_attr_defer_replace);
4398709c8632SDave Chinner DEFINE_DAS_STATE_EVENT(xfs_attr_defer_remove);
4399709c8632SDave Chinner 
44007f89c838SDarrick J. Wong 
44017f89c838SDarrick J. Wong TRACE_EVENT(xfs_force_shutdown,
44027f89c838SDarrick J. Wong 	TP_PROTO(struct xfs_mount *mp, int ptag, int flags, const char *fname,
44037f89c838SDarrick J. Wong 		 int line_num),
44047f89c838SDarrick J. Wong 	TP_ARGS(mp, ptag, flags, fname, line_num),
44057f89c838SDarrick J. Wong 	TP_STRUCT__entry(
44067f89c838SDarrick J. Wong 		__field(dev_t, dev)
44077f89c838SDarrick J. Wong 		__field(int, ptag)
44087f89c838SDarrick J. Wong 		__field(int, flags)
44097f89c838SDarrick J. Wong 		__string(fname, fname)
44107f89c838SDarrick J. Wong 		__field(int, line_num)
44117f89c838SDarrick J. Wong 	),
44127f89c838SDarrick J. Wong 	TP_fast_assign(
44137f89c838SDarrick J. Wong 		__entry->dev = mp->m_super->s_dev;
44147f89c838SDarrick J. Wong 		__entry->ptag = ptag;
44157f89c838SDarrick J. Wong 		__entry->flags = flags;
44167f89c838SDarrick J. Wong 		__assign_str(fname, fname);
44177f89c838SDarrick J. Wong 		__entry->line_num = line_num;
44187f89c838SDarrick J. Wong 	),
44197f89c838SDarrick J. Wong 	TP_printk("dev %d:%d tag %s flags %s file %s line_num %d",
44207f89c838SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
44217f89c838SDarrick J. Wong 		__print_flags(__entry->ptag, "|", XFS_PTAG_STRINGS),
44227f89c838SDarrick J. Wong 		__print_flags(__entry->flags, "|", XFS_SHUTDOWN_STRINGS),
44237f89c838SDarrick J. Wong 		__get_str(fname),
44247f89c838SDarrick J. Wong 		__entry->line_num)
44257f89c838SDarrick J. Wong );
44267f89c838SDarrick J. Wong 
4427d5c88131SDarrick J. Wong #ifdef CONFIG_XFS_DRAIN_INTENTS
4428d5c88131SDarrick J. Wong DECLARE_EVENT_CLASS(xfs_perag_intents_class,
4429d5c88131SDarrick J. Wong 	TP_PROTO(struct xfs_perag *pag, void *caller_ip),
4430d5c88131SDarrick J. Wong 	TP_ARGS(pag, caller_ip),
4431d5c88131SDarrick J. Wong 	TP_STRUCT__entry(
4432d5c88131SDarrick J. Wong 		__field(dev_t, dev)
4433d5c88131SDarrick J. Wong 		__field(xfs_agnumber_t, agno)
4434d5c88131SDarrick J. Wong 		__field(long, nr_intents)
4435d5c88131SDarrick J. Wong 		__field(void *, caller_ip)
4436d5c88131SDarrick J. Wong 	),
4437d5c88131SDarrick J. Wong 	TP_fast_assign(
4438d5c88131SDarrick J. Wong 		__entry->dev = pag->pag_mount->m_super->s_dev;
4439d5c88131SDarrick J. Wong 		__entry->agno = pag->pag_agno;
4440d5c88131SDarrick J. Wong 		__entry->nr_intents = atomic_read(&pag->pag_intents_drain.dr_count);
4441d5c88131SDarrick J. Wong 		__entry->caller_ip = caller_ip;
4442d5c88131SDarrick J. Wong 	),
4443d5c88131SDarrick J. Wong 	TP_printk("dev %d:%d agno 0x%x intents %ld caller %pS",
4444d5c88131SDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
4445d5c88131SDarrick J. Wong 		  __entry->agno,
4446d5c88131SDarrick J. Wong 		  __entry->nr_intents,
4447d5c88131SDarrick J. Wong 		  __entry->caller_ip)
4448d5c88131SDarrick J. Wong );
4449d5c88131SDarrick J. Wong 
4450d5c88131SDarrick J. Wong #define DEFINE_PERAG_INTENTS_EVENT(name)	\
4451d5c88131SDarrick J. Wong DEFINE_EVENT(xfs_perag_intents_class, name,					\
4452d5c88131SDarrick J. Wong 	TP_PROTO(struct xfs_perag *pag, void *caller_ip), \
4453d5c88131SDarrick J. Wong 	TP_ARGS(pag, caller_ip))
4454d5c88131SDarrick J. Wong DEFINE_PERAG_INTENTS_EVENT(xfs_perag_intent_hold);
4455d5c88131SDarrick J. Wong DEFINE_PERAG_INTENTS_EVENT(xfs_perag_intent_rele);
4456d5c88131SDarrick J. Wong DEFINE_PERAG_INTENTS_EVENT(xfs_perag_wait_intents);
4457d5c88131SDarrick J. Wong 
4458d5c88131SDarrick J. Wong #endif /* CONFIG_XFS_DRAIN_INTENTS */
4459d5c88131SDarrick J. Wong 
4460c59d87c4SChristoph Hellwig #endif /* _TRACE_XFS_H */
4461c59d87c4SChristoph Hellwig 
4462c59d87c4SChristoph Hellwig #undef TRACE_INCLUDE_PATH
4463c59d87c4SChristoph Hellwig #define TRACE_INCLUDE_PATH .
4464c59d87c4SChristoph Hellwig #define TRACE_INCLUDE_FILE xfs_trace
4465c59d87c4SChristoph Hellwig #include <trace/define_trace.h>
4466