xref: /OK3568_Linux_fs/kernel/fs/xfs/xfs_trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2009, Christoph Hellwig
4*4882a593Smuzhiyun  * All Rights Reserved.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #undef TRACE_SYSTEM
7*4882a593Smuzhiyun #define TRACE_SYSTEM xfs
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ)
10*4882a593Smuzhiyun #define _TRACE_XFS_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/tracepoint.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun struct xfs_agf;
15*4882a593Smuzhiyun struct xfs_alloc_arg;
16*4882a593Smuzhiyun struct xfs_attr_list_context;
17*4882a593Smuzhiyun struct xfs_buf_log_item;
18*4882a593Smuzhiyun struct xfs_da_args;
19*4882a593Smuzhiyun struct xfs_da_node_entry;
20*4882a593Smuzhiyun struct xfs_dquot;
21*4882a593Smuzhiyun struct xfs_log_item;
22*4882a593Smuzhiyun struct xlog;
23*4882a593Smuzhiyun struct xlog_ticket;
24*4882a593Smuzhiyun struct xlog_recover;
25*4882a593Smuzhiyun struct xlog_recover_item;
26*4882a593Smuzhiyun struct xlog_rec_header;
27*4882a593Smuzhiyun struct xfs_buf_log_format;
28*4882a593Smuzhiyun struct xfs_inode_log_format;
29*4882a593Smuzhiyun struct xfs_bmbt_irec;
30*4882a593Smuzhiyun struct xfs_btree_cur;
31*4882a593Smuzhiyun struct xfs_refcount_irec;
32*4882a593Smuzhiyun struct xfs_fsmap;
33*4882a593Smuzhiyun struct xfs_rmap_irec;
34*4882a593Smuzhiyun struct xfs_icreate_log;
35*4882a593Smuzhiyun struct xfs_owner_info;
36*4882a593Smuzhiyun struct xfs_trans_res;
37*4882a593Smuzhiyun struct xfs_inobt_rec_incore;
38*4882a593Smuzhiyun union xfs_btree_ptr;
39*4882a593Smuzhiyun struct xfs_dqtrx;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define XFS_ATTR_FILTER_FLAGS \
42*4882a593Smuzhiyun 	{ XFS_ATTR_ROOT,	"ROOT" }, \
43*4882a593Smuzhiyun 	{ XFS_ATTR_SECURE,	"SECURE" }, \
44*4882a593Smuzhiyun 	{ XFS_ATTR_INCOMPLETE,	"INCOMPLETE" }
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_attr_list_class,
47*4882a593Smuzhiyun 	TP_PROTO(struct xfs_attr_list_context *ctx),
48*4882a593Smuzhiyun 	TP_ARGS(ctx),
49*4882a593Smuzhiyun 	TP_STRUCT__entry(
50*4882a593Smuzhiyun 		__field(dev_t, dev)
51*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
52*4882a593Smuzhiyun 		__field(u32, hashval)
53*4882a593Smuzhiyun 		__field(u32, blkno)
54*4882a593Smuzhiyun 		__field(u32, offset)
55*4882a593Smuzhiyun 		__field(void *, buffer)
56*4882a593Smuzhiyun 		__field(int, bufsize)
57*4882a593Smuzhiyun 		__field(int, count)
58*4882a593Smuzhiyun 		__field(int, firstu)
59*4882a593Smuzhiyun 		__field(int, dupcnt)
60*4882a593Smuzhiyun 		__field(unsigned int, attr_filter)
61*4882a593Smuzhiyun 	),
62*4882a593Smuzhiyun 	TP_fast_assign(
63*4882a593Smuzhiyun 		__entry->dev = VFS_I(ctx->dp)->i_sb->s_dev;
64*4882a593Smuzhiyun 		__entry->ino = ctx->dp->i_ino;
65*4882a593Smuzhiyun 		__entry->hashval = ctx->cursor.hashval;
66*4882a593Smuzhiyun 		__entry->blkno = ctx->cursor.blkno;
67*4882a593Smuzhiyun 		__entry->offset = ctx->cursor.offset;
68*4882a593Smuzhiyun 		__entry->buffer = ctx->buffer;
69*4882a593Smuzhiyun 		__entry->bufsize = ctx->bufsize;
70*4882a593Smuzhiyun 		__entry->count = ctx->count;
71*4882a593Smuzhiyun 		__entry->firstu = ctx->firstu;
72*4882a593Smuzhiyun 		__entry->attr_filter = ctx->attr_filter;
73*4882a593Smuzhiyun 	),
74*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "
75*4882a593Smuzhiyun 		  "buffer %p size %u count %u firstu %u filter %s",
76*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
77*4882a593Smuzhiyun 		   __entry->ino,
78*4882a593Smuzhiyun 		   __entry->hashval,
79*4882a593Smuzhiyun 		   __entry->blkno,
80*4882a593Smuzhiyun 		   __entry->offset,
81*4882a593Smuzhiyun 		   __entry->dupcnt,
82*4882a593Smuzhiyun 		   __entry->buffer,
83*4882a593Smuzhiyun 		   __entry->bufsize,
84*4882a593Smuzhiyun 		   __entry->count,
85*4882a593Smuzhiyun 		   __entry->firstu,
86*4882a593Smuzhiyun 		   __print_flags(__entry->attr_filter, "|",
87*4882a593Smuzhiyun 				 XFS_ATTR_FILTER_FLAGS)
88*4882a593Smuzhiyun 	)
89*4882a593Smuzhiyun )
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #define DEFINE_ATTR_LIST_EVENT(name) \
92*4882a593Smuzhiyun DEFINE_EVENT(xfs_attr_list_class, name, \
93*4882a593Smuzhiyun 	TP_PROTO(struct xfs_attr_list_context *ctx), \
94*4882a593Smuzhiyun 	TP_ARGS(ctx))
95*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf);
96*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all);
97*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf);
98*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end);
99*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full);
100*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add);
101*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk);
102*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound);
103*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list);
104*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list);
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_perag_class,
107*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount,
108*4882a593Smuzhiyun 		 unsigned long caller_ip),
109*4882a593Smuzhiyun 	TP_ARGS(mp, agno, refcount, caller_ip),
110*4882a593Smuzhiyun 	TP_STRUCT__entry(
111*4882a593Smuzhiyun 		__field(dev_t, dev)
112*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
113*4882a593Smuzhiyun 		__field(int, refcount)
114*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
115*4882a593Smuzhiyun 	),
116*4882a593Smuzhiyun 	TP_fast_assign(
117*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
118*4882a593Smuzhiyun 		__entry->agno = agno;
119*4882a593Smuzhiyun 		__entry->refcount = refcount;
120*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
121*4882a593Smuzhiyun 	),
122*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u refcount %d caller %pS",
123*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
124*4882a593Smuzhiyun 		  __entry->agno,
125*4882a593Smuzhiyun 		  __entry->refcount,
126*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
127*4882a593Smuzhiyun );
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun #define DEFINE_PERAG_REF_EVENT(name)	\
130*4882a593Smuzhiyun DEFINE_EVENT(xfs_perag_class, name,	\
131*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount,	\
132*4882a593Smuzhiyun 		 unsigned long caller_ip),					\
133*4882a593Smuzhiyun 	TP_ARGS(mp, agno, refcount, caller_ip))
134*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_get);
135*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_get_tag);
136*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_put);
137*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_set_reclaim);
138*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_clear_reclaim);
139*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_set_eofblocks);
140*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_clear_eofblocks);
141*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_set_cowblocks);
142*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_clear_cowblocks);
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_class,
145*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno),
146*4882a593Smuzhiyun 	TP_ARGS(mp, agno),
147*4882a593Smuzhiyun 	TP_STRUCT__entry(
148*4882a593Smuzhiyun 		__field(dev_t, dev)
149*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
150*4882a593Smuzhiyun 	),
151*4882a593Smuzhiyun 	TP_fast_assign(
152*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
153*4882a593Smuzhiyun 		__entry->agno = agno;
154*4882a593Smuzhiyun 	),
155*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u",
156*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
157*4882a593Smuzhiyun 		  __entry->agno)
158*4882a593Smuzhiyun );
159*4882a593Smuzhiyun #define DEFINE_AG_EVENT(name)	\
160*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_class, name,	\
161*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno),	\
162*4882a593Smuzhiyun 	TP_ARGS(mp, agno))
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_read_agf);
165*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_alloc_read_agf);
166*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_read_agi);
167*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_ialloc_read_agi);
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun TRACE_EVENT(xfs_attr_list_node_descend,
170*4882a593Smuzhiyun 	TP_PROTO(struct xfs_attr_list_context *ctx,
171*4882a593Smuzhiyun 		 struct xfs_da_node_entry *btree),
172*4882a593Smuzhiyun 	TP_ARGS(ctx, btree),
173*4882a593Smuzhiyun 	TP_STRUCT__entry(
174*4882a593Smuzhiyun 		__field(dev_t, dev)
175*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
176*4882a593Smuzhiyun 		__field(u32, hashval)
177*4882a593Smuzhiyun 		__field(u32, blkno)
178*4882a593Smuzhiyun 		__field(u32, offset)
179*4882a593Smuzhiyun 		__field(void *, buffer)
180*4882a593Smuzhiyun 		__field(int, bufsize)
181*4882a593Smuzhiyun 		__field(int, count)
182*4882a593Smuzhiyun 		__field(int, firstu)
183*4882a593Smuzhiyun 		__field(int, dupcnt)
184*4882a593Smuzhiyun 		__field(unsigned int, attr_filter)
185*4882a593Smuzhiyun 		__field(u32, bt_hashval)
186*4882a593Smuzhiyun 		__field(u32, bt_before)
187*4882a593Smuzhiyun 	),
188*4882a593Smuzhiyun 	TP_fast_assign(
189*4882a593Smuzhiyun 		__entry->dev = VFS_I(ctx->dp)->i_sb->s_dev;
190*4882a593Smuzhiyun 		__entry->ino = ctx->dp->i_ino;
191*4882a593Smuzhiyun 		__entry->hashval = ctx->cursor.hashval;
192*4882a593Smuzhiyun 		__entry->blkno = ctx->cursor.blkno;
193*4882a593Smuzhiyun 		__entry->offset = ctx->cursor.offset;
194*4882a593Smuzhiyun 		__entry->buffer = ctx->buffer;
195*4882a593Smuzhiyun 		__entry->bufsize = ctx->bufsize;
196*4882a593Smuzhiyun 		__entry->count = ctx->count;
197*4882a593Smuzhiyun 		__entry->firstu = ctx->firstu;
198*4882a593Smuzhiyun 		__entry->attr_filter = ctx->attr_filter;
199*4882a593Smuzhiyun 		__entry->bt_hashval = be32_to_cpu(btree->hashval);
200*4882a593Smuzhiyun 		__entry->bt_before = be32_to_cpu(btree->before);
201*4882a593Smuzhiyun 	),
202*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "
203*4882a593Smuzhiyun 		  "buffer %p size %u count %u firstu %u filter %s "
204*4882a593Smuzhiyun 		  "node hashval %u, node before %u",
205*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
206*4882a593Smuzhiyun 		   __entry->ino,
207*4882a593Smuzhiyun 		   __entry->hashval,
208*4882a593Smuzhiyun 		   __entry->blkno,
209*4882a593Smuzhiyun 		   __entry->offset,
210*4882a593Smuzhiyun 		   __entry->dupcnt,
211*4882a593Smuzhiyun 		   __entry->buffer,
212*4882a593Smuzhiyun 		   __entry->bufsize,
213*4882a593Smuzhiyun 		   __entry->count,
214*4882a593Smuzhiyun 		   __entry->firstu,
215*4882a593Smuzhiyun 		   __print_flags(__entry->attr_filter, "|",
216*4882a593Smuzhiyun 				 XFS_ATTR_FILTER_FLAGS),
217*4882a593Smuzhiyun 		   __entry->bt_hashval,
218*4882a593Smuzhiyun 		   __entry->bt_before)
219*4882a593Smuzhiyun );
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_bmap_class,
222*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state,
223*4882a593Smuzhiyun 		 unsigned long caller_ip),
224*4882a593Smuzhiyun 	TP_ARGS(ip, cur, state, caller_ip),
225*4882a593Smuzhiyun 	TP_STRUCT__entry(
226*4882a593Smuzhiyun 		__field(dev_t, dev)
227*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
228*4882a593Smuzhiyun 		__field(void *, leaf)
229*4882a593Smuzhiyun 		__field(int, pos)
230*4882a593Smuzhiyun 		__field(xfs_fileoff_t, startoff)
231*4882a593Smuzhiyun 		__field(xfs_fsblock_t, startblock)
232*4882a593Smuzhiyun 		__field(xfs_filblks_t, blockcount)
233*4882a593Smuzhiyun 		__field(xfs_exntst_t, state)
234*4882a593Smuzhiyun 		__field(int, bmap_state)
235*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
236*4882a593Smuzhiyun 	),
237*4882a593Smuzhiyun 	TP_fast_assign(
238*4882a593Smuzhiyun 		struct xfs_ifork	*ifp;
239*4882a593Smuzhiyun 		struct xfs_bmbt_irec	r;
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun 		ifp = xfs_iext_state_to_fork(ip, state);
242*4882a593Smuzhiyun 		xfs_iext_get_extent(ifp, cur, &r);
243*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
244*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
245*4882a593Smuzhiyun 		__entry->leaf = cur->leaf;
246*4882a593Smuzhiyun 		__entry->pos = cur->pos;
247*4882a593Smuzhiyun 		__entry->startoff = r.br_startoff;
248*4882a593Smuzhiyun 		__entry->startblock = r.br_startblock;
249*4882a593Smuzhiyun 		__entry->blockcount = r.br_blockcount;
250*4882a593Smuzhiyun 		__entry->state = r.br_state;
251*4882a593Smuzhiyun 		__entry->bmap_state = state;
252*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
253*4882a593Smuzhiyun 	),
254*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d "
255*4882a593Smuzhiyun 		  "offset %lld block %lld count %lld flag %d caller %pS",
256*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
257*4882a593Smuzhiyun 		  __entry->ino,
258*4882a593Smuzhiyun 		  __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS),
259*4882a593Smuzhiyun 		  __entry->leaf,
260*4882a593Smuzhiyun 		  __entry->pos,
261*4882a593Smuzhiyun 		  __entry->startoff,
262*4882a593Smuzhiyun 		  (int64_t)__entry->startblock,
263*4882a593Smuzhiyun 		  __entry->blockcount,
264*4882a593Smuzhiyun 		  __entry->state,
265*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
266*4882a593Smuzhiyun )
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun #define DEFINE_BMAP_EVENT(name) \
269*4882a593Smuzhiyun DEFINE_EVENT(xfs_bmap_class, name, \
270*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \
271*4882a593Smuzhiyun 		 unsigned long caller_ip), \
272*4882a593Smuzhiyun 	TP_ARGS(ip, cur, state, caller_ip))
273*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_iext_insert);
274*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_iext_remove);
275*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_bmap_pre_update);
276*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_bmap_post_update);
277*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_read_extent);
278*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_write_extent);
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_buf_class,
281*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip),
282*4882a593Smuzhiyun 	TP_ARGS(bp, caller_ip),
283*4882a593Smuzhiyun 	TP_STRUCT__entry(
284*4882a593Smuzhiyun 		__field(dev_t, dev)
285*4882a593Smuzhiyun 		__field(xfs_daddr_t, bno)
286*4882a593Smuzhiyun 		__field(int, nblks)
287*4882a593Smuzhiyun 		__field(int, hold)
288*4882a593Smuzhiyun 		__field(int, pincount)
289*4882a593Smuzhiyun 		__field(unsigned, lockval)
290*4882a593Smuzhiyun 		__field(unsigned, flags)
291*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
292*4882a593Smuzhiyun 	),
293*4882a593Smuzhiyun 	TP_fast_assign(
294*4882a593Smuzhiyun 		__entry->dev = bp->b_target->bt_dev;
295*4882a593Smuzhiyun 		if (bp->b_bn == XFS_BUF_DADDR_NULL)
296*4882a593Smuzhiyun 			__entry->bno = bp->b_maps[0].bm_bn;
297*4882a593Smuzhiyun 		else
298*4882a593Smuzhiyun 			__entry->bno = bp->b_bn;
299*4882a593Smuzhiyun 		__entry->nblks = bp->b_length;
300*4882a593Smuzhiyun 		__entry->hold = atomic_read(&bp->b_hold);
301*4882a593Smuzhiyun 		__entry->pincount = atomic_read(&bp->b_pin_count);
302*4882a593Smuzhiyun 		__entry->lockval = bp->b_sema.count;
303*4882a593Smuzhiyun 		__entry->flags = bp->b_flags;
304*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
305*4882a593Smuzhiyun 	),
306*4882a593Smuzhiyun 	TP_printk("dev %d:%d bno 0x%llx nblks 0x%x hold %d pincount %d "
307*4882a593Smuzhiyun 		  "lock %d flags %s caller %pS",
308*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
309*4882a593Smuzhiyun 		  (unsigned long long)__entry->bno,
310*4882a593Smuzhiyun 		  __entry->nblks,
311*4882a593Smuzhiyun 		  __entry->hold,
312*4882a593Smuzhiyun 		  __entry->pincount,
313*4882a593Smuzhiyun 		  __entry->lockval,
314*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),
315*4882a593Smuzhiyun 		  (void *)__entry->caller_ip)
316*4882a593Smuzhiyun )
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun #define DEFINE_BUF_EVENT(name) \
319*4882a593Smuzhiyun DEFINE_EVENT(xfs_buf_class, name, \
320*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \
321*4882a593Smuzhiyun 	TP_ARGS(bp, caller_ip))
322*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_init);
323*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_free);
324*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_hold);
325*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_rele);
326*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iodone);
327*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_submit);
328*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_lock);
329*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_lock_done);
330*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_trylock_fail);
331*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_trylock);
332*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_unlock);
333*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iowait);
334*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iowait_done);
335*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_queue);
336*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_queued);
337*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_split);
338*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_pushbuf);
339*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_get_uncached);
340*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_item_relse);
341*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iodone_async);
342*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_error_relse);
343*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_wait_buftarg);
344*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_trans_read_buf_shut);
345*4882a593Smuzhiyun 
346*4882a593Smuzhiyun /* not really buffer traces, but the buf provides useful information */
347*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_btree_corrupt);
348*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_reset_dqcounts);
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun /* pass flags explicitly */
351*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_buf_flags_class,
352*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip),
353*4882a593Smuzhiyun 	TP_ARGS(bp, flags, caller_ip),
354*4882a593Smuzhiyun 	TP_STRUCT__entry(
355*4882a593Smuzhiyun 		__field(dev_t, dev)
356*4882a593Smuzhiyun 		__field(xfs_daddr_t, bno)
357*4882a593Smuzhiyun 		__field(size_t, buffer_length)
358*4882a593Smuzhiyun 		__field(int, hold)
359*4882a593Smuzhiyun 		__field(int, pincount)
360*4882a593Smuzhiyun 		__field(unsigned, lockval)
361*4882a593Smuzhiyun 		__field(unsigned, flags)
362*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
363*4882a593Smuzhiyun 	),
364*4882a593Smuzhiyun 	TP_fast_assign(
365*4882a593Smuzhiyun 		__entry->dev = bp->b_target->bt_dev;
366*4882a593Smuzhiyun 		__entry->bno = bp->b_bn;
367*4882a593Smuzhiyun 		__entry->buffer_length = BBTOB(bp->b_length);
368*4882a593Smuzhiyun 		__entry->flags = flags;
369*4882a593Smuzhiyun 		__entry->hold = atomic_read(&bp->b_hold);
370*4882a593Smuzhiyun 		__entry->pincount = atomic_read(&bp->b_pin_count);
371*4882a593Smuzhiyun 		__entry->lockval = bp->b_sema.count;
372*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
373*4882a593Smuzhiyun 	),
374*4882a593Smuzhiyun 	TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d "
375*4882a593Smuzhiyun 		  "lock %d flags %s caller %pS",
376*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
377*4882a593Smuzhiyun 		  (unsigned long long)__entry->bno,
378*4882a593Smuzhiyun 		  __entry->buffer_length,
379*4882a593Smuzhiyun 		  __entry->hold,
380*4882a593Smuzhiyun 		  __entry->pincount,
381*4882a593Smuzhiyun 		  __entry->lockval,
382*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),
383*4882a593Smuzhiyun 		  (void *)__entry->caller_ip)
384*4882a593Smuzhiyun )
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun #define DEFINE_BUF_FLAGS_EVENT(name) \
387*4882a593Smuzhiyun DEFINE_EVENT(xfs_buf_flags_class, name, \
388*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \
389*4882a593Smuzhiyun 	TP_ARGS(bp, flags, caller_ip))
390*4882a593Smuzhiyun DEFINE_BUF_FLAGS_EVENT(xfs_buf_find);
391*4882a593Smuzhiyun DEFINE_BUF_FLAGS_EVENT(xfs_buf_get);
392*4882a593Smuzhiyun DEFINE_BUF_FLAGS_EVENT(xfs_buf_read);
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun TRACE_EVENT(xfs_buf_ioerror,
395*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf *bp, int error, xfs_failaddr_t caller_ip),
396*4882a593Smuzhiyun 	TP_ARGS(bp, error, caller_ip),
397*4882a593Smuzhiyun 	TP_STRUCT__entry(
398*4882a593Smuzhiyun 		__field(dev_t, dev)
399*4882a593Smuzhiyun 		__field(xfs_daddr_t, bno)
400*4882a593Smuzhiyun 		__field(size_t, buffer_length)
401*4882a593Smuzhiyun 		__field(unsigned, flags)
402*4882a593Smuzhiyun 		__field(int, hold)
403*4882a593Smuzhiyun 		__field(int, pincount)
404*4882a593Smuzhiyun 		__field(unsigned, lockval)
405*4882a593Smuzhiyun 		__field(int, error)
406*4882a593Smuzhiyun 		__field(xfs_failaddr_t, caller_ip)
407*4882a593Smuzhiyun 	),
408*4882a593Smuzhiyun 	TP_fast_assign(
409*4882a593Smuzhiyun 		__entry->dev = bp->b_target->bt_dev;
410*4882a593Smuzhiyun 		__entry->bno = bp->b_bn;
411*4882a593Smuzhiyun 		__entry->buffer_length = BBTOB(bp->b_length);
412*4882a593Smuzhiyun 		__entry->hold = atomic_read(&bp->b_hold);
413*4882a593Smuzhiyun 		__entry->pincount = atomic_read(&bp->b_pin_count);
414*4882a593Smuzhiyun 		__entry->lockval = bp->b_sema.count;
415*4882a593Smuzhiyun 		__entry->error = error;
416*4882a593Smuzhiyun 		__entry->flags = bp->b_flags;
417*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
418*4882a593Smuzhiyun 	),
419*4882a593Smuzhiyun 	TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d "
420*4882a593Smuzhiyun 		  "lock %d error %d flags %s caller %pS",
421*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
422*4882a593Smuzhiyun 		  (unsigned long long)__entry->bno,
423*4882a593Smuzhiyun 		  __entry->buffer_length,
424*4882a593Smuzhiyun 		  __entry->hold,
425*4882a593Smuzhiyun 		  __entry->pincount,
426*4882a593Smuzhiyun 		  __entry->lockval,
427*4882a593Smuzhiyun 		  __entry->error,
428*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),
429*4882a593Smuzhiyun 		  (void *)__entry->caller_ip)
430*4882a593Smuzhiyun );
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_buf_item_class,
433*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf_log_item *bip),
434*4882a593Smuzhiyun 	TP_ARGS(bip),
435*4882a593Smuzhiyun 	TP_STRUCT__entry(
436*4882a593Smuzhiyun 		__field(dev_t, dev)
437*4882a593Smuzhiyun 		__field(xfs_daddr_t, buf_bno)
438*4882a593Smuzhiyun 		__field(size_t, buf_len)
439*4882a593Smuzhiyun 		__field(int, buf_hold)
440*4882a593Smuzhiyun 		__field(int, buf_pincount)
441*4882a593Smuzhiyun 		__field(int, buf_lockval)
442*4882a593Smuzhiyun 		__field(unsigned, buf_flags)
443*4882a593Smuzhiyun 		__field(unsigned, bli_recur)
444*4882a593Smuzhiyun 		__field(int, bli_refcount)
445*4882a593Smuzhiyun 		__field(unsigned, bli_flags)
446*4882a593Smuzhiyun 		__field(unsigned long, li_flags)
447*4882a593Smuzhiyun 	),
448*4882a593Smuzhiyun 	TP_fast_assign(
449*4882a593Smuzhiyun 		__entry->dev = bip->bli_buf->b_target->bt_dev;
450*4882a593Smuzhiyun 		__entry->bli_flags = bip->bli_flags;
451*4882a593Smuzhiyun 		__entry->bli_recur = bip->bli_recur;
452*4882a593Smuzhiyun 		__entry->bli_refcount = atomic_read(&bip->bli_refcount);
453*4882a593Smuzhiyun 		__entry->buf_bno = bip->bli_buf->b_bn;
454*4882a593Smuzhiyun 		__entry->buf_len = BBTOB(bip->bli_buf->b_length);
455*4882a593Smuzhiyun 		__entry->buf_flags = bip->bli_buf->b_flags;
456*4882a593Smuzhiyun 		__entry->buf_hold = atomic_read(&bip->bli_buf->b_hold);
457*4882a593Smuzhiyun 		__entry->buf_pincount = atomic_read(&bip->bli_buf->b_pin_count);
458*4882a593Smuzhiyun 		__entry->buf_lockval = bip->bli_buf->b_sema.count;
459*4882a593Smuzhiyun 		__entry->li_flags = bip->bli_item.li_flags;
460*4882a593Smuzhiyun 	),
461*4882a593Smuzhiyun 	TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d "
462*4882a593Smuzhiyun 		  "lock %d flags %s recur %d refcount %d bliflags %s "
463*4882a593Smuzhiyun 		  "liflags %s",
464*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
465*4882a593Smuzhiyun 		  (unsigned long long)__entry->buf_bno,
466*4882a593Smuzhiyun 		  __entry->buf_len,
467*4882a593Smuzhiyun 		  __entry->buf_hold,
468*4882a593Smuzhiyun 		  __entry->buf_pincount,
469*4882a593Smuzhiyun 		  __entry->buf_lockval,
470*4882a593Smuzhiyun 		  __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS),
471*4882a593Smuzhiyun 		  __entry->bli_recur,
472*4882a593Smuzhiyun 		  __entry->bli_refcount,
473*4882a593Smuzhiyun 		  __print_flags(__entry->bli_flags, "|", XFS_BLI_FLAGS),
474*4882a593Smuzhiyun 		  __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS))
475*4882a593Smuzhiyun )
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun #define DEFINE_BUF_ITEM_EVENT(name) \
478*4882a593Smuzhiyun DEFINE_EVENT(xfs_buf_item_class, name, \
479*4882a593Smuzhiyun 	TP_PROTO(struct xfs_buf_log_item *bip), \
480*4882a593Smuzhiyun 	TP_ARGS(bip))
481*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size);
482*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered);
483*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale);
484*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format);
485*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale);
486*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered);
487*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin);
488*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin);
489*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale);
490*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release);
491*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed);
492*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push);
493*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf);
494*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur);
495*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb);
496*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur);
497*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf);
498*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur);
499*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf);
500*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse);
501*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin);
502*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold);
503*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release);
504*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_binval);
505*4882a593Smuzhiyun 
506*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_filestream_class,
507*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno),
508*4882a593Smuzhiyun 	TP_ARGS(mp, ino, agno),
509*4882a593Smuzhiyun 	TP_STRUCT__entry(
510*4882a593Smuzhiyun 		__field(dev_t, dev)
511*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
512*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
513*4882a593Smuzhiyun 		__field(int, streams)
514*4882a593Smuzhiyun 	),
515*4882a593Smuzhiyun 	TP_fast_assign(
516*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
517*4882a593Smuzhiyun 		__entry->ino = ino;
518*4882a593Smuzhiyun 		__entry->agno = agno;
519*4882a593Smuzhiyun 		__entry->streams = xfs_filestream_peek_ag(mp, agno);
520*4882a593Smuzhiyun 	),
521*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx agno %u streams %d",
522*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
523*4882a593Smuzhiyun 		  __entry->ino,
524*4882a593Smuzhiyun 		  __entry->agno,
525*4882a593Smuzhiyun 		  __entry->streams)
526*4882a593Smuzhiyun )
527*4882a593Smuzhiyun #define DEFINE_FILESTREAM_EVENT(name) \
528*4882a593Smuzhiyun DEFINE_EVENT(xfs_filestream_class, name, \
529*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno), \
530*4882a593Smuzhiyun 	TP_ARGS(mp, ino, agno))
531*4882a593Smuzhiyun DEFINE_FILESTREAM_EVENT(xfs_filestream_free);
532*4882a593Smuzhiyun DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup);
533*4882a593Smuzhiyun DEFINE_FILESTREAM_EVENT(xfs_filestream_scan);
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun TRACE_EVENT(xfs_filestream_pick,
536*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_agnumber_t agno,
537*4882a593Smuzhiyun 		 xfs_extlen_t free, int nscan),
538*4882a593Smuzhiyun 	TP_ARGS(ip, agno, free, nscan),
539*4882a593Smuzhiyun 	TP_STRUCT__entry(
540*4882a593Smuzhiyun 		__field(dev_t, dev)
541*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
542*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
543*4882a593Smuzhiyun 		__field(int, streams)
544*4882a593Smuzhiyun 		__field(xfs_extlen_t, free)
545*4882a593Smuzhiyun 		__field(int, nscan)
546*4882a593Smuzhiyun 	),
547*4882a593Smuzhiyun 	TP_fast_assign(
548*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
549*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
550*4882a593Smuzhiyun 		__entry->agno = agno;
551*4882a593Smuzhiyun 		__entry->streams = xfs_filestream_peek_ag(ip->i_mount, agno);
552*4882a593Smuzhiyun 		__entry->free = free;
553*4882a593Smuzhiyun 		__entry->nscan = nscan;
554*4882a593Smuzhiyun 	),
555*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx agno %u streams %d free %d nscan %d",
556*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
557*4882a593Smuzhiyun 		  __entry->ino,
558*4882a593Smuzhiyun 		  __entry->agno,
559*4882a593Smuzhiyun 		  __entry->streams,
560*4882a593Smuzhiyun 		  __entry->free,
561*4882a593Smuzhiyun 		  __entry->nscan)
562*4882a593Smuzhiyun );
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_lock_class,
565*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, unsigned lock_flags,
566*4882a593Smuzhiyun 		 unsigned long caller_ip),
567*4882a593Smuzhiyun 	TP_ARGS(ip,  lock_flags, caller_ip),
568*4882a593Smuzhiyun 	TP_STRUCT__entry(
569*4882a593Smuzhiyun 		__field(dev_t, dev)
570*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
571*4882a593Smuzhiyun 		__field(int, lock_flags)
572*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
573*4882a593Smuzhiyun 	),
574*4882a593Smuzhiyun 	TP_fast_assign(
575*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
576*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
577*4882a593Smuzhiyun 		__entry->lock_flags = lock_flags;
578*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
579*4882a593Smuzhiyun 	),
580*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS",
581*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
582*4882a593Smuzhiyun 		  __entry->ino,
583*4882a593Smuzhiyun 		  __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS),
584*4882a593Smuzhiyun 		  (void *)__entry->caller_ip)
585*4882a593Smuzhiyun )
586*4882a593Smuzhiyun 
587*4882a593Smuzhiyun #define DEFINE_LOCK_EVENT(name) \
588*4882a593Smuzhiyun DEFINE_EVENT(xfs_lock_class, name, \
589*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \
590*4882a593Smuzhiyun 		 unsigned long caller_ip), \
591*4882a593Smuzhiyun 	TP_ARGS(ip,  lock_flags, caller_ip))
592*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_ilock);
593*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_ilock_nowait);
594*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_ilock_demote);
595*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_iunlock);
596*4882a593Smuzhiyun 
597*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_class,
598*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip),
599*4882a593Smuzhiyun 	TP_ARGS(ip),
600*4882a593Smuzhiyun 	TP_STRUCT__entry(
601*4882a593Smuzhiyun 		__field(dev_t, dev)
602*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
603*4882a593Smuzhiyun 	),
604*4882a593Smuzhiyun 	TP_fast_assign(
605*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
606*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
607*4882a593Smuzhiyun 	),
608*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx",
609*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
610*4882a593Smuzhiyun 		  __entry->ino)
611*4882a593Smuzhiyun )
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun #define DEFINE_INODE_EVENT(name) \
614*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_class, name, \
615*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip), \
616*4882a593Smuzhiyun 	TP_ARGS(ip))
617*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_skip);
618*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_reclaim);
619*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_reclaim_fail);
620*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_hit);
621*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_miss);
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_getattr);
624*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_setattr);
625*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_readlink);
626*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inactive_symlink);
627*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_alloc_file_space);
628*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_free_file_space);
629*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_zero_file_space);
630*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_collapse_file_space);
631*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_insert_file_space);
632*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_readdir);
633*4882a593Smuzhiyun #ifdef CONFIG_XFS_POSIX_ACL
634*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_get_acl);
635*4882a593Smuzhiyun #endif
636*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_vm_bmap);
637*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_file_ioctl);
638*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_file_compat_ioctl);
639*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_ioctl_setattr);
640*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_dir_fsync);
641*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_file_fsync);
642*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_destroy_inode);
643*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_update_time);
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_dquot_dqalloc);
646*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_dquot_dqdetach);
647*4882a593Smuzhiyun 
648*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_set_eofblocks_tag);
649*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_clear_eofblocks_tag);
650*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_free_eofblocks_invalid);
651*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_set_cowblocks_tag);
652*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_clear_cowblocks_tag);
653*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_free_cowblocks_invalid);
654*4882a593Smuzhiyun 
655*4882a593Smuzhiyun /*
656*4882a593Smuzhiyun  * ftrace's __print_symbolic requires that all enum values be wrapped in the
657*4882a593Smuzhiyun  * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
658*4882a593Smuzhiyun  * ring buffer.  Somehow this was only worth mentioning in the ftrace sample
659*4882a593Smuzhiyun  * code.
660*4882a593Smuzhiyun  */
661*4882a593Smuzhiyun TRACE_DEFINE_ENUM(PE_SIZE_PTE);
662*4882a593Smuzhiyun TRACE_DEFINE_ENUM(PE_SIZE_PMD);
663*4882a593Smuzhiyun TRACE_DEFINE_ENUM(PE_SIZE_PUD);
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun TRACE_EVENT(xfs_filemap_fault,
666*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, enum page_entry_size pe_size,
667*4882a593Smuzhiyun 		 bool write_fault),
668*4882a593Smuzhiyun 	TP_ARGS(ip, pe_size, write_fault),
669*4882a593Smuzhiyun 	TP_STRUCT__entry(
670*4882a593Smuzhiyun 		__field(dev_t, dev)
671*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
672*4882a593Smuzhiyun 		__field(enum page_entry_size, pe_size)
673*4882a593Smuzhiyun 		__field(bool, write_fault)
674*4882a593Smuzhiyun 	),
675*4882a593Smuzhiyun 	TP_fast_assign(
676*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
677*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
678*4882a593Smuzhiyun 		__entry->pe_size = pe_size;
679*4882a593Smuzhiyun 		__entry->write_fault = write_fault;
680*4882a593Smuzhiyun 	),
681*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx %s write_fault %d",
682*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
683*4882a593Smuzhiyun 		  __entry->ino,
684*4882a593Smuzhiyun 		  __print_symbolic(__entry->pe_size,
685*4882a593Smuzhiyun 			{ PE_SIZE_PTE,	"PTE" },
686*4882a593Smuzhiyun 			{ PE_SIZE_PMD,	"PMD" },
687*4882a593Smuzhiyun 			{ PE_SIZE_PUD,	"PUD" }),
688*4882a593Smuzhiyun 		  __entry->write_fault)
689*4882a593Smuzhiyun )
690*4882a593Smuzhiyun 
691*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_iref_class,
692*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip),
693*4882a593Smuzhiyun 	TP_ARGS(ip, caller_ip),
694*4882a593Smuzhiyun 	TP_STRUCT__entry(
695*4882a593Smuzhiyun 		__field(dev_t, dev)
696*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
697*4882a593Smuzhiyun 		__field(int, count)
698*4882a593Smuzhiyun 		__field(int, pincount)
699*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
700*4882a593Smuzhiyun 	),
701*4882a593Smuzhiyun 	TP_fast_assign(
702*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
703*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
704*4882a593Smuzhiyun 		__entry->count = atomic_read(&VFS_I(ip)->i_count);
705*4882a593Smuzhiyun 		__entry->pincount = atomic_read(&ip->i_pincount);
706*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
707*4882a593Smuzhiyun 	),
708*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pS",
709*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
710*4882a593Smuzhiyun 		  __entry->ino,
711*4882a593Smuzhiyun 		  __entry->count,
712*4882a593Smuzhiyun 		  __entry->pincount,
713*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
714*4882a593Smuzhiyun )
715*4882a593Smuzhiyun 
716*4882a593Smuzhiyun TRACE_EVENT(xfs_iomap_prealloc_size,
717*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t blocks, int shift,
718*4882a593Smuzhiyun 		 unsigned int writeio_blocks),
719*4882a593Smuzhiyun 	TP_ARGS(ip, blocks, shift, writeio_blocks),
720*4882a593Smuzhiyun 	TP_STRUCT__entry(
721*4882a593Smuzhiyun 		__field(dev_t, dev)
722*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
723*4882a593Smuzhiyun 		__field(xfs_fsblock_t, blocks)
724*4882a593Smuzhiyun 		__field(int, shift)
725*4882a593Smuzhiyun 		__field(unsigned int, writeio_blocks)
726*4882a593Smuzhiyun 	),
727*4882a593Smuzhiyun 	TP_fast_assign(
728*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
729*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
730*4882a593Smuzhiyun 		__entry->blocks = blocks;
731*4882a593Smuzhiyun 		__entry->shift = shift;
732*4882a593Smuzhiyun 		__entry->writeio_blocks = writeio_blocks;
733*4882a593Smuzhiyun 	),
734*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx prealloc blocks %llu shift %d "
735*4882a593Smuzhiyun 		  "m_allocsize_blocks %u",
736*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino,
737*4882a593Smuzhiyun 		  __entry->blocks, __entry->shift, __entry->writeio_blocks)
738*4882a593Smuzhiyun )
739*4882a593Smuzhiyun 
740*4882a593Smuzhiyun TRACE_EVENT(xfs_irec_merge_pre,
741*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,
742*4882a593Smuzhiyun 		 uint16_t holemask, xfs_agino_t nagino, uint16_t nholemask),
743*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agino, holemask, nagino, nholemask),
744*4882a593Smuzhiyun 	TP_STRUCT__entry(
745*4882a593Smuzhiyun 		__field(dev_t, dev)
746*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
747*4882a593Smuzhiyun 		__field(xfs_agino_t, agino)
748*4882a593Smuzhiyun 		__field(uint16_t, holemask)
749*4882a593Smuzhiyun 		__field(xfs_agino_t, nagino)
750*4882a593Smuzhiyun 		__field(uint16_t, nholemask)
751*4882a593Smuzhiyun 	),
752*4882a593Smuzhiyun 	TP_fast_assign(
753*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
754*4882a593Smuzhiyun 		__entry->agno = agno;
755*4882a593Smuzhiyun 		__entry->agino = agino;
756*4882a593Smuzhiyun 		__entry->holemask = holemask;
757*4882a593Smuzhiyun 		__entry->nagino = nagino;
758*4882a593Smuzhiyun 		__entry->nholemask = holemask;
759*4882a593Smuzhiyun 	),
760*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %d inobt (%u:0x%x) new (%u:0x%x)",
761*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,
762*4882a593Smuzhiyun 		  __entry->agino, __entry->holemask, __entry->nagino,
763*4882a593Smuzhiyun 		  __entry->nholemask)
764*4882a593Smuzhiyun )
765*4882a593Smuzhiyun 
766*4882a593Smuzhiyun TRACE_EVENT(xfs_irec_merge_post,
767*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,
768*4882a593Smuzhiyun 		 uint16_t holemask),
769*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agino, holemask),
770*4882a593Smuzhiyun 	TP_STRUCT__entry(
771*4882a593Smuzhiyun 		__field(dev_t, dev)
772*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
773*4882a593Smuzhiyun 		__field(xfs_agino_t, agino)
774*4882a593Smuzhiyun 		__field(uint16_t, holemask)
775*4882a593Smuzhiyun 	),
776*4882a593Smuzhiyun 	TP_fast_assign(
777*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
778*4882a593Smuzhiyun 		__entry->agno = agno;
779*4882a593Smuzhiyun 		__entry->agino = agino;
780*4882a593Smuzhiyun 		__entry->holemask = holemask;
781*4882a593Smuzhiyun 	),
782*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %d inobt (%u:0x%x)", MAJOR(__entry->dev),
783*4882a593Smuzhiyun 		  MINOR(__entry->dev), __entry->agno, __entry->agino,
784*4882a593Smuzhiyun 		  __entry->holemask)
785*4882a593Smuzhiyun )
786*4882a593Smuzhiyun 
787*4882a593Smuzhiyun #define DEFINE_IREF_EVENT(name) \
788*4882a593Smuzhiyun DEFINE_EVENT(xfs_iref_class, name, \
789*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), \
790*4882a593Smuzhiyun 	TP_ARGS(ip, caller_ip))
791*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_irele);
792*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_inode_pin);
793*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_inode_unpin);
794*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_inode_unpin_nowait);
795*4882a593Smuzhiyun 
796*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_namespace_class,
797*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *dp, struct xfs_name *name),
798*4882a593Smuzhiyun 	TP_ARGS(dp, name),
799*4882a593Smuzhiyun 	TP_STRUCT__entry(
800*4882a593Smuzhiyun 		__field(dev_t, dev)
801*4882a593Smuzhiyun 		__field(xfs_ino_t, dp_ino)
802*4882a593Smuzhiyun 		__field(int, namelen)
803*4882a593Smuzhiyun 		__dynamic_array(char, name, name->len)
804*4882a593Smuzhiyun 	),
805*4882a593Smuzhiyun 	TP_fast_assign(
806*4882a593Smuzhiyun 		__entry->dev = VFS_I(dp)->i_sb->s_dev;
807*4882a593Smuzhiyun 		__entry->dp_ino = dp->i_ino;
808*4882a593Smuzhiyun 		__entry->namelen = name->len;
809*4882a593Smuzhiyun 		memcpy(__get_str(name), name->name, name->len);
810*4882a593Smuzhiyun 	),
811*4882a593Smuzhiyun 	TP_printk("dev %d:%d dp ino 0x%llx name %.*s",
812*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
813*4882a593Smuzhiyun 		  __entry->dp_ino,
814*4882a593Smuzhiyun 		  __entry->namelen,
815*4882a593Smuzhiyun 		  __get_str(name))
816*4882a593Smuzhiyun )
817*4882a593Smuzhiyun 
818*4882a593Smuzhiyun #define DEFINE_NAMESPACE_EVENT(name) \
819*4882a593Smuzhiyun DEFINE_EVENT(xfs_namespace_class, name, \
820*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *dp, struct xfs_name *name), \
821*4882a593Smuzhiyun 	TP_ARGS(dp, name))
822*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_remove);
823*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_link);
824*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_lookup);
825*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_create);
826*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_symlink);
827*4882a593Smuzhiyun 
828*4882a593Smuzhiyun TRACE_EVENT(xfs_rename,
829*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *src_dp, struct xfs_inode *target_dp,
830*4882a593Smuzhiyun 		 struct xfs_name *src_name, struct xfs_name *target_name),
831*4882a593Smuzhiyun 	TP_ARGS(src_dp, target_dp, src_name, target_name),
832*4882a593Smuzhiyun 	TP_STRUCT__entry(
833*4882a593Smuzhiyun 		__field(dev_t, dev)
834*4882a593Smuzhiyun 		__field(xfs_ino_t, src_dp_ino)
835*4882a593Smuzhiyun 		__field(xfs_ino_t, target_dp_ino)
836*4882a593Smuzhiyun 		__field(int, src_namelen)
837*4882a593Smuzhiyun 		__field(int, target_namelen)
838*4882a593Smuzhiyun 		__dynamic_array(char, src_name, src_name->len)
839*4882a593Smuzhiyun 		__dynamic_array(char, target_name, target_name->len)
840*4882a593Smuzhiyun 	),
841*4882a593Smuzhiyun 	TP_fast_assign(
842*4882a593Smuzhiyun 		__entry->dev = VFS_I(src_dp)->i_sb->s_dev;
843*4882a593Smuzhiyun 		__entry->src_dp_ino = src_dp->i_ino;
844*4882a593Smuzhiyun 		__entry->target_dp_ino = target_dp->i_ino;
845*4882a593Smuzhiyun 		__entry->src_namelen = src_name->len;
846*4882a593Smuzhiyun 		__entry->target_namelen = target_name->len;
847*4882a593Smuzhiyun 		memcpy(__get_str(src_name), src_name->name, src_name->len);
848*4882a593Smuzhiyun 		memcpy(__get_str(target_name), target_name->name,
849*4882a593Smuzhiyun 			target_name->len);
850*4882a593Smuzhiyun 	),
851*4882a593Smuzhiyun 	TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx"
852*4882a593Smuzhiyun 		  " src name %.*s target name %.*s",
853*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
854*4882a593Smuzhiyun 		  __entry->src_dp_ino,
855*4882a593Smuzhiyun 		  __entry->target_dp_ino,
856*4882a593Smuzhiyun 		  __entry->src_namelen,
857*4882a593Smuzhiyun 		  __get_str(src_name),
858*4882a593Smuzhiyun 		  __entry->target_namelen,
859*4882a593Smuzhiyun 		  __get_str(target_name))
860*4882a593Smuzhiyun )
861*4882a593Smuzhiyun 
862*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_dquot_class,
863*4882a593Smuzhiyun 	TP_PROTO(struct xfs_dquot *dqp),
864*4882a593Smuzhiyun 	TP_ARGS(dqp),
865*4882a593Smuzhiyun 	TP_STRUCT__entry(
866*4882a593Smuzhiyun 		__field(dev_t, dev)
867*4882a593Smuzhiyun 		__field(u32, id)
868*4882a593Smuzhiyun 		__field(xfs_dqtype_t, type)
869*4882a593Smuzhiyun 		__field(unsigned, flags)
870*4882a593Smuzhiyun 		__field(unsigned, nrefs)
871*4882a593Smuzhiyun 		__field(unsigned long long, res_bcount)
872*4882a593Smuzhiyun 		__field(unsigned long long, res_rtbcount)
873*4882a593Smuzhiyun 		__field(unsigned long long, res_icount)
874*4882a593Smuzhiyun 
875*4882a593Smuzhiyun 		__field(unsigned long long, bcount)
876*4882a593Smuzhiyun 		__field(unsigned long long, rtbcount)
877*4882a593Smuzhiyun 		__field(unsigned long long, icount)
878*4882a593Smuzhiyun 
879*4882a593Smuzhiyun 		__field(unsigned long long, blk_hardlimit)
880*4882a593Smuzhiyun 		__field(unsigned long long, blk_softlimit)
881*4882a593Smuzhiyun 		__field(unsigned long long, rtb_hardlimit)
882*4882a593Smuzhiyun 		__field(unsigned long long, rtb_softlimit)
883*4882a593Smuzhiyun 		__field(unsigned long long, ino_hardlimit)
884*4882a593Smuzhiyun 		__field(unsigned long long, ino_softlimit)
885*4882a593Smuzhiyun 	),
886*4882a593Smuzhiyun 	TP_fast_assign(
887*4882a593Smuzhiyun 		__entry->dev = dqp->q_mount->m_super->s_dev;
888*4882a593Smuzhiyun 		__entry->id = dqp->q_id;
889*4882a593Smuzhiyun 		__entry->type = dqp->q_type;
890*4882a593Smuzhiyun 		__entry->flags = dqp->q_flags;
891*4882a593Smuzhiyun 		__entry->nrefs = dqp->q_nrefs;
892*4882a593Smuzhiyun 
893*4882a593Smuzhiyun 		__entry->res_bcount = dqp->q_blk.reserved;
894*4882a593Smuzhiyun 		__entry->res_rtbcount = dqp->q_rtb.reserved;
895*4882a593Smuzhiyun 		__entry->res_icount = dqp->q_ino.reserved;
896*4882a593Smuzhiyun 
897*4882a593Smuzhiyun 		__entry->bcount = dqp->q_blk.count;
898*4882a593Smuzhiyun 		__entry->rtbcount = dqp->q_rtb.count;
899*4882a593Smuzhiyun 		__entry->icount = dqp->q_ino.count;
900*4882a593Smuzhiyun 
901*4882a593Smuzhiyun 		__entry->blk_hardlimit = dqp->q_blk.hardlimit;
902*4882a593Smuzhiyun 		__entry->blk_softlimit = dqp->q_blk.softlimit;
903*4882a593Smuzhiyun 		__entry->rtb_hardlimit = dqp->q_rtb.hardlimit;
904*4882a593Smuzhiyun 		__entry->rtb_softlimit = dqp->q_rtb.softlimit;
905*4882a593Smuzhiyun 		__entry->ino_hardlimit = dqp->q_ino.hardlimit;
906*4882a593Smuzhiyun 		__entry->ino_softlimit = dqp->q_ino.softlimit;
907*4882a593Smuzhiyun 	),
908*4882a593Smuzhiyun 	TP_printk("dev %d:%d id 0x%x type %s flags %s nrefs %u "
909*4882a593Smuzhiyun 		  "res_bc 0x%llx res_rtbc 0x%llx res_ic 0x%llx "
910*4882a593Smuzhiyun 		  "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx "
911*4882a593Smuzhiyun 		  "rtbcnt 0x%llx rtbhardlimit 0x%llx rtbsoftlimit 0x%llx "
912*4882a593Smuzhiyun 		  "icnt 0x%llx ihardlimit 0x%llx isoftlimit 0x%llx]",
913*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
914*4882a593Smuzhiyun 		  __entry->id,
915*4882a593Smuzhiyun 		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
916*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),
917*4882a593Smuzhiyun 		  __entry->nrefs,
918*4882a593Smuzhiyun 		  __entry->res_bcount,
919*4882a593Smuzhiyun 		  __entry->res_rtbcount,
920*4882a593Smuzhiyun 		  __entry->res_icount,
921*4882a593Smuzhiyun 		  __entry->bcount,
922*4882a593Smuzhiyun 		  __entry->blk_hardlimit,
923*4882a593Smuzhiyun 		  __entry->blk_softlimit,
924*4882a593Smuzhiyun 		  __entry->rtbcount,
925*4882a593Smuzhiyun 		  __entry->rtb_hardlimit,
926*4882a593Smuzhiyun 		  __entry->rtb_softlimit,
927*4882a593Smuzhiyun 		  __entry->icount,
928*4882a593Smuzhiyun 		  __entry->ino_hardlimit,
929*4882a593Smuzhiyun 		  __entry->ino_softlimit)
930*4882a593Smuzhiyun )
931*4882a593Smuzhiyun 
932*4882a593Smuzhiyun #define DEFINE_DQUOT_EVENT(name) \
933*4882a593Smuzhiyun DEFINE_EVENT(xfs_dquot_class, name, \
934*4882a593Smuzhiyun 	TP_PROTO(struct xfs_dquot *dqp), \
935*4882a593Smuzhiyun 	TP_ARGS(dqp))
936*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqadjust);
937*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_want);
938*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty);
939*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy);
940*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_done);
941*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqattach_found);
942*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqattach_get);
943*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqalloc);
944*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqtobp_read);
945*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqread);
946*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqread_fail);
947*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_hit);
948*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_miss);
949*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_freeing);
950*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_dup);
951*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqput);
952*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqput_free);
953*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqrele);
954*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqflush);
955*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqflush_force);
956*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqflush_done);
957*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_before);
958*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_after);
959*4882a593Smuzhiyun 
960*4882a593Smuzhiyun #define XFS_QMOPT_FLAGS \
961*4882a593Smuzhiyun 	{ XFS_QMOPT_UQUOTA,		"UQUOTA" }, \
962*4882a593Smuzhiyun 	{ XFS_QMOPT_PQUOTA,		"PQUOTA" }, \
963*4882a593Smuzhiyun 	{ XFS_QMOPT_FORCE_RES,		"FORCE_RES" }, \
964*4882a593Smuzhiyun 	{ XFS_QMOPT_SBVERSION,		"SBVERSION" }, \
965*4882a593Smuzhiyun 	{ XFS_QMOPT_GQUOTA,		"GQUOTA" }, \
966*4882a593Smuzhiyun 	{ XFS_QMOPT_INHERIT,		"INHERIT" }, \
967*4882a593Smuzhiyun 	{ XFS_QMOPT_RES_REGBLKS,	"RES_REGBLKS" }, \
968*4882a593Smuzhiyun 	{ XFS_QMOPT_RES_RTBLKS,		"RES_RTBLKS" }, \
969*4882a593Smuzhiyun 	{ XFS_QMOPT_BCOUNT,		"BCOUNT" }, \
970*4882a593Smuzhiyun 	{ XFS_QMOPT_ICOUNT,		"ICOUNT" }, \
971*4882a593Smuzhiyun 	{ XFS_QMOPT_RTBCOUNT,		"RTBCOUNT" }, \
972*4882a593Smuzhiyun 	{ XFS_QMOPT_DELBCOUNT,		"DELBCOUNT" }, \
973*4882a593Smuzhiyun 	{ XFS_QMOPT_DELRTBCOUNT,	"DELRTBCOUNT" }, \
974*4882a593Smuzhiyun 	{ XFS_QMOPT_RES_INOS,		"RES_INOS" }
975*4882a593Smuzhiyun 
976*4882a593Smuzhiyun TRACE_EVENT(xfs_trans_mod_dquot,
977*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, struct xfs_dquot *dqp,
978*4882a593Smuzhiyun 		 unsigned int field, int64_t delta),
979*4882a593Smuzhiyun 	TP_ARGS(tp, dqp, field, delta),
980*4882a593Smuzhiyun 	TP_STRUCT__entry(
981*4882a593Smuzhiyun 		__field(dev_t, dev)
982*4882a593Smuzhiyun 		__field(xfs_dqtype_t, type)
983*4882a593Smuzhiyun 		__field(unsigned int, flags)
984*4882a593Smuzhiyun 		__field(unsigned int, dqid)
985*4882a593Smuzhiyun 		__field(unsigned int, field)
986*4882a593Smuzhiyun 		__field(int64_t, delta)
987*4882a593Smuzhiyun 	),
988*4882a593Smuzhiyun 	TP_fast_assign(
989*4882a593Smuzhiyun 		__entry->dev = tp->t_mountp->m_super->s_dev;
990*4882a593Smuzhiyun 		__entry->type = dqp->q_type;
991*4882a593Smuzhiyun 		__entry->flags = dqp->q_flags;
992*4882a593Smuzhiyun 		__entry->dqid = dqp->q_id;
993*4882a593Smuzhiyun 		__entry->field = field;
994*4882a593Smuzhiyun 		__entry->delta = delta;
995*4882a593Smuzhiyun 	),
996*4882a593Smuzhiyun 	TP_printk("dev %d:%d dquot id 0x%x type %s flags %s field %s delta %lld",
997*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
998*4882a593Smuzhiyun 		  __entry->dqid,
999*4882a593Smuzhiyun 		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
1000*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),
1001*4882a593Smuzhiyun 		  __print_flags(__entry->field, "|", XFS_QMOPT_FLAGS),
1002*4882a593Smuzhiyun 		  __entry->delta)
1003*4882a593Smuzhiyun );
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_dqtrx_class,
1006*4882a593Smuzhiyun 	TP_PROTO(struct xfs_dqtrx *qtrx),
1007*4882a593Smuzhiyun 	TP_ARGS(qtrx),
1008*4882a593Smuzhiyun 	TP_STRUCT__entry(
1009*4882a593Smuzhiyun 		__field(dev_t, dev)
1010*4882a593Smuzhiyun 		__field(xfs_dqtype_t, type)
1011*4882a593Smuzhiyun 		__field(unsigned int, flags)
1012*4882a593Smuzhiyun 		__field(u32, dqid)
1013*4882a593Smuzhiyun 
1014*4882a593Smuzhiyun 		__field(uint64_t, blk_res)
1015*4882a593Smuzhiyun 		__field(int64_t,  bcount_delta)
1016*4882a593Smuzhiyun 		__field(int64_t,  delbcnt_delta)
1017*4882a593Smuzhiyun 
1018*4882a593Smuzhiyun 		__field(uint64_t, rtblk_res)
1019*4882a593Smuzhiyun 		__field(uint64_t, rtblk_res_used)
1020*4882a593Smuzhiyun 		__field(int64_t,  rtbcount_delta)
1021*4882a593Smuzhiyun 		__field(int64_t,  delrtb_delta)
1022*4882a593Smuzhiyun 
1023*4882a593Smuzhiyun 		__field(uint64_t, ino_res)
1024*4882a593Smuzhiyun 		__field(uint64_t, ino_res_used)
1025*4882a593Smuzhiyun 		__field(int64_t,  icount_delta)
1026*4882a593Smuzhiyun 	),
1027*4882a593Smuzhiyun 	TP_fast_assign(
1028*4882a593Smuzhiyun 		__entry->dev = qtrx->qt_dquot->q_mount->m_super->s_dev;
1029*4882a593Smuzhiyun 		__entry->type = qtrx->qt_dquot->q_type;
1030*4882a593Smuzhiyun 		__entry->flags = qtrx->qt_dquot->q_flags;
1031*4882a593Smuzhiyun 		__entry->dqid = qtrx->qt_dquot->q_id;
1032*4882a593Smuzhiyun 
1033*4882a593Smuzhiyun 		__entry->blk_res = qtrx->qt_blk_res;
1034*4882a593Smuzhiyun 		__entry->bcount_delta = qtrx->qt_bcount_delta;
1035*4882a593Smuzhiyun 		__entry->delbcnt_delta = qtrx->qt_delbcnt_delta;
1036*4882a593Smuzhiyun 
1037*4882a593Smuzhiyun 		__entry->rtblk_res = qtrx->qt_rtblk_res;
1038*4882a593Smuzhiyun 		__entry->rtblk_res_used = qtrx->qt_rtblk_res_used;
1039*4882a593Smuzhiyun 		__entry->rtbcount_delta = qtrx->qt_rtbcount_delta;
1040*4882a593Smuzhiyun 		__entry->delrtb_delta = qtrx->qt_delrtb_delta;
1041*4882a593Smuzhiyun 
1042*4882a593Smuzhiyun 		__entry->ino_res = qtrx->qt_ino_res;
1043*4882a593Smuzhiyun 		__entry->ino_res_used = qtrx->qt_ino_res_used;
1044*4882a593Smuzhiyun 		__entry->icount_delta = qtrx->qt_icount_delta;
1045*4882a593Smuzhiyun 	),
1046*4882a593Smuzhiyun 	TP_printk("dev %d:%d dquot id 0x%x type %s flags %s"
1047*4882a593Smuzhiyun 		  "blk_res %llu bcount_delta %lld delbcnt_delta %lld "
1048*4882a593Smuzhiyun 		  "rtblk_res %llu rtblk_res_used %llu rtbcount_delta %lld delrtb_delta %lld "
1049*4882a593Smuzhiyun 		  "ino_res %llu ino_res_used %llu icount_delta %lld",
1050*4882a593Smuzhiyun 		MAJOR(__entry->dev), MINOR(__entry->dev),
1051*4882a593Smuzhiyun 		__entry->dqid,
1052*4882a593Smuzhiyun 		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
1053*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),
1054*4882a593Smuzhiyun 
1055*4882a593Smuzhiyun 		__entry->blk_res,
1056*4882a593Smuzhiyun 		__entry->bcount_delta,
1057*4882a593Smuzhiyun 		__entry->delbcnt_delta,
1058*4882a593Smuzhiyun 
1059*4882a593Smuzhiyun 		__entry->rtblk_res,
1060*4882a593Smuzhiyun 		__entry->rtblk_res_used,
1061*4882a593Smuzhiyun 		__entry->rtbcount_delta,
1062*4882a593Smuzhiyun 		__entry->delrtb_delta,
1063*4882a593Smuzhiyun 
1064*4882a593Smuzhiyun 		__entry->ino_res,
1065*4882a593Smuzhiyun 		__entry->ino_res_used,
1066*4882a593Smuzhiyun 		__entry->icount_delta)
1067*4882a593Smuzhiyun )
1068*4882a593Smuzhiyun 
1069*4882a593Smuzhiyun #define DEFINE_DQTRX_EVENT(name) \
1070*4882a593Smuzhiyun DEFINE_EVENT(xfs_dqtrx_class, name, \
1071*4882a593Smuzhiyun 	TP_PROTO(struct xfs_dqtrx *qtrx), \
1072*4882a593Smuzhiyun 	TP_ARGS(qtrx))
1073*4882a593Smuzhiyun DEFINE_DQTRX_EVENT(xfs_trans_apply_dquot_deltas);
1074*4882a593Smuzhiyun DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_before);
1075*4882a593Smuzhiyun DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_after);
1076*4882a593Smuzhiyun 
1077*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_loggrant_class,
1078*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xlog_ticket *tic),
1079*4882a593Smuzhiyun 	TP_ARGS(log, tic),
1080*4882a593Smuzhiyun 	TP_STRUCT__entry(
1081*4882a593Smuzhiyun 		__field(dev_t, dev)
1082*4882a593Smuzhiyun 		__field(char, ocnt)
1083*4882a593Smuzhiyun 		__field(char, cnt)
1084*4882a593Smuzhiyun 		__field(int, curr_res)
1085*4882a593Smuzhiyun 		__field(int, unit_res)
1086*4882a593Smuzhiyun 		__field(unsigned int, flags)
1087*4882a593Smuzhiyun 		__field(int, reserveq)
1088*4882a593Smuzhiyun 		__field(int, writeq)
1089*4882a593Smuzhiyun 		__field(int, grant_reserve_cycle)
1090*4882a593Smuzhiyun 		__field(int, grant_reserve_bytes)
1091*4882a593Smuzhiyun 		__field(int, grant_write_cycle)
1092*4882a593Smuzhiyun 		__field(int, grant_write_bytes)
1093*4882a593Smuzhiyun 		__field(int, curr_cycle)
1094*4882a593Smuzhiyun 		__field(int, curr_block)
1095*4882a593Smuzhiyun 		__field(xfs_lsn_t, tail_lsn)
1096*4882a593Smuzhiyun 	),
1097*4882a593Smuzhiyun 	TP_fast_assign(
1098*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
1099*4882a593Smuzhiyun 		__entry->ocnt = tic->t_ocnt;
1100*4882a593Smuzhiyun 		__entry->cnt = tic->t_cnt;
1101*4882a593Smuzhiyun 		__entry->curr_res = tic->t_curr_res;
1102*4882a593Smuzhiyun 		__entry->unit_res = tic->t_unit_res;
1103*4882a593Smuzhiyun 		__entry->flags = tic->t_flags;
1104*4882a593Smuzhiyun 		__entry->reserveq = list_empty(&log->l_reserve_head.waiters);
1105*4882a593Smuzhiyun 		__entry->writeq = list_empty(&log->l_write_head.waiters);
1106*4882a593Smuzhiyun 		xlog_crack_grant_head(&log->l_reserve_head.grant,
1107*4882a593Smuzhiyun 				&__entry->grant_reserve_cycle,
1108*4882a593Smuzhiyun 				&__entry->grant_reserve_bytes);
1109*4882a593Smuzhiyun 		xlog_crack_grant_head(&log->l_write_head.grant,
1110*4882a593Smuzhiyun 				&__entry->grant_write_cycle,
1111*4882a593Smuzhiyun 				&__entry->grant_write_bytes);
1112*4882a593Smuzhiyun 		__entry->curr_cycle = log->l_curr_cycle;
1113*4882a593Smuzhiyun 		__entry->curr_block = log->l_curr_block;
1114*4882a593Smuzhiyun 		__entry->tail_lsn = atomic64_read(&log->l_tail_lsn);
1115*4882a593Smuzhiyun 	),
1116*4882a593Smuzhiyun 	TP_printk("dev %d:%d t_ocnt %u t_cnt %u t_curr_res %u "
1117*4882a593Smuzhiyun 		  "t_unit_res %u t_flags %s reserveq %s "
1118*4882a593Smuzhiyun 		  "writeq %s grant_reserve_cycle %d "
1119*4882a593Smuzhiyun 		  "grant_reserve_bytes %d grant_write_cycle %d "
1120*4882a593Smuzhiyun 		  "grant_write_bytes %d curr_cycle %d curr_block %d "
1121*4882a593Smuzhiyun 		  "tail_cycle %d tail_block %d",
1122*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1123*4882a593Smuzhiyun 		  __entry->ocnt,
1124*4882a593Smuzhiyun 		  __entry->cnt,
1125*4882a593Smuzhiyun 		  __entry->curr_res,
1126*4882a593Smuzhiyun 		  __entry->unit_res,
1127*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XLOG_TIC_FLAGS),
1128*4882a593Smuzhiyun 		  __entry->reserveq ? "empty" : "active",
1129*4882a593Smuzhiyun 		  __entry->writeq ? "empty" : "active",
1130*4882a593Smuzhiyun 		  __entry->grant_reserve_cycle,
1131*4882a593Smuzhiyun 		  __entry->grant_reserve_bytes,
1132*4882a593Smuzhiyun 		  __entry->grant_write_cycle,
1133*4882a593Smuzhiyun 		  __entry->grant_write_bytes,
1134*4882a593Smuzhiyun 		  __entry->curr_cycle,
1135*4882a593Smuzhiyun 		  __entry->curr_block,
1136*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->tail_lsn),
1137*4882a593Smuzhiyun 		  BLOCK_LSN(__entry->tail_lsn)
1138*4882a593Smuzhiyun 	)
1139*4882a593Smuzhiyun )
1140*4882a593Smuzhiyun 
1141*4882a593Smuzhiyun #define DEFINE_LOGGRANT_EVENT(name) \
1142*4882a593Smuzhiyun DEFINE_EVENT(xfs_loggrant_class, name, \
1143*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \
1144*4882a593Smuzhiyun 	TP_ARGS(log, tic))
1145*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_umount_write);
1146*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep);
1147*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake);
1148*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up);
1149*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_reserve);
1150*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit);
1151*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_regrant);
1152*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit);
1153*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant);
1154*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit);
1155*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub);
1156*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant);
1157*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub);
1158*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit);
1159*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_cil_wait);
1160*4882a593Smuzhiyun 
1161*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_item_class,
1162*4882a593Smuzhiyun 	TP_PROTO(struct xfs_log_item *lip),
1163*4882a593Smuzhiyun 	TP_ARGS(lip),
1164*4882a593Smuzhiyun 	TP_STRUCT__entry(
1165*4882a593Smuzhiyun 		__field(dev_t, dev)
1166*4882a593Smuzhiyun 		__field(void *, lip)
1167*4882a593Smuzhiyun 		__field(uint, type)
1168*4882a593Smuzhiyun 		__field(unsigned long, flags)
1169*4882a593Smuzhiyun 		__field(xfs_lsn_t, lsn)
1170*4882a593Smuzhiyun 	),
1171*4882a593Smuzhiyun 	TP_fast_assign(
1172*4882a593Smuzhiyun 		__entry->dev = lip->li_mountp->m_super->s_dev;
1173*4882a593Smuzhiyun 		__entry->lip = lip;
1174*4882a593Smuzhiyun 		__entry->type = lip->li_type;
1175*4882a593Smuzhiyun 		__entry->flags = lip->li_flags;
1176*4882a593Smuzhiyun 		__entry->lsn = lip->li_lsn;
1177*4882a593Smuzhiyun 	),
1178*4882a593Smuzhiyun 	TP_printk("dev %d:%d lip %p lsn %d/%d type %s flags %s",
1179*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1180*4882a593Smuzhiyun 		  __entry->lip,
1181*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->lsn), BLOCK_LSN(__entry->lsn),
1182*4882a593Smuzhiyun 		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
1183*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_LI_FLAGS))
1184*4882a593Smuzhiyun )
1185*4882a593Smuzhiyun 
1186*4882a593Smuzhiyun TRACE_EVENT(xfs_log_force,
1187*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_lsn_t lsn, unsigned long caller_ip),
1188*4882a593Smuzhiyun 	TP_ARGS(mp, lsn, caller_ip),
1189*4882a593Smuzhiyun 	TP_STRUCT__entry(
1190*4882a593Smuzhiyun 		__field(dev_t, dev)
1191*4882a593Smuzhiyun 		__field(xfs_lsn_t, lsn)
1192*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
1193*4882a593Smuzhiyun 	),
1194*4882a593Smuzhiyun 	TP_fast_assign(
1195*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
1196*4882a593Smuzhiyun 		__entry->lsn = lsn;
1197*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
1198*4882a593Smuzhiyun 	),
1199*4882a593Smuzhiyun 	TP_printk("dev %d:%d lsn 0x%llx caller %pS",
1200*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1201*4882a593Smuzhiyun 		  __entry->lsn, (void *)__entry->caller_ip)
1202*4882a593Smuzhiyun )
1203*4882a593Smuzhiyun 
1204*4882a593Smuzhiyun #define DEFINE_LOG_ITEM_EVENT(name) \
1205*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_item_class, name, \
1206*4882a593Smuzhiyun 	TP_PROTO(struct xfs_log_item *lip), \
1207*4882a593Smuzhiyun 	TP_ARGS(lip))
1208*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_push);
1209*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned);
1210*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_locked);
1211*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing);
1212*4882a593Smuzhiyun 
1213*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ail_class,
1214*4882a593Smuzhiyun 	TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn),
1215*4882a593Smuzhiyun 	TP_ARGS(lip, old_lsn, new_lsn),
1216*4882a593Smuzhiyun 	TP_STRUCT__entry(
1217*4882a593Smuzhiyun 		__field(dev_t, dev)
1218*4882a593Smuzhiyun 		__field(void *, lip)
1219*4882a593Smuzhiyun 		__field(uint, type)
1220*4882a593Smuzhiyun 		__field(unsigned long, flags)
1221*4882a593Smuzhiyun 		__field(xfs_lsn_t, old_lsn)
1222*4882a593Smuzhiyun 		__field(xfs_lsn_t, new_lsn)
1223*4882a593Smuzhiyun 	),
1224*4882a593Smuzhiyun 	TP_fast_assign(
1225*4882a593Smuzhiyun 		__entry->dev = lip->li_mountp->m_super->s_dev;
1226*4882a593Smuzhiyun 		__entry->lip = lip;
1227*4882a593Smuzhiyun 		__entry->type = lip->li_type;
1228*4882a593Smuzhiyun 		__entry->flags = lip->li_flags;
1229*4882a593Smuzhiyun 		__entry->old_lsn = old_lsn;
1230*4882a593Smuzhiyun 		__entry->new_lsn = new_lsn;
1231*4882a593Smuzhiyun 	),
1232*4882a593Smuzhiyun 	TP_printk("dev %d:%d lip %p old lsn %d/%d new lsn %d/%d type %s flags %s",
1233*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1234*4882a593Smuzhiyun 		  __entry->lip,
1235*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn),
1236*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn),
1237*4882a593Smuzhiyun 		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
1238*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_LI_FLAGS))
1239*4882a593Smuzhiyun )
1240*4882a593Smuzhiyun 
1241*4882a593Smuzhiyun #define DEFINE_AIL_EVENT(name) \
1242*4882a593Smuzhiyun DEFINE_EVENT(xfs_ail_class, name, \
1243*4882a593Smuzhiyun 	TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), \
1244*4882a593Smuzhiyun 	TP_ARGS(lip, old_lsn, new_lsn))
1245*4882a593Smuzhiyun DEFINE_AIL_EVENT(xfs_ail_insert);
1246*4882a593Smuzhiyun DEFINE_AIL_EVENT(xfs_ail_move);
1247*4882a593Smuzhiyun DEFINE_AIL_EVENT(xfs_ail_delete);
1248*4882a593Smuzhiyun 
1249*4882a593Smuzhiyun TRACE_EVENT(xfs_log_assign_tail_lsn,
1250*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, xfs_lsn_t new_lsn),
1251*4882a593Smuzhiyun 	TP_ARGS(log, new_lsn),
1252*4882a593Smuzhiyun 	TP_STRUCT__entry(
1253*4882a593Smuzhiyun 		__field(dev_t, dev)
1254*4882a593Smuzhiyun 		__field(xfs_lsn_t, new_lsn)
1255*4882a593Smuzhiyun 		__field(xfs_lsn_t, old_lsn)
1256*4882a593Smuzhiyun 		__field(xfs_lsn_t, last_sync_lsn)
1257*4882a593Smuzhiyun 	),
1258*4882a593Smuzhiyun 	TP_fast_assign(
1259*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
1260*4882a593Smuzhiyun 		__entry->new_lsn = new_lsn;
1261*4882a593Smuzhiyun 		__entry->old_lsn = atomic64_read(&log->l_tail_lsn);
1262*4882a593Smuzhiyun 		__entry->last_sync_lsn = atomic64_read(&log->l_last_sync_lsn);
1263*4882a593Smuzhiyun 	),
1264*4882a593Smuzhiyun 	TP_printk("dev %d:%d new tail lsn %d/%d, old lsn %d/%d, last sync %d/%d",
1265*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1266*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn),
1267*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn),
1268*4882a593Smuzhiyun 		  CYCLE_LSN(__entry->last_sync_lsn), BLOCK_LSN(__entry->last_sync_lsn))
1269*4882a593Smuzhiyun )
1270*4882a593Smuzhiyun 
1271*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_file_class,
1272*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset),
1273*4882a593Smuzhiyun 	TP_ARGS(ip, count, offset),
1274*4882a593Smuzhiyun 	TP_STRUCT__entry(
1275*4882a593Smuzhiyun 		__field(dev_t, dev)
1276*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1277*4882a593Smuzhiyun 		__field(xfs_fsize_t, size)
1278*4882a593Smuzhiyun 		__field(loff_t, offset)
1279*4882a593Smuzhiyun 		__field(size_t, count)
1280*4882a593Smuzhiyun 	),
1281*4882a593Smuzhiyun 	TP_fast_assign(
1282*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1283*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
1284*4882a593Smuzhiyun 		__entry->size = ip->i_d.di_size;
1285*4882a593Smuzhiyun 		__entry->offset = offset;
1286*4882a593Smuzhiyun 		__entry->count = count;
1287*4882a593Smuzhiyun 	),
1288*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count 0x%zx",
1289*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1290*4882a593Smuzhiyun 		  __entry->ino,
1291*4882a593Smuzhiyun 		  __entry->size,
1292*4882a593Smuzhiyun 		  __entry->offset,
1293*4882a593Smuzhiyun 		  __entry->count)
1294*4882a593Smuzhiyun )
1295*4882a593Smuzhiyun 
1296*4882a593Smuzhiyun #define DEFINE_RW_EVENT(name)		\
1297*4882a593Smuzhiyun DEFINE_EVENT(xfs_file_class, name,	\
1298*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset),	\
1299*4882a593Smuzhiyun 	TP_ARGS(ip, count, offset))
1300*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_buffered_read);
1301*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_direct_read);
1302*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_dax_read);
1303*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_buffered_write);
1304*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_direct_write);
1305*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_dax_write);
1306*4882a593Smuzhiyun 
1307*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_imap_class,
1308*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,
1309*4882a593Smuzhiyun 		 int whichfork, struct xfs_bmbt_irec *irec),
1310*4882a593Smuzhiyun 	TP_ARGS(ip, offset, count, whichfork, irec),
1311*4882a593Smuzhiyun 	TP_STRUCT__entry(
1312*4882a593Smuzhiyun 		__field(dev_t, dev)
1313*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1314*4882a593Smuzhiyun 		__field(loff_t, size)
1315*4882a593Smuzhiyun 		__field(loff_t, offset)
1316*4882a593Smuzhiyun 		__field(size_t, count)
1317*4882a593Smuzhiyun 		__field(int, whichfork)
1318*4882a593Smuzhiyun 		__field(xfs_fileoff_t, startoff)
1319*4882a593Smuzhiyun 		__field(xfs_fsblock_t, startblock)
1320*4882a593Smuzhiyun 		__field(xfs_filblks_t, blockcount)
1321*4882a593Smuzhiyun 	),
1322*4882a593Smuzhiyun 	TP_fast_assign(
1323*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1324*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
1325*4882a593Smuzhiyun 		__entry->size = ip->i_d.di_size;
1326*4882a593Smuzhiyun 		__entry->offset = offset;
1327*4882a593Smuzhiyun 		__entry->count = count;
1328*4882a593Smuzhiyun 		__entry->whichfork = whichfork;
1329*4882a593Smuzhiyun 		__entry->startoff = irec ? irec->br_startoff : 0;
1330*4882a593Smuzhiyun 		__entry->startblock = irec ? irec->br_startblock : 0;
1331*4882a593Smuzhiyun 		__entry->blockcount = irec ? irec->br_blockcount : 0;
1332*4882a593Smuzhiyun 	),
1333*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count %zd "
1334*4882a593Smuzhiyun 		  "fork %s startoff 0x%llx startblock %lld blockcount 0x%llx",
1335*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1336*4882a593Smuzhiyun 		  __entry->ino,
1337*4882a593Smuzhiyun 		  __entry->size,
1338*4882a593Smuzhiyun 		  __entry->offset,
1339*4882a593Smuzhiyun 		  __entry->count,
1340*4882a593Smuzhiyun 		  __entry->whichfork == XFS_COW_FORK ? "cow" : "data",
1341*4882a593Smuzhiyun 		  __entry->startoff,
1342*4882a593Smuzhiyun 		  (int64_t)__entry->startblock,
1343*4882a593Smuzhiyun 		  __entry->blockcount)
1344*4882a593Smuzhiyun )
1345*4882a593Smuzhiyun 
1346*4882a593Smuzhiyun #define DEFINE_IMAP_EVENT(name)	\
1347*4882a593Smuzhiyun DEFINE_EVENT(xfs_imap_class, name,	\
1348*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,	\
1349*4882a593Smuzhiyun 		 int whichfork, struct xfs_bmbt_irec *irec),		\
1350*4882a593Smuzhiyun 	TP_ARGS(ip, offset, count, whichfork, irec))
1351*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_map_blocks_found);
1352*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_map_blocks_alloc);
1353*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_iomap_alloc);
1354*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_iomap_found);
1355*4882a593Smuzhiyun 
1356*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_simple_io_class,
1357*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count),
1358*4882a593Smuzhiyun 	TP_ARGS(ip, offset, count),
1359*4882a593Smuzhiyun 	TP_STRUCT__entry(
1360*4882a593Smuzhiyun 		__field(dev_t, dev)
1361*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1362*4882a593Smuzhiyun 		__field(loff_t, isize)
1363*4882a593Smuzhiyun 		__field(loff_t, disize)
1364*4882a593Smuzhiyun 		__field(loff_t, offset)
1365*4882a593Smuzhiyun 		__field(size_t, count)
1366*4882a593Smuzhiyun 	),
1367*4882a593Smuzhiyun 	TP_fast_assign(
1368*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1369*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
1370*4882a593Smuzhiyun 		__entry->isize = VFS_I(ip)->i_size;
1371*4882a593Smuzhiyun 		__entry->disize = ip->i_d.di_size;
1372*4882a593Smuzhiyun 		__entry->offset = offset;
1373*4882a593Smuzhiyun 		__entry->count = count;
1374*4882a593Smuzhiyun 	),
1375*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx "
1376*4882a593Smuzhiyun 		  "offset 0x%llx count %zd",
1377*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1378*4882a593Smuzhiyun 		  __entry->ino,
1379*4882a593Smuzhiyun 		  __entry->isize,
1380*4882a593Smuzhiyun 		  __entry->disize,
1381*4882a593Smuzhiyun 		  __entry->offset,
1382*4882a593Smuzhiyun 		  __entry->count)
1383*4882a593Smuzhiyun );
1384*4882a593Smuzhiyun 
1385*4882a593Smuzhiyun #define DEFINE_SIMPLE_IO_EVENT(name)	\
1386*4882a593Smuzhiyun DEFINE_EVENT(xfs_simple_io_class, name,	\
1387*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count),	\
1388*4882a593Smuzhiyun 	TP_ARGS(ip, offset, count))
1389*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_delalloc_enospc);
1390*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_unwritten_convert);
1391*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_setfilesize);
1392*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_zero_eof);
1393*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write);
1394*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_unwritten);
1395*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_append);
1396*4882a593Smuzhiyun 
1397*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_itrunc_class,
1398*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size),
1399*4882a593Smuzhiyun 	TP_ARGS(ip, new_size),
1400*4882a593Smuzhiyun 	TP_STRUCT__entry(
1401*4882a593Smuzhiyun 		__field(dev_t, dev)
1402*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1403*4882a593Smuzhiyun 		__field(xfs_fsize_t, size)
1404*4882a593Smuzhiyun 		__field(xfs_fsize_t, new_size)
1405*4882a593Smuzhiyun 	),
1406*4882a593Smuzhiyun 	TP_fast_assign(
1407*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1408*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
1409*4882a593Smuzhiyun 		__entry->size = ip->i_d.di_size;
1410*4882a593Smuzhiyun 		__entry->new_size = new_size;
1411*4882a593Smuzhiyun 	),
1412*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx",
1413*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1414*4882a593Smuzhiyun 		  __entry->ino,
1415*4882a593Smuzhiyun 		  __entry->size,
1416*4882a593Smuzhiyun 		  __entry->new_size)
1417*4882a593Smuzhiyun )
1418*4882a593Smuzhiyun 
1419*4882a593Smuzhiyun #define DEFINE_ITRUNC_EVENT(name) \
1420*4882a593Smuzhiyun DEFINE_EVENT(xfs_itrunc_class, name, \
1421*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \
1422*4882a593Smuzhiyun 	TP_ARGS(ip, new_size))
1423*4882a593Smuzhiyun DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start);
1424*4882a593Smuzhiyun DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end);
1425*4882a593Smuzhiyun 
1426*4882a593Smuzhiyun TRACE_EVENT(xfs_pagecache_inval,
1427*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish),
1428*4882a593Smuzhiyun 	TP_ARGS(ip, start, finish),
1429*4882a593Smuzhiyun 	TP_STRUCT__entry(
1430*4882a593Smuzhiyun 		__field(dev_t, dev)
1431*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1432*4882a593Smuzhiyun 		__field(xfs_fsize_t, size)
1433*4882a593Smuzhiyun 		__field(xfs_off_t, start)
1434*4882a593Smuzhiyun 		__field(xfs_off_t, finish)
1435*4882a593Smuzhiyun 	),
1436*4882a593Smuzhiyun 	TP_fast_assign(
1437*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1438*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
1439*4882a593Smuzhiyun 		__entry->size = ip->i_d.di_size;
1440*4882a593Smuzhiyun 		__entry->start = start;
1441*4882a593Smuzhiyun 		__entry->finish = finish;
1442*4882a593Smuzhiyun 	),
1443*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx size 0x%llx start 0x%llx finish 0x%llx",
1444*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1445*4882a593Smuzhiyun 		  __entry->ino,
1446*4882a593Smuzhiyun 		  __entry->size,
1447*4882a593Smuzhiyun 		  __entry->start,
1448*4882a593Smuzhiyun 		  __entry->finish)
1449*4882a593Smuzhiyun );
1450*4882a593Smuzhiyun 
1451*4882a593Smuzhiyun TRACE_EVENT(xfs_bunmap,
1452*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t bno, xfs_filblks_t len,
1453*4882a593Smuzhiyun 		 int flags, unsigned long caller_ip),
1454*4882a593Smuzhiyun 	TP_ARGS(ip, bno, len, flags, caller_ip),
1455*4882a593Smuzhiyun 	TP_STRUCT__entry(
1456*4882a593Smuzhiyun 		__field(dev_t, dev)
1457*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1458*4882a593Smuzhiyun 		__field(xfs_fsize_t, size)
1459*4882a593Smuzhiyun 		__field(xfs_fileoff_t, bno)
1460*4882a593Smuzhiyun 		__field(xfs_filblks_t, len)
1461*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
1462*4882a593Smuzhiyun 		__field(int, flags)
1463*4882a593Smuzhiyun 	),
1464*4882a593Smuzhiyun 	TP_fast_assign(
1465*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
1466*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
1467*4882a593Smuzhiyun 		__entry->size = ip->i_d.di_size;
1468*4882a593Smuzhiyun 		__entry->bno = bno;
1469*4882a593Smuzhiyun 		__entry->len = len;
1470*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
1471*4882a593Smuzhiyun 		__entry->flags = flags;
1472*4882a593Smuzhiyun 	),
1473*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx size 0x%llx bno 0x%llx len 0x%llx"
1474*4882a593Smuzhiyun 		  "flags %s caller %pS",
1475*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1476*4882a593Smuzhiyun 		  __entry->ino,
1477*4882a593Smuzhiyun 		  __entry->size,
1478*4882a593Smuzhiyun 		  __entry->bno,
1479*4882a593Smuzhiyun 		  __entry->len,
1480*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS),
1481*4882a593Smuzhiyun 		  (void *)__entry->caller_ip)
1482*4882a593Smuzhiyun 
1483*4882a593Smuzhiyun );
1484*4882a593Smuzhiyun 
1485*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_extent_busy_class,
1486*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1487*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len),
1488*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len),
1489*4882a593Smuzhiyun 	TP_STRUCT__entry(
1490*4882a593Smuzhiyun 		__field(dev_t, dev)
1491*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
1492*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
1493*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
1494*4882a593Smuzhiyun 	),
1495*4882a593Smuzhiyun 	TP_fast_assign(
1496*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
1497*4882a593Smuzhiyun 		__entry->agno = agno;
1498*4882a593Smuzhiyun 		__entry->agbno = agbno;
1499*4882a593Smuzhiyun 		__entry->len = len;
1500*4882a593Smuzhiyun 	),
1501*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u",
1502*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1503*4882a593Smuzhiyun 		  __entry->agno,
1504*4882a593Smuzhiyun 		  __entry->agbno,
1505*4882a593Smuzhiyun 		  __entry->len)
1506*4882a593Smuzhiyun );
1507*4882a593Smuzhiyun #define DEFINE_BUSY_EVENT(name) \
1508*4882a593Smuzhiyun DEFINE_EVENT(xfs_extent_busy_class, name, \
1509*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
1510*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len), \
1511*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len))
1512*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy);
1513*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_enomem);
1514*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_force);
1515*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_reuse);
1516*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_clear);
1517*4882a593Smuzhiyun 
1518*4882a593Smuzhiyun TRACE_EVENT(xfs_extent_busy_trim,
1519*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1520*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len,
1521*4882a593Smuzhiyun 		 xfs_agblock_t tbno, xfs_extlen_t tlen),
1522*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len, tbno, tlen),
1523*4882a593Smuzhiyun 	TP_STRUCT__entry(
1524*4882a593Smuzhiyun 		__field(dev_t, dev)
1525*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
1526*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
1527*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
1528*4882a593Smuzhiyun 		__field(xfs_agblock_t, tbno)
1529*4882a593Smuzhiyun 		__field(xfs_extlen_t, tlen)
1530*4882a593Smuzhiyun 	),
1531*4882a593Smuzhiyun 	TP_fast_assign(
1532*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
1533*4882a593Smuzhiyun 		__entry->agno = agno;
1534*4882a593Smuzhiyun 		__entry->agbno = agbno;
1535*4882a593Smuzhiyun 		__entry->len = len;
1536*4882a593Smuzhiyun 		__entry->tbno = tbno;
1537*4882a593Smuzhiyun 		__entry->tlen = tlen;
1538*4882a593Smuzhiyun 	),
1539*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u tbno %u tlen %u",
1540*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1541*4882a593Smuzhiyun 		  __entry->agno,
1542*4882a593Smuzhiyun 		  __entry->agbno,
1543*4882a593Smuzhiyun 		  __entry->len,
1544*4882a593Smuzhiyun 		  __entry->tbno,
1545*4882a593Smuzhiyun 		  __entry->tlen)
1546*4882a593Smuzhiyun );
1547*4882a593Smuzhiyun 
1548*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_agf_class,
1549*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags,
1550*4882a593Smuzhiyun 		 unsigned long caller_ip),
1551*4882a593Smuzhiyun 	TP_ARGS(mp, agf, flags, caller_ip),
1552*4882a593Smuzhiyun 	TP_STRUCT__entry(
1553*4882a593Smuzhiyun 		__field(dev_t, dev)
1554*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
1555*4882a593Smuzhiyun 		__field(int, flags)
1556*4882a593Smuzhiyun 		__field(__u32, length)
1557*4882a593Smuzhiyun 		__field(__u32, bno_root)
1558*4882a593Smuzhiyun 		__field(__u32, cnt_root)
1559*4882a593Smuzhiyun 		__field(__u32, bno_level)
1560*4882a593Smuzhiyun 		__field(__u32, cnt_level)
1561*4882a593Smuzhiyun 		__field(__u32, flfirst)
1562*4882a593Smuzhiyun 		__field(__u32, fllast)
1563*4882a593Smuzhiyun 		__field(__u32, flcount)
1564*4882a593Smuzhiyun 		__field(__u32, freeblks)
1565*4882a593Smuzhiyun 		__field(__u32, longest)
1566*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
1567*4882a593Smuzhiyun 	),
1568*4882a593Smuzhiyun 	TP_fast_assign(
1569*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
1570*4882a593Smuzhiyun 		__entry->agno = be32_to_cpu(agf->agf_seqno),
1571*4882a593Smuzhiyun 		__entry->flags = flags;
1572*4882a593Smuzhiyun 		__entry->length = be32_to_cpu(agf->agf_length),
1573*4882a593Smuzhiyun 		__entry->bno_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]),
1574*4882a593Smuzhiyun 		__entry->cnt_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]),
1575*4882a593Smuzhiyun 		__entry->bno_level =
1576*4882a593Smuzhiyun 				be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]),
1577*4882a593Smuzhiyun 		__entry->cnt_level =
1578*4882a593Smuzhiyun 				be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]),
1579*4882a593Smuzhiyun 		__entry->flfirst = be32_to_cpu(agf->agf_flfirst),
1580*4882a593Smuzhiyun 		__entry->fllast = be32_to_cpu(agf->agf_fllast),
1581*4882a593Smuzhiyun 		__entry->flcount = be32_to_cpu(agf->agf_flcount),
1582*4882a593Smuzhiyun 		__entry->freeblks = be32_to_cpu(agf->agf_freeblks),
1583*4882a593Smuzhiyun 		__entry->longest = be32_to_cpu(agf->agf_longest);
1584*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
1585*4882a593Smuzhiyun 	),
1586*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u flags %s length %u roots b %u c %u "
1587*4882a593Smuzhiyun 		  "levels b %u c %u flfirst %u fllast %u flcount %u "
1588*4882a593Smuzhiyun 		  "freeblks %u longest %u caller %pS",
1589*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1590*4882a593Smuzhiyun 		  __entry->agno,
1591*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", XFS_AGF_FLAGS),
1592*4882a593Smuzhiyun 		  __entry->length,
1593*4882a593Smuzhiyun 		  __entry->bno_root,
1594*4882a593Smuzhiyun 		  __entry->cnt_root,
1595*4882a593Smuzhiyun 		  __entry->bno_level,
1596*4882a593Smuzhiyun 		  __entry->cnt_level,
1597*4882a593Smuzhiyun 		  __entry->flfirst,
1598*4882a593Smuzhiyun 		  __entry->fllast,
1599*4882a593Smuzhiyun 		  __entry->flcount,
1600*4882a593Smuzhiyun 		  __entry->freeblks,
1601*4882a593Smuzhiyun 		  __entry->longest,
1602*4882a593Smuzhiyun 		  (void *)__entry->caller_ip)
1603*4882a593Smuzhiyun );
1604*4882a593Smuzhiyun #define DEFINE_AGF_EVENT(name) \
1605*4882a593Smuzhiyun DEFINE_EVENT(xfs_agf_class, name, \
1606*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, \
1607*4882a593Smuzhiyun 		 unsigned long caller_ip), \
1608*4882a593Smuzhiyun 	TP_ARGS(mp, agf, flags, caller_ip))
1609*4882a593Smuzhiyun DEFINE_AGF_EVENT(xfs_agf);
1610*4882a593Smuzhiyun DEFINE_AGF_EVENT(xfs_agfl_reset);
1611*4882a593Smuzhiyun 
1612*4882a593Smuzhiyun TRACE_EVENT(xfs_free_extent,
1613*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
1614*4882a593Smuzhiyun 		 xfs_extlen_t len, enum xfs_ag_resv_type resv, int haveleft,
1615*4882a593Smuzhiyun 		 int haveright),
1616*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len, resv, haveleft, haveright),
1617*4882a593Smuzhiyun 	TP_STRUCT__entry(
1618*4882a593Smuzhiyun 		__field(dev_t, dev)
1619*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
1620*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
1621*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
1622*4882a593Smuzhiyun 		__field(int, resv)
1623*4882a593Smuzhiyun 		__field(int, haveleft)
1624*4882a593Smuzhiyun 		__field(int, haveright)
1625*4882a593Smuzhiyun 	),
1626*4882a593Smuzhiyun 	TP_fast_assign(
1627*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
1628*4882a593Smuzhiyun 		__entry->agno = agno;
1629*4882a593Smuzhiyun 		__entry->agbno = agbno;
1630*4882a593Smuzhiyun 		__entry->len = len;
1631*4882a593Smuzhiyun 		__entry->resv = resv;
1632*4882a593Smuzhiyun 		__entry->haveleft = haveleft;
1633*4882a593Smuzhiyun 		__entry->haveright = haveright;
1634*4882a593Smuzhiyun 	),
1635*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u resv %d %s",
1636*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1637*4882a593Smuzhiyun 		  __entry->agno,
1638*4882a593Smuzhiyun 		  __entry->agbno,
1639*4882a593Smuzhiyun 		  __entry->len,
1640*4882a593Smuzhiyun 		  __entry->resv,
1641*4882a593Smuzhiyun 		  __entry->haveleft ?
1642*4882a593Smuzhiyun 			(__entry->haveright ? "both" : "left") :
1643*4882a593Smuzhiyun 			(__entry->haveright ? "right" : "none"))
1644*4882a593Smuzhiyun 
1645*4882a593Smuzhiyun );
1646*4882a593Smuzhiyun 
1647*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_alloc_class,
1648*4882a593Smuzhiyun 	TP_PROTO(struct xfs_alloc_arg *args),
1649*4882a593Smuzhiyun 	TP_ARGS(args),
1650*4882a593Smuzhiyun 	TP_STRUCT__entry(
1651*4882a593Smuzhiyun 		__field(dev_t, dev)
1652*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
1653*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
1654*4882a593Smuzhiyun 		__field(xfs_extlen_t, minlen)
1655*4882a593Smuzhiyun 		__field(xfs_extlen_t, maxlen)
1656*4882a593Smuzhiyun 		__field(xfs_extlen_t, mod)
1657*4882a593Smuzhiyun 		__field(xfs_extlen_t, prod)
1658*4882a593Smuzhiyun 		__field(xfs_extlen_t, minleft)
1659*4882a593Smuzhiyun 		__field(xfs_extlen_t, total)
1660*4882a593Smuzhiyun 		__field(xfs_extlen_t, alignment)
1661*4882a593Smuzhiyun 		__field(xfs_extlen_t, minalignslop)
1662*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
1663*4882a593Smuzhiyun 		__field(short, type)
1664*4882a593Smuzhiyun 		__field(short, otype)
1665*4882a593Smuzhiyun 		__field(char, wasdel)
1666*4882a593Smuzhiyun 		__field(char, wasfromfl)
1667*4882a593Smuzhiyun 		__field(int, resv)
1668*4882a593Smuzhiyun 		__field(int, datatype)
1669*4882a593Smuzhiyun 		__field(xfs_fsblock_t, firstblock)
1670*4882a593Smuzhiyun 	),
1671*4882a593Smuzhiyun 	TP_fast_assign(
1672*4882a593Smuzhiyun 		__entry->dev = args->mp->m_super->s_dev;
1673*4882a593Smuzhiyun 		__entry->agno = args->agno;
1674*4882a593Smuzhiyun 		__entry->agbno = args->agbno;
1675*4882a593Smuzhiyun 		__entry->minlen = args->minlen;
1676*4882a593Smuzhiyun 		__entry->maxlen = args->maxlen;
1677*4882a593Smuzhiyun 		__entry->mod = args->mod;
1678*4882a593Smuzhiyun 		__entry->prod = args->prod;
1679*4882a593Smuzhiyun 		__entry->minleft = args->minleft;
1680*4882a593Smuzhiyun 		__entry->total = args->total;
1681*4882a593Smuzhiyun 		__entry->alignment = args->alignment;
1682*4882a593Smuzhiyun 		__entry->minalignslop = args->minalignslop;
1683*4882a593Smuzhiyun 		__entry->len = args->len;
1684*4882a593Smuzhiyun 		__entry->type = args->type;
1685*4882a593Smuzhiyun 		__entry->otype = args->otype;
1686*4882a593Smuzhiyun 		__entry->wasdel = args->wasdel;
1687*4882a593Smuzhiyun 		__entry->wasfromfl = args->wasfromfl;
1688*4882a593Smuzhiyun 		__entry->resv = args->resv;
1689*4882a593Smuzhiyun 		__entry->datatype = args->datatype;
1690*4882a593Smuzhiyun 		__entry->firstblock = args->tp->t_firstblock;
1691*4882a593Smuzhiyun 	),
1692*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u minlen %u maxlen %u mod %u "
1693*4882a593Smuzhiyun 		  "prod %u minleft %u total %u alignment %u minalignslop %u "
1694*4882a593Smuzhiyun 		  "len %u type %s otype %s wasdel %d wasfromfl %d resv %d "
1695*4882a593Smuzhiyun 		  "datatype 0x%x firstblock 0x%llx",
1696*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1697*4882a593Smuzhiyun 		  __entry->agno,
1698*4882a593Smuzhiyun 		  __entry->agbno,
1699*4882a593Smuzhiyun 		  __entry->minlen,
1700*4882a593Smuzhiyun 		  __entry->maxlen,
1701*4882a593Smuzhiyun 		  __entry->mod,
1702*4882a593Smuzhiyun 		  __entry->prod,
1703*4882a593Smuzhiyun 		  __entry->minleft,
1704*4882a593Smuzhiyun 		  __entry->total,
1705*4882a593Smuzhiyun 		  __entry->alignment,
1706*4882a593Smuzhiyun 		  __entry->minalignslop,
1707*4882a593Smuzhiyun 		  __entry->len,
1708*4882a593Smuzhiyun 		  __print_symbolic(__entry->type, XFS_ALLOC_TYPES),
1709*4882a593Smuzhiyun 		  __print_symbolic(__entry->otype, XFS_ALLOC_TYPES),
1710*4882a593Smuzhiyun 		  __entry->wasdel,
1711*4882a593Smuzhiyun 		  __entry->wasfromfl,
1712*4882a593Smuzhiyun 		  __entry->resv,
1713*4882a593Smuzhiyun 		  __entry->datatype,
1714*4882a593Smuzhiyun 		  (unsigned long long)__entry->firstblock)
1715*4882a593Smuzhiyun )
1716*4882a593Smuzhiyun 
1717*4882a593Smuzhiyun #define DEFINE_ALLOC_EVENT(name) \
1718*4882a593Smuzhiyun DEFINE_EVENT(xfs_alloc_class, name, \
1719*4882a593Smuzhiyun 	TP_PROTO(struct xfs_alloc_arg *args), \
1720*4882a593Smuzhiyun 	TP_ARGS(args))
1721*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_exact_done);
1722*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_exact_notfound);
1723*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_exact_error);
1724*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_nominleft);
1725*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_first);
1726*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur);
1727*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_right);
1728*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_left);
1729*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup);
1730*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup_done);
1731*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_error);
1732*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_noentry);
1733*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_busy);
1734*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_neither);
1735*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_noentry);
1736*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_nominleft);
1737*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_done);
1738*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_error);
1739*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_busy);
1740*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_freelist);
1741*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_notenough);
1742*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_done);
1743*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_error);
1744*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_badargs);
1745*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_nofix);
1746*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_noagbp);
1747*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_loopfailed);
1748*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_allfailed);
1749*4882a593Smuzhiyun 
1750*4882a593Smuzhiyun TRACE_EVENT(xfs_alloc_cur_check,
1751*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_btnum_t btnum, xfs_agblock_t bno,
1752*4882a593Smuzhiyun 		 xfs_extlen_t len, xfs_extlen_t diff, bool new),
1753*4882a593Smuzhiyun 	TP_ARGS(mp, btnum, bno, len, diff, new),
1754*4882a593Smuzhiyun 	TP_STRUCT__entry(
1755*4882a593Smuzhiyun 		__field(dev_t, dev)
1756*4882a593Smuzhiyun 		__field(xfs_btnum_t, btnum)
1757*4882a593Smuzhiyun 		__field(xfs_agblock_t, bno)
1758*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
1759*4882a593Smuzhiyun 		__field(xfs_extlen_t, diff)
1760*4882a593Smuzhiyun 		__field(bool, new)
1761*4882a593Smuzhiyun 	),
1762*4882a593Smuzhiyun 	TP_fast_assign(
1763*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
1764*4882a593Smuzhiyun 		__entry->btnum = btnum;
1765*4882a593Smuzhiyun 		__entry->bno = bno;
1766*4882a593Smuzhiyun 		__entry->len = len;
1767*4882a593Smuzhiyun 		__entry->diff = diff;
1768*4882a593Smuzhiyun 		__entry->new = new;
1769*4882a593Smuzhiyun 	),
1770*4882a593Smuzhiyun 	TP_printk("dev %d:%d btree %s bno 0x%x len 0x%x diff 0x%x new %d",
1771*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1772*4882a593Smuzhiyun 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
1773*4882a593Smuzhiyun 		  __entry->bno, __entry->len, __entry->diff, __entry->new)
1774*4882a593Smuzhiyun )
1775*4882a593Smuzhiyun 
1776*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_da_class,
1777*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args),
1778*4882a593Smuzhiyun 	TP_ARGS(args),
1779*4882a593Smuzhiyun 	TP_STRUCT__entry(
1780*4882a593Smuzhiyun 		__field(dev_t, dev)
1781*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1782*4882a593Smuzhiyun 		__dynamic_array(char, name, args->namelen)
1783*4882a593Smuzhiyun 		__field(int, namelen)
1784*4882a593Smuzhiyun 		__field(xfs_dahash_t, hashval)
1785*4882a593Smuzhiyun 		__field(xfs_ino_t, inumber)
1786*4882a593Smuzhiyun 		__field(int, op_flags)
1787*4882a593Smuzhiyun 	),
1788*4882a593Smuzhiyun 	TP_fast_assign(
1789*4882a593Smuzhiyun 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
1790*4882a593Smuzhiyun 		__entry->ino = args->dp->i_ino;
1791*4882a593Smuzhiyun 		if (args->namelen)
1792*4882a593Smuzhiyun 			memcpy(__get_str(name), args->name, args->namelen);
1793*4882a593Smuzhiyun 		__entry->namelen = args->namelen;
1794*4882a593Smuzhiyun 		__entry->hashval = args->hashval;
1795*4882a593Smuzhiyun 		__entry->inumber = args->inumber;
1796*4882a593Smuzhiyun 		__entry->op_flags = args->op_flags;
1797*4882a593Smuzhiyun 	),
1798*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d hashval 0x%x "
1799*4882a593Smuzhiyun 		  "inumber 0x%llx op_flags %s",
1800*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1801*4882a593Smuzhiyun 		  __entry->ino,
1802*4882a593Smuzhiyun 		  __entry->namelen,
1803*4882a593Smuzhiyun 		  __entry->namelen ? __get_str(name) : NULL,
1804*4882a593Smuzhiyun 		  __entry->namelen,
1805*4882a593Smuzhiyun 		  __entry->hashval,
1806*4882a593Smuzhiyun 		  __entry->inumber,
1807*4882a593Smuzhiyun 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS))
1808*4882a593Smuzhiyun )
1809*4882a593Smuzhiyun 
1810*4882a593Smuzhiyun #define DEFINE_DIR2_EVENT(name) \
1811*4882a593Smuzhiyun DEFINE_EVENT(xfs_da_class, name, \
1812*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args), \
1813*4882a593Smuzhiyun 	TP_ARGS(args))
1814*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_addname);
1815*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_create);
1816*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_lookup);
1817*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_replace);
1818*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_removename);
1819*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_toino4);
1820*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_toino8);
1821*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_to_block);
1822*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_addname);
1823*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_lookup);
1824*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_replace);
1825*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_removename);
1826*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_to_sf);
1827*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_to_leaf);
1828*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_addname);
1829*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_lookup);
1830*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_replace);
1831*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_removename);
1832*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_block);
1833*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_node);
1834*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_addname);
1835*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_lookup);
1836*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_replace);
1837*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_removename);
1838*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf);
1839*4882a593Smuzhiyun 
1840*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_attr_class,
1841*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args),
1842*4882a593Smuzhiyun 	TP_ARGS(args),
1843*4882a593Smuzhiyun 	TP_STRUCT__entry(
1844*4882a593Smuzhiyun 		__field(dev_t, dev)
1845*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1846*4882a593Smuzhiyun 		__dynamic_array(char, name, args->namelen)
1847*4882a593Smuzhiyun 		__field(int, namelen)
1848*4882a593Smuzhiyun 		__field(int, valuelen)
1849*4882a593Smuzhiyun 		__field(xfs_dahash_t, hashval)
1850*4882a593Smuzhiyun 		__field(unsigned int, attr_filter)
1851*4882a593Smuzhiyun 		__field(unsigned int, attr_flags)
1852*4882a593Smuzhiyun 		__field(int, op_flags)
1853*4882a593Smuzhiyun 	),
1854*4882a593Smuzhiyun 	TP_fast_assign(
1855*4882a593Smuzhiyun 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
1856*4882a593Smuzhiyun 		__entry->ino = args->dp->i_ino;
1857*4882a593Smuzhiyun 		if (args->namelen)
1858*4882a593Smuzhiyun 			memcpy(__get_str(name), args->name, args->namelen);
1859*4882a593Smuzhiyun 		__entry->namelen = args->namelen;
1860*4882a593Smuzhiyun 		__entry->valuelen = args->valuelen;
1861*4882a593Smuzhiyun 		__entry->hashval = args->hashval;
1862*4882a593Smuzhiyun 		__entry->attr_filter = args->attr_filter;
1863*4882a593Smuzhiyun 		__entry->attr_flags = args->attr_flags;
1864*4882a593Smuzhiyun 		__entry->op_flags = args->op_flags;
1865*4882a593Smuzhiyun 	),
1866*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d "
1867*4882a593Smuzhiyun 		  "hashval 0x%x filter %s flags %s op_flags %s",
1868*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1869*4882a593Smuzhiyun 		  __entry->ino,
1870*4882a593Smuzhiyun 		  __entry->namelen,
1871*4882a593Smuzhiyun 		  __entry->namelen ? __get_str(name) : NULL,
1872*4882a593Smuzhiyun 		  __entry->namelen,
1873*4882a593Smuzhiyun 		  __entry->valuelen,
1874*4882a593Smuzhiyun 		  __entry->hashval,
1875*4882a593Smuzhiyun 		  __print_flags(__entry->attr_filter, "|",
1876*4882a593Smuzhiyun 				XFS_ATTR_FILTER_FLAGS),
1877*4882a593Smuzhiyun 		   __print_flags(__entry->attr_flags, "|",
1878*4882a593Smuzhiyun 				{ XATTR_CREATE,		"CREATE" },
1879*4882a593Smuzhiyun 				{ XATTR_REPLACE,	"REPLACE" }),
1880*4882a593Smuzhiyun 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS))
1881*4882a593Smuzhiyun )
1882*4882a593Smuzhiyun 
1883*4882a593Smuzhiyun #define DEFINE_ATTR_EVENT(name) \
1884*4882a593Smuzhiyun DEFINE_EVENT(xfs_attr_class, name, \
1885*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args), \
1886*4882a593Smuzhiyun 	TP_ARGS(args))
1887*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_add);
1888*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_addname);
1889*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_create);
1890*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_lookup);
1891*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_remove);
1892*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf);
1893*4882a593Smuzhiyun 
1894*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add);
1895*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old);
1896*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new);
1897*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work);
1898*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_addname);
1899*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_create);
1900*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_compact);
1901*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_get);
1902*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup);
1903*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_replace);
1904*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_remove);
1905*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_removename);
1906*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_split);
1907*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before);
1908*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_split_after);
1909*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_clearflag);
1910*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_setflag);
1911*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_flipflags);
1912*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf);
1913*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node);
1914*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance);
1915*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance);
1916*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall);
1917*4882a593Smuzhiyun 
1918*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_addname);
1919*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_get);
1920*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_replace);
1921*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_removename);
1922*4882a593Smuzhiyun 
1923*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_fillstate);
1924*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_refillstate);
1925*4882a593Smuzhiyun 
1926*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_rmtval_get);
1927*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_rmtval_set);
1928*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_rmtval_remove);
1929*4882a593Smuzhiyun 
1930*4882a593Smuzhiyun #define DEFINE_DA_EVENT(name) \
1931*4882a593Smuzhiyun DEFINE_EVENT(xfs_da_class, name, \
1932*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args), \
1933*4882a593Smuzhiyun 	TP_ARGS(args))
1934*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_split);
1935*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_join);
1936*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_link_before);
1937*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_link_after);
1938*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_unlink_back);
1939*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_unlink_forward);
1940*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_root_split);
1941*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_root_join);
1942*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_add);
1943*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_create);
1944*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_split);
1945*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_remove);
1946*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_rebalance);
1947*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_unbalance);
1948*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_toosmall);
1949*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_swap_lastblock);
1950*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_grow_inode);
1951*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_shrink_inode);
1952*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_fixhashpath);
1953*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_path_shift);
1954*4882a593Smuzhiyun 
1955*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_dir2_space_class,
1956*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args, int idx),
1957*4882a593Smuzhiyun 	TP_ARGS(args, idx),
1958*4882a593Smuzhiyun 	TP_STRUCT__entry(
1959*4882a593Smuzhiyun 		__field(dev_t, dev)
1960*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1961*4882a593Smuzhiyun 		__field(int, op_flags)
1962*4882a593Smuzhiyun 		__field(int, idx)
1963*4882a593Smuzhiyun 	),
1964*4882a593Smuzhiyun 	TP_fast_assign(
1965*4882a593Smuzhiyun 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
1966*4882a593Smuzhiyun 		__entry->ino = args->dp->i_ino;
1967*4882a593Smuzhiyun 		__entry->op_flags = args->op_flags;
1968*4882a593Smuzhiyun 		__entry->idx = idx;
1969*4882a593Smuzhiyun 	),
1970*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx op_flags %s index %d",
1971*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1972*4882a593Smuzhiyun 		  __entry->ino,
1973*4882a593Smuzhiyun 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),
1974*4882a593Smuzhiyun 		  __entry->idx)
1975*4882a593Smuzhiyun )
1976*4882a593Smuzhiyun 
1977*4882a593Smuzhiyun #define DEFINE_DIR2_SPACE_EVENT(name) \
1978*4882a593Smuzhiyun DEFINE_EVENT(xfs_dir2_space_class, name, \
1979*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args, int idx), \
1980*4882a593Smuzhiyun 	TP_ARGS(args, idx))
1981*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_add);
1982*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_remove);
1983*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_grow_inode);
1984*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_shrink_inode);
1985*4882a593Smuzhiyun 
1986*4882a593Smuzhiyun TRACE_EVENT(xfs_dir2_leafn_moveents,
1987*4882a593Smuzhiyun 	TP_PROTO(struct xfs_da_args *args, int src_idx, int dst_idx, int count),
1988*4882a593Smuzhiyun 	TP_ARGS(args, src_idx, dst_idx, count),
1989*4882a593Smuzhiyun 	TP_STRUCT__entry(
1990*4882a593Smuzhiyun 		__field(dev_t, dev)
1991*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
1992*4882a593Smuzhiyun 		__field(int, op_flags)
1993*4882a593Smuzhiyun 		__field(int, src_idx)
1994*4882a593Smuzhiyun 		__field(int, dst_idx)
1995*4882a593Smuzhiyun 		__field(int, count)
1996*4882a593Smuzhiyun 	),
1997*4882a593Smuzhiyun 	TP_fast_assign(
1998*4882a593Smuzhiyun 		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
1999*4882a593Smuzhiyun 		__entry->ino = args->dp->i_ino;
2000*4882a593Smuzhiyun 		__entry->op_flags = args->op_flags;
2001*4882a593Smuzhiyun 		__entry->src_idx = src_idx;
2002*4882a593Smuzhiyun 		__entry->dst_idx = dst_idx;
2003*4882a593Smuzhiyun 		__entry->count = count;
2004*4882a593Smuzhiyun 	),
2005*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx op_flags %s "
2006*4882a593Smuzhiyun 		  "src_idx %d dst_idx %d count %d",
2007*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2008*4882a593Smuzhiyun 		  __entry->ino,
2009*4882a593Smuzhiyun 		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),
2010*4882a593Smuzhiyun 		  __entry->src_idx,
2011*4882a593Smuzhiyun 		  __entry->dst_idx,
2012*4882a593Smuzhiyun 		  __entry->count)
2013*4882a593Smuzhiyun );
2014*4882a593Smuzhiyun 
2015*4882a593Smuzhiyun #define XFS_SWAPEXT_INODES \
2016*4882a593Smuzhiyun 	{ 0,	"target" }, \
2017*4882a593Smuzhiyun 	{ 1,	"temp" }
2018*4882a593Smuzhiyun 
2019*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_DEV);
2020*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_LOCAL);
2021*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_EXTENTS);
2022*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_BTREE);
2023*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_UUID);
2024*4882a593Smuzhiyun 
2025*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_swap_extent_class,
2026*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, int which),
2027*4882a593Smuzhiyun 	TP_ARGS(ip, which),
2028*4882a593Smuzhiyun 	TP_STRUCT__entry(
2029*4882a593Smuzhiyun 		__field(dev_t, dev)
2030*4882a593Smuzhiyun 		__field(int, which)
2031*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
2032*4882a593Smuzhiyun 		__field(int, format)
2033*4882a593Smuzhiyun 		__field(int, nex)
2034*4882a593Smuzhiyun 		__field(int, broot_size)
2035*4882a593Smuzhiyun 		__field(int, fork_off)
2036*4882a593Smuzhiyun 	),
2037*4882a593Smuzhiyun 	TP_fast_assign(
2038*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
2039*4882a593Smuzhiyun 		__entry->which = which;
2040*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
2041*4882a593Smuzhiyun 		__entry->format = ip->i_df.if_format;
2042*4882a593Smuzhiyun 		__entry->nex = ip->i_df.if_nextents;
2043*4882a593Smuzhiyun 		__entry->broot_size = ip->i_df.if_broot_bytes;
2044*4882a593Smuzhiyun 		__entry->fork_off = XFS_IFORK_BOFF(ip);
2045*4882a593Smuzhiyun 	),
2046*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %d, "
2047*4882a593Smuzhiyun 		  "broot size %d, fork offset %d",
2048*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2049*4882a593Smuzhiyun 		  __entry->ino,
2050*4882a593Smuzhiyun 		  __print_symbolic(__entry->which, XFS_SWAPEXT_INODES),
2051*4882a593Smuzhiyun 		  __print_symbolic(__entry->format, XFS_INODE_FORMAT_STR),
2052*4882a593Smuzhiyun 		  __entry->nex,
2053*4882a593Smuzhiyun 		  __entry->broot_size,
2054*4882a593Smuzhiyun 		  __entry->fork_off)
2055*4882a593Smuzhiyun )
2056*4882a593Smuzhiyun 
2057*4882a593Smuzhiyun #define DEFINE_SWAPEXT_EVENT(name) \
2058*4882a593Smuzhiyun DEFINE_EVENT(xfs_swap_extent_class, name, \
2059*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, int which), \
2060*4882a593Smuzhiyun 	TP_ARGS(ip, which))
2061*4882a593Smuzhiyun 
2062*4882a593Smuzhiyun DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before);
2063*4882a593Smuzhiyun DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after);
2064*4882a593Smuzhiyun 
2065*4882a593Smuzhiyun TRACE_EVENT(xfs_log_recover,
2066*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, xfs_daddr_t headblk, xfs_daddr_t tailblk),
2067*4882a593Smuzhiyun 	TP_ARGS(log, headblk, tailblk),
2068*4882a593Smuzhiyun 	TP_STRUCT__entry(
2069*4882a593Smuzhiyun 		__field(dev_t, dev)
2070*4882a593Smuzhiyun 		__field(xfs_daddr_t, headblk)
2071*4882a593Smuzhiyun 		__field(xfs_daddr_t, tailblk)
2072*4882a593Smuzhiyun 	),
2073*4882a593Smuzhiyun 	TP_fast_assign(
2074*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
2075*4882a593Smuzhiyun 		__entry->headblk = headblk;
2076*4882a593Smuzhiyun 		__entry->tailblk = tailblk;
2077*4882a593Smuzhiyun 	),
2078*4882a593Smuzhiyun 	TP_printk("dev %d:%d headblk 0x%llx tailblk 0x%llx",
2079*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->headblk,
2080*4882a593Smuzhiyun 		  __entry->tailblk)
2081*4882a593Smuzhiyun )
2082*4882a593Smuzhiyun 
2083*4882a593Smuzhiyun TRACE_EVENT(xfs_log_recover_record,
2084*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xlog_rec_header *rhead, int pass),
2085*4882a593Smuzhiyun 	TP_ARGS(log, rhead, pass),
2086*4882a593Smuzhiyun 	TP_STRUCT__entry(
2087*4882a593Smuzhiyun 		__field(dev_t, dev)
2088*4882a593Smuzhiyun 		__field(xfs_lsn_t, lsn)
2089*4882a593Smuzhiyun 		__field(int, len)
2090*4882a593Smuzhiyun 		__field(int, num_logops)
2091*4882a593Smuzhiyun 		__field(int, pass)
2092*4882a593Smuzhiyun 	),
2093*4882a593Smuzhiyun 	TP_fast_assign(
2094*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
2095*4882a593Smuzhiyun 		__entry->lsn = be64_to_cpu(rhead->h_lsn);
2096*4882a593Smuzhiyun 		__entry->len = be32_to_cpu(rhead->h_len);
2097*4882a593Smuzhiyun 		__entry->num_logops = be32_to_cpu(rhead->h_num_logops);
2098*4882a593Smuzhiyun 		__entry->pass = pass;
2099*4882a593Smuzhiyun 	),
2100*4882a593Smuzhiyun 	TP_printk("dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d",
2101*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2102*4882a593Smuzhiyun 		  __entry->lsn, __entry->len, __entry->num_logops,
2103*4882a593Smuzhiyun 		   __entry->pass)
2104*4882a593Smuzhiyun )
2105*4882a593Smuzhiyun 
2106*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_item_class,
2107*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xlog_recover *trans,
2108*4882a593Smuzhiyun 		struct xlog_recover_item *item, int pass),
2109*4882a593Smuzhiyun 	TP_ARGS(log, trans, item, pass),
2110*4882a593Smuzhiyun 	TP_STRUCT__entry(
2111*4882a593Smuzhiyun 		__field(dev_t, dev)
2112*4882a593Smuzhiyun 		__field(unsigned long, item)
2113*4882a593Smuzhiyun 		__field(xlog_tid_t, tid)
2114*4882a593Smuzhiyun 		__field(xfs_lsn_t, lsn)
2115*4882a593Smuzhiyun 		__field(int, type)
2116*4882a593Smuzhiyun 		__field(int, pass)
2117*4882a593Smuzhiyun 		__field(int, count)
2118*4882a593Smuzhiyun 		__field(int, total)
2119*4882a593Smuzhiyun 	),
2120*4882a593Smuzhiyun 	TP_fast_assign(
2121*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
2122*4882a593Smuzhiyun 		__entry->item = (unsigned long)item;
2123*4882a593Smuzhiyun 		__entry->tid = trans->r_log_tid;
2124*4882a593Smuzhiyun 		__entry->lsn = trans->r_lsn;
2125*4882a593Smuzhiyun 		__entry->type = ITEM_TYPE(item);
2126*4882a593Smuzhiyun 		__entry->pass = pass;
2127*4882a593Smuzhiyun 		__entry->count = item->ri_cnt;
2128*4882a593Smuzhiyun 		__entry->total = item->ri_total;
2129*4882a593Smuzhiyun 	),
2130*4882a593Smuzhiyun 	TP_printk("dev %d:%d tid 0x%x lsn 0x%llx, pass %d, item %p, "
2131*4882a593Smuzhiyun 		  "item type %s item region count/total %d/%d",
2132*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2133*4882a593Smuzhiyun 		  __entry->tid,
2134*4882a593Smuzhiyun 		  __entry->lsn,
2135*4882a593Smuzhiyun 		  __entry->pass,
2136*4882a593Smuzhiyun 		  (void *)__entry->item,
2137*4882a593Smuzhiyun 		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),
2138*4882a593Smuzhiyun 		  __entry->count,
2139*4882a593Smuzhiyun 		  __entry->total)
2140*4882a593Smuzhiyun )
2141*4882a593Smuzhiyun 
2142*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_ITEM(name) \
2143*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_item_class, name, \
2144*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xlog_recover *trans, \
2145*4882a593Smuzhiyun 		struct xlog_recover_item *item, int pass), \
2146*4882a593Smuzhiyun 	TP_ARGS(log, trans, item, pass))
2147*4882a593Smuzhiyun 
2148*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add);
2149*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont);
2150*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head);
2151*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail);
2152*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover);
2153*4882a593Smuzhiyun 
2154*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class,
2155*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f),
2156*4882a593Smuzhiyun 	TP_ARGS(log, buf_f),
2157*4882a593Smuzhiyun 	TP_STRUCT__entry(
2158*4882a593Smuzhiyun 		__field(dev_t, dev)
2159*4882a593Smuzhiyun 		__field(int64_t, blkno)
2160*4882a593Smuzhiyun 		__field(unsigned short, len)
2161*4882a593Smuzhiyun 		__field(unsigned short, flags)
2162*4882a593Smuzhiyun 		__field(unsigned short, size)
2163*4882a593Smuzhiyun 		__field(unsigned int, map_size)
2164*4882a593Smuzhiyun 	),
2165*4882a593Smuzhiyun 	TP_fast_assign(
2166*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
2167*4882a593Smuzhiyun 		__entry->blkno = buf_f->blf_blkno;
2168*4882a593Smuzhiyun 		__entry->len = buf_f->blf_len;
2169*4882a593Smuzhiyun 		__entry->flags = buf_f->blf_flags;
2170*4882a593Smuzhiyun 		__entry->size = buf_f->blf_size;
2171*4882a593Smuzhiyun 		__entry->map_size = buf_f->blf_map_size;
2172*4882a593Smuzhiyun 	),
2173*4882a593Smuzhiyun 	TP_printk("dev %d:%d blkno 0x%llx, len %u, flags 0x%x, size %d, "
2174*4882a593Smuzhiyun 			"map_size %d",
2175*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2176*4882a593Smuzhiyun 		  __entry->blkno,
2177*4882a593Smuzhiyun 		  __entry->len,
2178*4882a593Smuzhiyun 		  __entry->flags,
2179*4882a593Smuzhiyun 		  __entry->size,
2180*4882a593Smuzhiyun 		  __entry->map_size)
2181*4882a593Smuzhiyun )
2182*4882a593Smuzhiyun 
2183*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_BUF_ITEM(name) \
2184*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \
2185*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), \
2186*4882a593Smuzhiyun 	TP_ARGS(log, buf_f))
2187*4882a593Smuzhiyun 
2188*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel);
2189*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel);
2190*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add);
2191*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc);
2192*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover);
2193*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_skip);
2194*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf);
2195*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf);
2196*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf);
2197*4882a593Smuzhiyun 
2198*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class,
2199*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f),
2200*4882a593Smuzhiyun 	TP_ARGS(log, in_f),
2201*4882a593Smuzhiyun 	TP_STRUCT__entry(
2202*4882a593Smuzhiyun 		__field(dev_t, dev)
2203*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
2204*4882a593Smuzhiyun 		__field(unsigned short, size)
2205*4882a593Smuzhiyun 		__field(int, fields)
2206*4882a593Smuzhiyun 		__field(unsigned short, asize)
2207*4882a593Smuzhiyun 		__field(unsigned short, dsize)
2208*4882a593Smuzhiyun 		__field(int64_t, blkno)
2209*4882a593Smuzhiyun 		__field(int, len)
2210*4882a593Smuzhiyun 		__field(int, boffset)
2211*4882a593Smuzhiyun 	),
2212*4882a593Smuzhiyun 	TP_fast_assign(
2213*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
2214*4882a593Smuzhiyun 		__entry->ino = in_f->ilf_ino;
2215*4882a593Smuzhiyun 		__entry->size = in_f->ilf_size;
2216*4882a593Smuzhiyun 		__entry->fields = in_f->ilf_fields;
2217*4882a593Smuzhiyun 		__entry->asize = in_f->ilf_asize;
2218*4882a593Smuzhiyun 		__entry->dsize = in_f->ilf_dsize;
2219*4882a593Smuzhiyun 		__entry->blkno = in_f->ilf_blkno;
2220*4882a593Smuzhiyun 		__entry->len = in_f->ilf_len;
2221*4882a593Smuzhiyun 		__entry->boffset = in_f->ilf_boffset;
2222*4882a593Smuzhiyun 	),
2223*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, "
2224*4882a593Smuzhiyun 			"dsize %d, blkno 0x%llx, len %d, boffset %d",
2225*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2226*4882a593Smuzhiyun 		  __entry->ino,
2227*4882a593Smuzhiyun 		  __entry->size,
2228*4882a593Smuzhiyun 		  __entry->fields,
2229*4882a593Smuzhiyun 		  __entry->asize,
2230*4882a593Smuzhiyun 		  __entry->dsize,
2231*4882a593Smuzhiyun 		  __entry->blkno,
2232*4882a593Smuzhiyun 		  __entry->len,
2233*4882a593Smuzhiyun 		  __entry->boffset)
2234*4882a593Smuzhiyun )
2235*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_INO_ITEM(name) \
2236*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \
2237*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), \
2238*4882a593Smuzhiyun 	TP_ARGS(log, in_f))
2239*4882a593Smuzhiyun 
2240*4882a593Smuzhiyun DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover);
2241*4882a593Smuzhiyun DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel);
2242*4882a593Smuzhiyun DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip);
2243*4882a593Smuzhiyun 
2244*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class,
2245*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f),
2246*4882a593Smuzhiyun 	TP_ARGS(log, in_f),
2247*4882a593Smuzhiyun 	TP_STRUCT__entry(
2248*4882a593Smuzhiyun 		__field(dev_t, dev)
2249*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2250*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2251*4882a593Smuzhiyun 		__field(unsigned int, count)
2252*4882a593Smuzhiyun 		__field(unsigned int, isize)
2253*4882a593Smuzhiyun 		__field(xfs_agblock_t, length)
2254*4882a593Smuzhiyun 		__field(unsigned int, gen)
2255*4882a593Smuzhiyun 	),
2256*4882a593Smuzhiyun 	TP_fast_assign(
2257*4882a593Smuzhiyun 		__entry->dev = log->l_mp->m_super->s_dev;
2258*4882a593Smuzhiyun 		__entry->agno = be32_to_cpu(in_f->icl_ag);
2259*4882a593Smuzhiyun 		__entry->agbno = be32_to_cpu(in_f->icl_agbno);
2260*4882a593Smuzhiyun 		__entry->count = be32_to_cpu(in_f->icl_count);
2261*4882a593Smuzhiyun 		__entry->isize = be32_to_cpu(in_f->icl_isize);
2262*4882a593Smuzhiyun 		__entry->length = be32_to_cpu(in_f->icl_length);
2263*4882a593Smuzhiyun 		__entry->gen = be32_to_cpu(in_f->icl_gen);
2264*4882a593Smuzhiyun 	),
2265*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u count %u isize %u length %u "
2266*4882a593Smuzhiyun 		  "gen %u", MAJOR(__entry->dev), MINOR(__entry->dev),
2267*4882a593Smuzhiyun 		  __entry->agno, __entry->agbno, __entry->count, __entry->isize,
2268*4882a593Smuzhiyun 		  __entry->length, __entry->gen)
2269*4882a593Smuzhiyun )
2270*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \
2271*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \
2272*4882a593Smuzhiyun 	TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), \
2273*4882a593Smuzhiyun 	TP_ARGS(log, in_f))
2274*4882a593Smuzhiyun 
2275*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_cancel);
2276*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_recover);
2277*4882a593Smuzhiyun 
2278*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_discard_class,
2279*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2280*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len),
2281*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len),
2282*4882a593Smuzhiyun 	TP_STRUCT__entry(
2283*4882a593Smuzhiyun 		__field(dev_t, dev)
2284*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2285*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2286*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
2287*4882a593Smuzhiyun 	),
2288*4882a593Smuzhiyun 	TP_fast_assign(
2289*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2290*4882a593Smuzhiyun 		__entry->agno = agno;
2291*4882a593Smuzhiyun 		__entry->agbno = agbno;
2292*4882a593Smuzhiyun 		__entry->len = len;
2293*4882a593Smuzhiyun 	),
2294*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u",
2295*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2296*4882a593Smuzhiyun 		  __entry->agno,
2297*4882a593Smuzhiyun 		  __entry->agbno,
2298*4882a593Smuzhiyun 		  __entry->len)
2299*4882a593Smuzhiyun )
2300*4882a593Smuzhiyun 
2301*4882a593Smuzhiyun #define DEFINE_DISCARD_EVENT(name) \
2302*4882a593Smuzhiyun DEFINE_EVENT(xfs_discard_class, name, \
2303*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2304*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len), \
2305*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len))
2306*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_extent);
2307*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_toosmall);
2308*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_exclude);
2309*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_busy);
2310*4882a593Smuzhiyun 
2311*4882a593Smuzhiyun /* btree cursor events */
2312*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi);
2313*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi);
2314*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi);
2315*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_INOi);
2316*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi);
2317*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi);
2318*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi);
2319*4882a593Smuzhiyun 
2320*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_btree_cur_class,
2321*4882a593Smuzhiyun 	TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp),
2322*4882a593Smuzhiyun 	TP_ARGS(cur, level, bp),
2323*4882a593Smuzhiyun 	TP_STRUCT__entry(
2324*4882a593Smuzhiyun 		__field(dev_t, dev)
2325*4882a593Smuzhiyun 		__field(xfs_btnum_t, btnum)
2326*4882a593Smuzhiyun 		__field(int, level)
2327*4882a593Smuzhiyun 		__field(int, nlevels)
2328*4882a593Smuzhiyun 		__field(int, ptr)
2329*4882a593Smuzhiyun 		__field(xfs_daddr_t, daddr)
2330*4882a593Smuzhiyun 	),
2331*4882a593Smuzhiyun 	TP_fast_assign(
2332*4882a593Smuzhiyun 		__entry->dev = cur->bc_mp->m_super->s_dev;
2333*4882a593Smuzhiyun 		__entry->btnum = cur->bc_btnum;
2334*4882a593Smuzhiyun 		__entry->level = level;
2335*4882a593Smuzhiyun 		__entry->nlevels = cur->bc_nlevels;
2336*4882a593Smuzhiyun 		__entry->ptr = cur->bc_ptrs[level];
2337*4882a593Smuzhiyun 		__entry->daddr = bp ? bp->b_bn : -1;
2338*4882a593Smuzhiyun 	),
2339*4882a593Smuzhiyun 	TP_printk("dev %d:%d btree %s level %d/%d ptr %d daddr 0x%llx",
2340*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2341*4882a593Smuzhiyun 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
2342*4882a593Smuzhiyun 		  __entry->level,
2343*4882a593Smuzhiyun 		  __entry->nlevels,
2344*4882a593Smuzhiyun 		  __entry->ptr,
2345*4882a593Smuzhiyun 		  (unsigned long long)__entry->daddr)
2346*4882a593Smuzhiyun )
2347*4882a593Smuzhiyun 
2348*4882a593Smuzhiyun #define DEFINE_BTREE_CUR_EVENT(name) \
2349*4882a593Smuzhiyun DEFINE_EVENT(xfs_btree_cur_class, name, \
2350*4882a593Smuzhiyun 	TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \
2351*4882a593Smuzhiyun 	TP_ARGS(cur, level, bp))
2352*4882a593Smuzhiyun DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys);
2353*4882a593Smuzhiyun DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range);
2354*4882a593Smuzhiyun 
2355*4882a593Smuzhiyun /* deferred ops */
2356*4882a593Smuzhiyun struct xfs_defer_pending;
2357*4882a593Smuzhiyun 
2358*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_defer_class,
2359*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip),
2360*4882a593Smuzhiyun 	TP_ARGS(tp, caller_ip),
2361*4882a593Smuzhiyun 	TP_STRUCT__entry(
2362*4882a593Smuzhiyun 		__field(dev_t, dev)
2363*4882a593Smuzhiyun 		__field(struct xfs_trans *, tp)
2364*4882a593Smuzhiyun 		__field(char, committed)
2365*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
2366*4882a593Smuzhiyun 	),
2367*4882a593Smuzhiyun 	TP_fast_assign(
2368*4882a593Smuzhiyun 		__entry->dev = tp->t_mountp->m_super->s_dev;
2369*4882a593Smuzhiyun 		__entry->tp = tp;
2370*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
2371*4882a593Smuzhiyun 	),
2372*4882a593Smuzhiyun 	TP_printk("dev %d:%d tp %p caller %pS",
2373*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2374*4882a593Smuzhiyun 		  __entry->tp,
2375*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
2376*4882a593Smuzhiyun )
2377*4882a593Smuzhiyun #define DEFINE_DEFER_EVENT(name) \
2378*4882a593Smuzhiyun DEFINE_EVENT(xfs_defer_class, name, \
2379*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \
2380*4882a593Smuzhiyun 	TP_ARGS(tp, caller_ip))
2381*4882a593Smuzhiyun 
2382*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_defer_error_class,
2383*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, int error),
2384*4882a593Smuzhiyun 	TP_ARGS(tp, error),
2385*4882a593Smuzhiyun 	TP_STRUCT__entry(
2386*4882a593Smuzhiyun 		__field(dev_t, dev)
2387*4882a593Smuzhiyun 		__field(struct xfs_trans *, tp)
2388*4882a593Smuzhiyun 		__field(char, committed)
2389*4882a593Smuzhiyun 		__field(int, error)
2390*4882a593Smuzhiyun 	),
2391*4882a593Smuzhiyun 	TP_fast_assign(
2392*4882a593Smuzhiyun 		__entry->dev = tp->t_mountp->m_super->s_dev;
2393*4882a593Smuzhiyun 		__entry->tp = tp;
2394*4882a593Smuzhiyun 		__entry->error = error;
2395*4882a593Smuzhiyun 	),
2396*4882a593Smuzhiyun 	TP_printk("dev %d:%d tp %p err %d",
2397*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2398*4882a593Smuzhiyun 		  __entry->tp,
2399*4882a593Smuzhiyun 		  __entry->error)
2400*4882a593Smuzhiyun )
2401*4882a593Smuzhiyun #define DEFINE_DEFER_ERROR_EVENT(name) \
2402*4882a593Smuzhiyun DEFINE_EVENT(xfs_defer_error_class, name, \
2403*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, int error), \
2404*4882a593Smuzhiyun 	TP_ARGS(tp, error))
2405*4882a593Smuzhiyun 
2406*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_defer_pending_class,
2407*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp),
2408*4882a593Smuzhiyun 	TP_ARGS(mp, dfp),
2409*4882a593Smuzhiyun 	TP_STRUCT__entry(
2410*4882a593Smuzhiyun 		__field(dev_t, dev)
2411*4882a593Smuzhiyun 		__field(int, type)
2412*4882a593Smuzhiyun 		__field(void *, intent)
2413*4882a593Smuzhiyun 		__field(char, committed)
2414*4882a593Smuzhiyun 		__field(int, nr)
2415*4882a593Smuzhiyun 	),
2416*4882a593Smuzhiyun 	TP_fast_assign(
2417*4882a593Smuzhiyun 		__entry->dev = mp ? mp->m_super->s_dev : 0;
2418*4882a593Smuzhiyun 		__entry->type = dfp->dfp_type;
2419*4882a593Smuzhiyun 		__entry->intent = dfp->dfp_intent;
2420*4882a593Smuzhiyun 		__entry->committed = dfp->dfp_done != NULL;
2421*4882a593Smuzhiyun 		__entry->nr = dfp->dfp_count;
2422*4882a593Smuzhiyun 	),
2423*4882a593Smuzhiyun 	TP_printk("dev %d:%d optype %d intent %p committed %d nr %d",
2424*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2425*4882a593Smuzhiyun 		  __entry->type,
2426*4882a593Smuzhiyun 		  __entry->intent,
2427*4882a593Smuzhiyun 		  __entry->committed,
2428*4882a593Smuzhiyun 		  __entry->nr)
2429*4882a593Smuzhiyun )
2430*4882a593Smuzhiyun #define DEFINE_DEFER_PENDING_EVENT(name) \
2431*4882a593Smuzhiyun DEFINE_EVENT(xfs_defer_pending_class, name, \
2432*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), \
2433*4882a593Smuzhiyun 	TP_ARGS(mp, dfp))
2434*4882a593Smuzhiyun 
2435*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_phys_extent_deferred_class,
2436*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2437*4882a593Smuzhiyun 		 int type, xfs_agblock_t agbno, xfs_extlen_t len),
2438*4882a593Smuzhiyun 	TP_ARGS(mp, agno, type, agbno, len),
2439*4882a593Smuzhiyun 	TP_STRUCT__entry(
2440*4882a593Smuzhiyun 		__field(dev_t, dev)
2441*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2442*4882a593Smuzhiyun 		__field(int, type)
2443*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2444*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
2445*4882a593Smuzhiyun 	),
2446*4882a593Smuzhiyun 	TP_fast_assign(
2447*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2448*4882a593Smuzhiyun 		__entry->agno = agno;
2449*4882a593Smuzhiyun 		__entry->type = type;
2450*4882a593Smuzhiyun 		__entry->agbno = agbno;
2451*4882a593Smuzhiyun 		__entry->len = len;
2452*4882a593Smuzhiyun 	),
2453*4882a593Smuzhiyun 	TP_printk("dev %d:%d op %d agno %u agbno %u len %u",
2454*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2455*4882a593Smuzhiyun 		  __entry->type,
2456*4882a593Smuzhiyun 		  __entry->agno,
2457*4882a593Smuzhiyun 		  __entry->agbno,
2458*4882a593Smuzhiyun 		  __entry->len)
2459*4882a593Smuzhiyun );
2460*4882a593Smuzhiyun #define DEFINE_PHYS_EXTENT_DEFERRED_EVENT(name) \
2461*4882a593Smuzhiyun DEFINE_EVENT(xfs_phys_extent_deferred_class, name, \
2462*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2463*4882a593Smuzhiyun 		 int type, \
2464*4882a593Smuzhiyun 		 xfs_agblock_t bno, \
2465*4882a593Smuzhiyun 		 xfs_extlen_t len), \
2466*4882a593Smuzhiyun 	TP_ARGS(mp, agno, type, bno, len))
2467*4882a593Smuzhiyun 
2468*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_map_extent_deferred_class,
2469*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2470*4882a593Smuzhiyun 		 int op,
2471*4882a593Smuzhiyun 		 xfs_agblock_t agbno,
2472*4882a593Smuzhiyun 		 xfs_ino_t ino,
2473*4882a593Smuzhiyun 		 int whichfork,
2474*4882a593Smuzhiyun 		 xfs_fileoff_t offset,
2475*4882a593Smuzhiyun 		 xfs_filblks_t len,
2476*4882a593Smuzhiyun 		 xfs_exntst_t state),
2477*4882a593Smuzhiyun 	TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state),
2478*4882a593Smuzhiyun 	TP_STRUCT__entry(
2479*4882a593Smuzhiyun 		__field(dev_t, dev)
2480*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2481*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
2482*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2483*4882a593Smuzhiyun 		__field(int, whichfork)
2484*4882a593Smuzhiyun 		__field(xfs_fileoff_t, l_loff)
2485*4882a593Smuzhiyun 		__field(xfs_filblks_t, l_len)
2486*4882a593Smuzhiyun 		__field(xfs_exntst_t, l_state)
2487*4882a593Smuzhiyun 		__field(int, op)
2488*4882a593Smuzhiyun 	),
2489*4882a593Smuzhiyun 	TP_fast_assign(
2490*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2491*4882a593Smuzhiyun 		__entry->agno = agno;
2492*4882a593Smuzhiyun 		__entry->ino = ino;
2493*4882a593Smuzhiyun 		__entry->agbno = agbno;
2494*4882a593Smuzhiyun 		__entry->whichfork = whichfork;
2495*4882a593Smuzhiyun 		__entry->l_loff = offset;
2496*4882a593Smuzhiyun 		__entry->l_len = len;
2497*4882a593Smuzhiyun 		__entry->l_state = state;
2498*4882a593Smuzhiyun 		__entry->op = op;
2499*4882a593Smuzhiyun 	),
2500*4882a593Smuzhiyun 	TP_printk("dev %d:%d op %d agno %u agbno %u owner %lld %s offset %llu len %llu state %d",
2501*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2502*4882a593Smuzhiyun 		  __entry->op,
2503*4882a593Smuzhiyun 		  __entry->agno,
2504*4882a593Smuzhiyun 		  __entry->agbno,
2505*4882a593Smuzhiyun 		  __entry->ino,
2506*4882a593Smuzhiyun 		  __entry->whichfork == XFS_ATTR_FORK ? "attr" : "data",
2507*4882a593Smuzhiyun 		  __entry->l_loff,
2508*4882a593Smuzhiyun 		  __entry->l_len,
2509*4882a593Smuzhiyun 		  __entry->l_state)
2510*4882a593Smuzhiyun );
2511*4882a593Smuzhiyun #define DEFINE_MAP_EXTENT_DEFERRED_EVENT(name) \
2512*4882a593Smuzhiyun DEFINE_EVENT(xfs_map_extent_deferred_class, name, \
2513*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2514*4882a593Smuzhiyun 		 int op, \
2515*4882a593Smuzhiyun 		 xfs_agblock_t agbno, \
2516*4882a593Smuzhiyun 		 xfs_ino_t ino, \
2517*4882a593Smuzhiyun 		 int whichfork, \
2518*4882a593Smuzhiyun 		 xfs_fileoff_t offset, \
2519*4882a593Smuzhiyun 		 xfs_filblks_t len, \
2520*4882a593Smuzhiyun 		 xfs_exntst_t state), \
2521*4882a593Smuzhiyun 	TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state))
2522*4882a593Smuzhiyun 
2523*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_cancel);
2524*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_trans_roll);
2525*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_trans_abort);
2526*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_finish);
2527*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_finish_done);
2528*4882a593Smuzhiyun 
2529*4882a593Smuzhiyun DEFINE_DEFER_ERROR_EVENT(xfs_defer_trans_roll_error);
2530*4882a593Smuzhiyun DEFINE_DEFER_ERROR_EVENT(xfs_defer_finish_error);
2531*4882a593Smuzhiyun 
2532*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_create_intent);
2533*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_cancel_list);
2534*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish);
2535*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort);
2536*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_relog_intent);
2537*4882a593Smuzhiyun 
2538*4882a593Smuzhiyun #define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT
2539*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer);
2540*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred);
2541*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_defer);
2542*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_deferred);
2543*4882a593Smuzhiyun 
2544*4882a593Smuzhiyun /* rmap tracepoints */
2545*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_rmap_class,
2546*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2547*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten,
2548*4882a593Smuzhiyun 		 const struct xfs_owner_info *oinfo),
2549*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len, unwritten, oinfo),
2550*4882a593Smuzhiyun 	TP_STRUCT__entry(
2551*4882a593Smuzhiyun 		__field(dev_t, dev)
2552*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2553*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2554*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
2555*4882a593Smuzhiyun 		__field(uint64_t, owner)
2556*4882a593Smuzhiyun 		__field(uint64_t, offset)
2557*4882a593Smuzhiyun 		__field(unsigned long, flags)
2558*4882a593Smuzhiyun 	),
2559*4882a593Smuzhiyun 	TP_fast_assign(
2560*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2561*4882a593Smuzhiyun 		__entry->agno = agno;
2562*4882a593Smuzhiyun 		__entry->agbno = agbno;
2563*4882a593Smuzhiyun 		__entry->len = len;
2564*4882a593Smuzhiyun 		__entry->owner = oinfo->oi_owner;
2565*4882a593Smuzhiyun 		__entry->offset = oinfo->oi_offset;
2566*4882a593Smuzhiyun 		__entry->flags = oinfo->oi_flags;
2567*4882a593Smuzhiyun 		if (unwritten)
2568*4882a593Smuzhiyun 			__entry->flags |= XFS_RMAP_UNWRITTEN;
2569*4882a593Smuzhiyun 	),
2570*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%lx",
2571*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2572*4882a593Smuzhiyun 		  __entry->agno,
2573*4882a593Smuzhiyun 		  __entry->agbno,
2574*4882a593Smuzhiyun 		  __entry->len,
2575*4882a593Smuzhiyun 		  __entry->owner,
2576*4882a593Smuzhiyun 		  __entry->offset,
2577*4882a593Smuzhiyun 		  __entry->flags)
2578*4882a593Smuzhiyun );
2579*4882a593Smuzhiyun #define DEFINE_RMAP_EVENT(name) \
2580*4882a593Smuzhiyun DEFINE_EVENT(xfs_rmap_class, name, \
2581*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2582*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \
2583*4882a593Smuzhiyun 		 const struct xfs_owner_info *oinfo), \
2584*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len, unwritten, oinfo))
2585*4882a593Smuzhiyun 
2586*4882a593Smuzhiyun /* simple AG-based error/%ip tracepoint class */
2587*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_error_class,
2588*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error,
2589*4882a593Smuzhiyun 		 unsigned long caller_ip),
2590*4882a593Smuzhiyun 	TP_ARGS(mp, agno, error, caller_ip),
2591*4882a593Smuzhiyun 	TP_STRUCT__entry(
2592*4882a593Smuzhiyun 		__field(dev_t, dev)
2593*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2594*4882a593Smuzhiyun 		__field(int, error)
2595*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
2596*4882a593Smuzhiyun 	),
2597*4882a593Smuzhiyun 	TP_fast_assign(
2598*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2599*4882a593Smuzhiyun 		__entry->agno = agno;
2600*4882a593Smuzhiyun 		__entry->error = error;
2601*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
2602*4882a593Smuzhiyun 	),
2603*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u error %d caller %pS",
2604*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2605*4882a593Smuzhiyun 		  __entry->agno,
2606*4882a593Smuzhiyun 		  __entry->error,
2607*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
2608*4882a593Smuzhiyun );
2609*4882a593Smuzhiyun 
2610*4882a593Smuzhiyun #define DEFINE_AG_ERROR_EVENT(name) \
2611*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_error_class, name, \
2612*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \
2613*4882a593Smuzhiyun 		 unsigned long caller_ip), \
2614*4882a593Smuzhiyun 	TP_ARGS(mp, agno, error, caller_ip))
2615*4882a593Smuzhiyun 
2616*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_unmap);
2617*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_unmap_done);
2618*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_unmap_error);
2619*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_map);
2620*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_map_done);
2621*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_map_error);
2622*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_convert);
2623*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_convert_done);
2624*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_error);
2625*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_state);
2626*4882a593Smuzhiyun 
2627*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_rmapbt_class,
2628*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2629*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len,
2630*4882a593Smuzhiyun 		 uint64_t owner, uint64_t offset, unsigned int flags),
2631*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
2632*4882a593Smuzhiyun 	TP_STRUCT__entry(
2633*4882a593Smuzhiyun 		__field(dev_t, dev)
2634*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2635*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2636*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
2637*4882a593Smuzhiyun 		__field(uint64_t, owner)
2638*4882a593Smuzhiyun 		__field(uint64_t, offset)
2639*4882a593Smuzhiyun 		__field(unsigned int, flags)
2640*4882a593Smuzhiyun 	),
2641*4882a593Smuzhiyun 	TP_fast_assign(
2642*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2643*4882a593Smuzhiyun 		__entry->agno = agno;
2644*4882a593Smuzhiyun 		__entry->agbno = agbno;
2645*4882a593Smuzhiyun 		__entry->len = len;
2646*4882a593Smuzhiyun 		__entry->owner = owner;
2647*4882a593Smuzhiyun 		__entry->offset = offset;
2648*4882a593Smuzhiyun 		__entry->flags = flags;
2649*4882a593Smuzhiyun 	),
2650*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x",
2651*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2652*4882a593Smuzhiyun 		  __entry->agno,
2653*4882a593Smuzhiyun 		  __entry->agbno,
2654*4882a593Smuzhiyun 		  __entry->len,
2655*4882a593Smuzhiyun 		  __entry->owner,
2656*4882a593Smuzhiyun 		  __entry->offset,
2657*4882a593Smuzhiyun 		  __entry->flags)
2658*4882a593Smuzhiyun );
2659*4882a593Smuzhiyun #define DEFINE_RMAPBT_EVENT(name) \
2660*4882a593Smuzhiyun DEFINE_EVENT(xfs_rmapbt_class, name, \
2661*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2662*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_extlen_t len, \
2663*4882a593Smuzhiyun 		 uint64_t owner, uint64_t offset, unsigned int flags), \
2664*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
2665*4882a593Smuzhiyun 
2666*4882a593Smuzhiyun #define DEFINE_RMAP_DEFERRED_EVENT DEFINE_MAP_EXTENT_DEFERRED_EVENT
2667*4882a593Smuzhiyun DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer);
2668*4882a593Smuzhiyun DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred);
2669*4882a593Smuzhiyun 
2670*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_rmapbt_alloc_block);
2671*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_rmapbt_free_block);
2672*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_update);
2673*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_insert);
2674*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_delete);
2675*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_insert_error);
2676*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_delete_error);
2677*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_update_error);
2678*4882a593Smuzhiyun 
2679*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_candidate);
2680*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_query);
2681*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_candidate);
2682*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range);
2683*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_result);
2684*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_right_neighbor_result);
2685*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_result);
2686*4882a593Smuzhiyun 
2687*4882a593Smuzhiyun /* deferred bmbt updates */
2688*4882a593Smuzhiyun #define DEFINE_BMAP_DEFERRED_EVENT	DEFINE_RMAP_DEFERRED_EVENT
2689*4882a593Smuzhiyun DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_defer);
2690*4882a593Smuzhiyun DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred);
2691*4882a593Smuzhiyun 
2692*4882a593Smuzhiyun /* per-AG reservation */
2693*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_resv_class,
2694*4882a593Smuzhiyun 	TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type resv,
2695*4882a593Smuzhiyun 		 xfs_extlen_t len),
2696*4882a593Smuzhiyun 	TP_ARGS(pag, resv, len),
2697*4882a593Smuzhiyun 	TP_STRUCT__entry(
2698*4882a593Smuzhiyun 		__field(dev_t, dev)
2699*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2700*4882a593Smuzhiyun 		__field(int, resv)
2701*4882a593Smuzhiyun 		__field(xfs_extlen_t, freeblks)
2702*4882a593Smuzhiyun 		__field(xfs_extlen_t, flcount)
2703*4882a593Smuzhiyun 		__field(xfs_extlen_t, reserved)
2704*4882a593Smuzhiyun 		__field(xfs_extlen_t, asked)
2705*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
2706*4882a593Smuzhiyun 	),
2707*4882a593Smuzhiyun 	TP_fast_assign(
2708*4882a593Smuzhiyun 		struct xfs_ag_resv	*r = xfs_perag_resv(pag, resv);
2709*4882a593Smuzhiyun 
2710*4882a593Smuzhiyun 		__entry->dev = pag->pag_mount->m_super->s_dev;
2711*4882a593Smuzhiyun 		__entry->agno = pag->pag_agno;
2712*4882a593Smuzhiyun 		__entry->resv = resv;
2713*4882a593Smuzhiyun 		__entry->freeblks = pag->pagf_freeblks;
2714*4882a593Smuzhiyun 		__entry->flcount = pag->pagf_flcount;
2715*4882a593Smuzhiyun 		__entry->reserved = r ? r->ar_reserved : 0;
2716*4882a593Smuzhiyun 		__entry->asked = r ? r->ar_asked : 0;
2717*4882a593Smuzhiyun 		__entry->len = len;
2718*4882a593Smuzhiyun 	),
2719*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u resv %d freeblks %u flcount %u "
2720*4882a593Smuzhiyun 		  "resv %u ask %u len %u",
2721*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2722*4882a593Smuzhiyun 		  __entry->agno,
2723*4882a593Smuzhiyun 		  __entry->resv,
2724*4882a593Smuzhiyun 		  __entry->freeblks,
2725*4882a593Smuzhiyun 		  __entry->flcount,
2726*4882a593Smuzhiyun 		  __entry->reserved,
2727*4882a593Smuzhiyun 		  __entry->asked,
2728*4882a593Smuzhiyun 		  __entry->len)
2729*4882a593Smuzhiyun )
2730*4882a593Smuzhiyun #define DEFINE_AG_RESV_EVENT(name) \
2731*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_resv_class, name, \
2732*4882a593Smuzhiyun 	TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \
2733*4882a593Smuzhiyun 		 xfs_extlen_t len), \
2734*4882a593Smuzhiyun 	TP_ARGS(pag, type, len))
2735*4882a593Smuzhiyun 
2736*4882a593Smuzhiyun /* per-AG reservation tracepoints */
2737*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_init);
2738*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_free);
2739*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_alloc_extent);
2740*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_free_extent);
2741*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_critical);
2742*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_needed);
2743*4882a593Smuzhiyun 
2744*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_ag_resv_free_error);
2745*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_ag_resv_init_error);
2746*4882a593Smuzhiyun 
2747*4882a593Smuzhiyun /* refcount tracepoint classes */
2748*4882a593Smuzhiyun 
2749*4882a593Smuzhiyun /* reuse the discard trace class for agbno/aglen-based traces */
2750*4882a593Smuzhiyun #define DEFINE_AG_EXTENT_EVENT(name) DEFINE_DISCARD_EVENT(name)
2751*4882a593Smuzhiyun 
2752*4882a593Smuzhiyun /* ag btree lookup tracepoint class */
2753*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi);
2754*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi);
2755*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi);
2756*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_btree_lookup_class,
2757*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2758*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_lookup_t dir),
2759*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, dir),
2760*4882a593Smuzhiyun 	TP_STRUCT__entry(
2761*4882a593Smuzhiyun 		__field(dev_t, dev)
2762*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2763*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2764*4882a593Smuzhiyun 		__field(xfs_lookup_t, dir)
2765*4882a593Smuzhiyun 	),
2766*4882a593Smuzhiyun 	TP_fast_assign(
2767*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2768*4882a593Smuzhiyun 		__entry->agno = agno;
2769*4882a593Smuzhiyun 		__entry->agbno = agbno;
2770*4882a593Smuzhiyun 		__entry->dir = dir;
2771*4882a593Smuzhiyun 	),
2772*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u cmp %s(%d)",
2773*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2774*4882a593Smuzhiyun 		  __entry->agno,
2775*4882a593Smuzhiyun 		  __entry->agbno,
2776*4882a593Smuzhiyun 		  __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR),
2777*4882a593Smuzhiyun 		  __entry->dir)
2778*4882a593Smuzhiyun )
2779*4882a593Smuzhiyun 
2780*4882a593Smuzhiyun #define DEFINE_AG_BTREE_LOOKUP_EVENT(name) \
2781*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_btree_lookup_class, name, \
2782*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2783*4882a593Smuzhiyun 		 xfs_agblock_t agbno, xfs_lookup_t dir), \
2784*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agbno, dir))
2785*4882a593Smuzhiyun 
2786*4882a593Smuzhiyun /* single-rcext tracepoint class */
2787*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_extent_class,
2788*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2789*4882a593Smuzhiyun 		 struct xfs_refcount_irec *irec),
2790*4882a593Smuzhiyun 	TP_ARGS(mp, agno, irec),
2791*4882a593Smuzhiyun 	TP_STRUCT__entry(
2792*4882a593Smuzhiyun 		__field(dev_t, dev)
2793*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2794*4882a593Smuzhiyun 		__field(xfs_agblock_t, startblock)
2795*4882a593Smuzhiyun 		__field(xfs_extlen_t, blockcount)
2796*4882a593Smuzhiyun 		__field(xfs_nlink_t, refcount)
2797*4882a593Smuzhiyun 	),
2798*4882a593Smuzhiyun 	TP_fast_assign(
2799*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2800*4882a593Smuzhiyun 		__entry->agno = agno;
2801*4882a593Smuzhiyun 		__entry->startblock = irec->rc_startblock;
2802*4882a593Smuzhiyun 		__entry->blockcount = irec->rc_blockcount;
2803*4882a593Smuzhiyun 		__entry->refcount = irec->rc_refcount;
2804*4882a593Smuzhiyun 	),
2805*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u",
2806*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2807*4882a593Smuzhiyun 		  __entry->agno,
2808*4882a593Smuzhiyun 		  __entry->startblock,
2809*4882a593Smuzhiyun 		  __entry->blockcount,
2810*4882a593Smuzhiyun 		  __entry->refcount)
2811*4882a593Smuzhiyun )
2812*4882a593Smuzhiyun 
2813*4882a593Smuzhiyun #define DEFINE_REFCOUNT_EXTENT_EVENT(name) \
2814*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_extent_class, name, \
2815*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2816*4882a593Smuzhiyun 		 struct xfs_refcount_irec *irec), \
2817*4882a593Smuzhiyun 	TP_ARGS(mp, agno, irec))
2818*4882a593Smuzhiyun 
2819*4882a593Smuzhiyun /* single-rcext and an agbno tracepoint class */
2820*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class,
2821*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2822*4882a593Smuzhiyun 		 struct xfs_refcount_irec *irec, xfs_agblock_t agbno),
2823*4882a593Smuzhiyun 	TP_ARGS(mp, agno, irec, agbno),
2824*4882a593Smuzhiyun 	TP_STRUCT__entry(
2825*4882a593Smuzhiyun 		__field(dev_t, dev)
2826*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2827*4882a593Smuzhiyun 		__field(xfs_agblock_t, startblock)
2828*4882a593Smuzhiyun 		__field(xfs_extlen_t, blockcount)
2829*4882a593Smuzhiyun 		__field(xfs_nlink_t, refcount)
2830*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2831*4882a593Smuzhiyun 	),
2832*4882a593Smuzhiyun 	TP_fast_assign(
2833*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2834*4882a593Smuzhiyun 		__entry->agno = agno;
2835*4882a593Smuzhiyun 		__entry->startblock = irec->rc_startblock;
2836*4882a593Smuzhiyun 		__entry->blockcount = irec->rc_blockcount;
2837*4882a593Smuzhiyun 		__entry->refcount = irec->rc_refcount;
2838*4882a593Smuzhiyun 		__entry->agbno = agbno;
2839*4882a593Smuzhiyun 	),
2840*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u @ agbno %u",
2841*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2842*4882a593Smuzhiyun 		  __entry->agno,
2843*4882a593Smuzhiyun 		  __entry->startblock,
2844*4882a593Smuzhiyun 		  __entry->blockcount,
2845*4882a593Smuzhiyun 		  __entry->refcount,
2846*4882a593Smuzhiyun 		  __entry->agbno)
2847*4882a593Smuzhiyun )
2848*4882a593Smuzhiyun 
2849*4882a593Smuzhiyun #define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \
2850*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_extent_at_class, name, \
2851*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2852*4882a593Smuzhiyun 		 struct xfs_refcount_irec *irec, xfs_agblock_t agbno), \
2853*4882a593Smuzhiyun 	TP_ARGS(mp, agno, irec, agbno))
2854*4882a593Smuzhiyun 
2855*4882a593Smuzhiyun /* double-rcext tracepoint class */
2856*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,
2857*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2858*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2),
2859*4882a593Smuzhiyun 	TP_ARGS(mp, agno, i1, i2),
2860*4882a593Smuzhiyun 	TP_STRUCT__entry(
2861*4882a593Smuzhiyun 		__field(dev_t, dev)
2862*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2863*4882a593Smuzhiyun 		__field(xfs_agblock_t, i1_startblock)
2864*4882a593Smuzhiyun 		__field(xfs_extlen_t, i1_blockcount)
2865*4882a593Smuzhiyun 		__field(xfs_nlink_t, i1_refcount)
2866*4882a593Smuzhiyun 		__field(xfs_agblock_t, i2_startblock)
2867*4882a593Smuzhiyun 		__field(xfs_extlen_t, i2_blockcount)
2868*4882a593Smuzhiyun 		__field(xfs_nlink_t, i2_refcount)
2869*4882a593Smuzhiyun 	),
2870*4882a593Smuzhiyun 	TP_fast_assign(
2871*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2872*4882a593Smuzhiyun 		__entry->agno = agno;
2873*4882a593Smuzhiyun 		__entry->i1_startblock = i1->rc_startblock;
2874*4882a593Smuzhiyun 		__entry->i1_blockcount = i1->rc_blockcount;
2875*4882a593Smuzhiyun 		__entry->i1_refcount = i1->rc_refcount;
2876*4882a593Smuzhiyun 		__entry->i2_startblock = i2->rc_startblock;
2877*4882a593Smuzhiyun 		__entry->i2_blockcount = i2->rc_blockcount;
2878*4882a593Smuzhiyun 		__entry->i2_refcount = i2->rc_refcount;
2879*4882a593Smuzhiyun 	),
2880*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- "
2881*4882a593Smuzhiyun 		  "agbno %u len %u refcount %u",
2882*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2883*4882a593Smuzhiyun 		  __entry->agno,
2884*4882a593Smuzhiyun 		  __entry->i1_startblock,
2885*4882a593Smuzhiyun 		  __entry->i1_blockcount,
2886*4882a593Smuzhiyun 		  __entry->i1_refcount,
2887*4882a593Smuzhiyun 		  __entry->i2_startblock,
2888*4882a593Smuzhiyun 		  __entry->i2_blockcount,
2889*4882a593Smuzhiyun 		  __entry->i2_refcount)
2890*4882a593Smuzhiyun )
2891*4882a593Smuzhiyun 
2892*4882a593Smuzhiyun #define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \
2893*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_double_extent_class, name, \
2894*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2895*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), \
2896*4882a593Smuzhiyun 	TP_ARGS(mp, agno, i1, i2))
2897*4882a593Smuzhiyun 
2898*4882a593Smuzhiyun /* double-rcext and an agbno tracepoint class */
2899*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
2900*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2901*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2,
2902*4882a593Smuzhiyun 		 xfs_agblock_t agbno),
2903*4882a593Smuzhiyun 	TP_ARGS(mp, agno, i1, i2, agbno),
2904*4882a593Smuzhiyun 	TP_STRUCT__entry(
2905*4882a593Smuzhiyun 		__field(dev_t, dev)
2906*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2907*4882a593Smuzhiyun 		__field(xfs_agblock_t, i1_startblock)
2908*4882a593Smuzhiyun 		__field(xfs_extlen_t, i1_blockcount)
2909*4882a593Smuzhiyun 		__field(xfs_nlink_t, i1_refcount)
2910*4882a593Smuzhiyun 		__field(xfs_agblock_t, i2_startblock)
2911*4882a593Smuzhiyun 		__field(xfs_extlen_t, i2_blockcount)
2912*4882a593Smuzhiyun 		__field(xfs_nlink_t, i2_refcount)
2913*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
2914*4882a593Smuzhiyun 	),
2915*4882a593Smuzhiyun 	TP_fast_assign(
2916*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2917*4882a593Smuzhiyun 		__entry->agno = agno;
2918*4882a593Smuzhiyun 		__entry->i1_startblock = i1->rc_startblock;
2919*4882a593Smuzhiyun 		__entry->i1_blockcount = i1->rc_blockcount;
2920*4882a593Smuzhiyun 		__entry->i1_refcount = i1->rc_refcount;
2921*4882a593Smuzhiyun 		__entry->i2_startblock = i2->rc_startblock;
2922*4882a593Smuzhiyun 		__entry->i2_blockcount = i2->rc_blockcount;
2923*4882a593Smuzhiyun 		__entry->i2_refcount = i2->rc_refcount;
2924*4882a593Smuzhiyun 		__entry->agbno = agbno;
2925*4882a593Smuzhiyun 	),
2926*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- "
2927*4882a593Smuzhiyun 		  "agbno %u len %u refcount %u @ agbno %u",
2928*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2929*4882a593Smuzhiyun 		  __entry->agno,
2930*4882a593Smuzhiyun 		  __entry->i1_startblock,
2931*4882a593Smuzhiyun 		  __entry->i1_blockcount,
2932*4882a593Smuzhiyun 		  __entry->i1_refcount,
2933*4882a593Smuzhiyun 		  __entry->i2_startblock,
2934*4882a593Smuzhiyun 		  __entry->i2_blockcount,
2935*4882a593Smuzhiyun 		  __entry->i2_refcount,
2936*4882a593Smuzhiyun 		  __entry->agbno)
2937*4882a593Smuzhiyun )
2938*4882a593Smuzhiyun 
2939*4882a593Smuzhiyun #define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \
2940*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \
2941*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2942*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \
2943*4882a593Smuzhiyun 		 xfs_agblock_t agbno), \
2944*4882a593Smuzhiyun 	TP_ARGS(mp, agno, i1, i2, agbno))
2945*4882a593Smuzhiyun 
2946*4882a593Smuzhiyun /* triple-rcext tracepoint class */
2947*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
2948*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
2949*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2,
2950*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i3),
2951*4882a593Smuzhiyun 	TP_ARGS(mp, agno, i1, i2, i3),
2952*4882a593Smuzhiyun 	TP_STRUCT__entry(
2953*4882a593Smuzhiyun 		__field(dev_t, dev)
2954*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
2955*4882a593Smuzhiyun 		__field(xfs_agblock_t, i1_startblock)
2956*4882a593Smuzhiyun 		__field(xfs_extlen_t, i1_blockcount)
2957*4882a593Smuzhiyun 		__field(xfs_nlink_t, i1_refcount)
2958*4882a593Smuzhiyun 		__field(xfs_agblock_t, i2_startblock)
2959*4882a593Smuzhiyun 		__field(xfs_extlen_t, i2_blockcount)
2960*4882a593Smuzhiyun 		__field(xfs_nlink_t, i2_refcount)
2961*4882a593Smuzhiyun 		__field(xfs_agblock_t, i3_startblock)
2962*4882a593Smuzhiyun 		__field(xfs_extlen_t, i3_blockcount)
2963*4882a593Smuzhiyun 		__field(xfs_nlink_t, i3_refcount)
2964*4882a593Smuzhiyun 	),
2965*4882a593Smuzhiyun 	TP_fast_assign(
2966*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
2967*4882a593Smuzhiyun 		__entry->agno = agno;
2968*4882a593Smuzhiyun 		__entry->i1_startblock = i1->rc_startblock;
2969*4882a593Smuzhiyun 		__entry->i1_blockcount = i1->rc_blockcount;
2970*4882a593Smuzhiyun 		__entry->i1_refcount = i1->rc_refcount;
2971*4882a593Smuzhiyun 		__entry->i2_startblock = i2->rc_startblock;
2972*4882a593Smuzhiyun 		__entry->i2_blockcount = i2->rc_blockcount;
2973*4882a593Smuzhiyun 		__entry->i2_refcount = i2->rc_refcount;
2974*4882a593Smuzhiyun 		__entry->i3_startblock = i3->rc_startblock;
2975*4882a593Smuzhiyun 		__entry->i3_blockcount = i3->rc_blockcount;
2976*4882a593Smuzhiyun 		__entry->i3_refcount = i3->rc_refcount;
2977*4882a593Smuzhiyun 	),
2978*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- "
2979*4882a593Smuzhiyun 		  "agbno %u len %u refcount %u -- "
2980*4882a593Smuzhiyun 		  "agbno %u len %u refcount %u",
2981*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2982*4882a593Smuzhiyun 		  __entry->agno,
2983*4882a593Smuzhiyun 		  __entry->i1_startblock,
2984*4882a593Smuzhiyun 		  __entry->i1_blockcount,
2985*4882a593Smuzhiyun 		  __entry->i1_refcount,
2986*4882a593Smuzhiyun 		  __entry->i2_startblock,
2987*4882a593Smuzhiyun 		  __entry->i2_blockcount,
2988*4882a593Smuzhiyun 		  __entry->i2_refcount,
2989*4882a593Smuzhiyun 		  __entry->i3_startblock,
2990*4882a593Smuzhiyun 		  __entry->i3_blockcount,
2991*4882a593Smuzhiyun 		  __entry->i3_refcount)
2992*4882a593Smuzhiyun );
2993*4882a593Smuzhiyun 
2994*4882a593Smuzhiyun #define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \
2995*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \
2996*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2997*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \
2998*4882a593Smuzhiyun 		 struct xfs_refcount_irec *i3), \
2999*4882a593Smuzhiyun 	TP_ARGS(mp, agno, i1, i2, i3))
3000*4882a593Smuzhiyun 
3001*4882a593Smuzhiyun /* refcount btree tracepoints */
3002*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_refcountbt_alloc_block);
3003*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_refcountbt_free_block);
3004*4882a593Smuzhiyun DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcount_lookup);
3005*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get);
3006*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update);
3007*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_insert);
3008*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_delete);
3009*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_insert_error);
3010*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_delete_error);
3011*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_update_error);
3012*4882a593Smuzhiyun 
3013*4882a593Smuzhiyun /* refcount adjustment tracepoints */
3014*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_increase);
3015*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_decrease);
3016*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_increase);
3017*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_decrease);
3018*4882a593Smuzhiyun DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents);
3019*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent);
3020*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_recover_extent);
3021*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_extent);
3022*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent);
3023*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent);
3024*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent);
3025*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent);
3026*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_error);
3027*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_cow_error);
3028*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_center_extents_error);
3029*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_modify_extent_error);
3030*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_split_extent_error);
3031*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_left_extent_error);
3032*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_right_extent_error);
3033*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_find_left_extent_error);
3034*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_find_right_extent_error);
3035*4882a593Smuzhiyun 
3036*4882a593Smuzhiyun /* reflink helpers */
3037*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared);
3038*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared_result);
3039*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_find_shared_error);
3040*4882a593Smuzhiyun #define DEFINE_REFCOUNT_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT
3041*4882a593Smuzhiyun DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_defer);
3042*4882a593Smuzhiyun DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_deferred);
3043*4882a593Smuzhiyun 
3044*4882a593Smuzhiyun TRACE_EVENT(xfs_refcount_finish_one_leftover,
3045*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3046*4882a593Smuzhiyun 		 int type, xfs_agblock_t agbno, xfs_extlen_t len,
3047*4882a593Smuzhiyun 		 xfs_agblock_t new_agbno, xfs_extlen_t new_len),
3048*4882a593Smuzhiyun 	TP_ARGS(mp, agno, type, agbno, len, new_agbno, new_len),
3049*4882a593Smuzhiyun 	TP_STRUCT__entry(
3050*4882a593Smuzhiyun 		__field(dev_t, dev)
3051*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3052*4882a593Smuzhiyun 		__field(int, type)
3053*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
3054*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
3055*4882a593Smuzhiyun 		__field(xfs_agblock_t, new_agbno)
3056*4882a593Smuzhiyun 		__field(xfs_extlen_t, new_len)
3057*4882a593Smuzhiyun 	),
3058*4882a593Smuzhiyun 	TP_fast_assign(
3059*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3060*4882a593Smuzhiyun 		__entry->agno = agno;
3061*4882a593Smuzhiyun 		__entry->type = type;
3062*4882a593Smuzhiyun 		__entry->agbno = agbno;
3063*4882a593Smuzhiyun 		__entry->len = len;
3064*4882a593Smuzhiyun 		__entry->new_agbno = new_agbno;
3065*4882a593Smuzhiyun 		__entry->new_len = new_len;
3066*4882a593Smuzhiyun 	),
3067*4882a593Smuzhiyun 	TP_printk("dev %d:%d type %d agno %u agbno %u len %u new_agbno %u new_len %u",
3068*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3069*4882a593Smuzhiyun 		  __entry->type,
3070*4882a593Smuzhiyun 		  __entry->agno,
3071*4882a593Smuzhiyun 		  __entry->agbno,
3072*4882a593Smuzhiyun 		  __entry->len,
3073*4882a593Smuzhiyun 		  __entry->new_agbno,
3074*4882a593Smuzhiyun 		  __entry->new_len)
3075*4882a593Smuzhiyun );
3076*4882a593Smuzhiyun 
3077*4882a593Smuzhiyun /* simple inode-based error/%ip tracepoint class */
3078*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_error_class,
3079*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, int error, unsigned long caller_ip),
3080*4882a593Smuzhiyun 	TP_ARGS(ip, error, caller_ip),
3081*4882a593Smuzhiyun 	TP_STRUCT__entry(
3082*4882a593Smuzhiyun 		__field(dev_t, dev)
3083*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
3084*4882a593Smuzhiyun 		__field(int, error)
3085*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
3086*4882a593Smuzhiyun 	),
3087*4882a593Smuzhiyun 	TP_fast_assign(
3088*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
3089*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
3090*4882a593Smuzhiyun 		__entry->error = error;
3091*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
3092*4882a593Smuzhiyun 	),
3093*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino %llx error %d caller %pS",
3094*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3095*4882a593Smuzhiyun 		  __entry->ino,
3096*4882a593Smuzhiyun 		  __entry->error,
3097*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
3098*4882a593Smuzhiyun );
3099*4882a593Smuzhiyun 
3100*4882a593Smuzhiyun #define DEFINE_INODE_ERROR_EVENT(name) \
3101*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_error_class, name, \
3102*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, int error, \
3103*4882a593Smuzhiyun 		 unsigned long caller_ip), \
3104*4882a593Smuzhiyun 	TP_ARGS(ip, error, caller_ip))
3105*4882a593Smuzhiyun 
3106*4882a593Smuzhiyun /* reflink tracepoint classes */
3107*4882a593Smuzhiyun 
3108*4882a593Smuzhiyun /* two-file io tracepoint class */
3109*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_double_io_class,
3110*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len,
3111*4882a593Smuzhiyun 		 struct xfs_inode *dest, xfs_off_t doffset),
3112*4882a593Smuzhiyun 	TP_ARGS(src, soffset, len, dest, doffset),
3113*4882a593Smuzhiyun 	TP_STRUCT__entry(
3114*4882a593Smuzhiyun 		__field(dev_t, dev)
3115*4882a593Smuzhiyun 		__field(xfs_ino_t, src_ino)
3116*4882a593Smuzhiyun 		__field(loff_t, src_isize)
3117*4882a593Smuzhiyun 		__field(loff_t, src_disize)
3118*4882a593Smuzhiyun 		__field(loff_t, src_offset)
3119*4882a593Smuzhiyun 		__field(size_t, len)
3120*4882a593Smuzhiyun 		__field(xfs_ino_t, dest_ino)
3121*4882a593Smuzhiyun 		__field(loff_t, dest_isize)
3122*4882a593Smuzhiyun 		__field(loff_t, dest_disize)
3123*4882a593Smuzhiyun 		__field(loff_t, dest_offset)
3124*4882a593Smuzhiyun 	),
3125*4882a593Smuzhiyun 	TP_fast_assign(
3126*4882a593Smuzhiyun 		__entry->dev = VFS_I(src)->i_sb->s_dev;
3127*4882a593Smuzhiyun 		__entry->src_ino = src->i_ino;
3128*4882a593Smuzhiyun 		__entry->src_isize = VFS_I(src)->i_size;
3129*4882a593Smuzhiyun 		__entry->src_disize = src->i_d.di_size;
3130*4882a593Smuzhiyun 		__entry->src_offset = soffset;
3131*4882a593Smuzhiyun 		__entry->len = len;
3132*4882a593Smuzhiyun 		__entry->dest_ino = dest->i_ino;
3133*4882a593Smuzhiyun 		__entry->dest_isize = VFS_I(dest)->i_size;
3134*4882a593Smuzhiyun 		__entry->dest_disize = dest->i_d.di_size;
3135*4882a593Smuzhiyun 		__entry->dest_offset = doffset;
3136*4882a593Smuzhiyun 	),
3137*4882a593Smuzhiyun 	TP_printk("dev %d:%d count %zd "
3138*4882a593Smuzhiyun 		  "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx -> "
3139*4882a593Smuzhiyun 		  "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx",
3140*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3141*4882a593Smuzhiyun 		  __entry->len,
3142*4882a593Smuzhiyun 		  __entry->src_ino,
3143*4882a593Smuzhiyun 		  __entry->src_isize,
3144*4882a593Smuzhiyun 		  __entry->src_disize,
3145*4882a593Smuzhiyun 		  __entry->src_offset,
3146*4882a593Smuzhiyun 		  __entry->dest_ino,
3147*4882a593Smuzhiyun 		  __entry->dest_isize,
3148*4882a593Smuzhiyun 		  __entry->dest_disize,
3149*4882a593Smuzhiyun 		  __entry->dest_offset)
3150*4882a593Smuzhiyun )
3151*4882a593Smuzhiyun 
3152*4882a593Smuzhiyun #define DEFINE_DOUBLE_IO_EVENT(name)	\
3153*4882a593Smuzhiyun DEFINE_EVENT(xfs_double_io_class, name,	\
3154*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \
3155*4882a593Smuzhiyun 		 struct xfs_inode *dest, xfs_off_t doffset), \
3156*4882a593Smuzhiyun 	TP_ARGS(src, soffset, len, dest, doffset))
3157*4882a593Smuzhiyun 
3158*4882a593Smuzhiyun /* inode/irec events */
3159*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_irec_class,
3160*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec),
3161*4882a593Smuzhiyun 	TP_ARGS(ip, irec),
3162*4882a593Smuzhiyun 	TP_STRUCT__entry(
3163*4882a593Smuzhiyun 		__field(dev_t, dev)
3164*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
3165*4882a593Smuzhiyun 		__field(xfs_fileoff_t, lblk)
3166*4882a593Smuzhiyun 		__field(xfs_extlen_t, len)
3167*4882a593Smuzhiyun 		__field(xfs_fsblock_t, pblk)
3168*4882a593Smuzhiyun 		__field(int, state)
3169*4882a593Smuzhiyun 	),
3170*4882a593Smuzhiyun 	TP_fast_assign(
3171*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
3172*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
3173*4882a593Smuzhiyun 		__entry->lblk = irec->br_startoff;
3174*4882a593Smuzhiyun 		__entry->len = irec->br_blockcount;
3175*4882a593Smuzhiyun 		__entry->pblk = irec->br_startblock;
3176*4882a593Smuzhiyun 		__entry->state = irec->br_state;
3177*4882a593Smuzhiyun 	),
3178*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x pblk %llu st %d",
3179*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3180*4882a593Smuzhiyun 		  __entry->ino,
3181*4882a593Smuzhiyun 		  __entry->lblk,
3182*4882a593Smuzhiyun 		  __entry->len,
3183*4882a593Smuzhiyun 		  __entry->pblk,
3184*4882a593Smuzhiyun 		  __entry->state)
3185*4882a593Smuzhiyun );
3186*4882a593Smuzhiyun #define DEFINE_INODE_IREC_EVENT(name) \
3187*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_irec_class, name, \
3188*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), \
3189*4882a593Smuzhiyun 	TP_ARGS(ip, irec))
3190*4882a593Smuzhiyun 
3191*4882a593Smuzhiyun /* refcount/reflink tracepoint definitions */
3192*4882a593Smuzhiyun 
3193*4882a593Smuzhiyun /* reflink tracepoints */
3194*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag);
3195*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_reflink_unset_inode_flag);
3196*4882a593Smuzhiyun DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size);
3197*4882a593Smuzhiyun TRACE_EVENT(xfs_reflink_remap_blocks,
3198*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *src, xfs_fileoff_t soffset,
3199*4882a593Smuzhiyun 		 xfs_filblks_t len, struct xfs_inode *dest,
3200*4882a593Smuzhiyun 		 xfs_fileoff_t doffset),
3201*4882a593Smuzhiyun 	TP_ARGS(src, soffset, len, dest, doffset),
3202*4882a593Smuzhiyun 	TP_STRUCT__entry(
3203*4882a593Smuzhiyun 		__field(dev_t, dev)
3204*4882a593Smuzhiyun 		__field(xfs_ino_t, src_ino)
3205*4882a593Smuzhiyun 		__field(xfs_fileoff_t, src_lblk)
3206*4882a593Smuzhiyun 		__field(xfs_filblks_t, len)
3207*4882a593Smuzhiyun 		__field(xfs_ino_t, dest_ino)
3208*4882a593Smuzhiyun 		__field(xfs_fileoff_t, dest_lblk)
3209*4882a593Smuzhiyun 	),
3210*4882a593Smuzhiyun 	TP_fast_assign(
3211*4882a593Smuzhiyun 		__entry->dev = VFS_I(src)->i_sb->s_dev;
3212*4882a593Smuzhiyun 		__entry->src_ino = src->i_ino;
3213*4882a593Smuzhiyun 		__entry->src_lblk = soffset;
3214*4882a593Smuzhiyun 		__entry->len = len;
3215*4882a593Smuzhiyun 		__entry->dest_ino = dest->i_ino;
3216*4882a593Smuzhiyun 		__entry->dest_lblk = doffset;
3217*4882a593Smuzhiyun 	),
3218*4882a593Smuzhiyun 	TP_printk("dev %d:%d len 0x%llx "
3219*4882a593Smuzhiyun 		  "ino 0x%llx offset 0x%llx blocks -> "
3220*4882a593Smuzhiyun 		  "ino 0x%llx offset 0x%llx blocks",
3221*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3222*4882a593Smuzhiyun 		  __entry->len,
3223*4882a593Smuzhiyun 		  __entry->src_ino,
3224*4882a593Smuzhiyun 		  __entry->src_lblk,
3225*4882a593Smuzhiyun 		  __entry->dest_ino,
3226*4882a593Smuzhiyun 		  __entry->dest_lblk)
3227*4882a593Smuzhiyun );
3228*4882a593Smuzhiyun DEFINE_DOUBLE_IO_EVENT(xfs_reflink_remap_range);
3229*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error);
3230*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error);
3231*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error);
3232*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_blocks_error);
3233*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_extent_error);
3234*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_src);
3235*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_dest);
3236*4882a593Smuzhiyun 
3237*4882a593Smuzhiyun /* dedupe tracepoints */
3238*4882a593Smuzhiyun DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents);
3239*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error);
3240*4882a593Smuzhiyun 
3241*4882a593Smuzhiyun /* ioctl tracepoints */
3242*4882a593Smuzhiyun TRACE_EVENT(xfs_ioctl_clone,
3243*4882a593Smuzhiyun 	TP_PROTO(struct inode *src, struct inode *dest),
3244*4882a593Smuzhiyun 	TP_ARGS(src, dest),
3245*4882a593Smuzhiyun 	TP_STRUCT__entry(
3246*4882a593Smuzhiyun 		__field(dev_t, dev)
3247*4882a593Smuzhiyun 		__field(unsigned long, src_ino)
3248*4882a593Smuzhiyun 		__field(loff_t, src_isize)
3249*4882a593Smuzhiyun 		__field(unsigned long, dest_ino)
3250*4882a593Smuzhiyun 		__field(loff_t, dest_isize)
3251*4882a593Smuzhiyun 	),
3252*4882a593Smuzhiyun 	TP_fast_assign(
3253*4882a593Smuzhiyun 		__entry->dev = src->i_sb->s_dev;
3254*4882a593Smuzhiyun 		__entry->src_ino = src->i_ino;
3255*4882a593Smuzhiyun 		__entry->src_isize = i_size_read(src);
3256*4882a593Smuzhiyun 		__entry->dest_ino = dest->i_ino;
3257*4882a593Smuzhiyun 		__entry->dest_isize = i_size_read(dest);
3258*4882a593Smuzhiyun 	),
3259*4882a593Smuzhiyun 	TP_printk("dev %d:%d "
3260*4882a593Smuzhiyun 		  "ino 0x%lx isize 0x%llx -> "
3261*4882a593Smuzhiyun 		  "ino 0x%lx isize 0x%llx",
3262*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3263*4882a593Smuzhiyun 		  __entry->src_ino,
3264*4882a593Smuzhiyun 		  __entry->src_isize,
3265*4882a593Smuzhiyun 		  __entry->dest_ino,
3266*4882a593Smuzhiyun 		  __entry->dest_isize)
3267*4882a593Smuzhiyun );
3268*4882a593Smuzhiyun 
3269*4882a593Smuzhiyun /* unshare tracepoints */
3270*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_unshare);
3271*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_unshare_error);
3272*4882a593Smuzhiyun 
3273*4882a593Smuzhiyun /* copy on write */
3274*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_trim_around_shared);
3275*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_found);
3276*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc);
3277*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_convert_cow);
3278*4882a593Smuzhiyun 
3279*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_bounce_dio_write);
3280*4882a593Smuzhiyun 
3281*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_cancel_cow_range);
3282*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_end_cow);
3283*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap);
3284*4882a593Smuzhiyun 
3285*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_cancel_cow_range_error);
3286*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_cow_error);
3287*4882a593Smuzhiyun 
3288*4882a593Smuzhiyun 
3289*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cancel_cow);
3290*4882a593Smuzhiyun 
3291*4882a593Smuzhiyun /* rmap swapext tracepoints */
3292*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap);
3293*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap_piece);
3294*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error);
3295*4882a593Smuzhiyun 
3296*4882a593Smuzhiyun /* fsmap traces */
3297*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_fsmap_class,
3298*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno,
3299*4882a593Smuzhiyun 		 struct xfs_rmap_irec *rmap),
3300*4882a593Smuzhiyun 	TP_ARGS(mp, keydev, agno, rmap),
3301*4882a593Smuzhiyun 	TP_STRUCT__entry(
3302*4882a593Smuzhiyun 		__field(dev_t, dev)
3303*4882a593Smuzhiyun 		__field(dev_t, keydev)
3304*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3305*4882a593Smuzhiyun 		__field(xfs_fsblock_t, bno)
3306*4882a593Smuzhiyun 		__field(xfs_filblks_t, len)
3307*4882a593Smuzhiyun 		__field(uint64_t, owner)
3308*4882a593Smuzhiyun 		__field(uint64_t, offset)
3309*4882a593Smuzhiyun 		__field(unsigned int, flags)
3310*4882a593Smuzhiyun 	),
3311*4882a593Smuzhiyun 	TP_fast_assign(
3312*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3313*4882a593Smuzhiyun 		__entry->keydev = new_decode_dev(keydev);
3314*4882a593Smuzhiyun 		__entry->agno = agno;
3315*4882a593Smuzhiyun 		__entry->bno = rmap->rm_startblock;
3316*4882a593Smuzhiyun 		__entry->len = rmap->rm_blockcount;
3317*4882a593Smuzhiyun 		__entry->owner = rmap->rm_owner;
3318*4882a593Smuzhiyun 		__entry->offset = rmap->rm_offset;
3319*4882a593Smuzhiyun 		__entry->flags = rmap->rm_flags;
3320*4882a593Smuzhiyun 	),
3321*4882a593Smuzhiyun 	TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld offset %llu flags 0x%x",
3322*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3323*4882a593Smuzhiyun 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
3324*4882a593Smuzhiyun 		  __entry->agno,
3325*4882a593Smuzhiyun 		  __entry->bno,
3326*4882a593Smuzhiyun 		  __entry->len,
3327*4882a593Smuzhiyun 		  __entry->owner,
3328*4882a593Smuzhiyun 		  __entry->offset,
3329*4882a593Smuzhiyun 		  __entry->flags)
3330*4882a593Smuzhiyun )
3331*4882a593Smuzhiyun #define DEFINE_FSMAP_EVENT(name) \
3332*4882a593Smuzhiyun DEFINE_EVENT(xfs_fsmap_class, name, \
3333*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \
3334*4882a593Smuzhiyun 		 struct xfs_rmap_irec *rmap), \
3335*4882a593Smuzhiyun 	TP_ARGS(mp, keydev, agno, rmap))
3336*4882a593Smuzhiyun DEFINE_FSMAP_EVENT(xfs_fsmap_low_key);
3337*4882a593Smuzhiyun DEFINE_FSMAP_EVENT(xfs_fsmap_high_key);
3338*4882a593Smuzhiyun DEFINE_FSMAP_EVENT(xfs_fsmap_mapping);
3339*4882a593Smuzhiyun 
3340*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_getfsmap_class,
3341*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap),
3342*4882a593Smuzhiyun 	TP_ARGS(mp, fsmap),
3343*4882a593Smuzhiyun 	TP_STRUCT__entry(
3344*4882a593Smuzhiyun 		__field(dev_t, dev)
3345*4882a593Smuzhiyun 		__field(dev_t, keydev)
3346*4882a593Smuzhiyun 		__field(xfs_daddr_t, block)
3347*4882a593Smuzhiyun 		__field(xfs_daddr_t, len)
3348*4882a593Smuzhiyun 		__field(uint64_t, owner)
3349*4882a593Smuzhiyun 		__field(uint64_t, offset)
3350*4882a593Smuzhiyun 		__field(uint64_t, flags)
3351*4882a593Smuzhiyun 	),
3352*4882a593Smuzhiyun 	TP_fast_assign(
3353*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3354*4882a593Smuzhiyun 		__entry->keydev = new_decode_dev(fsmap->fmr_device);
3355*4882a593Smuzhiyun 		__entry->block = fsmap->fmr_physical;
3356*4882a593Smuzhiyun 		__entry->len = fsmap->fmr_length;
3357*4882a593Smuzhiyun 		__entry->owner = fsmap->fmr_owner;
3358*4882a593Smuzhiyun 		__entry->offset = fsmap->fmr_offset;
3359*4882a593Smuzhiyun 		__entry->flags = fsmap->fmr_flags;
3360*4882a593Smuzhiyun 	),
3361*4882a593Smuzhiyun 	TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld offset %llu flags 0x%llx",
3362*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3363*4882a593Smuzhiyun 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
3364*4882a593Smuzhiyun 		  __entry->block,
3365*4882a593Smuzhiyun 		  __entry->len,
3366*4882a593Smuzhiyun 		  __entry->owner,
3367*4882a593Smuzhiyun 		  __entry->offset,
3368*4882a593Smuzhiyun 		  __entry->flags)
3369*4882a593Smuzhiyun )
3370*4882a593Smuzhiyun #define DEFINE_GETFSMAP_EVENT(name) \
3371*4882a593Smuzhiyun DEFINE_EVENT(xfs_getfsmap_class, name, \
3372*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), \
3373*4882a593Smuzhiyun 	TP_ARGS(mp, fsmap))
3374*4882a593Smuzhiyun DEFINE_GETFSMAP_EVENT(xfs_getfsmap_low_key);
3375*4882a593Smuzhiyun DEFINE_GETFSMAP_EVENT(xfs_getfsmap_high_key);
3376*4882a593Smuzhiyun DEFINE_GETFSMAP_EVENT(xfs_getfsmap_mapping);
3377*4882a593Smuzhiyun 
3378*4882a593Smuzhiyun TRACE_EVENT(xfs_trans_resv_calc,
3379*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, unsigned int type,
3380*4882a593Smuzhiyun 		 struct xfs_trans_res *res),
3381*4882a593Smuzhiyun 	TP_ARGS(mp, type, res),
3382*4882a593Smuzhiyun 	TP_STRUCT__entry(
3383*4882a593Smuzhiyun 		__field(dev_t, dev)
3384*4882a593Smuzhiyun 		__field(int, type)
3385*4882a593Smuzhiyun 		__field(uint, logres)
3386*4882a593Smuzhiyun 		__field(int, logcount)
3387*4882a593Smuzhiyun 		__field(int, logflags)
3388*4882a593Smuzhiyun 	),
3389*4882a593Smuzhiyun 	TP_fast_assign(
3390*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3391*4882a593Smuzhiyun 		__entry->type = type;
3392*4882a593Smuzhiyun 		__entry->logres = res->tr_logres;
3393*4882a593Smuzhiyun 		__entry->logcount = res->tr_logcount;
3394*4882a593Smuzhiyun 		__entry->logflags = res->tr_logflags;
3395*4882a593Smuzhiyun 	),
3396*4882a593Smuzhiyun 	TP_printk("dev %d:%d type %d logres %u logcount %d flags 0x%x",
3397*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3398*4882a593Smuzhiyun 		  __entry->type,
3399*4882a593Smuzhiyun 		  __entry->logres,
3400*4882a593Smuzhiyun 		  __entry->logcount,
3401*4882a593Smuzhiyun 		  __entry->logflags)
3402*4882a593Smuzhiyun );
3403*4882a593Smuzhiyun 
3404*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_trans_class,
3405*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip),
3406*4882a593Smuzhiyun 	TP_ARGS(tp, caller_ip),
3407*4882a593Smuzhiyun 	TP_STRUCT__entry(
3408*4882a593Smuzhiyun 		__field(dev_t, dev)
3409*4882a593Smuzhiyun 		__field(uint32_t, tid)
3410*4882a593Smuzhiyun 		__field(uint32_t, flags)
3411*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
3412*4882a593Smuzhiyun 	),
3413*4882a593Smuzhiyun 	TP_fast_assign(
3414*4882a593Smuzhiyun 		__entry->dev = tp->t_mountp->m_super->s_dev;
3415*4882a593Smuzhiyun 		__entry->tid = 0;
3416*4882a593Smuzhiyun 		if (tp->t_ticket)
3417*4882a593Smuzhiyun 			__entry->tid = tp->t_ticket->t_tid;
3418*4882a593Smuzhiyun 		__entry->flags = tp->t_flags;
3419*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
3420*4882a593Smuzhiyun 	),
3421*4882a593Smuzhiyun 	TP_printk("dev %d:%d trans %x flags 0x%x caller %pS",
3422*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3423*4882a593Smuzhiyun 		  __entry->tid,
3424*4882a593Smuzhiyun 		  __entry->flags,
3425*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
3426*4882a593Smuzhiyun )
3427*4882a593Smuzhiyun 
3428*4882a593Smuzhiyun #define DEFINE_TRANS_EVENT(name) \
3429*4882a593Smuzhiyun DEFINE_EVENT(xfs_trans_class, name, \
3430*4882a593Smuzhiyun 	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \
3431*4882a593Smuzhiyun 	TP_ARGS(tp, caller_ip))
3432*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_alloc);
3433*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_cancel);
3434*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_commit);
3435*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_dup);
3436*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_free);
3437*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_roll);
3438*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_add_item);
3439*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_commit_items);
3440*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_free_items);
3441*4882a593Smuzhiyun 
3442*4882a593Smuzhiyun TRACE_EVENT(xfs_iunlink_update_bucket,
3443*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int bucket,
3444*4882a593Smuzhiyun 		 xfs_agino_t old_ptr, xfs_agino_t new_ptr),
3445*4882a593Smuzhiyun 	TP_ARGS(mp, agno, bucket, old_ptr, new_ptr),
3446*4882a593Smuzhiyun 	TP_STRUCT__entry(
3447*4882a593Smuzhiyun 		__field(dev_t, dev)
3448*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3449*4882a593Smuzhiyun 		__field(unsigned int, bucket)
3450*4882a593Smuzhiyun 		__field(xfs_agino_t, old_ptr)
3451*4882a593Smuzhiyun 		__field(xfs_agino_t, new_ptr)
3452*4882a593Smuzhiyun 	),
3453*4882a593Smuzhiyun 	TP_fast_assign(
3454*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3455*4882a593Smuzhiyun 		__entry->agno = agno;
3456*4882a593Smuzhiyun 		__entry->bucket = bucket;
3457*4882a593Smuzhiyun 		__entry->old_ptr = old_ptr;
3458*4882a593Smuzhiyun 		__entry->new_ptr = new_ptr;
3459*4882a593Smuzhiyun 	),
3460*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u bucket %u old 0x%x new 0x%x",
3461*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3462*4882a593Smuzhiyun 		  __entry->agno,
3463*4882a593Smuzhiyun 		  __entry->bucket,
3464*4882a593Smuzhiyun 		  __entry->old_ptr,
3465*4882a593Smuzhiyun 		  __entry->new_ptr)
3466*4882a593Smuzhiyun );
3467*4882a593Smuzhiyun 
3468*4882a593Smuzhiyun TRACE_EVENT(xfs_iunlink_update_dinode,
3469*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,
3470*4882a593Smuzhiyun 		 xfs_agino_t old_ptr, xfs_agino_t new_ptr),
3471*4882a593Smuzhiyun 	TP_ARGS(mp, agno, agino, old_ptr, new_ptr),
3472*4882a593Smuzhiyun 	TP_STRUCT__entry(
3473*4882a593Smuzhiyun 		__field(dev_t, dev)
3474*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3475*4882a593Smuzhiyun 		__field(xfs_agino_t, agino)
3476*4882a593Smuzhiyun 		__field(xfs_agino_t, old_ptr)
3477*4882a593Smuzhiyun 		__field(xfs_agino_t, new_ptr)
3478*4882a593Smuzhiyun 	),
3479*4882a593Smuzhiyun 	TP_fast_assign(
3480*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3481*4882a593Smuzhiyun 		__entry->agno = agno;
3482*4882a593Smuzhiyun 		__entry->agino = agino;
3483*4882a593Smuzhiyun 		__entry->old_ptr = old_ptr;
3484*4882a593Smuzhiyun 		__entry->new_ptr = new_ptr;
3485*4882a593Smuzhiyun 	),
3486*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agino 0x%x old 0x%x new 0x%x",
3487*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3488*4882a593Smuzhiyun 		  __entry->agno,
3489*4882a593Smuzhiyun 		  __entry->agino,
3490*4882a593Smuzhiyun 		  __entry->old_ptr,
3491*4882a593Smuzhiyun 		  __entry->new_ptr)
3492*4882a593Smuzhiyun );
3493*4882a593Smuzhiyun 
3494*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_inode_class,
3495*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip),
3496*4882a593Smuzhiyun 	TP_ARGS(ip),
3497*4882a593Smuzhiyun 	TP_STRUCT__entry(
3498*4882a593Smuzhiyun 		__field(dev_t, dev)
3499*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3500*4882a593Smuzhiyun 		__field(xfs_agino_t, agino)
3501*4882a593Smuzhiyun 	),
3502*4882a593Smuzhiyun 	TP_fast_assign(
3503*4882a593Smuzhiyun 		__entry->dev = VFS_I(ip)->i_sb->s_dev;
3504*4882a593Smuzhiyun 		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3505*4882a593Smuzhiyun 		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3506*4882a593Smuzhiyun 	),
3507*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u agino %u",
3508*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3509*4882a593Smuzhiyun 		  __entry->agno, __entry->agino)
3510*4882a593Smuzhiyun )
3511*4882a593Smuzhiyun 
3512*4882a593Smuzhiyun #define DEFINE_AGINODE_EVENT(name) \
3513*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_inode_class, name, \
3514*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip), \
3515*4882a593Smuzhiyun 	TP_ARGS(ip))
3516*4882a593Smuzhiyun DEFINE_AGINODE_EVENT(xfs_iunlink);
3517*4882a593Smuzhiyun DEFINE_AGINODE_EVENT(xfs_iunlink_remove);
3518*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_iunlink_map_prev_fallback);
3519*4882a593Smuzhiyun 
3520*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_fs_corrupt_class,
3521*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, unsigned int flags),
3522*4882a593Smuzhiyun 	TP_ARGS(mp, flags),
3523*4882a593Smuzhiyun 	TP_STRUCT__entry(
3524*4882a593Smuzhiyun 		__field(dev_t, dev)
3525*4882a593Smuzhiyun 		__field(unsigned int, flags)
3526*4882a593Smuzhiyun 	),
3527*4882a593Smuzhiyun 	TP_fast_assign(
3528*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3529*4882a593Smuzhiyun 		__entry->flags = flags;
3530*4882a593Smuzhiyun 	),
3531*4882a593Smuzhiyun 	TP_printk("dev %d:%d flags 0x%x",
3532*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3533*4882a593Smuzhiyun 		  __entry->flags)
3534*4882a593Smuzhiyun );
3535*4882a593Smuzhiyun #define DEFINE_FS_CORRUPT_EVENT(name)	\
3536*4882a593Smuzhiyun DEFINE_EVENT(xfs_fs_corrupt_class, name,	\
3537*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, unsigned int flags), \
3538*4882a593Smuzhiyun 	TP_ARGS(mp, flags))
3539*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_sick);
3540*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_healthy);
3541*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_fs_unfixed_corruption);
3542*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_sick);
3543*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_healthy);
3544*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_rt_unfixed_corruption);
3545*4882a593Smuzhiyun 
3546*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_corrupt_class,
3547*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int flags),
3548*4882a593Smuzhiyun 	TP_ARGS(mp, agno, flags),
3549*4882a593Smuzhiyun 	TP_STRUCT__entry(
3550*4882a593Smuzhiyun 		__field(dev_t, dev)
3551*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3552*4882a593Smuzhiyun 		__field(unsigned int, flags)
3553*4882a593Smuzhiyun 	),
3554*4882a593Smuzhiyun 	TP_fast_assign(
3555*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3556*4882a593Smuzhiyun 		__entry->agno = agno;
3557*4882a593Smuzhiyun 		__entry->flags = flags;
3558*4882a593Smuzhiyun 	),
3559*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %u flags 0x%x",
3560*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3561*4882a593Smuzhiyun 		  __entry->agno, __entry->flags)
3562*4882a593Smuzhiyun );
3563*4882a593Smuzhiyun #define DEFINE_AG_CORRUPT_EVENT(name)	\
3564*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_corrupt_class, name,	\
3565*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
3566*4882a593Smuzhiyun 		 unsigned int flags), \
3567*4882a593Smuzhiyun 	TP_ARGS(mp, agno, flags))
3568*4882a593Smuzhiyun DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_sick);
3569*4882a593Smuzhiyun DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_healthy);
3570*4882a593Smuzhiyun DEFINE_AG_CORRUPT_EVENT(xfs_ag_unfixed_corruption);
3571*4882a593Smuzhiyun 
3572*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_corrupt_class,
3573*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, unsigned int flags),
3574*4882a593Smuzhiyun 	TP_ARGS(ip, flags),
3575*4882a593Smuzhiyun 	TP_STRUCT__entry(
3576*4882a593Smuzhiyun 		__field(dev_t, dev)
3577*4882a593Smuzhiyun 		__field(xfs_ino_t, ino)
3578*4882a593Smuzhiyun 		__field(unsigned int, flags)
3579*4882a593Smuzhiyun 	),
3580*4882a593Smuzhiyun 	TP_fast_assign(
3581*4882a593Smuzhiyun 		__entry->dev = ip->i_mount->m_super->s_dev;
3582*4882a593Smuzhiyun 		__entry->ino = ip->i_ino;
3583*4882a593Smuzhiyun 		__entry->flags = flags;
3584*4882a593Smuzhiyun 	),
3585*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx flags 0x%x",
3586*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3587*4882a593Smuzhiyun 		  __entry->ino, __entry->flags)
3588*4882a593Smuzhiyun );
3589*4882a593Smuzhiyun #define DEFINE_INODE_CORRUPT_EVENT(name)	\
3590*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_corrupt_class, name,	\
3591*4882a593Smuzhiyun 	TP_PROTO(struct xfs_inode *ip, unsigned int flags), \
3592*4882a593Smuzhiyun 	TP_ARGS(ip, flags))
3593*4882a593Smuzhiyun DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_sick);
3594*4882a593Smuzhiyun DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_healthy);
3595*4882a593Smuzhiyun 
3596*4882a593Smuzhiyun TRACE_EVENT(xfs_iwalk_ag,
3597*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3598*4882a593Smuzhiyun 		 xfs_agino_t startino),
3599*4882a593Smuzhiyun 	TP_ARGS(mp, agno, startino),
3600*4882a593Smuzhiyun 	TP_STRUCT__entry(
3601*4882a593Smuzhiyun 		__field(dev_t, dev)
3602*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3603*4882a593Smuzhiyun 		__field(xfs_agino_t, startino)
3604*4882a593Smuzhiyun 	),
3605*4882a593Smuzhiyun 	TP_fast_assign(
3606*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3607*4882a593Smuzhiyun 		__entry->agno = agno;
3608*4882a593Smuzhiyun 		__entry->startino = startino;
3609*4882a593Smuzhiyun 	),
3610*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %d startino %u",
3611*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,
3612*4882a593Smuzhiyun 		  __entry->startino)
3613*4882a593Smuzhiyun )
3614*4882a593Smuzhiyun 
3615*4882a593Smuzhiyun TRACE_EVENT(xfs_iwalk_ag_rec,
3616*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
3617*4882a593Smuzhiyun 		 struct xfs_inobt_rec_incore *irec),
3618*4882a593Smuzhiyun 	TP_ARGS(mp, agno, irec),
3619*4882a593Smuzhiyun 	TP_STRUCT__entry(
3620*4882a593Smuzhiyun 		__field(dev_t, dev)
3621*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3622*4882a593Smuzhiyun 		__field(xfs_agino_t, startino)
3623*4882a593Smuzhiyun 		__field(uint64_t, freemask)
3624*4882a593Smuzhiyun 	),
3625*4882a593Smuzhiyun 	TP_fast_assign(
3626*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3627*4882a593Smuzhiyun 		__entry->agno = agno;
3628*4882a593Smuzhiyun 		__entry->startino = irec->ir_startino;
3629*4882a593Smuzhiyun 		__entry->freemask = irec->ir_free;
3630*4882a593Smuzhiyun 	),
3631*4882a593Smuzhiyun 	TP_printk("dev %d:%d agno %d startino %u freemask 0x%llx",
3632*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,
3633*4882a593Smuzhiyun 		  __entry->startino, __entry->freemask)
3634*4882a593Smuzhiyun )
3635*4882a593Smuzhiyun 
3636*4882a593Smuzhiyun TRACE_EVENT(xfs_pwork_init,
3637*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, unsigned int nr_threads, pid_t pid),
3638*4882a593Smuzhiyun 	TP_ARGS(mp, nr_threads, pid),
3639*4882a593Smuzhiyun 	TP_STRUCT__entry(
3640*4882a593Smuzhiyun 		__field(dev_t, dev)
3641*4882a593Smuzhiyun 		__field(unsigned int, nr_threads)
3642*4882a593Smuzhiyun 		__field(pid_t, pid)
3643*4882a593Smuzhiyun 	),
3644*4882a593Smuzhiyun 	TP_fast_assign(
3645*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3646*4882a593Smuzhiyun 		__entry->nr_threads = nr_threads;
3647*4882a593Smuzhiyun 		__entry->pid = pid;
3648*4882a593Smuzhiyun 	),
3649*4882a593Smuzhiyun 	TP_printk("dev %d:%d nr_threads %u pid %u",
3650*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3651*4882a593Smuzhiyun 		  __entry->nr_threads, __entry->pid)
3652*4882a593Smuzhiyun )
3653*4882a593Smuzhiyun 
3654*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_kmem_class,
3655*4882a593Smuzhiyun 	TP_PROTO(ssize_t size, int flags, unsigned long caller_ip),
3656*4882a593Smuzhiyun 	TP_ARGS(size, flags, caller_ip),
3657*4882a593Smuzhiyun 	TP_STRUCT__entry(
3658*4882a593Smuzhiyun 		__field(ssize_t, size)
3659*4882a593Smuzhiyun 		__field(int, flags)
3660*4882a593Smuzhiyun 		__field(unsigned long, caller_ip)
3661*4882a593Smuzhiyun 	),
3662*4882a593Smuzhiyun 	TP_fast_assign(
3663*4882a593Smuzhiyun 		__entry->size = size;
3664*4882a593Smuzhiyun 		__entry->flags = flags;
3665*4882a593Smuzhiyun 		__entry->caller_ip = caller_ip;
3666*4882a593Smuzhiyun 	),
3667*4882a593Smuzhiyun 	TP_printk("size %zd flags 0x%x caller %pS",
3668*4882a593Smuzhiyun 		  __entry->size,
3669*4882a593Smuzhiyun 		  __entry->flags,
3670*4882a593Smuzhiyun 		  (char *)__entry->caller_ip)
3671*4882a593Smuzhiyun )
3672*4882a593Smuzhiyun 
3673*4882a593Smuzhiyun #define DEFINE_KMEM_EVENT(name) \
3674*4882a593Smuzhiyun DEFINE_EVENT(xfs_kmem_class, name, \
3675*4882a593Smuzhiyun 	TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), \
3676*4882a593Smuzhiyun 	TP_ARGS(size, flags, caller_ip))
3677*4882a593Smuzhiyun DEFINE_KMEM_EVENT(kmem_alloc);
3678*4882a593Smuzhiyun DEFINE_KMEM_EVENT(kmem_alloc_io);
3679*4882a593Smuzhiyun DEFINE_KMEM_EVENT(kmem_alloc_large);
3680*4882a593Smuzhiyun 
3681*4882a593Smuzhiyun TRACE_EVENT(xfs_check_new_dalign,
3682*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, int new_dalign, xfs_ino_t calc_rootino),
3683*4882a593Smuzhiyun 	TP_ARGS(mp, new_dalign, calc_rootino),
3684*4882a593Smuzhiyun 	TP_STRUCT__entry(
3685*4882a593Smuzhiyun 		__field(dev_t, dev)
3686*4882a593Smuzhiyun 		__field(int, new_dalign)
3687*4882a593Smuzhiyun 		__field(xfs_ino_t, sb_rootino)
3688*4882a593Smuzhiyun 		__field(xfs_ino_t, calc_rootino)
3689*4882a593Smuzhiyun 	),
3690*4882a593Smuzhiyun 	TP_fast_assign(
3691*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3692*4882a593Smuzhiyun 		__entry->new_dalign = new_dalign;
3693*4882a593Smuzhiyun 		__entry->sb_rootino = mp->m_sb.sb_rootino;
3694*4882a593Smuzhiyun 		__entry->calc_rootino = calc_rootino;
3695*4882a593Smuzhiyun 	),
3696*4882a593Smuzhiyun 	TP_printk("dev %d:%d new_dalign %d sb_rootino %llu calc_rootino %llu",
3697*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3698*4882a593Smuzhiyun 		  __entry->new_dalign, __entry->sb_rootino,
3699*4882a593Smuzhiyun 		  __entry->calc_rootino)
3700*4882a593Smuzhiyun )
3701*4882a593Smuzhiyun 
3702*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_commit_afakeroot,
3703*4882a593Smuzhiyun 	TP_PROTO(struct xfs_btree_cur *cur),
3704*4882a593Smuzhiyun 	TP_ARGS(cur),
3705*4882a593Smuzhiyun 	TP_STRUCT__entry(
3706*4882a593Smuzhiyun 		__field(dev_t, dev)
3707*4882a593Smuzhiyun 		__field(xfs_btnum_t, btnum)
3708*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3709*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
3710*4882a593Smuzhiyun 		__field(unsigned int, levels)
3711*4882a593Smuzhiyun 		__field(unsigned int, blocks)
3712*4882a593Smuzhiyun 	),
3713*4882a593Smuzhiyun 	TP_fast_assign(
3714*4882a593Smuzhiyun 		__entry->dev = cur->bc_mp->m_super->s_dev;
3715*4882a593Smuzhiyun 		__entry->btnum = cur->bc_btnum;
3716*4882a593Smuzhiyun 		__entry->agno = cur->bc_ag.agno;
3717*4882a593Smuzhiyun 		__entry->agbno = cur->bc_ag.afake->af_root;
3718*4882a593Smuzhiyun 		__entry->levels = cur->bc_ag.afake->af_levels;
3719*4882a593Smuzhiyun 		__entry->blocks = cur->bc_ag.afake->af_blocks;
3720*4882a593Smuzhiyun 	),
3721*4882a593Smuzhiyun 	TP_printk("dev %d:%d btree %s ag %u levels %u blocks %u root %u",
3722*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3723*4882a593Smuzhiyun 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
3724*4882a593Smuzhiyun 		  __entry->agno,
3725*4882a593Smuzhiyun 		  __entry->levels,
3726*4882a593Smuzhiyun 		  __entry->blocks,
3727*4882a593Smuzhiyun 		  __entry->agbno)
3728*4882a593Smuzhiyun )
3729*4882a593Smuzhiyun 
3730*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_commit_ifakeroot,
3731*4882a593Smuzhiyun 	TP_PROTO(struct xfs_btree_cur *cur),
3732*4882a593Smuzhiyun 	TP_ARGS(cur),
3733*4882a593Smuzhiyun 	TP_STRUCT__entry(
3734*4882a593Smuzhiyun 		__field(dev_t, dev)
3735*4882a593Smuzhiyun 		__field(xfs_btnum_t, btnum)
3736*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3737*4882a593Smuzhiyun 		__field(xfs_agino_t, agino)
3738*4882a593Smuzhiyun 		__field(unsigned int, levels)
3739*4882a593Smuzhiyun 		__field(unsigned int, blocks)
3740*4882a593Smuzhiyun 		__field(int, whichfork)
3741*4882a593Smuzhiyun 	),
3742*4882a593Smuzhiyun 	TP_fast_assign(
3743*4882a593Smuzhiyun 		__entry->dev = cur->bc_mp->m_super->s_dev;
3744*4882a593Smuzhiyun 		__entry->btnum = cur->bc_btnum;
3745*4882a593Smuzhiyun 		__entry->agno = XFS_INO_TO_AGNO(cur->bc_mp,
3746*4882a593Smuzhiyun 					cur->bc_ino.ip->i_ino);
3747*4882a593Smuzhiyun 		__entry->agino = XFS_INO_TO_AGINO(cur->bc_mp,
3748*4882a593Smuzhiyun 					cur->bc_ino.ip->i_ino);
3749*4882a593Smuzhiyun 		__entry->levels = cur->bc_ino.ifake->if_levels;
3750*4882a593Smuzhiyun 		__entry->blocks = cur->bc_ino.ifake->if_blocks;
3751*4882a593Smuzhiyun 		__entry->whichfork = cur->bc_ino.whichfork;
3752*4882a593Smuzhiyun 	),
3753*4882a593Smuzhiyun 	TP_printk("dev %d:%d btree %s ag %u agino %u whichfork %s levels %u blocks %u",
3754*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3755*4882a593Smuzhiyun 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
3756*4882a593Smuzhiyun 		  __entry->agno,
3757*4882a593Smuzhiyun 		  __entry->agino,
3758*4882a593Smuzhiyun 		  __entry->whichfork == XFS_ATTR_FORK ? "attr" : "data",
3759*4882a593Smuzhiyun 		  __entry->levels,
3760*4882a593Smuzhiyun 		  __entry->blocks)
3761*4882a593Smuzhiyun )
3762*4882a593Smuzhiyun 
3763*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_bload_level_geometry,
3764*4882a593Smuzhiyun 	TP_PROTO(struct xfs_btree_cur *cur, unsigned int level,
3765*4882a593Smuzhiyun 		 uint64_t nr_this_level, unsigned int nr_per_block,
3766*4882a593Smuzhiyun 		 unsigned int desired_npb, uint64_t blocks,
3767*4882a593Smuzhiyun 		 uint64_t blocks_with_extra),
3768*4882a593Smuzhiyun 	TP_ARGS(cur, level, nr_this_level, nr_per_block, desired_npb, blocks,
3769*4882a593Smuzhiyun 		blocks_with_extra),
3770*4882a593Smuzhiyun 	TP_STRUCT__entry(
3771*4882a593Smuzhiyun 		__field(dev_t, dev)
3772*4882a593Smuzhiyun 		__field(xfs_btnum_t, btnum)
3773*4882a593Smuzhiyun 		__field(unsigned int, level)
3774*4882a593Smuzhiyun 		__field(unsigned int, nlevels)
3775*4882a593Smuzhiyun 		__field(uint64_t, nr_this_level)
3776*4882a593Smuzhiyun 		__field(unsigned int, nr_per_block)
3777*4882a593Smuzhiyun 		__field(unsigned int, desired_npb)
3778*4882a593Smuzhiyun 		__field(unsigned long long, blocks)
3779*4882a593Smuzhiyun 		__field(unsigned long long, blocks_with_extra)
3780*4882a593Smuzhiyun 	),
3781*4882a593Smuzhiyun 	TP_fast_assign(
3782*4882a593Smuzhiyun 		__entry->dev = cur->bc_mp->m_super->s_dev;
3783*4882a593Smuzhiyun 		__entry->btnum = cur->bc_btnum;
3784*4882a593Smuzhiyun 		__entry->level = level;
3785*4882a593Smuzhiyun 		__entry->nlevels = cur->bc_nlevels;
3786*4882a593Smuzhiyun 		__entry->nr_this_level = nr_this_level;
3787*4882a593Smuzhiyun 		__entry->nr_per_block = nr_per_block;
3788*4882a593Smuzhiyun 		__entry->desired_npb = desired_npb;
3789*4882a593Smuzhiyun 		__entry->blocks = blocks;
3790*4882a593Smuzhiyun 		__entry->blocks_with_extra = blocks_with_extra;
3791*4882a593Smuzhiyun 	),
3792*4882a593Smuzhiyun 	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",
3793*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3794*4882a593Smuzhiyun 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
3795*4882a593Smuzhiyun 		  __entry->level,
3796*4882a593Smuzhiyun 		  __entry->nlevels,
3797*4882a593Smuzhiyun 		  __entry->nr_this_level,
3798*4882a593Smuzhiyun 		  __entry->nr_per_block,
3799*4882a593Smuzhiyun 		  __entry->desired_npb,
3800*4882a593Smuzhiyun 		  __entry->blocks,
3801*4882a593Smuzhiyun 		  __entry->blocks_with_extra)
3802*4882a593Smuzhiyun )
3803*4882a593Smuzhiyun 
3804*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_bload_block,
3805*4882a593Smuzhiyun 	TP_PROTO(struct xfs_btree_cur *cur, unsigned int level,
3806*4882a593Smuzhiyun 		 uint64_t block_idx, uint64_t nr_blocks,
3807*4882a593Smuzhiyun 		 union xfs_btree_ptr *ptr, unsigned int nr_records),
3808*4882a593Smuzhiyun 	TP_ARGS(cur, level, block_idx, nr_blocks, ptr, nr_records),
3809*4882a593Smuzhiyun 	TP_STRUCT__entry(
3810*4882a593Smuzhiyun 		__field(dev_t, dev)
3811*4882a593Smuzhiyun 		__field(xfs_btnum_t, btnum)
3812*4882a593Smuzhiyun 		__field(unsigned int, level)
3813*4882a593Smuzhiyun 		__field(unsigned long long, block_idx)
3814*4882a593Smuzhiyun 		__field(unsigned long long, nr_blocks)
3815*4882a593Smuzhiyun 		__field(xfs_agnumber_t, agno)
3816*4882a593Smuzhiyun 		__field(xfs_agblock_t, agbno)
3817*4882a593Smuzhiyun 		__field(unsigned int, nr_records)
3818*4882a593Smuzhiyun 	),
3819*4882a593Smuzhiyun 	TP_fast_assign(
3820*4882a593Smuzhiyun 		__entry->dev = cur->bc_mp->m_super->s_dev;
3821*4882a593Smuzhiyun 		__entry->btnum = cur->bc_btnum;
3822*4882a593Smuzhiyun 		__entry->level = level;
3823*4882a593Smuzhiyun 		__entry->block_idx = block_idx;
3824*4882a593Smuzhiyun 		__entry->nr_blocks = nr_blocks;
3825*4882a593Smuzhiyun 		if (cur->bc_flags & XFS_BTREE_LONG_PTRS) {
3826*4882a593Smuzhiyun 			xfs_fsblock_t	fsb = be64_to_cpu(ptr->l);
3827*4882a593Smuzhiyun 
3828*4882a593Smuzhiyun 			__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsb);
3829*4882a593Smuzhiyun 			__entry->agbno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsb);
3830*4882a593Smuzhiyun 		} else {
3831*4882a593Smuzhiyun 			__entry->agno = cur->bc_ag.agno;
3832*4882a593Smuzhiyun 			__entry->agbno = be32_to_cpu(ptr->s);
3833*4882a593Smuzhiyun 		}
3834*4882a593Smuzhiyun 		__entry->nr_records = nr_records;
3835*4882a593Smuzhiyun 	),
3836*4882a593Smuzhiyun 	TP_printk("dev %d:%d btree %s level %u block %llu/%llu fsb (%u/%u) recs %u",
3837*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3838*4882a593Smuzhiyun 		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
3839*4882a593Smuzhiyun 		  __entry->level,
3840*4882a593Smuzhiyun 		  __entry->block_idx,
3841*4882a593Smuzhiyun 		  __entry->nr_blocks,
3842*4882a593Smuzhiyun 		  __entry->agno,
3843*4882a593Smuzhiyun 		  __entry->agbno,
3844*4882a593Smuzhiyun 		  __entry->nr_records)
3845*4882a593Smuzhiyun )
3846*4882a593Smuzhiyun 
3847*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_timestamp_range_class,
3848*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, time64_t min, time64_t max),
3849*4882a593Smuzhiyun 	TP_ARGS(mp, min, max),
3850*4882a593Smuzhiyun 	TP_STRUCT__entry(
3851*4882a593Smuzhiyun 		__field(dev_t, dev)
3852*4882a593Smuzhiyun 		__field(long long, min)
3853*4882a593Smuzhiyun 		__field(long long, max)
3854*4882a593Smuzhiyun 	),
3855*4882a593Smuzhiyun 	TP_fast_assign(
3856*4882a593Smuzhiyun 		__entry->dev = mp->m_super->s_dev;
3857*4882a593Smuzhiyun 		__entry->min = min;
3858*4882a593Smuzhiyun 		__entry->max = max;
3859*4882a593Smuzhiyun 	),
3860*4882a593Smuzhiyun 	TP_printk("dev %d:%d min %lld max %lld",
3861*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3862*4882a593Smuzhiyun 		  __entry->min,
3863*4882a593Smuzhiyun 		  __entry->max)
3864*4882a593Smuzhiyun )
3865*4882a593Smuzhiyun 
3866*4882a593Smuzhiyun #define DEFINE_TIMESTAMP_RANGE_EVENT(name) \
3867*4882a593Smuzhiyun DEFINE_EVENT(xfs_timestamp_range_class, name, \
3868*4882a593Smuzhiyun 	TP_PROTO(struct xfs_mount *mp, long long min, long long max), \
3869*4882a593Smuzhiyun 	TP_ARGS(mp, min, max))
3870*4882a593Smuzhiyun DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range);
3871*4882a593Smuzhiyun DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range);
3872*4882a593Smuzhiyun 
3873*4882a593Smuzhiyun #endif /* _TRACE_XFS_H */
3874*4882a593Smuzhiyun 
3875*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
3876*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
3877*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE xfs_trace
3878*4882a593Smuzhiyun #include <trace/define_trace.h>
3879