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