1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2009, Christoph Hellwig
7 #define TRACE_SYSTEM xfs
9 #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ)
12 #include <linux/tracepoint.h>
16 struct xfs_attr_list_context
;
17 struct xfs_buf_log_item
;
19 struct xfs_da_node_entry
;
25 struct xlog_recover_item
;
26 struct xlog_rec_header
;
27 struct xfs_buf_log_format
;
28 struct xfs_inode_log_format
;
31 struct xfs_refcount_irec
;
34 struct xfs_icreate_log
;
35 struct xfs_owner_info
;
37 struct xfs_inobt_rec_incore
;
41 #define XFS_ATTR_FILTER_FLAGS \
42 { XFS_ATTR_ROOT, "ROOT" }, \
43 { XFS_ATTR_SECURE, "SECURE" }, \
44 { XFS_ATTR_INCOMPLETE, "INCOMPLETE" }
46 DECLARE_EVENT_CLASS(xfs_attr_list_class
,
47 TP_PROTO(struct xfs_attr_list_context
*ctx
),
51 __field(xfs_ino_t
, ino
)
55 __field(void *, buffer
)
60 __field(unsigned int, attr_filter
)
63 __entry
->dev
= VFS_I(ctx
->dp
)->i_sb
->s_dev
;
64 __entry
->ino
= ctx
->dp
->i_ino
;
65 __entry
->hashval
= ctx
->cursor
.hashval
;
66 __entry
->blkno
= ctx
->cursor
.blkno
;
67 __entry
->offset
= ctx
->cursor
.offset
;
68 __entry
->buffer
= ctx
->buffer
;
69 __entry
->bufsize
= ctx
->bufsize
;
70 __entry
->count
= ctx
->count
;
71 __entry
->firstu
= ctx
->firstu
;
72 __entry
->attr_filter
= ctx
->attr_filter
;
74 TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "
75 "buffer %p size %u count %u firstu %u filter %s",
76 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
86 __print_flags(__entry
->attr_filter
, "|",
87 XFS_ATTR_FILTER_FLAGS
)
91 #define DEFINE_ATTR_LIST_EVENT(name) \
92 DEFINE_EVENT(xfs_attr_list_class, name, \
93 TP_PROTO(struct xfs_attr_list_context *ctx), \
95 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf
);
96 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all
);
97 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf
);
98 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end
);
99 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full
);
100 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add
);
101 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk
);
102 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound
);
103 DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list
);
104 DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list
);
106 DECLARE_EVENT_CLASS(xfs_perag_class
,
107 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, int refcount
,
108 unsigned long caller_ip
),
109 TP_ARGS(mp
, agno
, refcount
, caller_ip
),
112 __field(xfs_agnumber_t
, agno
)
113 __field(int, refcount
)
114 __field(unsigned long, caller_ip
)
117 __entry
->dev
= mp
->m_super
->s_dev
;
118 __entry
->agno
= agno
;
119 __entry
->refcount
= refcount
;
120 __entry
->caller_ip
= caller_ip
;
122 TP_printk("dev %d:%d agno %u refcount %d caller %pS",
123 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
126 (char *)__entry
->caller_ip
)
129 #define DEFINE_PERAG_REF_EVENT(name) \
130 DEFINE_EVENT(xfs_perag_class, name, \
131 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount, \
132 unsigned long caller_ip), \
133 TP_ARGS(mp, agno, refcount, caller_ip))
134 DEFINE_PERAG_REF_EVENT(xfs_perag_get
);
135 DEFINE_PERAG_REF_EVENT(xfs_perag_get_tag
);
136 DEFINE_PERAG_REF_EVENT(xfs_perag_put
);
137 DEFINE_PERAG_REF_EVENT(xfs_perag_set_reclaim
);
138 DEFINE_PERAG_REF_EVENT(xfs_perag_clear_reclaim
);
139 DEFINE_PERAG_REF_EVENT(xfs_perag_set_eofblocks
);
140 DEFINE_PERAG_REF_EVENT(xfs_perag_clear_eofblocks
);
141 DEFINE_PERAG_REF_EVENT(xfs_perag_set_cowblocks
);
142 DEFINE_PERAG_REF_EVENT(xfs_perag_clear_cowblocks
);
144 DECLARE_EVENT_CLASS(xfs_ag_class
,
145 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
),
149 __field(xfs_agnumber_t
, agno
)
152 __entry
->dev
= mp
->m_super
->s_dev
;
153 __entry
->agno
= agno
;
155 TP_printk("dev %d:%d agno %u",
156 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
159 #define DEFINE_AG_EVENT(name) \
160 DEFINE_EVENT(xfs_ag_class, name, \
161 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno), \
164 DEFINE_AG_EVENT(xfs_read_agf
);
165 DEFINE_AG_EVENT(xfs_alloc_read_agf
);
166 DEFINE_AG_EVENT(xfs_read_agi
);
167 DEFINE_AG_EVENT(xfs_ialloc_read_agi
);
169 TRACE_EVENT(xfs_attr_list_node_descend
,
170 TP_PROTO(struct xfs_attr_list_context
*ctx
,
171 struct xfs_da_node_entry
*btree
),
175 __field(xfs_ino_t
, ino
)
176 __field(u32
, hashval
)
179 __field(void *, buffer
)
180 __field(int, bufsize
)
184 __field(unsigned int, attr_filter
)
185 __field(u32
, bt_hashval
)
186 __field(u32
, bt_before
)
189 __entry
->dev
= VFS_I(ctx
->dp
)->i_sb
->s_dev
;
190 __entry
->ino
= ctx
->dp
->i_ino
;
191 __entry
->hashval
= ctx
->cursor
.hashval
;
192 __entry
->blkno
= ctx
->cursor
.blkno
;
193 __entry
->offset
= ctx
->cursor
.offset
;
194 __entry
->buffer
= ctx
->buffer
;
195 __entry
->bufsize
= ctx
->bufsize
;
196 __entry
->count
= ctx
->count
;
197 __entry
->firstu
= ctx
->firstu
;
198 __entry
->attr_filter
= ctx
->attr_filter
;
199 __entry
->bt_hashval
= be32_to_cpu(btree
->hashval
);
200 __entry
->bt_before
= be32_to_cpu(btree
->before
);
202 TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "
203 "buffer %p size %u count %u firstu %u filter %s "
204 "node hashval %u, node before %u",
205 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
215 __print_flags(__entry
->attr_filter
, "|",
216 XFS_ATTR_FILTER_FLAGS
),
221 DECLARE_EVENT_CLASS(xfs_bmap_class
,
222 TP_PROTO(struct xfs_inode
*ip
, struct xfs_iext_cursor
*cur
, int state
,
223 unsigned long caller_ip
),
224 TP_ARGS(ip
, cur
, state
, caller_ip
),
227 __field(xfs_ino_t
, ino
)
228 __field(void *, leaf
)
230 __field(xfs_fileoff_t
, startoff
)
231 __field(xfs_fsblock_t
, startblock
)
232 __field(xfs_filblks_t
, blockcount
)
233 __field(xfs_exntst_t
, state
)
234 __field(int, bmap_state
)
235 __field(unsigned long, caller_ip
)
238 struct xfs_ifork
*ifp
;
239 struct xfs_bmbt_irec r
;
241 ifp
= xfs_iext_state_to_fork(ip
, state
);
242 xfs_iext_get_extent(ifp
, cur
, &r
);
243 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
244 __entry
->ino
= ip
->i_ino
;
245 __entry
->leaf
= cur
->leaf
;
246 __entry
->pos
= cur
->pos
;
247 __entry
->startoff
= r
.br_startoff
;
248 __entry
->startblock
= r
.br_startblock
;
249 __entry
->blockcount
= r
.br_blockcount
;
250 __entry
->state
= r
.br_state
;
251 __entry
->bmap_state
= state
;
252 __entry
->caller_ip
= caller_ip
;
254 TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d "
255 "offset %lld block %lld count %lld flag %d caller %pS",
256 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
258 __print_flags(__entry
->bmap_state
, "|", XFS_BMAP_EXT_FLAGS
),
262 (int64_t)__entry
->startblock
,
265 (char *)__entry
->caller_ip
)
268 #define DEFINE_BMAP_EVENT(name) \
269 DEFINE_EVENT(xfs_bmap_class, name, \
270 TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \
271 unsigned long caller_ip), \
272 TP_ARGS(ip, cur, state, caller_ip))
273 DEFINE_BMAP_EVENT(xfs_iext_insert
);
274 DEFINE_BMAP_EVENT(xfs_iext_remove
);
275 DEFINE_BMAP_EVENT(xfs_bmap_pre_update
);
276 DEFINE_BMAP_EVENT(xfs_bmap_post_update
);
277 DEFINE_BMAP_EVENT(xfs_read_extent
);
278 DEFINE_BMAP_EVENT(xfs_write_extent
);
280 DECLARE_EVENT_CLASS(xfs_buf_class
,
281 TP_PROTO(struct xfs_buf
*bp
, unsigned long caller_ip
),
282 TP_ARGS(bp
, caller_ip
),
285 __field(xfs_daddr_t
, bno
)
288 __field(int, pincount
)
289 __field(unsigned, lockval
)
290 __field(unsigned, flags
)
291 __field(unsigned long, caller_ip
)
294 __entry
->dev
= bp
->b_target
->bt_dev
;
295 if (bp
->b_bn
== XFS_BUF_DADDR_NULL
)
296 __entry
->bno
= bp
->b_maps
[0].bm_bn
;
298 __entry
->bno
= bp
->b_bn
;
299 __entry
->nblks
= bp
->b_length
;
300 __entry
->hold
= atomic_read(&bp
->b_hold
);
301 __entry
->pincount
= atomic_read(&bp
->b_pin_count
);
302 __entry
->lockval
= bp
->b_sema
.count
;
303 __entry
->flags
= bp
->b_flags
;
304 __entry
->caller_ip
= caller_ip
;
306 TP_printk("dev %d:%d bno 0x%llx nblks 0x%x hold %d pincount %d "
307 "lock %d flags %s caller %pS",
308 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
309 (unsigned long long)__entry
->bno
,
314 __print_flags(__entry
->flags
, "|", XFS_BUF_FLAGS
),
315 (void *)__entry
->caller_ip
)
318 #define DEFINE_BUF_EVENT(name) \
319 DEFINE_EVENT(xfs_buf_class, name, \
320 TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \
321 TP_ARGS(bp, caller_ip))
322 DEFINE_BUF_EVENT(xfs_buf_init
);
323 DEFINE_BUF_EVENT(xfs_buf_free
);
324 DEFINE_BUF_EVENT(xfs_buf_hold
);
325 DEFINE_BUF_EVENT(xfs_buf_rele
);
326 DEFINE_BUF_EVENT(xfs_buf_iodone
);
327 DEFINE_BUF_EVENT(xfs_buf_submit
);
328 DEFINE_BUF_EVENT(xfs_buf_lock
);
329 DEFINE_BUF_EVENT(xfs_buf_lock_done
);
330 DEFINE_BUF_EVENT(xfs_buf_trylock_fail
);
331 DEFINE_BUF_EVENT(xfs_buf_trylock
);
332 DEFINE_BUF_EVENT(xfs_buf_unlock
);
333 DEFINE_BUF_EVENT(xfs_buf_iowait
);
334 DEFINE_BUF_EVENT(xfs_buf_iowait_done
);
335 DEFINE_BUF_EVENT(xfs_buf_delwri_queue
);
336 DEFINE_BUF_EVENT(xfs_buf_delwri_queued
);
337 DEFINE_BUF_EVENT(xfs_buf_delwri_split
);
338 DEFINE_BUF_EVENT(xfs_buf_delwri_pushbuf
);
339 DEFINE_BUF_EVENT(xfs_buf_get_uncached
);
340 DEFINE_BUF_EVENT(xfs_buf_item_relse
);
341 DEFINE_BUF_EVENT(xfs_buf_iodone_async
);
342 DEFINE_BUF_EVENT(xfs_buf_error_relse
);
343 DEFINE_BUF_EVENT(xfs_buf_wait_buftarg
);
344 DEFINE_BUF_EVENT(xfs_trans_read_buf_shut
);
346 /* not really buffer traces, but the buf provides useful information */
347 DEFINE_BUF_EVENT(xfs_btree_corrupt
);
348 DEFINE_BUF_EVENT(xfs_reset_dqcounts
);
350 /* pass flags explicitly */
351 DECLARE_EVENT_CLASS(xfs_buf_flags_class
,
352 TP_PROTO(struct xfs_buf
*bp
, unsigned flags
, unsigned long caller_ip
),
353 TP_ARGS(bp
, flags
, caller_ip
),
356 __field(xfs_daddr_t
, bno
)
357 __field(size_t, buffer_length
)
359 __field(int, pincount
)
360 __field(unsigned, lockval
)
361 __field(unsigned, flags
)
362 __field(unsigned long, caller_ip
)
365 __entry
->dev
= bp
->b_target
->bt_dev
;
366 __entry
->bno
= bp
->b_bn
;
367 __entry
->buffer_length
= BBTOB(bp
->b_length
);
368 __entry
->flags
= flags
;
369 __entry
->hold
= atomic_read(&bp
->b_hold
);
370 __entry
->pincount
= atomic_read(&bp
->b_pin_count
);
371 __entry
->lockval
= bp
->b_sema
.count
;
372 __entry
->caller_ip
= caller_ip
;
374 TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d "
375 "lock %d flags %s caller %pS",
376 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
377 (unsigned long long)__entry
->bno
,
378 __entry
->buffer_length
,
382 __print_flags(__entry
->flags
, "|", XFS_BUF_FLAGS
),
383 (void *)__entry
->caller_ip
)
386 #define DEFINE_BUF_FLAGS_EVENT(name) \
387 DEFINE_EVENT(xfs_buf_flags_class, name, \
388 TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \
389 TP_ARGS(bp, flags, caller_ip))
390 DEFINE_BUF_FLAGS_EVENT(xfs_buf_find
);
391 DEFINE_BUF_FLAGS_EVENT(xfs_buf_get
);
392 DEFINE_BUF_FLAGS_EVENT(xfs_buf_read
);
394 TRACE_EVENT(xfs_buf_ioerror
,
395 TP_PROTO(struct xfs_buf
*bp
, int error
, xfs_failaddr_t caller_ip
),
396 TP_ARGS(bp
, error
, caller_ip
),
399 __field(xfs_daddr_t
, bno
)
400 __field(size_t, buffer_length
)
401 __field(unsigned, flags
)
403 __field(int, pincount
)
404 __field(unsigned, lockval
)
406 __field(xfs_failaddr_t
, caller_ip
)
409 __entry
->dev
= bp
->b_target
->bt_dev
;
410 __entry
->bno
= bp
->b_bn
;
411 __entry
->buffer_length
= BBTOB(bp
->b_length
);
412 __entry
->hold
= atomic_read(&bp
->b_hold
);
413 __entry
->pincount
= atomic_read(&bp
->b_pin_count
);
414 __entry
->lockval
= bp
->b_sema
.count
;
415 __entry
->error
= error
;
416 __entry
->flags
= bp
->b_flags
;
417 __entry
->caller_ip
= caller_ip
;
419 TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d "
420 "lock %d error %d flags %s caller %pS",
421 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
422 (unsigned long long)__entry
->bno
,
423 __entry
->buffer_length
,
428 __print_flags(__entry
->flags
, "|", XFS_BUF_FLAGS
),
429 (void *)__entry
->caller_ip
)
432 DECLARE_EVENT_CLASS(xfs_buf_item_class
,
433 TP_PROTO(struct xfs_buf_log_item
*bip
),
437 __field(xfs_daddr_t
, buf_bno
)
438 __field(size_t, buf_len
)
439 __field(int, buf_hold
)
440 __field(int, buf_pincount
)
441 __field(int, buf_lockval
)
442 __field(unsigned, buf_flags
)
443 __field(unsigned, bli_recur
)
444 __field(int, bli_refcount
)
445 __field(unsigned, bli_flags
)
446 __field(unsigned long, li_flags
)
449 __entry
->dev
= bip
->bli_buf
->b_target
->bt_dev
;
450 __entry
->bli_flags
= bip
->bli_flags
;
451 __entry
->bli_recur
= bip
->bli_recur
;
452 __entry
->bli_refcount
= atomic_read(&bip
->bli_refcount
);
453 __entry
->buf_bno
= bip
->bli_buf
->b_bn
;
454 __entry
->buf_len
= BBTOB(bip
->bli_buf
->b_length
);
455 __entry
->buf_flags
= bip
->bli_buf
->b_flags
;
456 __entry
->buf_hold
= atomic_read(&bip
->bli_buf
->b_hold
);
457 __entry
->buf_pincount
= atomic_read(&bip
->bli_buf
->b_pin_count
);
458 __entry
->buf_lockval
= bip
->bli_buf
->b_sema
.count
;
459 __entry
->li_flags
= bip
->bli_item
.li_flags
;
461 TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d "
462 "lock %d flags %s recur %d refcount %d bliflags %s "
464 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
465 (unsigned long long)__entry
->buf_bno
,
468 __entry
->buf_pincount
,
469 __entry
->buf_lockval
,
470 __print_flags(__entry
->buf_flags
, "|", XFS_BUF_FLAGS
),
472 __entry
->bli_refcount
,
473 __print_flags(__entry
->bli_flags
, "|", XFS_BLI_FLAGS
),
474 __print_flags(__entry
->li_flags
, "|", XFS_LI_FLAGS
))
477 #define DEFINE_BUF_ITEM_EVENT(name) \
478 DEFINE_EVENT(xfs_buf_item_class, name, \
479 TP_PROTO(struct xfs_buf_log_item *bip), \
481 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size
);
482 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered
);
483 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale
);
484 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format
);
485 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale
);
486 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered
);
487 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin
);
488 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin
);
489 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale
);
490 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release
);
491 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed
);
492 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push
);
493 DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf
);
494 DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur
);
495 DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb
);
496 DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur
);
497 DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf
);
498 DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur
);
499 DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf
);
500 DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse
);
501 DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin
);
502 DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold
);
503 DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release
);
504 DEFINE_BUF_ITEM_EVENT(xfs_trans_binval
);
506 DECLARE_EVENT_CLASS(xfs_filestream_class
,
507 TP_PROTO(struct xfs_mount
*mp
, xfs_ino_t ino
, xfs_agnumber_t agno
),
508 TP_ARGS(mp
, ino
, agno
),
511 __field(xfs_ino_t
, ino
)
512 __field(xfs_agnumber_t
, agno
)
513 __field(int, streams
)
516 __entry
->dev
= mp
->m_super
->s_dev
;
518 __entry
->agno
= agno
;
519 __entry
->streams
= xfs_filestream_peek_ag(mp
, agno
);
521 TP_printk("dev %d:%d ino 0x%llx agno %u streams %d",
522 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
527 #define DEFINE_FILESTREAM_EVENT(name) \
528 DEFINE_EVENT(xfs_filestream_class, name, \
529 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno), \
530 TP_ARGS(mp, ino, agno))
531 DEFINE_FILESTREAM_EVENT(xfs_filestream_free
);
532 DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup
);
533 DEFINE_FILESTREAM_EVENT(xfs_filestream_scan
);
535 TRACE_EVENT(xfs_filestream_pick
,
536 TP_PROTO(struct xfs_inode
*ip
, xfs_agnumber_t agno
,
537 xfs_extlen_t free
, int nscan
),
538 TP_ARGS(ip
, agno
, free
, nscan
),
541 __field(xfs_ino_t
, ino
)
542 __field(xfs_agnumber_t
, agno
)
543 __field(int, streams
)
544 __field(xfs_extlen_t
, free
)
548 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
549 __entry
->ino
= ip
->i_ino
;
550 __entry
->agno
= agno
;
551 __entry
->streams
= xfs_filestream_peek_ag(ip
->i_mount
, agno
);
552 __entry
->free
= free
;
553 __entry
->nscan
= nscan
;
555 TP_printk("dev %d:%d ino 0x%llx agno %u streams %d free %d nscan %d",
556 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
564 DECLARE_EVENT_CLASS(xfs_lock_class
,
565 TP_PROTO(struct xfs_inode
*ip
, unsigned lock_flags
,
566 unsigned long caller_ip
),
567 TP_ARGS(ip
, lock_flags
, caller_ip
),
570 __field(xfs_ino_t
, ino
)
571 __field(int, lock_flags
)
572 __field(unsigned long, caller_ip
)
575 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
576 __entry
->ino
= ip
->i_ino
;
577 __entry
->lock_flags
= lock_flags
;
578 __entry
->caller_ip
= caller_ip
;
580 TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS",
581 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
583 __print_flags(__entry
->lock_flags
, "|", XFS_LOCK_FLAGS
),
584 (void *)__entry
->caller_ip
)
587 #define DEFINE_LOCK_EVENT(name) \
588 DEFINE_EVENT(xfs_lock_class, name, \
589 TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \
590 unsigned long caller_ip), \
591 TP_ARGS(ip, lock_flags, caller_ip))
592 DEFINE_LOCK_EVENT(xfs_ilock
);
593 DEFINE_LOCK_EVENT(xfs_ilock_nowait
);
594 DEFINE_LOCK_EVENT(xfs_ilock_demote
);
595 DEFINE_LOCK_EVENT(xfs_iunlock
);
597 DECLARE_EVENT_CLASS(xfs_inode_class
,
598 TP_PROTO(struct xfs_inode
*ip
),
602 __field(xfs_ino_t
, ino
)
605 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
606 __entry
->ino
= ip
->i_ino
;
608 TP_printk("dev %d:%d ino 0x%llx",
609 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
613 #define DEFINE_INODE_EVENT(name) \
614 DEFINE_EVENT(xfs_inode_class, name, \
615 TP_PROTO(struct xfs_inode *ip), \
617 DEFINE_INODE_EVENT(xfs_iget_skip
);
618 DEFINE_INODE_EVENT(xfs_iget_reclaim
);
619 DEFINE_INODE_EVENT(xfs_iget_reclaim_fail
);
620 DEFINE_INODE_EVENT(xfs_iget_hit
);
621 DEFINE_INODE_EVENT(xfs_iget_miss
);
623 DEFINE_INODE_EVENT(xfs_getattr
);
624 DEFINE_INODE_EVENT(xfs_setattr
);
625 DEFINE_INODE_EVENT(xfs_readlink
);
626 DEFINE_INODE_EVENT(xfs_inactive_symlink
);
627 DEFINE_INODE_EVENT(xfs_alloc_file_space
);
628 DEFINE_INODE_EVENT(xfs_free_file_space
);
629 DEFINE_INODE_EVENT(xfs_zero_file_space
);
630 DEFINE_INODE_EVENT(xfs_collapse_file_space
);
631 DEFINE_INODE_EVENT(xfs_insert_file_space
);
632 DEFINE_INODE_EVENT(xfs_readdir
);
633 #ifdef CONFIG_XFS_POSIX_ACL
634 DEFINE_INODE_EVENT(xfs_get_acl
);
636 DEFINE_INODE_EVENT(xfs_vm_bmap
);
637 DEFINE_INODE_EVENT(xfs_file_ioctl
);
638 DEFINE_INODE_EVENT(xfs_file_compat_ioctl
);
639 DEFINE_INODE_EVENT(xfs_ioctl_setattr
);
640 DEFINE_INODE_EVENT(xfs_dir_fsync
);
641 DEFINE_INODE_EVENT(xfs_file_fsync
);
642 DEFINE_INODE_EVENT(xfs_destroy_inode
);
643 DEFINE_INODE_EVENT(xfs_update_time
);
645 DEFINE_INODE_EVENT(xfs_dquot_dqalloc
);
646 DEFINE_INODE_EVENT(xfs_dquot_dqdetach
);
648 DEFINE_INODE_EVENT(xfs_inode_set_eofblocks_tag
);
649 DEFINE_INODE_EVENT(xfs_inode_clear_eofblocks_tag
);
650 DEFINE_INODE_EVENT(xfs_inode_free_eofblocks_invalid
);
651 DEFINE_INODE_EVENT(xfs_inode_set_cowblocks_tag
);
652 DEFINE_INODE_EVENT(xfs_inode_clear_cowblocks_tag
);
653 DEFINE_INODE_EVENT(xfs_inode_free_cowblocks_invalid
);
656 * ftrace's __print_symbolic requires that all enum values be wrapped in the
657 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
658 * ring buffer. Somehow this was only worth mentioning in the ftrace sample
661 TRACE_DEFINE_ENUM(PE_SIZE_PTE
);
662 TRACE_DEFINE_ENUM(PE_SIZE_PMD
);
663 TRACE_DEFINE_ENUM(PE_SIZE_PUD
);
665 TRACE_EVENT(xfs_filemap_fault
,
666 TP_PROTO(struct xfs_inode
*ip
, enum page_entry_size pe_size
,
668 TP_ARGS(ip
, pe_size
, write_fault
),
671 __field(xfs_ino_t
, ino
)
672 __field(enum page_entry_size
, pe_size
)
673 __field(bool, write_fault
)
676 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
677 __entry
->ino
= ip
->i_ino
;
678 __entry
->pe_size
= pe_size
;
679 __entry
->write_fault
= write_fault
;
681 TP_printk("dev %d:%d ino 0x%llx %s write_fault %d",
682 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
684 __print_symbolic(__entry
->pe_size
,
685 { PE_SIZE_PTE
, "PTE" },
686 { PE_SIZE_PMD
, "PMD" },
687 { PE_SIZE_PUD
, "PUD" }),
688 __entry
->write_fault
)
691 DECLARE_EVENT_CLASS(xfs_iref_class
,
692 TP_PROTO(struct xfs_inode
*ip
, unsigned long caller_ip
),
693 TP_ARGS(ip
, caller_ip
),
696 __field(xfs_ino_t
, ino
)
698 __field(int, pincount
)
699 __field(unsigned long, caller_ip
)
702 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
703 __entry
->ino
= ip
->i_ino
;
704 __entry
->count
= atomic_read(&VFS_I(ip
)->i_count
);
705 __entry
->pincount
= atomic_read(&ip
->i_pincount
);
706 __entry
->caller_ip
= caller_ip
;
708 TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pS",
709 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
713 (char *)__entry
->caller_ip
)
716 TRACE_EVENT(xfs_iomap_prealloc_size
,
717 TP_PROTO(struct xfs_inode
*ip
, xfs_fsblock_t blocks
, int shift
,
718 unsigned int writeio_blocks
),
719 TP_ARGS(ip
, blocks
, shift
, writeio_blocks
),
722 __field(xfs_ino_t
, ino
)
723 __field(xfs_fsblock_t
, blocks
)
725 __field(unsigned int, writeio_blocks
)
728 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
729 __entry
->ino
= ip
->i_ino
;
730 __entry
->blocks
= blocks
;
731 __entry
->shift
= shift
;
732 __entry
->writeio_blocks
= writeio_blocks
;
734 TP_printk("dev %d:%d ino 0x%llx prealloc blocks %llu shift %d "
735 "m_allocsize_blocks %u",
736 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->ino
,
737 __entry
->blocks
, __entry
->shift
, __entry
->writeio_blocks
)
740 TRACE_EVENT(xfs_irec_merge_pre
,
741 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, xfs_agino_t agino
,
742 uint16_t holemask
, xfs_agino_t nagino
, uint16_t nholemask
),
743 TP_ARGS(mp
, agno
, agino
, holemask
, nagino
, nholemask
),
746 __field(xfs_agnumber_t
, agno
)
747 __field(xfs_agino_t
, agino
)
748 __field(uint16_t, holemask
)
749 __field(xfs_agino_t
, nagino
)
750 __field(uint16_t, nholemask
)
753 __entry
->dev
= mp
->m_super
->s_dev
;
754 __entry
->agno
= agno
;
755 __entry
->agino
= agino
;
756 __entry
->holemask
= holemask
;
757 __entry
->nagino
= nagino
;
758 __entry
->nholemask
= holemask
;
760 TP_printk("dev %d:%d agno %d inobt (%u:0x%x) new (%u:0x%x)",
761 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->agno
,
762 __entry
->agino
, __entry
->holemask
, __entry
->nagino
,
766 TRACE_EVENT(xfs_irec_merge_post
,
767 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, xfs_agino_t agino
,
769 TP_ARGS(mp
, agno
, agino
, holemask
),
772 __field(xfs_agnumber_t
, agno
)
773 __field(xfs_agino_t
, agino
)
774 __field(uint16_t, holemask
)
777 __entry
->dev
= mp
->m_super
->s_dev
;
778 __entry
->agno
= agno
;
779 __entry
->agino
= agino
;
780 __entry
->holemask
= holemask
;
782 TP_printk("dev %d:%d agno %d inobt (%u:0x%x)", MAJOR(__entry
->dev
),
783 MINOR(__entry
->dev
), __entry
->agno
, __entry
->agino
,
787 #define DEFINE_IREF_EVENT(name) \
788 DEFINE_EVENT(xfs_iref_class, name, \
789 TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), \
790 TP_ARGS(ip, caller_ip))
791 DEFINE_IREF_EVENT(xfs_irele
);
792 DEFINE_IREF_EVENT(xfs_inode_pin
);
793 DEFINE_IREF_EVENT(xfs_inode_unpin
);
794 DEFINE_IREF_EVENT(xfs_inode_unpin_nowait
);
796 DECLARE_EVENT_CLASS(xfs_namespace_class
,
797 TP_PROTO(struct xfs_inode
*dp
, struct xfs_name
*name
),
801 __field(xfs_ino_t
, dp_ino
)
802 __field(int, namelen
)
803 __dynamic_array(char, name
, name
->len
)
806 __entry
->dev
= VFS_I(dp
)->i_sb
->s_dev
;
807 __entry
->dp_ino
= dp
->i_ino
;
808 __entry
->namelen
= name
->len
;
809 memcpy(__get_str(name
), name
->name
, name
->len
);
811 TP_printk("dev %d:%d dp ino 0x%llx name %.*s",
812 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
818 #define DEFINE_NAMESPACE_EVENT(name) \
819 DEFINE_EVENT(xfs_namespace_class, name, \
820 TP_PROTO(struct xfs_inode *dp, struct xfs_name *name), \
822 DEFINE_NAMESPACE_EVENT(xfs_remove
);
823 DEFINE_NAMESPACE_EVENT(xfs_link
);
824 DEFINE_NAMESPACE_EVENT(xfs_lookup
);
825 DEFINE_NAMESPACE_EVENT(xfs_create
);
826 DEFINE_NAMESPACE_EVENT(xfs_symlink
);
828 TRACE_EVENT(xfs_rename
,
829 TP_PROTO(struct xfs_inode
*src_dp
, struct xfs_inode
*target_dp
,
830 struct xfs_name
*src_name
, struct xfs_name
*target_name
),
831 TP_ARGS(src_dp
, target_dp
, src_name
, target_name
),
834 __field(xfs_ino_t
, src_dp_ino
)
835 __field(xfs_ino_t
, target_dp_ino
)
836 __field(int, src_namelen
)
837 __field(int, target_namelen
)
838 __dynamic_array(char, src_name
, src_name
->len
)
839 __dynamic_array(char, target_name
, target_name
->len
)
842 __entry
->dev
= VFS_I(src_dp
)->i_sb
->s_dev
;
843 __entry
->src_dp_ino
= src_dp
->i_ino
;
844 __entry
->target_dp_ino
= target_dp
->i_ino
;
845 __entry
->src_namelen
= src_name
->len
;
846 __entry
->target_namelen
= target_name
->len
;
847 memcpy(__get_str(src_name
), src_name
->name
, src_name
->len
);
848 memcpy(__get_str(target_name
), target_name
->name
,
851 TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx"
852 " src name %.*s target name %.*s",
853 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
855 __entry
->target_dp_ino
,
856 __entry
->src_namelen
,
858 __entry
->target_namelen
,
859 __get_str(target_name
))
862 DECLARE_EVENT_CLASS(xfs_dquot_class
,
863 TP_PROTO(struct xfs_dquot
*dqp
),
868 __field(xfs_dqtype_t
, type
)
869 __field(unsigned, flags
)
870 __field(unsigned, nrefs
)
871 __field(unsigned long long, res_bcount
)
872 __field(unsigned long long, res_rtbcount
)
873 __field(unsigned long long, res_icount
)
875 __field(unsigned long long, bcount
)
876 __field(unsigned long long, rtbcount
)
877 __field(unsigned long long, icount
)
879 __field(unsigned long long, blk_hardlimit
)
880 __field(unsigned long long, blk_softlimit
)
881 __field(unsigned long long, rtb_hardlimit
)
882 __field(unsigned long long, rtb_softlimit
)
883 __field(unsigned long long, ino_hardlimit
)
884 __field(unsigned long long, ino_softlimit
)
887 __entry
->dev
= dqp
->q_mount
->m_super
->s_dev
;
888 __entry
->id
= dqp
->q_id
;
889 __entry
->type
= dqp
->q_type
;
890 __entry
->flags
= dqp
->q_flags
;
891 __entry
->nrefs
= dqp
->q_nrefs
;
893 __entry
->res_bcount
= dqp
->q_blk
.reserved
;
894 __entry
->res_rtbcount
= dqp
->q_rtb
.reserved
;
895 __entry
->res_icount
= dqp
->q_ino
.reserved
;
897 __entry
->bcount
= dqp
->q_blk
.count
;
898 __entry
->rtbcount
= dqp
->q_rtb
.count
;
899 __entry
->icount
= dqp
->q_ino
.count
;
901 __entry
->blk_hardlimit
= dqp
->q_blk
.hardlimit
;
902 __entry
->blk_softlimit
= dqp
->q_blk
.softlimit
;
903 __entry
->rtb_hardlimit
= dqp
->q_rtb
.hardlimit
;
904 __entry
->rtb_softlimit
= dqp
->q_rtb
.softlimit
;
905 __entry
->ino_hardlimit
= dqp
->q_ino
.hardlimit
;
906 __entry
->ino_softlimit
= dqp
->q_ino
.softlimit
;
908 TP_printk("dev %d:%d id 0x%x type %s flags %s nrefs %u "
909 "res_bc 0x%llx res_rtbc 0x%llx res_ic 0x%llx "
910 "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx "
911 "rtbcnt 0x%llx rtbhardlimit 0x%llx rtbsoftlimit 0x%llx "
912 "icnt 0x%llx ihardlimit 0x%llx isoftlimit 0x%llx]",
913 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
915 __print_flags(__entry
->type
, "|", XFS_DQTYPE_STRINGS
),
916 __print_flags(__entry
->flags
, "|", XFS_DQFLAG_STRINGS
),
919 __entry
->res_rtbcount
,
922 __entry
->blk_hardlimit
,
923 __entry
->blk_softlimit
,
925 __entry
->rtb_hardlimit
,
926 __entry
->rtb_softlimit
,
928 __entry
->ino_hardlimit
,
929 __entry
->ino_softlimit
)
932 #define DEFINE_DQUOT_EVENT(name) \
933 DEFINE_EVENT(xfs_dquot_class, name, \
934 TP_PROTO(struct xfs_dquot *dqp), \
936 DEFINE_DQUOT_EVENT(xfs_dqadjust
);
937 DEFINE_DQUOT_EVENT(xfs_dqreclaim_want
);
938 DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty
);
939 DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy
);
940 DEFINE_DQUOT_EVENT(xfs_dqreclaim_done
);
941 DEFINE_DQUOT_EVENT(xfs_dqattach_found
);
942 DEFINE_DQUOT_EVENT(xfs_dqattach_get
);
943 DEFINE_DQUOT_EVENT(xfs_dqalloc
);
944 DEFINE_DQUOT_EVENT(xfs_dqtobp_read
);
945 DEFINE_DQUOT_EVENT(xfs_dqread
);
946 DEFINE_DQUOT_EVENT(xfs_dqread_fail
);
947 DEFINE_DQUOT_EVENT(xfs_dqget_hit
);
948 DEFINE_DQUOT_EVENT(xfs_dqget_miss
);
949 DEFINE_DQUOT_EVENT(xfs_dqget_freeing
);
950 DEFINE_DQUOT_EVENT(xfs_dqget_dup
);
951 DEFINE_DQUOT_EVENT(xfs_dqput
);
952 DEFINE_DQUOT_EVENT(xfs_dqput_free
);
953 DEFINE_DQUOT_EVENT(xfs_dqrele
);
954 DEFINE_DQUOT_EVENT(xfs_dqflush
);
955 DEFINE_DQUOT_EVENT(xfs_dqflush_force
);
956 DEFINE_DQUOT_EVENT(xfs_dqflush_done
);
957 DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_before
);
958 DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_after
);
960 #define XFS_QMOPT_FLAGS \
961 { XFS_QMOPT_UQUOTA, "UQUOTA" }, \
962 { XFS_QMOPT_PQUOTA, "PQUOTA" }, \
963 { XFS_QMOPT_FORCE_RES, "FORCE_RES" }, \
964 { XFS_QMOPT_SBVERSION, "SBVERSION" }, \
965 { XFS_QMOPT_GQUOTA, "GQUOTA" }, \
966 { XFS_QMOPT_INHERIT, "INHERIT" }, \
967 { XFS_QMOPT_RES_REGBLKS, "RES_REGBLKS" }, \
968 { XFS_QMOPT_RES_RTBLKS, "RES_RTBLKS" }, \
969 { XFS_QMOPT_BCOUNT, "BCOUNT" }, \
970 { XFS_QMOPT_ICOUNT, "ICOUNT" }, \
971 { XFS_QMOPT_RTBCOUNT, "RTBCOUNT" }, \
972 { XFS_QMOPT_DELBCOUNT, "DELBCOUNT" }, \
973 { XFS_QMOPT_DELRTBCOUNT, "DELRTBCOUNT" }, \
974 { XFS_QMOPT_RES_INOS, "RES_INOS" }
976 TRACE_EVENT(xfs_trans_mod_dquot
,
977 TP_PROTO(struct xfs_trans
*tp
, struct xfs_dquot
*dqp
,
978 unsigned int field
, int64_t delta
),
979 TP_ARGS(tp
, dqp
, field
, delta
),
982 __field(xfs_dqtype_t
, type
)
983 __field(unsigned int, flags
)
984 __field(unsigned int, dqid
)
985 __field(unsigned int, field
)
986 __field(int64_t, delta
)
989 __entry
->dev
= tp
->t_mountp
->m_super
->s_dev
;
990 __entry
->type
= dqp
->q_type
;
991 __entry
->flags
= dqp
->q_flags
;
992 __entry
->dqid
= dqp
->q_id
;
993 __entry
->field
= field
;
994 __entry
->delta
= delta
;
996 TP_printk("dev %d:%d dquot id 0x%x type %s flags %s field %s delta %lld",
997 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
999 __print_flags(__entry
->type
, "|", XFS_DQTYPE_STRINGS
),
1000 __print_flags(__entry
->flags
, "|", XFS_DQFLAG_STRINGS
),
1001 __print_flags(__entry
->field
, "|", XFS_QMOPT_FLAGS
),
1005 DECLARE_EVENT_CLASS(xfs_dqtrx_class
,
1006 TP_PROTO(struct xfs_dqtrx
*qtrx
),
1010 __field(xfs_dqtype_t
, type
)
1011 __field(unsigned int, flags
)
1014 __field(uint64_t, blk_res
)
1015 __field(int64_t, bcount_delta
)
1016 __field(int64_t, delbcnt_delta
)
1018 __field(uint64_t, rtblk_res
)
1019 __field(uint64_t, rtblk_res_used
)
1020 __field(int64_t, rtbcount_delta
)
1021 __field(int64_t, delrtb_delta
)
1023 __field(uint64_t, ino_res
)
1024 __field(uint64_t, ino_res_used
)
1025 __field(int64_t, icount_delta
)
1028 __entry
->dev
= qtrx
->qt_dquot
->q_mount
->m_super
->s_dev
;
1029 __entry
->type
= qtrx
->qt_dquot
->q_type
;
1030 __entry
->flags
= qtrx
->qt_dquot
->q_flags
;
1031 __entry
->dqid
= qtrx
->qt_dquot
->q_id
;
1033 __entry
->blk_res
= qtrx
->qt_blk_res
;
1034 __entry
->bcount_delta
= qtrx
->qt_bcount_delta
;
1035 __entry
->delbcnt_delta
= qtrx
->qt_delbcnt_delta
;
1037 __entry
->rtblk_res
= qtrx
->qt_rtblk_res
;
1038 __entry
->rtblk_res_used
= qtrx
->qt_rtblk_res_used
;
1039 __entry
->rtbcount_delta
= qtrx
->qt_rtbcount_delta
;
1040 __entry
->delrtb_delta
= qtrx
->qt_delrtb_delta
;
1042 __entry
->ino_res
= qtrx
->qt_ino_res
;
1043 __entry
->ino_res_used
= qtrx
->qt_ino_res_used
;
1044 __entry
->icount_delta
= qtrx
->qt_icount_delta
;
1046 TP_printk("dev %d:%d dquot id 0x%x type %s flags %s"
1047 "blk_res %llu bcount_delta %lld delbcnt_delta %lld "
1048 "rtblk_res %llu rtblk_res_used %llu rtbcount_delta %lld delrtb_delta %lld "
1049 "ino_res %llu ino_res_used %llu icount_delta %lld",
1050 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1052 __print_flags(__entry
->type
, "|", XFS_DQTYPE_STRINGS
),
1053 __print_flags(__entry
->flags
, "|", XFS_DQFLAG_STRINGS
),
1056 __entry
->bcount_delta
,
1057 __entry
->delbcnt_delta
,
1060 __entry
->rtblk_res_used
,
1061 __entry
->rtbcount_delta
,
1062 __entry
->delrtb_delta
,
1065 __entry
->ino_res_used
,
1066 __entry
->icount_delta
)
1069 #define DEFINE_DQTRX_EVENT(name) \
1070 DEFINE_EVENT(xfs_dqtrx_class, name, \
1071 TP_PROTO(struct xfs_dqtrx *qtrx), \
1073 DEFINE_DQTRX_EVENT(xfs_trans_apply_dquot_deltas
);
1074 DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_before
);
1075 DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_after
);
1077 DECLARE_EVENT_CLASS(xfs_loggrant_class
,
1078 TP_PROTO(struct xlog
*log
, struct xlog_ticket
*tic
),
1084 __field(int, curr_res
)
1085 __field(int, unit_res
)
1086 __field(unsigned int, flags
)
1087 __field(int, reserveq
)
1088 __field(int, writeq
)
1089 __field(int, grant_reserve_cycle
)
1090 __field(int, grant_reserve_bytes
)
1091 __field(int, grant_write_cycle
)
1092 __field(int, grant_write_bytes
)
1093 __field(int, curr_cycle
)
1094 __field(int, curr_block
)
1095 __field(xfs_lsn_t
, tail_lsn
)
1098 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
1099 __entry
->ocnt
= tic
->t_ocnt
;
1100 __entry
->cnt
= tic
->t_cnt
;
1101 __entry
->curr_res
= tic
->t_curr_res
;
1102 __entry
->unit_res
= tic
->t_unit_res
;
1103 __entry
->flags
= tic
->t_flags
;
1104 __entry
->reserveq
= list_empty(&log
->l_reserve_head
.waiters
);
1105 __entry
->writeq
= list_empty(&log
->l_write_head
.waiters
);
1106 xlog_crack_grant_head(&log
->l_reserve_head
.grant
,
1107 &__entry
->grant_reserve_cycle
,
1108 &__entry
->grant_reserve_bytes
);
1109 xlog_crack_grant_head(&log
->l_write_head
.grant
,
1110 &__entry
->grant_write_cycle
,
1111 &__entry
->grant_write_bytes
);
1112 __entry
->curr_cycle
= log
->l_curr_cycle
;
1113 __entry
->curr_block
= log
->l_curr_block
;
1114 __entry
->tail_lsn
= atomic64_read(&log
->l_tail_lsn
);
1116 TP_printk("dev %d:%d t_ocnt %u t_cnt %u t_curr_res %u "
1117 "t_unit_res %u t_flags %s reserveq %s "
1118 "writeq %s grant_reserve_cycle %d "
1119 "grant_reserve_bytes %d grant_write_cycle %d "
1120 "grant_write_bytes %d curr_cycle %d curr_block %d "
1121 "tail_cycle %d tail_block %d",
1122 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1127 __print_flags(__entry
->flags
, "|", XLOG_TIC_FLAGS
),
1128 __entry
->reserveq
? "empty" : "active",
1129 __entry
->writeq
? "empty" : "active",
1130 __entry
->grant_reserve_cycle
,
1131 __entry
->grant_reserve_bytes
,
1132 __entry
->grant_write_cycle
,
1133 __entry
->grant_write_bytes
,
1134 __entry
->curr_cycle
,
1135 __entry
->curr_block
,
1136 CYCLE_LSN(__entry
->tail_lsn
),
1137 BLOCK_LSN(__entry
->tail_lsn
)
1141 #define DEFINE_LOGGRANT_EVENT(name) \
1142 DEFINE_EVENT(xfs_loggrant_class, name, \
1143 TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \
1145 DEFINE_LOGGRANT_EVENT(xfs_log_umount_write
);
1146 DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep
);
1147 DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake
);
1148 DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up
);
1149 DEFINE_LOGGRANT_EVENT(xfs_log_reserve
);
1150 DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit
);
1151 DEFINE_LOGGRANT_EVENT(xfs_log_regrant
);
1152 DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit
);
1153 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant
);
1154 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit
);
1155 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub
);
1156 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant
);
1157 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub
);
1158 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit
);
1159 DEFINE_LOGGRANT_EVENT(xfs_log_cil_wait
);
1161 DECLARE_EVENT_CLASS(xfs_log_item_class
,
1162 TP_PROTO(struct xfs_log_item
*lip
),
1166 __field(void *, lip
)
1168 __field(unsigned long, flags
)
1169 __field(xfs_lsn_t
, lsn
)
1172 __entry
->dev
= lip
->li_mountp
->m_super
->s_dev
;
1174 __entry
->type
= lip
->li_type
;
1175 __entry
->flags
= lip
->li_flags
;
1176 __entry
->lsn
= lip
->li_lsn
;
1178 TP_printk("dev %d:%d lip %p lsn %d/%d type %s flags %s",
1179 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1181 CYCLE_LSN(__entry
->lsn
), BLOCK_LSN(__entry
->lsn
),
1182 __print_symbolic(__entry
->type
, XFS_LI_TYPE_DESC
),
1183 __print_flags(__entry
->flags
, "|", XFS_LI_FLAGS
))
1186 TRACE_EVENT(xfs_log_force
,
1187 TP_PROTO(struct xfs_mount
*mp
, xfs_lsn_t lsn
, unsigned long caller_ip
),
1188 TP_ARGS(mp
, lsn
, caller_ip
),
1191 __field(xfs_lsn_t
, lsn
)
1192 __field(unsigned long, caller_ip
)
1195 __entry
->dev
= mp
->m_super
->s_dev
;
1197 __entry
->caller_ip
= caller_ip
;
1199 TP_printk("dev %d:%d lsn 0x%llx caller %pS",
1200 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1201 __entry
->lsn
, (void *)__entry
->caller_ip
)
1204 #define DEFINE_LOG_ITEM_EVENT(name) \
1205 DEFINE_EVENT(xfs_log_item_class, name, \
1206 TP_PROTO(struct xfs_log_item *lip), \
1208 DEFINE_LOG_ITEM_EVENT(xfs_ail_push
);
1209 DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned
);
1210 DEFINE_LOG_ITEM_EVENT(xfs_ail_locked
);
1211 DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing
);
1213 DECLARE_EVENT_CLASS(xfs_ail_class
,
1214 TP_PROTO(struct xfs_log_item
*lip
, xfs_lsn_t old_lsn
, xfs_lsn_t new_lsn
),
1215 TP_ARGS(lip
, old_lsn
, new_lsn
),
1218 __field(void *, lip
)
1220 __field(unsigned long, flags
)
1221 __field(xfs_lsn_t
, old_lsn
)
1222 __field(xfs_lsn_t
, new_lsn
)
1225 __entry
->dev
= lip
->li_mountp
->m_super
->s_dev
;
1227 __entry
->type
= lip
->li_type
;
1228 __entry
->flags
= lip
->li_flags
;
1229 __entry
->old_lsn
= old_lsn
;
1230 __entry
->new_lsn
= new_lsn
;
1232 TP_printk("dev %d:%d lip %p old lsn %d/%d new lsn %d/%d type %s flags %s",
1233 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1235 CYCLE_LSN(__entry
->old_lsn
), BLOCK_LSN(__entry
->old_lsn
),
1236 CYCLE_LSN(__entry
->new_lsn
), BLOCK_LSN(__entry
->new_lsn
),
1237 __print_symbolic(__entry
->type
, XFS_LI_TYPE_DESC
),
1238 __print_flags(__entry
->flags
, "|", XFS_LI_FLAGS
))
1241 #define DEFINE_AIL_EVENT(name) \
1242 DEFINE_EVENT(xfs_ail_class, name, \
1243 TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), \
1244 TP_ARGS(lip, old_lsn, new_lsn))
1245 DEFINE_AIL_EVENT(xfs_ail_insert
);
1246 DEFINE_AIL_EVENT(xfs_ail_move
);
1247 DEFINE_AIL_EVENT(xfs_ail_delete
);
1249 TRACE_EVENT(xfs_log_assign_tail_lsn
,
1250 TP_PROTO(struct xlog
*log
, xfs_lsn_t new_lsn
),
1251 TP_ARGS(log
, new_lsn
),
1254 __field(xfs_lsn_t
, new_lsn
)
1255 __field(xfs_lsn_t
, old_lsn
)
1256 __field(xfs_lsn_t
, last_sync_lsn
)
1259 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
1260 __entry
->new_lsn
= new_lsn
;
1261 __entry
->old_lsn
= atomic64_read(&log
->l_tail_lsn
);
1262 __entry
->last_sync_lsn
= atomic64_read(&log
->l_last_sync_lsn
);
1264 TP_printk("dev %d:%d new tail lsn %d/%d, old lsn %d/%d, last sync %d/%d",
1265 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1266 CYCLE_LSN(__entry
->new_lsn
), BLOCK_LSN(__entry
->new_lsn
),
1267 CYCLE_LSN(__entry
->old_lsn
), BLOCK_LSN(__entry
->old_lsn
),
1268 CYCLE_LSN(__entry
->last_sync_lsn
), BLOCK_LSN(__entry
->last_sync_lsn
))
1271 DECLARE_EVENT_CLASS(xfs_file_class
,
1272 TP_PROTO(struct xfs_inode
*ip
, size_t count
, loff_t offset
),
1273 TP_ARGS(ip
, count
, offset
),
1276 __field(xfs_ino_t
, ino
)
1277 __field(xfs_fsize_t
, size
)
1278 __field(loff_t
, offset
)
1279 __field(size_t, count
)
1282 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
1283 __entry
->ino
= ip
->i_ino
;
1284 __entry
->size
= ip
->i_d
.di_size
;
1285 __entry
->offset
= offset
;
1286 __entry
->count
= count
;
1288 TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count 0x%zx",
1289 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1296 #define DEFINE_RW_EVENT(name) \
1297 DEFINE_EVENT(xfs_file_class, name, \
1298 TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset), \
1299 TP_ARGS(ip, count, offset))
1300 DEFINE_RW_EVENT(xfs_file_buffered_read
);
1301 DEFINE_RW_EVENT(xfs_file_direct_read
);
1302 DEFINE_RW_EVENT(xfs_file_dax_read
);
1303 DEFINE_RW_EVENT(xfs_file_buffered_write
);
1304 DEFINE_RW_EVENT(xfs_file_direct_write
);
1305 DEFINE_RW_EVENT(xfs_file_dax_write
);
1307 DECLARE_EVENT_CLASS(xfs_imap_class
,
1308 TP_PROTO(struct xfs_inode
*ip
, xfs_off_t offset
, ssize_t count
,
1309 int whichfork
, struct xfs_bmbt_irec
*irec
),
1310 TP_ARGS(ip
, offset
, count
, whichfork
, irec
),
1313 __field(xfs_ino_t
, ino
)
1314 __field(loff_t
, size
)
1315 __field(loff_t
, offset
)
1316 __field(size_t, count
)
1317 __field(int, whichfork
)
1318 __field(xfs_fileoff_t
, startoff
)
1319 __field(xfs_fsblock_t
, startblock
)
1320 __field(xfs_filblks_t
, blockcount
)
1323 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
1324 __entry
->ino
= ip
->i_ino
;
1325 __entry
->size
= ip
->i_d
.di_size
;
1326 __entry
->offset
= offset
;
1327 __entry
->count
= count
;
1328 __entry
->whichfork
= whichfork
;
1329 __entry
->startoff
= irec
? irec
->br_startoff
: 0;
1330 __entry
->startblock
= irec
? irec
->br_startblock
: 0;
1331 __entry
->blockcount
= irec
? irec
->br_blockcount
: 0;
1333 TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count %zd "
1334 "fork %s startoff 0x%llx startblock %lld blockcount 0x%llx",
1335 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1340 __entry
->whichfork
== XFS_COW_FORK
? "cow" : "data",
1342 (int64_t)__entry
->startblock
,
1343 __entry
->blockcount
)
1346 #define DEFINE_IMAP_EVENT(name) \
1347 DEFINE_EVENT(xfs_imap_class, name, \
1348 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, \
1349 int whichfork, struct xfs_bmbt_irec *irec), \
1350 TP_ARGS(ip, offset, count, whichfork, irec))
1351 DEFINE_IMAP_EVENT(xfs_map_blocks_found
);
1352 DEFINE_IMAP_EVENT(xfs_map_blocks_alloc
);
1353 DEFINE_IMAP_EVENT(xfs_iomap_alloc
);
1354 DEFINE_IMAP_EVENT(xfs_iomap_found
);
1356 DECLARE_EVENT_CLASS(xfs_simple_io_class
,
1357 TP_PROTO(struct xfs_inode
*ip
, xfs_off_t offset
, ssize_t count
),
1358 TP_ARGS(ip
, offset
, count
),
1361 __field(xfs_ino_t
, ino
)
1362 __field(loff_t
, isize
)
1363 __field(loff_t
, disize
)
1364 __field(loff_t
, offset
)
1365 __field(size_t, count
)
1368 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
1369 __entry
->ino
= ip
->i_ino
;
1370 __entry
->isize
= VFS_I(ip
)->i_size
;
1371 __entry
->disize
= ip
->i_d
.di_size
;
1372 __entry
->offset
= offset
;
1373 __entry
->count
= count
;
1375 TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx "
1376 "offset 0x%llx count %zd",
1377 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1385 #define DEFINE_SIMPLE_IO_EVENT(name) \
1386 DEFINE_EVENT(xfs_simple_io_class, name, \
1387 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count), \
1388 TP_ARGS(ip, offset, count))
1389 DEFINE_SIMPLE_IO_EVENT(xfs_delalloc_enospc
);
1390 DEFINE_SIMPLE_IO_EVENT(xfs_unwritten_convert
);
1391 DEFINE_SIMPLE_IO_EVENT(xfs_setfilesize
);
1392 DEFINE_SIMPLE_IO_EVENT(xfs_zero_eof
);
1393 DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write
);
1394 DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_unwritten
);
1395 DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_append
);
1397 DECLARE_EVENT_CLASS(xfs_itrunc_class
,
1398 TP_PROTO(struct xfs_inode
*ip
, xfs_fsize_t new_size
),
1399 TP_ARGS(ip
, new_size
),
1402 __field(xfs_ino_t
, ino
)
1403 __field(xfs_fsize_t
, size
)
1404 __field(xfs_fsize_t
, new_size
)
1407 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
1408 __entry
->ino
= ip
->i_ino
;
1409 __entry
->size
= ip
->i_d
.di_size
;
1410 __entry
->new_size
= new_size
;
1412 TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx",
1413 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1419 #define DEFINE_ITRUNC_EVENT(name) \
1420 DEFINE_EVENT(xfs_itrunc_class, name, \
1421 TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \
1422 TP_ARGS(ip, new_size))
1423 DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start
);
1424 DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end
);
1426 TRACE_EVENT(xfs_pagecache_inval
,
1427 TP_PROTO(struct xfs_inode
*ip
, xfs_off_t start
, xfs_off_t finish
),
1428 TP_ARGS(ip
, start
, finish
),
1431 __field(xfs_ino_t
, ino
)
1432 __field(xfs_fsize_t
, size
)
1433 __field(xfs_off_t
, start
)
1434 __field(xfs_off_t
, finish
)
1437 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
1438 __entry
->ino
= ip
->i_ino
;
1439 __entry
->size
= ip
->i_d
.di_size
;
1440 __entry
->start
= start
;
1441 __entry
->finish
= finish
;
1443 TP_printk("dev %d:%d ino 0x%llx size 0x%llx start 0x%llx finish 0x%llx",
1444 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1451 TRACE_EVENT(xfs_bunmap
,
1452 TP_PROTO(struct xfs_inode
*ip
, xfs_fileoff_t bno
, xfs_filblks_t len
,
1453 int flags
, unsigned long caller_ip
),
1454 TP_ARGS(ip
, bno
, len
, flags
, caller_ip
),
1457 __field(xfs_ino_t
, ino
)
1458 __field(xfs_fsize_t
, size
)
1459 __field(xfs_fileoff_t
, bno
)
1460 __field(xfs_filblks_t
, len
)
1461 __field(unsigned long, caller_ip
)
1465 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
1466 __entry
->ino
= ip
->i_ino
;
1467 __entry
->size
= ip
->i_d
.di_size
;
1470 __entry
->caller_ip
= caller_ip
;
1471 __entry
->flags
= flags
;
1473 TP_printk("dev %d:%d ino 0x%llx size 0x%llx bno 0x%llx len 0x%llx"
1474 "flags %s caller %pS",
1475 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1480 __print_flags(__entry
->flags
, "|", XFS_BMAPI_FLAGS
),
1481 (void *)__entry
->caller_ip
)
1485 DECLARE_EVENT_CLASS(xfs_extent_busy_class
,
1486 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
1487 xfs_agblock_t agbno
, xfs_extlen_t len
),
1488 TP_ARGS(mp
, agno
, agbno
, len
),
1491 __field(xfs_agnumber_t
, agno
)
1492 __field(xfs_agblock_t
, agbno
)
1493 __field(xfs_extlen_t
, len
)
1496 __entry
->dev
= mp
->m_super
->s_dev
;
1497 __entry
->agno
= agno
;
1498 __entry
->agbno
= agbno
;
1501 TP_printk("dev %d:%d agno %u agbno %u len %u",
1502 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1507 #define DEFINE_BUSY_EVENT(name) \
1508 DEFINE_EVENT(xfs_extent_busy_class, name, \
1509 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
1510 xfs_agblock_t agbno, xfs_extlen_t len), \
1511 TP_ARGS(mp, agno, agbno, len))
1512 DEFINE_BUSY_EVENT(xfs_extent_busy
);
1513 DEFINE_BUSY_EVENT(xfs_extent_busy_enomem
);
1514 DEFINE_BUSY_EVENT(xfs_extent_busy_force
);
1515 DEFINE_BUSY_EVENT(xfs_extent_busy_reuse
);
1516 DEFINE_BUSY_EVENT(xfs_extent_busy_clear
);
1518 TRACE_EVENT(xfs_extent_busy_trim
,
1519 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
1520 xfs_agblock_t agbno
, xfs_extlen_t len
,
1521 xfs_agblock_t tbno
, xfs_extlen_t tlen
),
1522 TP_ARGS(mp
, agno
, agbno
, len
, tbno
, tlen
),
1525 __field(xfs_agnumber_t
, agno
)
1526 __field(xfs_agblock_t
, agbno
)
1527 __field(xfs_extlen_t
, len
)
1528 __field(xfs_agblock_t
, tbno
)
1529 __field(xfs_extlen_t
, tlen
)
1532 __entry
->dev
= mp
->m_super
->s_dev
;
1533 __entry
->agno
= agno
;
1534 __entry
->agbno
= agbno
;
1536 __entry
->tbno
= tbno
;
1537 __entry
->tlen
= tlen
;
1539 TP_printk("dev %d:%d agno %u agbno %u len %u tbno %u tlen %u",
1540 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1548 DECLARE_EVENT_CLASS(xfs_agf_class
,
1549 TP_PROTO(struct xfs_mount
*mp
, struct xfs_agf
*agf
, int flags
,
1550 unsigned long caller_ip
),
1551 TP_ARGS(mp
, agf
, flags
, caller_ip
),
1554 __field(xfs_agnumber_t
, agno
)
1556 __field(__u32
, length
)
1557 __field(__u32
, bno_root
)
1558 __field(__u32
, cnt_root
)
1559 __field(__u32
, bno_level
)
1560 __field(__u32
, cnt_level
)
1561 __field(__u32
, flfirst
)
1562 __field(__u32
, fllast
)
1563 __field(__u32
, flcount
)
1564 __field(__u32
, freeblks
)
1565 __field(__u32
, longest
)
1566 __field(unsigned long, caller_ip
)
1569 __entry
->dev
= mp
->m_super
->s_dev
;
1570 __entry
->agno
= be32_to_cpu(agf
->agf_seqno
),
1571 __entry
->flags
= flags
;
1572 __entry
->length
= be32_to_cpu(agf
->agf_length
),
1573 __entry
->bno_root
= be32_to_cpu(agf
->agf_roots
[XFS_BTNUM_BNO
]),
1574 __entry
->cnt_root
= be32_to_cpu(agf
->agf_roots
[XFS_BTNUM_CNT
]),
1575 __entry
->bno_level
=
1576 be32_to_cpu(agf
->agf_levels
[XFS_BTNUM_BNO
]),
1577 __entry
->cnt_level
=
1578 be32_to_cpu(agf
->agf_levels
[XFS_BTNUM_CNT
]),
1579 __entry
->flfirst
= be32_to_cpu(agf
->agf_flfirst
),
1580 __entry
->fllast
= be32_to_cpu(agf
->agf_fllast
),
1581 __entry
->flcount
= be32_to_cpu(agf
->agf_flcount
),
1582 __entry
->freeblks
= be32_to_cpu(agf
->agf_freeblks
),
1583 __entry
->longest
= be32_to_cpu(agf
->agf_longest
);
1584 __entry
->caller_ip
= caller_ip
;
1586 TP_printk("dev %d:%d agno %u flags %s length %u roots b %u c %u "
1587 "levels b %u c %u flfirst %u fllast %u flcount %u "
1588 "freeblks %u longest %u caller %pS",
1589 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1591 __print_flags(__entry
->flags
, "|", XFS_AGF_FLAGS
),
1602 (void *)__entry
->caller_ip
)
1604 #define DEFINE_AGF_EVENT(name) \
1605 DEFINE_EVENT(xfs_agf_class, name, \
1606 TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, \
1607 unsigned long caller_ip), \
1608 TP_ARGS(mp, agf, flags, caller_ip))
1609 DEFINE_AGF_EVENT(xfs_agf
);
1610 DEFINE_AGF_EVENT(xfs_agfl_reset
);
1612 TRACE_EVENT(xfs_free_extent
,
1613 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, xfs_agblock_t agbno
,
1614 xfs_extlen_t len
, enum xfs_ag_resv_type resv
, int haveleft
,
1616 TP_ARGS(mp
, agno
, agbno
, len
, resv
, haveleft
, haveright
),
1619 __field(xfs_agnumber_t
, agno
)
1620 __field(xfs_agblock_t
, agbno
)
1621 __field(xfs_extlen_t
, len
)
1623 __field(int, haveleft
)
1624 __field(int, haveright
)
1627 __entry
->dev
= mp
->m_super
->s_dev
;
1628 __entry
->agno
= agno
;
1629 __entry
->agbno
= agbno
;
1631 __entry
->resv
= resv
;
1632 __entry
->haveleft
= haveleft
;
1633 __entry
->haveright
= haveright
;
1635 TP_printk("dev %d:%d agno %u agbno %u len %u resv %d %s",
1636 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1642 (__entry
->haveright
? "both" : "left") :
1643 (__entry
->haveright
? "right" : "none"))
1647 DECLARE_EVENT_CLASS(xfs_alloc_class
,
1648 TP_PROTO(struct xfs_alloc_arg
*args
),
1652 __field(xfs_agnumber_t
, agno
)
1653 __field(xfs_agblock_t
, agbno
)
1654 __field(xfs_extlen_t
, minlen
)
1655 __field(xfs_extlen_t
, maxlen
)
1656 __field(xfs_extlen_t
, mod
)
1657 __field(xfs_extlen_t
, prod
)
1658 __field(xfs_extlen_t
, minleft
)
1659 __field(xfs_extlen_t
, total
)
1660 __field(xfs_extlen_t
, alignment
)
1661 __field(xfs_extlen_t
, minalignslop
)
1662 __field(xfs_extlen_t
, len
)
1663 __field(short, type
)
1664 __field(short, otype
)
1665 __field(char, wasdel
)
1666 __field(char, wasfromfl
)
1668 __field(int, datatype
)
1669 __field(xfs_fsblock_t
, firstblock
)
1672 __entry
->dev
= args
->mp
->m_super
->s_dev
;
1673 __entry
->agno
= args
->agno
;
1674 __entry
->agbno
= args
->agbno
;
1675 __entry
->minlen
= args
->minlen
;
1676 __entry
->maxlen
= args
->maxlen
;
1677 __entry
->mod
= args
->mod
;
1678 __entry
->prod
= args
->prod
;
1679 __entry
->minleft
= args
->minleft
;
1680 __entry
->total
= args
->total
;
1681 __entry
->alignment
= args
->alignment
;
1682 __entry
->minalignslop
= args
->minalignslop
;
1683 __entry
->len
= args
->len
;
1684 __entry
->type
= args
->type
;
1685 __entry
->otype
= args
->otype
;
1686 __entry
->wasdel
= args
->wasdel
;
1687 __entry
->wasfromfl
= args
->wasfromfl
;
1688 __entry
->resv
= args
->resv
;
1689 __entry
->datatype
= args
->datatype
;
1690 __entry
->firstblock
= args
->tp
->t_firstblock
;
1692 TP_printk("dev %d:%d agno %u agbno %u minlen %u maxlen %u mod %u "
1693 "prod %u minleft %u total %u alignment %u minalignslop %u "
1694 "len %u type %s otype %s wasdel %d wasfromfl %d resv %d "
1695 "datatype 0x%x firstblock 0x%llx",
1696 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1706 __entry
->minalignslop
,
1708 __print_symbolic(__entry
->type
, XFS_ALLOC_TYPES
),
1709 __print_symbolic(__entry
->otype
, XFS_ALLOC_TYPES
),
1714 (unsigned long long)__entry
->firstblock
)
1717 #define DEFINE_ALLOC_EVENT(name) \
1718 DEFINE_EVENT(xfs_alloc_class, name, \
1719 TP_PROTO(struct xfs_alloc_arg *args), \
1721 DEFINE_ALLOC_EVENT(xfs_alloc_exact_done
);
1722 DEFINE_ALLOC_EVENT(xfs_alloc_exact_notfound
);
1723 DEFINE_ALLOC_EVENT(xfs_alloc_exact_error
);
1724 DEFINE_ALLOC_EVENT(xfs_alloc_near_nominleft
);
1725 DEFINE_ALLOC_EVENT(xfs_alloc_near_first
);
1726 DEFINE_ALLOC_EVENT(xfs_alloc_cur
);
1727 DEFINE_ALLOC_EVENT(xfs_alloc_cur_right
);
1728 DEFINE_ALLOC_EVENT(xfs_alloc_cur_left
);
1729 DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup
);
1730 DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup_done
);
1731 DEFINE_ALLOC_EVENT(xfs_alloc_near_error
);
1732 DEFINE_ALLOC_EVENT(xfs_alloc_near_noentry
);
1733 DEFINE_ALLOC_EVENT(xfs_alloc_near_busy
);
1734 DEFINE_ALLOC_EVENT(xfs_alloc_size_neither
);
1735 DEFINE_ALLOC_EVENT(xfs_alloc_size_noentry
);
1736 DEFINE_ALLOC_EVENT(xfs_alloc_size_nominleft
);
1737 DEFINE_ALLOC_EVENT(xfs_alloc_size_done
);
1738 DEFINE_ALLOC_EVENT(xfs_alloc_size_error
);
1739 DEFINE_ALLOC_EVENT(xfs_alloc_size_busy
);
1740 DEFINE_ALLOC_EVENT(xfs_alloc_small_freelist
);
1741 DEFINE_ALLOC_EVENT(xfs_alloc_small_notenough
);
1742 DEFINE_ALLOC_EVENT(xfs_alloc_small_done
);
1743 DEFINE_ALLOC_EVENT(xfs_alloc_small_error
);
1744 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_badargs
);
1745 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_nofix
);
1746 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_noagbp
);
1747 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_loopfailed
);
1748 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_allfailed
);
1750 TRACE_EVENT(xfs_alloc_cur_check
,
1751 TP_PROTO(struct xfs_mount
*mp
, xfs_btnum_t btnum
, xfs_agblock_t bno
,
1752 xfs_extlen_t len
, xfs_extlen_t diff
, bool new),
1753 TP_ARGS(mp
, btnum
, bno
, len
, diff
, new),
1756 __field(xfs_btnum_t
, btnum
)
1757 __field(xfs_agblock_t
, bno
)
1758 __field(xfs_extlen_t
, len
)
1759 __field(xfs_extlen_t
, diff
)
1763 __entry
->dev
= mp
->m_super
->s_dev
;
1764 __entry
->btnum
= btnum
;
1767 __entry
->diff
= diff
;
1770 TP_printk("dev %d:%d btree %s bno 0x%x len 0x%x diff 0x%x new %d",
1771 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1772 __print_symbolic(__entry
->btnum
, XFS_BTNUM_STRINGS
),
1773 __entry
->bno
, __entry
->len
, __entry
->diff
, __entry
->new)
1776 DECLARE_EVENT_CLASS(xfs_da_class
,
1777 TP_PROTO(struct xfs_da_args
*args
),
1781 __field(xfs_ino_t
, ino
)
1782 __dynamic_array(char, name
, args
->namelen
)
1783 __field(int, namelen
)
1784 __field(xfs_dahash_t
, hashval
)
1785 __field(xfs_ino_t
, inumber
)
1786 __field(int, op_flags
)
1789 __entry
->dev
= VFS_I(args
->dp
)->i_sb
->s_dev
;
1790 __entry
->ino
= args
->dp
->i_ino
;
1792 memcpy(__get_str(name
), args
->name
, args
->namelen
);
1793 __entry
->namelen
= args
->namelen
;
1794 __entry
->hashval
= args
->hashval
;
1795 __entry
->inumber
= args
->inumber
;
1796 __entry
->op_flags
= args
->op_flags
;
1798 TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d hashval 0x%x "
1799 "inumber 0x%llx op_flags %s",
1800 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1803 __entry
->namelen
? __get_str(name
) : NULL
,
1807 __print_flags(__entry
->op_flags
, "|", XFS_DA_OP_FLAGS
))
1810 #define DEFINE_DIR2_EVENT(name) \
1811 DEFINE_EVENT(xfs_da_class, name, \
1812 TP_PROTO(struct xfs_da_args *args), \
1814 DEFINE_DIR2_EVENT(xfs_dir2_sf_addname
);
1815 DEFINE_DIR2_EVENT(xfs_dir2_sf_create
);
1816 DEFINE_DIR2_EVENT(xfs_dir2_sf_lookup
);
1817 DEFINE_DIR2_EVENT(xfs_dir2_sf_replace
);
1818 DEFINE_DIR2_EVENT(xfs_dir2_sf_removename
);
1819 DEFINE_DIR2_EVENT(xfs_dir2_sf_toino4
);
1820 DEFINE_DIR2_EVENT(xfs_dir2_sf_toino8
);
1821 DEFINE_DIR2_EVENT(xfs_dir2_sf_to_block
);
1822 DEFINE_DIR2_EVENT(xfs_dir2_block_addname
);
1823 DEFINE_DIR2_EVENT(xfs_dir2_block_lookup
);
1824 DEFINE_DIR2_EVENT(xfs_dir2_block_replace
);
1825 DEFINE_DIR2_EVENT(xfs_dir2_block_removename
);
1826 DEFINE_DIR2_EVENT(xfs_dir2_block_to_sf
);
1827 DEFINE_DIR2_EVENT(xfs_dir2_block_to_leaf
);
1828 DEFINE_DIR2_EVENT(xfs_dir2_leaf_addname
);
1829 DEFINE_DIR2_EVENT(xfs_dir2_leaf_lookup
);
1830 DEFINE_DIR2_EVENT(xfs_dir2_leaf_replace
);
1831 DEFINE_DIR2_EVENT(xfs_dir2_leaf_removename
);
1832 DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_block
);
1833 DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_node
);
1834 DEFINE_DIR2_EVENT(xfs_dir2_node_addname
);
1835 DEFINE_DIR2_EVENT(xfs_dir2_node_lookup
);
1836 DEFINE_DIR2_EVENT(xfs_dir2_node_replace
);
1837 DEFINE_DIR2_EVENT(xfs_dir2_node_removename
);
1838 DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf
);
1840 DECLARE_EVENT_CLASS(xfs_attr_class
,
1841 TP_PROTO(struct xfs_da_args
*args
),
1845 __field(xfs_ino_t
, ino
)
1846 __dynamic_array(char, name
, args
->namelen
)
1847 __field(int, namelen
)
1848 __field(int, valuelen
)
1849 __field(xfs_dahash_t
, hashval
)
1850 __field(unsigned int, attr_filter
)
1851 __field(unsigned int, attr_flags
)
1852 __field(int, op_flags
)
1855 __entry
->dev
= VFS_I(args
->dp
)->i_sb
->s_dev
;
1856 __entry
->ino
= args
->dp
->i_ino
;
1858 memcpy(__get_str(name
), args
->name
, args
->namelen
);
1859 __entry
->namelen
= args
->namelen
;
1860 __entry
->valuelen
= args
->valuelen
;
1861 __entry
->hashval
= args
->hashval
;
1862 __entry
->attr_filter
= args
->attr_filter
;
1863 __entry
->attr_flags
= args
->attr_flags
;
1864 __entry
->op_flags
= args
->op_flags
;
1866 TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d "
1867 "hashval 0x%x filter %s flags %s op_flags %s",
1868 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1871 __entry
->namelen
? __get_str(name
) : NULL
,
1875 __print_flags(__entry
->attr_filter
, "|",
1876 XFS_ATTR_FILTER_FLAGS
),
1877 __print_flags(__entry
->attr_flags
, "|",
1878 { XATTR_CREATE
, "CREATE" },
1879 { XATTR_REPLACE
, "REPLACE" }),
1880 __print_flags(__entry
->op_flags
, "|", XFS_DA_OP_FLAGS
))
1883 #define DEFINE_ATTR_EVENT(name) \
1884 DEFINE_EVENT(xfs_attr_class, name, \
1885 TP_PROTO(struct xfs_da_args *args), \
1887 DEFINE_ATTR_EVENT(xfs_attr_sf_add
);
1888 DEFINE_ATTR_EVENT(xfs_attr_sf_addname
);
1889 DEFINE_ATTR_EVENT(xfs_attr_sf_create
);
1890 DEFINE_ATTR_EVENT(xfs_attr_sf_lookup
);
1891 DEFINE_ATTR_EVENT(xfs_attr_sf_remove
);
1892 DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf
);
1894 DEFINE_ATTR_EVENT(xfs_attr_leaf_add
);
1895 DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old
);
1896 DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new
);
1897 DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work
);
1898 DEFINE_ATTR_EVENT(xfs_attr_leaf_addname
);
1899 DEFINE_ATTR_EVENT(xfs_attr_leaf_create
);
1900 DEFINE_ATTR_EVENT(xfs_attr_leaf_compact
);
1901 DEFINE_ATTR_EVENT(xfs_attr_leaf_get
);
1902 DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup
);
1903 DEFINE_ATTR_EVENT(xfs_attr_leaf_replace
);
1904 DEFINE_ATTR_EVENT(xfs_attr_leaf_remove
);
1905 DEFINE_ATTR_EVENT(xfs_attr_leaf_removename
);
1906 DEFINE_ATTR_EVENT(xfs_attr_leaf_split
);
1907 DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before
);
1908 DEFINE_ATTR_EVENT(xfs_attr_leaf_split_after
);
1909 DEFINE_ATTR_EVENT(xfs_attr_leaf_clearflag
);
1910 DEFINE_ATTR_EVENT(xfs_attr_leaf_setflag
);
1911 DEFINE_ATTR_EVENT(xfs_attr_leaf_flipflags
);
1912 DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf
);
1913 DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node
);
1914 DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance
);
1915 DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance
);
1916 DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall
);
1918 DEFINE_ATTR_EVENT(xfs_attr_node_addname
);
1919 DEFINE_ATTR_EVENT(xfs_attr_node_get
);
1920 DEFINE_ATTR_EVENT(xfs_attr_node_replace
);
1921 DEFINE_ATTR_EVENT(xfs_attr_node_removename
);
1923 DEFINE_ATTR_EVENT(xfs_attr_fillstate
);
1924 DEFINE_ATTR_EVENT(xfs_attr_refillstate
);
1926 DEFINE_ATTR_EVENT(xfs_attr_rmtval_get
);
1927 DEFINE_ATTR_EVENT(xfs_attr_rmtval_set
);
1928 DEFINE_ATTR_EVENT(xfs_attr_rmtval_remove
);
1930 #define DEFINE_DA_EVENT(name) \
1931 DEFINE_EVENT(xfs_da_class, name, \
1932 TP_PROTO(struct xfs_da_args *args), \
1934 DEFINE_DA_EVENT(xfs_da_split
);
1935 DEFINE_DA_EVENT(xfs_da_join
);
1936 DEFINE_DA_EVENT(xfs_da_link_before
);
1937 DEFINE_DA_EVENT(xfs_da_link_after
);
1938 DEFINE_DA_EVENT(xfs_da_unlink_back
);
1939 DEFINE_DA_EVENT(xfs_da_unlink_forward
);
1940 DEFINE_DA_EVENT(xfs_da_root_split
);
1941 DEFINE_DA_EVENT(xfs_da_root_join
);
1942 DEFINE_DA_EVENT(xfs_da_node_add
);
1943 DEFINE_DA_EVENT(xfs_da_node_create
);
1944 DEFINE_DA_EVENT(xfs_da_node_split
);
1945 DEFINE_DA_EVENT(xfs_da_node_remove
);
1946 DEFINE_DA_EVENT(xfs_da_node_rebalance
);
1947 DEFINE_DA_EVENT(xfs_da_node_unbalance
);
1948 DEFINE_DA_EVENT(xfs_da_node_toosmall
);
1949 DEFINE_DA_EVENT(xfs_da_swap_lastblock
);
1950 DEFINE_DA_EVENT(xfs_da_grow_inode
);
1951 DEFINE_DA_EVENT(xfs_da_shrink_inode
);
1952 DEFINE_DA_EVENT(xfs_da_fixhashpath
);
1953 DEFINE_DA_EVENT(xfs_da_path_shift
);
1955 DECLARE_EVENT_CLASS(xfs_dir2_space_class
,
1956 TP_PROTO(struct xfs_da_args
*args
, int idx
),
1960 __field(xfs_ino_t
, ino
)
1961 __field(int, op_flags
)
1965 __entry
->dev
= VFS_I(args
->dp
)->i_sb
->s_dev
;
1966 __entry
->ino
= args
->dp
->i_ino
;
1967 __entry
->op_flags
= args
->op_flags
;
1970 TP_printk("dev %d:%d ino 0x%llx op_flags %s index %d",
1971 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
1973 __print_flags(__entry
->op_flags
, "|", XFS_DA_OP_FLAGS
),
1977 #define DEFINE_DIR2_SPACE_EVENT(name) \
1978 DEFINE_EVENT(xfs_dir2_space_class, name, \
1979 TP_PROTO(struct xfs_da_args *args, int idx), \
1981 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_add
);
1982 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_remove
);
1983 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_grow_inode
);
1984 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_shrink_inode
);
1986 TRACE_EVENT(xfs_dir2_leafn_moveents
,
1987 TP_PROTO(struct xfs_da_args
*args
, int src_idx
, int dst_idx
, int count
),
1988 TP_ARGS(args
, src_idx
, dst_idx
, count
),
1991 __field(xfs_ino_t
, ino
)
1992 __field(int, op_flags
)
1993 __field(int, src_idx
)
1994 __field(int, dst_idx
)
1998 __entry
->dev
= VFS_I(args
->dp
)->i_sb
->s_dev
;
1999 __entry
->ino
= args
->dp
->i_ino
;
2000 __entry
->op_flags
= args
->op_flags
;
2001 __entry
->src_idx
= src_idx
;
2002 __entry
->dst_idx
= dst_idx
;
2003 __entry
->count
= count
;
2005 TP_printk("dev %d:%d ino 0x%llx op_flags %s "
2006 "src_idx %d dst_idx %d count %d",
2007 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2009 __print_flags(__entry
->op_flags
, "|", XFS_DA_OP_FLAGS
),
2015 #define XFS_SWAPEXT_INODES \
2019 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_DEV
);
2020 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_LOCAL
);
2021 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_EXTENTS
);
2022 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_BTREE
);
2023 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_UUID
);
2025 DECLARE_EVENT_CLASS(xfs_swap_extent_class
,
2026 TP_PROTO(struct xfs_inode
*ip
, int which
),
2031 __field(xfs_ino_t
, ino
)
2032 __field(int, format
)
2034 __field(int, broot_size
)
2035 __field(int, fork_off
)
2038 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
2039 __entry
->which
= which
;
2040 __entry
->ino
= ip
->i_ino
;
2041 __entry
->format
= ip
->i_df
.if_format
;
2042 __entry
->nex
= ip
->i_df
.if_nextents
;
2043 __entry
->broot_size
= ip
->i_df
.if_broot_bytes
;
2044 __entry
->fork_off
= XFS_IFORK_BOFF(ip
);
2046 TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %d, "
2047 "broot size %d, fork offset %d",
2048 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2050 __print_symbolic(__entry
->which
, XFS_SWAPEXT_INODES
),
2051 __print_symbolic(__entry
->format
, XFS_INODE_FORMAT_STR
),
2053 __entry
->broot_size
,
2057 #define DEFINE_SWAPEXT_EVENT(name) \
2058 DEFINE_EVENT(xfs_swap_extent_class, name, \
2059 TP_PROTO(struct xfs_inode *ip, int which), \
2062 DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before
);
2063 DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after
);
2065 TRACE_EVENT(xfs_log_recover
,
2066 TP_PROTO(struct xlog
*log
, xfs_daddr_t headblk
, xfs_daddr_t tailblk
),
2067 TP_ARGS(log
, headblk
, tailblk
),
2070 __field(xfs_daddr_t
, headblk
)
2071 __field(xfs_daddr_t
, tailblk
)
2074 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
2075 __entry
->headblk
= headblk
;
2076 __entry
->tailblk
= tailblk
;
2078 TP_printk("dev %d:%d headblk 0x%llx tailblk 0x%llx",
2079 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->headblk
,
2083 TRACE_EVENT(xfs_log_recover_record
,
2084 TP_PROTO(struct xlog
*log
, struct xlog_rec_header
*rhead
, int pass
),
2085 TP_ARGS(log
, rhead
, pass
),
2088 __field(xfs_lsn_t
, lsn
)
2090 __field(int, num_logops
)
2094 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
2095 __entry
->lsn
= be64_to_cpu(rhead
->h_lsn
);
2096 __entry
->len
= be32_to_cpu(rhead
->h_len
);
2097 __entry
->num_logops
= be32_to_cpu(rhead
->h_num_logops
);
2098 __entry
->pass
= pass
;
2100 TP_printk("dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d",
2101 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2102 __entry
->lsn
, __entry
->len
, __entry
->num_logops
,
2106 DECLARE_EVENT_CLASS(xfs_log_recover_item_class
,
2107 TP_PROTO(struct xlog
*log
, struct xlog_recover
*trans
,
2108 struct xlog_recover_item
*item
, int pass
),
2109 TP_ARGS(log
, trans
, item
, pass
),
2112 __field(unsigned long, item
)
2113 __field(xlog_tid_t
, tid
)
2114 __field(xfs_lsn_t
, lsn
)
2121 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
2122 __entry
->item
= (unsigned long)item
;
2123 __entry
->tid
= trans
->r_log_tid
;
2124 __entry
->lsn
= trans
->r_lsn
;
2125 __entry
->type
= ITEM_TYPE(item
);
2126 __entry
->pass
= pass
;
2127 __entry
->count
= item
->ri_cnt
;
2128 __entry
->total
= item
->ri_total
;
2130 TP_printk("dev %d:%d tid 0x%x lsn 0x%llx, pass %d, item %p, "
2131 "item type %s item region count/total %d/%d",
2132 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2136 (void *)__entry
->item
,
2137 __print_symbolic(__entry
->type
, XFS_LI_TYPE_DESC
),
2142 #define DEFINE_LOG_RECOVER_ITEM(name) \
2143 DEFINE_EVENT(xfs_log_recover_item_class, name, \
2144 TP_PROTO(struct xlog *log, struct xlog_recover *trans, \
2145 struct xlog_recover_item *item, int pass), \
2146 TP_ARGS(log, trans, item, pass))
2148 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add
);
2149 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont
);
2150 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head
);
2151 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail
);
2152 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover
);
2154 DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class
,
2155 TP_PROTO(struct xlog
*log
, struct xfs_buf_log_format
*buf_f
),
2156 TP_ARGS(log
, buf_f
),
2159 __field(int64_t, blkno
)
2160 __field(unsigned short, len
)
2161 __field(unsigned short, flags
)
2162 __field(unsigned short, size
)
2163 __field(unsigned int, map_size
)
2166 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
2167 __entry
->blkno
= buf_f
->blf_blkno
;
2168 __entry
->len
= buf_f
->blf_len
;
2169 __entry
->flags
= buf_f
->blf_flags
;
2170 __entry
->size
= buf_f
->blf_size
;
2171 __entry
->map_size
= buf_f
->blf_map_size
;
2173 TP_printk("dev %d:%d blkno 0x%llx, len %u, flags 0x%x, size %d, "
2175 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2183 #define DEFINE_LOG_RECOVER_BUF_ITEM(name) \
2184 DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \
2185 TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), \
2186 TP_ARGS(log, buf_f))
2188 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel
);
2189 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel
);
2190 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add
);
2191 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc
);
2192 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover
);
2193 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_skip
);
2194 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf
);
2195 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf
);
2196 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf
);
2198 DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class
,
2199 TP_PROTO(struct xlog
*log
, struct xfs_inode_log_format
*in_f
),
2203 __field(xfs_ino_t
, ino
)
2204 __field(unsigned short, size
)
2205 __field(int, fields
)
2206 __field(unsigned short, asize
)
2207 __field(unsigned short, dsize
)
2208 __field(int64_t, blkno
)
2210 __field(int, boffset
)
2213 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
2214 __entry
->ino
= in_f
->ilf_ino
;
2215 __entry
->size
= in_f
->ilf_size
;
2216 __entry
->fields
= in_f
->ilf_fields
;
2217 __entry
->asize
= in_f
->ilf_asize
;
2218 __entry
->dsize
= in_f
->ilf_dsize
;
2219 __entry
->blkno
= in_f
->ilf_blkno
;
2220 __entry
->len
= in_f
->ilf_len
;
2221 __entry
->boffset
= in_f
->ilf_boffset
;
2223 TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, "
2224 "dsize %d, blkno 0x%llx, len %d, boffset %d",
2225 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2235 #define DEFINE_LOG_RECOVER_INO_ITEM(name) \
2236 DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \
2237 TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), \
2240 DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover
);
2241 DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel
);
2242 DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip
);
2244 DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class
,
2245 TP_PROTO(struct xlog
*log
, struct xfs_icreate_log
*in_f
),
2249 __field(xfs_agnumber_t
, agno
)
2250 __field(xfs_agblock_t
, agbno
)
2251 __field(unsigned int, count
)
2252 __field(unsigned int, isize
)
2253 __field(xfs_agblock_t
, length
)
2254 __field(unsigned int, gen
)
2257 __entry
->dev
= log
->l_mp
->m_super
->s_dev
;
2258 __entry
->agno
= be32_to_cpu(in_f
->icl_ag
);
2259 __entry
->agbno
= be32_to_cpu(in_f
->icl_agbno
);
2260 __entry
->count
= be32_to_cpu(in_f
->icl_count
);
2261 __entry
->isize
= be32_to_cpu(in_f
->icl_isize
);
2262 __entry
->length
= be32_to_cpu(in_f
->icl_length
);
2263 __entry
->gen
= be32_to_cpu(in_f
->icl_gen
);
2265 TP_printk("dev %d:%d agno %u agbno %u count %u isize %u length %u "
2266 "gen %u", MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2267 __entry
->agno
, __entry
->agbno
, __entry
->count
, __entry
->isize
,
2268 __entry
->length
, __entry
->gen
)
2270 #define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \
2271 DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \
2272 TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), \
2275 DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_cancel
);
2276 DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_recover
);
2278 DECLARE_EVENT_CLASS(xfs_discard_class
,
2279 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2280 xfs_agblock_t agbno
, xfs_extlen_t len
),
2281 TP_ARGS(mp
, agno
, agbno
, len
),
2284 __field(xfs_agnumber_t
, agno
)
2285 __field(xfs_agblock_t
, agbno
)
2286 __field(xfs_extlen_t
, len
)
2289 __entry
->dev
= mp
->m_super
->s_dev
;
2290 __entry
->agno
= agno
;
2291 __entry
->agbno
= agbno
;
2294 TP_printk("dev %d:%d agno %u agbno %u len %u",
2295 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2301 #define DEFINE_DISCARD_EVENT(name) \
2302 DEFINE_EVENT(xfs_discard_class, name, \
2303 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2304 xfs_agblock_t agbno, xfs_extlen_t len), \
2305 TP_ARGS(mp, agno, agbno, len))
2306 DEFINE_DISCARD_EVENT(xfs_discard_extent
);
2307 DEFINE_DISCARD_EVENT(xfs_discard_toosmall
);
2308 DEFINE_DISCARD_EVENT(xfs_discard_exclude
);
2309 DEFINE_DISCARD_EVENT(xfs_discard_busy
);
2311 /* btree cursor events */
2312 TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi
);
2313 TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi
);
2314 TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi
);
2315 TRACE_DEFINE_ENUM(XFS_BTNUM_INOi
);
2316 TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi
);
2317 TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi
);
2318 TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi
);
2320 DECLARE_EVENT_CLASS(xfs_btree_cur_class
,
2321 TP_PROTO(struct xfs_btree_cur
*cur
, int level
, struct xfs_buf
*bp
),
2322 TP_ARGS(cur
, level
, bp
),
2325 __field(xfs_btnum_t
, btnum
)
2327 __field(int, nlevels
)
2329 __field(xfs_daddr_t
, daddr
)
2332 __entry
->dev
= cur
->bc_mp
->m_super
->s_dev
;
2333 __entry
->btnum
= cur
->bc_btnum
;
2334 __entry
->level
= level
;
2335 __entry
->nlevels
= cur
->bc_nlevels
;
2336 __entry
->ptr
= cur
->bc_ptrs
[level
];
2337 __entry
->daddr
= bp
? bp
->b_bn
: -1;
2339 TP_printk("dev %d:%d btree %s level %d/%d ptr %d daddr 0x%llx",
2340 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2341 __print_symbolic(__entry
->btnum
, XFS_BTNUM_STRINGS
),
2345 (unsigned long long)__entry
->daddr
)
2348 #define DEFINE_BTREE_CUR_EVENT(name) \
2349 DEFINE_EVENT(xfs_btree_cur_class, name, \
2350 TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \
2351 TP_ARGS(cur, level, bp))
2352 DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys
);
2353 DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range
);
2356 struct xfs_defer_pending
;
2358 DECLARE_EVENT_CLASS(xfs_defer_class
,
2359 TP_PROTO(struct xfs_trans
*tp
, unsigned long caller_ip
),
2360 TP_ARGS(tp
, caller_ip
),
2363 __field(struct xfs_trans
*, tp
)
2364 __field(char, committed
)
2365 __field(unsigned long, caller_ip
)
2368 __entry
->dev
= tp
->t_mountp
->m_super
->s_dev
;
2370 __entry
->caller_ip
= caller_ip
;
2372 TP_printk("dev %d:%d tp %p caller %pS",
2373 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2375 (char *)__entry
->caller_ip
)
2377 #define DEFINE_DEFER_EVENT(name) \
2378 DEFINE_EVENT(xfs_defer_class, name, \
2379 TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \
2380 TP_ARGS(tp, caller_ip))
2382 DECLARE_EVENT_CLASS(xfs_defer_error_class
,
2383 TP_PROTO(struct xfs_trans
*tp
, int error
),
2387 __field(struct xfs_trans
*, tp
)
2388 __field(char, committed
)
2392 __entry
->dev
= tp
->t_mountp
->m_super
->s_dev
;
2394 __entry
->error
= error
;
2396 TP_printk("dev %d:%d tp %p err %d",
2397 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2401 #define DEFINE_DEFER_ERROR_EVENT(name) \
2402 DEFINE_EVENT(xfs_defer_error_class, name, \
2403 TP_PROTO(struct xfs_trans *tp, int error), \
2406 DECLARE_EVENT_CLASS(xfs_defer_pending_class
,
2407 TP_PROTO(struct xfs_mount
*mp
, struct xfs_defer_pending
*dfp
),
2412 __field(void *, intent
)
2413 __field(char, committed
)
2417 __entry
->dev
= mp
? mp
->m_super
->s_dev
: 0;
2418 __entry
->type
= dfp
->dfp_type
;
2419 __entry
->intent
= dfp
->dfp_intent
;
2420 __entry
->committed
= dfp
->dfp_done
!= NULL
;
2421 __entry
->nr
= dfp
->dfp_count
;
2423 TP_printk("dev %d:%d optype %d intent %p committed %d nr %d",
2424 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2430 #define DEFINE_DEFER_PENDING_EVENT(name) \
2431 DEFINE_EVENT(xfs_defer_pending_class, name, \
2432 TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), \
2435 DECLARE_EVENT_CLASS(xfs_phys_extent_deferred_class
,
2436 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2437 int type
, xfs_agblock_t agbno
, xfs_extlen_t len
),
2438 TP_ARGS(mp
, agno
, type
, agbno
, len
),
2441 __field(xfs_agnumber_t
, agno
)
2443 __field(xfs_agblock_t
, agbno
)
2444 __field(xfs_extlen_t
, len
)
2447 __entry
->dev
= mp
->m_super
->s_dev
;
2448 __entry
->agno
= agno
;
2449 __entry
->type
= type
;
2450 __entry
->agbno
= agbno
;
2453 TP_printk("dev %d:%d op %d agno %u agbno %u len %u",
2454 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2460 #define DEFINE_PHYS_EXTENT_DEFERRED_EVENT(name) \
2461 DEFINE_EVENT(xfs_phys_extent_deferred_class, name, \
2462 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2464 xfs_agblock_t bno, \
2465 xfs_extlen_t len), \
2466 TP_ARGS(mp, agno, type, bno, len))
2468 DECLARE_EVENT_CLASS(xfs_map_extent_deferred_class
,
2469 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2471 xfs_agblock_t agbno
,
2474 xfs_fileoff_t offset
,
2476 xfs_exntst_t state
),
2477 TP_ARGS(mp
, agno
, op
, agbno
, ino
, whichfork
, offset
, len
, state
),
2480 __field(xfs_agnumber_t
, agno
)
2481 __field(xfs_ino_t
, ino
)
2482 __field(xfs_agblock_t
, agbno
)
2483 __field(int, whichfork
)
2484 __field(xfs_fileoff_t
, l_loff
)
2485 __field(xfs_filblks_t
, l_len
)
2486 __field(xfs_exntst_t
, l_state
)
2490 __entry
->dev
= mp
->m_super
->s_dev
;
2491 __entry
->agno
= agno
;
2493 __entry
->agbno
= agbno
;
2494 __entry
->whichfork
= whichfork
;
2495 __entry
->l_loff
= offset
;
2496 __entry
->l_len
= len
;
2497 __entry
->l_state
= state
;
2500 TP_printk("dev %d:%d op %d agno %u agbno %u owner %lld %s offset %llu len %llu state %d",
2501 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2506 __entry
->whichfork
== XFS_ATTR_FORK
? "attr" : "data",
2511 #define DEFINE_MAP_EXTENT_DEFERRED_EVENT(name) \
2512 DEFINE_EVENT(xfs_map_extent_deferred_class, name, \
2513 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2515 xfs_agblock_t agbno, \
2518 xfs_fileoff_t offset, \
2519 xfs_filblks_t len, \
2520 xfs_exntst_t state), \
2521 TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state))
2523 DEFINE_DEFER_EVENT(xfs_defer_cancel
);
2524 DEFINE_DEFER_EVENT(xfs_defer_trans_roll
);
2525 DEFINE_DEFER_EVENT(xfs_defer_trans_abort
);
2526 DEFINE_DEFER_EVENT(xfs_defer_finish
);
2527 DEFINE_DEFER_EVENT(xfs_defer_finish_done
);
2529 DEFINE_DEFER_ERROR_EVENT(xfs_defer_trans_roll_error
);
2530 DEFINE_DEFER_ERROR_EVENT(xfs_defer_finish_error
);
2532 DEFINE_DEFER_PENDING_EVENT(xfs_defer_create_intent
);
2533 DEFINE_DEFER_PENDING_EVENT(xfs_defer_cancel_list
);
2534 DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish
);
2535 DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort
);
2536 DEFINE_DEFER_PENDING_EVENT(xfs_defer_relog_intent
);
2538 #define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT
2539 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer
);
2540 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred
);
2541 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_defer
);
2542 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_deferred
);
2544 /* rmap tracepoints */
2545 DECLARE_EVENT_CLASS(xfs_rmap_class
,
2546 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2547 xfs_agblock_t agbno
, xfs_extlen_t len
, bool unwritten
,
2548 const struct xfs_owner_info
*oinfo
),
2549 TP_ARGS(mp
, agno
, agbno
, len
, unwritten
, oinfo
),
2552 __field(xfs_agnumber_t
, agno
)
2553 __field(xfs_agblock_t
, agbno
)
2554 __field(xfs_extlen_t
, len
)
2555 __field(uint64_t, owner
)
2556 __field(uint64_t, offset
)
2557 __field(unsigned long, flags
)
2560 __entry
->dev
= mp
->m_super
->s_dev
;
2561 __entry
->agno
= agno
;
2562 __entry
->agbno
= agbno
;
2564 __entry
->owner
= oinfo
->oi_owner
;
2565 __entry
->offset
= oinfo
->oi_offset
;
2566 __entry
->flags
= oinfo
->oi_flags
;
2568 __entry
->flags
|= XFS_RMAP_UNWRITTEN
;
2570 TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%lx",
2571 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2579 #define DEFINE_RMAP_EVENT(name) \
2580 DEFINE_EVENT(xfs_rmap_class, name, \
2581 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2582 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \
2583 const struct xfs_owner_info *oinfo), \
2584 TP_ARGS(mp, agno, agbno, len, unwritten, oinfo))
2586 /* simple AG-based error/%ip tracepoint class */
2587 DECLARE_EVENT_CLASS(xfs_ag_error_class
,
2588 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, int error
,
2589 unsigned long caller_ip
),
2590 TP_ARGS(mp
, agno
, error
, caller_ip
),
2593 __field(xfs_agnumber_t
, agno
)
2595 __field(unsigned long, caller_ip
)
2598 __entry
->dev
= mp
->m_super
->s_dev
;
2599 __entry
->agno
= agno
;
2600 __entry
->error
= error
;
2601 __entry
->caller_ip
= caller_ip
;
2603 TP_printk("dev %d:%d agno %u error %d caller %pS",
2604 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2607 (char *)__entry
->caller_ip
)
2610 #define DEFINE_AG_ERROR_EVENT(name) \
2611 DEFINE_EVENT(xfs_ag_error_class, name, \
2612 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \
2613 unsigned long caller_ip), \
2614 TP_ARGS(mp, agno, error, caller_ip))
2616 DEFINE_RMAP_EVENT(xfs_rmap_unmap
);
2617 DEFINE_RMAP_EVENT(xfs_rmap_unmap_done
);
2618 DEFINE_AG_ERROR_EVENT(xfs_rmap_unmap_error
);
2619 DEFINE_RMAP_EVENT(xfs_rmap_map
);
2620 DEFINE_RMAP_EVENT(xfs_rmap_map_done
);
2621 DEFINE_AG_ERROR_EVENT(xfs_rmap_map_error
);
2622 DEFINE_RMAP_EVENT(xfs_rmap_convert
);
2623 DEFINE_RMAP_EVENT(xfs_rmap_convert_done
);
2624 DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_error
);
2625 DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_state
);
2627 DECLARE_EVENT_CLASS(xfs_rmapbt_class
,
2628 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2629 xfs_agblock_t agbno
, xfs_extlen_t len
,
2630 uint64_t owner
, uint64_t offset
, unsigned int flags
),
2631 TP_ARGS(mp
, agno
, agbno
, len
, owner
, offset
, flags
),
2634 __field(xfs_agnumber_t
, agno
)
2635 __field(xfs_agblock_t
, agbno
)
2636 __field(xfs_extlen_t
, len
)
2637 __field(uint64_t, owner
)
2638 __field(uint64_t, offset
)
2639 __field(unsigned int, flags
)
2642 __entry
->dev
= mp
->m_super
->s_dev
;
2643 __entry
->agno
= agno
;
2644 __entry
->agbno
= agbno
;
2646 __entry
->owner
= owner
;
2647 __entry
->offset
= offset
;
2648 __entry
->flags
= flags
;
2650 TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x",
2651 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2659 #define DEFINE_RMAPBT_EVENT(name) \
2660 DEFINE_EVENT(xfs_rmapbt_class, name, \
2661 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2662 xfs_agblock_t agbno, xfs_extlen_t len, \
2663 uint64_t owner, uint64_t offset, unsigned int flags), \
2664 TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
2666 #define DEFINE_RMAP_DEFERRED_EVENT DEFINE_MAP_EXTENT_DEFERRED_EVENT
2667 DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer
);
2668 DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred
);
2670 DEFINE_BUSY_EVENT(xfs_rmapbt_alloc_block
);
2671 DEFINE_BUSY_EVENT(xfs_rmapbt_free_block
);
2672 DEFINE_RMAPBT_EVENT(xfs_rmap_update
);
2673 DEFINE_RMAPBT_EVENT(xfs_rmap_insert
);
2674 DEFINE_RMAPBT_EVENT(xfs_rmap_delete
);
2675 DEFINE_AG_ERROR_EVENT(xfs_rmap_insert_error
);
2676 DEFINE_AG_ERROR_EVENT(xfs_rmap_delete_error
);
2677 DEFINE_AG_ERROR_EVENT(xfs_rmap_update_error
);
2679 DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_candidate
);
2680 DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_query
);
2681 DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_candidate
);
2682 DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range
);
2683 DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_result
);
2684 DEFINE_RMAPBT_EVENT(xfs_rmap_find_right_neighbor_result
);
2685 DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_result
);
2687 /* deferred bmbt updates */
2688 #define DEFINE_BMAP_DEFERRED_EVENT DEFINE_RMAP_DEFERRED_EVENT
2689 DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_defer
);
2690 DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred
);
2692 /* per-AG reservation */
2693 DECLARE_EVENT_CLASS(xfs_ag_resv_class
,
2694 TP_PROTO(struct xfs_perag
*pag
, enum xfs_ag_resv_type resv
,
2696 TP_ARGS(pag
, resv
, len
),
2699 __field(xfs_agnumber_t
, agno
)
2701 __field(xfs_extlen_t
, freeblks
)
2702 __field(xfs_extlen_t
, flcount
)
2703 __field(xfs_extlen_t
, reserved
)
2704 __field(xfs_extlen_t
, asked
)
2705 __field(xfs_extlen_t
, len
)
2708 struct xfs_ag_resv
*r
= xfs_perag_resv(pag
, resv
);
2710 __entry
->dev
= pag
->pag_mount
->m_super
->s_dev
;
2711 __entry
->agno
= pag
->pag_agno
;
2712 __entry
->resv
= resv
;
2713 __entry
->freeblks
= pag
->pagf_freeblks
;
2714 __entry
->flcount
= pag
->pagf_flcount
;
2715 __entry
->reserved
= r
? r
->ar_reserved
: 0;
2716 __entry
->asked
= r
? r
->ar_asked
: 0;
2719 TP_printk("dev %d:%d agno %u resv %d freeblks %u flcount %u "
2720 "resv %u ask %u len %u",
2721 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2730 #define DEFINE_AG_RESV_EVENT(name) \
2731 DEFINE_EVENT(xfs_ag_resv_class, name, \
2732 TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \
2733 xfs_extlen_t len), \
2734 TP_ARGS(pag, type, len))
2736 /* per-AG reservation tracepoints */
2737 DEFINE_AG_RESV_EVENT(xfs_ag_resv_init
);
2738 DEFINE_AG_RESV_EVENT(xfs_ag_resv_free
);
2739 DEFINE_AG_RESV_EVENT(xfs_ag_resv_alloc_extent
);
2740 DEFINE_AG_RESV_EVENT(xfs_ag_resv_free_extent
);
2741 DEFINE_AG_RESV_EVENT(xfs_ag_resv_critical
);
2742 DEFINE_AG_RESV_EVENT(xfs_ag_resv_needed
);
2744 DEFINE_AG_ERROR_EVENT(xfs_ag_resv_free_error
);
2745 DEFINE_AG_ERROR_EVENT(xfs_ag_resv_init_error
);
2747 /* refcount tracepoint classes */
2749 /* reuse the discard trace class for agbno/aglen-based traces */
2750 #define DEFINE_AG_EXTENT_EVENT(name) DEFINE_DISCARD_EVENT(name)
2752 /* ag btree lookup tracepoint class */
2753 TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi
);
2754 TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi
);
2755 TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi
);
2756 DECLARE_EVENT_CLASS(xfs_ag_btree_lookup_class
,
2757 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2758 xfs_agblock_t agbno
, xfs_lookup_t dir
),
2759 TP_ARGS(mp
, agno
, agbno
, dir
),
2762 __field(xfs_agnumber_t
, agno
)
2763 __field(xfs_agblock_t
, agbno
)
2764 __field(xfs_lookup_t
, dir
)
2767 __entry
->dev
= mp
->m_super
->s_dev
;
2768 __entry
->agno
= agno
;
2769 __entry
->agbno
= agbno
;
2772 TP_printk("dev %d:%d agno %u agbno %u cmp %s(%d)",
2773 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2776 __print_symbolic(__entry
->dir
, XFS_AG_BTREE_CMP_FORMAT_STR
),
2780 #define DEFINE_AG_BTREE_LOOKUP_EVENT(name) \
2781 DEFINE_EVENT(xfs_ag_btree_lookup_class, name, \
2782 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2783 xfs_agblock_t agbno, xfs_lookup_t dir), \
2784 TP_ARGS(mp, agno, agbno, dir))
2786 /* single-rcext tracepoint class */
2787 DECLARE_EVENT_CLASS(xfs_refcount_extent_class
,
2788 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2789 struct xfs_refcount_irec
*irec
),
2790 TP_ARGS(mp
, agno
, irec
),
2793 __field(xfs_agnumber_t
, agno
)
2794 __field(xfs_agblock_t
, startblock
)
2795 __field(xfs_extlen_t
, blockcount
)
2796 __field(xfs_nlink_t
, refcount
)
2799 __entry
->dev
= mp
->m_super
->s_dev
;
2800 __entry
->agno
= agno
;
2801 __entry
->startblock
= irec
->rc_startblock
;
2802 __entry
->blockcount
= irec
->rc_blockcount
;
2803 __entry
->refcount
= irec
->rc_refcount
;
2805 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u",
2806 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2808 __entry
->startblock
,
2809 __entry
->blockcount
,
2813 #define DEFINE_REFCOUNT_EXTENT_EVENT(name) \
2814 DEFINE_EVENT(xfs_refcount_extent_class, name, \
2815 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2816 struct xfs_refcount_irec *irec), \
2817 TP_ARGS(mp, agno, irec))
2819 /* single-rcext and an agbno tracepoint class */
2820 DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class
,
2821 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2822 struct xfs_refcount_irec
*irec
, xfs_agblock_t agbno
),
2823 TP_ARGS(mp
, agno
, irec
, agbno
),
2826 __field(xfs_agnumber_t
, agno
)
2827 __field(xfs_agblock_t
, startblock
)
2828 __field(xfs_extlen_t
, blockcount
)
2829 __field(xfs_nlink_t
, refcount
)
2830 __field(xfs_agblock_t
, agbno
)
2833 __entry
->dev
= mp
->m_super
->s_dev
;
2834 __entry
->agno
= agno
;
2835 __entry
->startblock
= irec
->rc_startblock
;
2836 __entry
->blockcount
= irec
->rc_blockcount
;
2837 __entry
->refcount
= irec
->rc_refcount
;
2838 __entry
->agbno
= agbno
;
2840 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u @ agbno %u",
2841 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2843 __entry
->startblock
,
2844 __entry
->blockcount
,
2849 #define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \
2850 DEFINE_EVENT(xfs_refcount_extent_at_class, name, \
2851 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2852 struct xfs_refcount_irec *irec, xfs_agblock_t agbno), \
2853 TP_ARGS(mp, agno, irec, agbno))
2855 /* double-rcext tracepoint class */
2856 DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class
,
2857 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2858 struct xfs_refcount_irec
*i1
, struct xfs_refcount_irec
*i2
),
2859 TP_ARGS(mp
, agno
, i1
, i2
),
2862 __field(xfs_agnumber_t
, agno
)
2863 __field(xfs_agblock_t
, i1_startblock
)
2864 __field(xfs_extlen_t
, i1_blockcount
)
2865 __field(xfs_nlink_t
, i1_refcount
)
2866 __field(xfs_agblock_t
, i2_startblock
)
2867 __field(xfs_extlen_t
, i2_blockcount
)
2868 __field(xfs_nlink_t
, i2_refcount
)
2871 __entry
->dev
= mp
->m_super
->s_dev
;
2872 __entry
->agno
= agno
;
2873 __entry
->i1_startblock
= i1
->rc_startblock
;
2874 __entry
->i1_blockcount
= i1
->rc_blockcount
;
2875 __entry
->i1_refcount
= i1
->rc_refcount
;
2876 __entry
->i2_startblock
= i2
->rc_startblock
;
2877 __entry
->i2_blockcount
= i2
->rc_blockcount
;
2878 __entry
->i2_refcount
= i2
->rc_refcount
;
2880 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- "
2881 "agbno %u len %u refcount %u",
2882 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2884 __entry
->i1_startblock
,
2885 __entry
->i1_blockcount
,
2886 __entry
->i1_refcount
,
2887 __entry
->i2_startblock
,
2888 __entry
->i2_blockcount
,
2889 __entry
->i2_refcount
)
2892 #define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \
2893 DEFINE_EVENT(xfs_refcount_double_extent_class, name, \
2894 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2895 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), \
2896 TP_ARGS(mp, agno, i1, i2))
2898 /* double-rcext and an agbno tracepoint class */
2899 DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class
,
2900 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2901 struct xfs_refcount_irec
*i1
, struct xfs_refcount_irec
*i2
,
2902 xfs_agblock_t agbno
),
2903 TP_ARGS(mp
, agno
, i1
, i2
, agbno
),
2906 __field(xfs_agnumber_t
, agno
)
2907 __field(xfs_agblock_t
, i1_startblock
)
2908 __field(xfs_extlen_t
, i1_blockcount
)
2909 __field(xfs_nlink_t
, i1_refcount
)
2910 __field(xfs_agblock_t
, i2_startblock
)
2911 __field(xfs_extlen_t
, i2_blockcount
)
2912 __field(xfs_nlink_t
, i2_refcount
)
2913 __field(xfs_agblock_t
, agbno
)
2916 __entry
->dev
= mp
->m_super
->s_dev
;
2917 __entry
->agno
= agno
;
2918 __entry
->i1_startblock
= i1
->rc_startblock
;
2919 __entry
->i1_blockcount
= i1
->rc_blockcount
;
2920 __entry
->i1_refcount
= i1
->rc_refcount
;
2921 __entry
->i2_startblock
= i2
->rc_startblock
;
2922 __entry
->i2_blockcount
= i2
->rc_blockcount
;
2923 __entry
->i2_refcount
= i2
->rc_refcount
;
2924 __entry
->agbno
= agbno
;
2926 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- "
2927 "agbno %u len %u refcount %u @ agbno %u",
2928 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2930 __entry
->i1_startblock
,
2931 __entry
->i1_blockcount
,
2932 __entry
->i1_refcount
,
2933 __entry
->i2_startblock
,
2934 __entry
->i2_blockcount
,
2935 __entry
->i2_refcount
,
2939 #define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \
2940 DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \
2941 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2942 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \
2943 xfs_agblock_t agbno), \
2944 TP_ARGS(mp, agno, i1, i2, agbno))
2946 /* triple-rcext tracepoint class */
2947 DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class
,
2948 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
2949 struct xfs_refcount_irec
*i1
, struct xfs_refcount_irec
*i2
,
2950 struct xfs_refcount_irec
*i3
),
2951 TP_ARGS(mp
, agno
, i1
, i2
, i3
),
2954 __field(xfs_agnumber_t
, agno
)
2955 __field(xfs_agblock_t
, i1_startblock
)
2956 __field(xfs_extlen_t
, i1_blockcount
)
2957 __field(xfs_nlink_t
, i1_refcount
)
2958 __field(xfs_agblock_t
, i2_startblock
)
2959 __field(xfs_extlen_t
, i2_blockcount
)
2960 __field(xfs_nlink_t
, i2_refcount
)
2961 __field(xfs_agblock_t
, i3_startblock
)
2962 __field(xfs_extlen_t
, i3_blockcount
)
2963 __field(xfs_nlink_t
, i3_refcount
)
2966 __entry
->dev
= mp
->m_super
->s_dev
;
2967 __entry
->agno
= agno
;
2968 __entry
->i1_startblock
= i1
->rc_startblock
;
2969 __entry
->i1_blockcount
= i1
->rc_blockcount
;
2970 __entry
->i1_refcount
= i1
->rc_refcount
;
2971 __entry
->i2_startblock
= i2
->rc_startblock
;
2972 __entry
->i2_blockcount
= i2
->rc_blockcount
;
2973 __entry
->i2_refcount
= i2
->rc_refcount
;
2974 __entry
->i3_startblock
= i3
->rc_startblock
;
2975 __entry
->i3_blockcount
= i3
->rc_blockcount
;
2976 __entry
->i3_refcount
= i3
->rc_refcount
;
2978 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- "
2979 "agbno %u len %u refcount %u -- "
2980 "agbno %u len %u refcount %u",
2981 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
2983 __entry
->i1_startblock
,
2984 __entry
->i1_blockcount
,
2985 __entry
->i1_refcount
,
2986 __entry
->i2_startblock
,
2987 __entry
->i2_blockcount
,
2988 __entry
->i2_refcount
,
2989 __entry
->i3_startblock
,
2990 __entry
->i3_blockcount
,
2991 __entry
->i3_refcount
)
2994 #define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \
2995 DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \
2996 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
2997 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \
2998 struct xfs_refcount_irec *i3), \
2999 TP_ARGS(mp, agno, i1, i2, i3))
3001 /* refcount btree tracepoints */
3002 DEFINE_BUSY_EVENT(xfs_refcountbt_alloc_block
);
3003 DEFINE_BUSY_EVENT(xfs_refcountbt_free_block
);
3004 DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcount_lookup
);
3005 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get
);
3006 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update
);
3007 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_insert
);
3008 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_delete
);
3009 DEFINE_AG_ERROR_EVENT(xfs_refcount_insert_error
);
3010 DEFINE_AG_ERROR_EVENT(xfs_refcount_delete_error
);
3011 DEFINE_AG_ERROR_EVENT(xfs_refcount_update_error
);
3013 /* refcount adjustment tracepoints */
3014 DEFINE_AG_EXTENT_EVENT(xfs_refcount_increase
);
3015 DEFINE_AG_EXTENT_EVENT(xfs_refcount_decrease
);
3016 DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_increase
);
3017 DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_decrease
);
3018 DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents
);
3019 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent
);
3020 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_recover_extent
);
3021 DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_extent
);
3022 DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent
);
3023 DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent
);
3024 DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent
);
3025 DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent
);
3026 DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_error
);
3027 DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_cow_error
);
3028 DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_center_extents_error
);
3029 DEFINE_AG_ERROR_EVENT(xfs_refcount_modify_extent_error
);
3030 DEFINE_AG_ERROR_EVENT(xfs_refcount_split_extent_error
);
3031 DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_left_extent_error
);
3032 DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_right_extent_error
);
3033 DEFINE_AG_ERROR_EVENT(xfs_refcount_find_left_extent_error
);
3034 DEFINE_AG_ERROR_EVENT(xfs_refcount_find_right_extent_error
);
3036 /* reflink helpers */
3037 DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared
);
3038 DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared_result
);
3039 DEFINE_AG_ERROR_EVENT(xfs_refcount_find_shared_error
);
3040 #define DEFINE_REFCOUNT_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT
3041 DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_defer
);
3042 DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_deferred
);
3044 TRACE_EVENT(xfs_refcount_finish_one_leftover
,
3045 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
3046 int type
, xfs_agblock_t agbno
, xfs_extlen_t len
,
3047 xfs_agblock_t new_agbno
, xfs_extlen_t new_len
),
3048 TP_ARGS(mp
, agno
, type
, agbno
, len
, new_agbno
, new_len
),
3051 __field(xfs_agnumber_t
, agno
)
3053 __field(xfs_agblock_t
, agbno
)
3054 __field(xfs_extlen_t
, len
)
3055 __field(xfs_agblock_t
, new_agbno
)
3056 __field(xfs_extlen_t
, new_len
)
3059 __entry
->dev
= mp
->m_super
->s_dev
;
3060 __entry
->agno
= agno
;
3061 __entry
->type
= type
;
3062 __entry
->agbno
= agbno
;
3064 __entry
->new_agbno
= new_agbno
;
3065 __entry
->new_len
= new_len
;
3067 TP_printk("dev %d:%d type %d agno %u agbno %u len %u new_agbno %u new_len %u",
3068 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3077 /* simple inode-based error/%ip tracepoint class */
3078 DECLARE_EVENT_CLASS(xfs_inode_error_class
,
3079 TP_PROTO(struct xfs_inode
*ip
, int error
, unsigned long caller_ip
),
3080 TP_ARGS(ip
, error
, caller_ip
),
3083 __field(xfs_ino_t
, ino
)
3085 __field(unsigned long, caller_ip
)
3088 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
3089 __entry
->ino
= ip
->i_ino
;
3090 __entry
->error
= error
;
3091 __entry
->caller_ip
= caller_ip
;
3093 TP_printk("dev %d:%d ino %llx error %d caller %pS",
3094 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3097 (char *)__entry
->caller_ip
)
3100 #define DEFINE_INODE_ERROR_EVENT(name) \
3101 DEFINE_EVENT(xfs_inode_error_class, name, \
3102 TP_PROTO(struct xfs_inode *ip, int error, \
3103 unsigned long caller_ip), \
3104 TP_ARGS(ip, error, caller_ip))
3106 /* reflink tracepoint classes */
3108 /* two-file io tracepoint class */
3109 DECLARE_EVENT_CLASS(xfs_double_io_class
,
3110 TP_PROTO(struct xfs_inode
*src
, xfs_off_t soffset
, xfs_off_t len
,
3111 struct xfs_inode
*dest
, xfs_off_t doffset
),
3112 TP_ARGS(src
, soffset
, len
, dest
, doffset
),
3115 __field(xfs_ino_t
, src_ino
)
3116 __field(loff_t
, src_isize
)
3117 __field(loff_t
, src_disize
)
3118 __field(loff_t
, src_offset
)
3119 __field(size_t, len
)
3120 __field(xfs_ino_t
, dest_ino
)
3121 __field(loff_t
, dest_isize
)
3122 __field(loff_t
, dest_disize
)
3123 __field(loff_t
, dest_offset
)
3126 __entry
->dev
= VFS_I(src
)->i_sb
->s_dev
;
3127 __entry
->src_ino
= src
->i_ino
;
3128 __entry
->src_isize
= VFS_I(src
)->i_size
;
3129 __entry
->src_disize
= src
->i_d
.di_size
;
3130 __entry
->src_offset
= soffset
;
3132 __entry
->dest_ino
= dest
->i_ino
;
3133 __entry
->dest_isize
= VFS_I(dest
)->i_size
;
3134 __entry
->dest_disize
= dest
->i_d
.di_size
;
3135 __entry
->dest_offset
= doffset
;
3137 TP_printk("dev %d:%d count %zd "
3138 "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx -> "
3139 "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx",
3140 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3144 __entry
->src_disize
,
3145 __entry
->src_offset
,
3147 __entry
->dest_isize
,
3148 __entry
->dest_disize
,
3149 __entry
->dest_offset
)
3152 #define DEFINE_DOUBLE_IO_EVENT(name) \
3153 DEFINE_EVENT(xfs_double_io_class, name, \
3154 TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \
3155 struct xfs_inode *dest, xfs_off_t doffset), \
3156 TP_ARGS(src, soffset, len, dest, doffset))
3158 /* inode/irec events */
3159 DECLARE_EVENT_CLASS(xfs_inode_irec_class
,
3160 TP_PROTO(struct xfs_inode
*ip
, struct xfs_bmbt_irec
*irec
),
3164 __field(xfs_ino_t
, ino
)
3165 __field(xfs_fileoff_t
, lblk
)
3166 __field(xfs_extlen_t
, len
)
3167 __field(xfs_fsblock_t
, pblk
)
3171 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
3172 __entry
->ino
= ip
->i_ino
;
3173 __entry
->lblk
= irec
->br_startoff
;
3174 __entry
->len
= irec
->br_blockcount
;
3175 __entry
->pblk
= irec
->br_startblock
;
3176 __entry
->state
= irec
->br_state
;
3178 TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x pblk %llu st %d",
3179 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3186 #define DEFINE_INODE_IREC_EVENT(name) \
3187 DEFINE_EVENT(xfs_inode_irec_class, name, \
3188 TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), \
3191 /* refcount/reflink tracepoint definitions */
3193 /* reflink tracepoints */
3194 DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag
);
3195 DEFINE_INODE_EVENT(xfs_reflink_unset_inode_flag
);
3196 DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size
);
3197 TRACE_EVENT(xfs_reflink_remap_blocks
,
3198 TP_PROTO(struct xfs_inode
*src
, xfs_fileoff_t soffset
,
3199 xfs_filblks_t len
, struct xfs_inode
*dest
,
3200 xfs_fileoff_t doffset
),
3201 TP_ARGS(src
, soffset
, len
, dest
, doffset
),
3204 __field(xfs_ino_t
, src_ino
)
3205 __field(xfs_fileoff_t
, src_lblk
)
3206 __field(xfs_filblks_t
, len
)
3207 __field(xfs_ino_t
, dest_ino
)
3208 __field(xfs_fileoff_t
, dest_lblk
)
3211 __entry
->dev
= VFS_I(src
)->i_sb
->s_dev
;
3212 __entry
->src_ino
= src
->i_ino
;
3213 __entry
->src_lblk
= soffset
;
3215 __entry
->dest_ino
= dest
->i_ino
;
3216 __entry
->dest_lblk
= doffset
;
3218 TP_printk("dev %d:%d len 0x%llx "
3219 "ino 0x%llx offset 0x%llx blocks -> "
3220 "ino 0x%llx offset 0x%llx blocks",
3221 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3228 DEFINE_DOUBLE_IO_EVENT(xfs_reflink_remap_range
);
3229 DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error
);
3230 DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error
);
3231 DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error
);
3232 DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_blocks_error
);
3233 DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_extent_error
);
3234 DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_src
);
3235 DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_dest
);
3237 /* dedupe tracepoints */
3238 DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents
);
3239 DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error
);
3241 /* ioctl tracepoints */
3242 TRACE_EVENT(xfs_ioctl_clone
,
3243 TP_PROTO(struct inode
*src
, struct inode
*dest
),
3247 __field(unsigned long, src_ino
)
3248 __field(loff_t
, src_isize
)
3249 __field(unsigned long, dest_ino
)
3250 __field(loff_t
, dest_isize
)
3253 __entry
->dev
= src
->i_sb
->s_dev
;
3254 __entry
->src_ino
= src
->i_ino
;
3255 __entry
->src_isize
= i_size_read(src
);
3256 __entry
->dest_ino
= dest
->i_ino
;
3257 __entry
->dest_isize
= i_size_read(dest
);
3259 TP_printk("dev %d:%d "
3260 "ino 0x%lx isize 0x%llx -> "
3261 "ino 0x%lx isize 0x%llx",
3262 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3266 __entry
->dest_isize
)
3269 /* unshare tracepoints */
3270 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_unshare
);
3271 DEFINE_INODE_ERROR_EVENT(xfs_reflink_unshare_error
);
3274 DEFINE_INODE_IREC_EVENT(xfs_reflink_trim_around_shared
);
3275 DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_found
);
3276 DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc
);
3277 DEFINE_INODE_IREC_EVENT(xfs_reflink_convert_cow
);
3279 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_bounce_dio_write
);
3281 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_cancel_cow_range
);
3282 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_end_cow
);
3283 DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap
);
3285 DEFINE_INODE_ERROR_EVENT(xfs_reflink_cancel_cow_range_error
);
3286 DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_cow_error
);
3289 DEFINE_INODE_IREC_EVENT(xfs_reflink_cancel_cow
);
3291 /* rmap swapext tracepoints */
3292 DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap
);
3293 DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap_piece
);
3294 DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error
);
3297 DECLARE_EVENT_CLASS(xfs_fsmap_class
,
3298 TP_PROTO(struct xfs_mount
*mp
, u32 keydev
, xfs_agnumber_t agno
,
3299 struct xfs_rmap_irec
*rmap
),
3300 TP_ARGS(mp
, keydev
, agno
, rmap
),
3303 __field(dev_t
, keydev
)
3304 __field(xfs_agnumber_t
, agno
)
3305 __field(xfs_fsblock_t
, bno
)
3306 __field(xfs_filblks_t
, len
)
3307 __field(uint64_t, owner
)
3308 __field(uint64_t, offset
)
3309 __field(unsigned int, flags
)
3312 __entry
->dev
= mp
->m_super
->s_dev
;
3313 __entry
->keydev
= new_decode_dev(keydev
);
3314 __entry
->agno
= agno
;
3315 __entry
->bno
= rmap
->rm_startblock
;
3316 __entry
->len
= rmap
->rm_blockcount
;
3317 __entry
->owner
= rmap
->rm_owner
;
3318 __entry
->offset
= rmap
->rm_offset
;
3319 __entry
->flags
= rmap
->rm_flags
;
3321 TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld offset %llu flags 0x%x",
3322 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3323 MAJOR(__entry
->keydev
), MINOR(__entry
->keydev
),
3331 #define DEFINE_FSMAP_EVENT(name) \
3332 DEFINE_EVENT(xfs_fsmap_class, name, \
3333 TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \
3334 struct xfs_rmap_irec *rmap), \
3335 TP_ARGS(mp, keydev, agno, rmap))
3336 DEFINE_FSMAP_EVENT(xfs_fsmap_low_key
);
3337 DEFINE_FSMAP_EVENT(xfs_fsmap_high_key
);
3338 DEFINE_FSMAP_EVENT(xfs_fsmap_mapping
);
3340 DECLARE_EVENT_CLASS(xfs_getfsmap_class
,
3341 TP_PROTO(struct xfs_mount
*mp
, struct xfs_fsmap
*fsmap
),
3345 __field(dev_t
, keydev
)
3346 __field(xfs_daddr_t
, block
)
3347 __field(xfs_daddr_t
, len
)
3348 __field(uint64_t, owner
)
3349 __field(uint64_t, offset
)
3350 __field(uint64_t, flags
)
3353 __entry
->dev
= mp
->m_super
->s_dev
;
3354 __entry
->keydev
= new_decode_dev(fsmap
->fmr_device
);
3355 __entry
->block
= fsmap
->fmr_physical
;
3356 __entry
->len
= fsmap
->fmr_length
;
3357 __entry
->owner
= fsmap
->fmr_owner
;
3358 __entry
->offset
= fsmap
->fmr_offset
;
3359 __entry
->flags
= fsmap
->fmr_flags
;
3361 TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld offset %llu flags 0x%llx",
3362 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3363 MAJOR(__entry
->keydev
), MINOR(__entry
->keydev
),
3370 #define DEFINE_GETFSMAP_EVENT(name) \
3371 DEFINE_EVENT(xfs_getfsmap_class, name, \
3372 TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), \
3374 DEFINE_GETFSMAP_EVENT(xfs_getfsmap_low_key
);
3375 DEFINE_GETFSMAP_EVENT(xfs_getfsmap_high_key
);
3376 DEFINE_GETFSMAP_EVENT(xfs_getfsmap_mapping
);
3378 TRACE_EVENT(xfs_trans_resv_calc
,
3379 TP_PROTO(struct xfs_mount
*mp
, unsigned int type
,
3380 struct xfs_trans_res
*res
),
3381 TP_ARGS(mp
, type
, res
),
3385 __field(uint
, logres
)
3386 __field(int, logcount
)
3387 __field(int, logflags
)
3390 __entry
->dev
= mp
->m_super
->s_dev
;
3391 __entry
->type
= type
;
3392 __entry
->logres
= res
->tr_logres
;
3393 __entry
->logcount
= res
->tr_logcount
;
3394 __entry
->logflags
= res
->tr_logflags
;
3396 TP_printk("dev %d:%d type %d logres %u logcount %d flags 0x%x",
3397 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3404 DECLARE_EVENT_CLASS(xfs_trans_class
,
3405 TP_PROTO(struct xfs_trans
*tp
, unsigned long caller_ip
),
3406 TP_ARGS(tp
, caller_ip
),
3409 __field(uint32_t, tid
)
3410 __field(uint32_t, flags
)
3411 __field(unsigned long, caller_ip
)
3414 __entry
->dev
= tp
->t_mountp
->m_super
->s_dev
;
3417 __entry
->tid
= tp
->t_ticket
->t_tid
;
3418 __entry
->flags
= tp
->t_flags
;
3419 __entry
->caller_ip
= caller_ip
;
3421 TP_printk("dev %d:%d trans %x flags 0x%x caller %pS",
3422 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3425 (char *)__entry
->caller_ip
)
3428 #define DEFINE_TRANS_EVENT(name) \
3429 DEFINE_EVENT(xfs_trans_class, name, \
3430 TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \
3431 TP_ARGS(tp, caller_ip))
3432 DEFINE_TRANS_EVENT(xfs_trans_alloc
);
3433 DEFINE_TRANS_EVENT(xfs_trans_cancel
);
3434 DEFINE_TRANS_EVENT(xfs_trans_commit
);
3435 DEFINE_TRANS_EVENT(xfs_trans_dup
);
3436 DEFINE_TRANS_EVENT(xfs_trans_free
);
3437 DEFINE_TRANS_EVENT(xfs_trans_roll
);
3438 DEFINE_TRANS_EVENT(xfs_trans_add_item
);
3439 DEFINE_TRANS_EVENT(xfs_trans_commit_items
);
3440 DEFINE_TRANS_EVENT(xfs_trans_free_items
);
3442 TRACE_EVENT(xfs_iunlink_update_bucket
,
3443 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, unsigned int bucket
,
3444 xfs_agino_t old_ptr
, xfs_agino_t new_ptr
),
3445 TP_ARGS(mp
, agno
, bucket
, old_ptr
, new_ptr
),
3448 __field(xfs_agnumber_t
, agno
)
3449 __field(unsigned int, bucket
)
3450 __field(xfs_agino_t
, old_ptr
)
3451 __field(xfs_agino_t
, new_ptr
)
3454 __entry
->dev
= mp
->m_super
->s_dev
;
3455 __entry
->agno
= agno
;
3456 __entry
->bucket
= bucket
;
3457 __entry
->old_ptr
= old_ptr
;
3458 __entry
->new_ptr
= new_ptr
;
3460 TP_printk("dev %d:%d agno %u bucket %u old 0x%x new 0x%x",
3461 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3468 TRACE_EVENT(xfs_iunlink_update_dinode
,
3469 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, xfs_agino_t agino
,
3470 xfs_agino_t old_ptr
, xfs_agino_t new_ptr
),
3471 TP_ARGS(mp
, agno
, agino
, old_ptr
, new_ptr
),
3474 __field(xfs_agnumber_t
, agno
)
3475 __field(xfs_agino_t
, agino
)
3476 __field(xfs_agino_t
, old_ptr
)
3477 __field(xfs_agino_t
, new_ptr
)
3480 __entry
->dev
= mp
->m_super
->s_dev
;
3481 __entry
->agno
= agno
;
3482 __entry
->agino
= agino
;
3483 __entry
->old_ptr
= old_ptr
;
3484 __entry
->new_ptr
= new_ptr
;
3486 TP_printk("dev %d:%d agno %u agino 0x%x old 0x%x new 0x%x",
3487 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3494 DECLARE_EVENT_CLASS(xfs_ag_inode_class
,
3495 TP_PROTO(struct xfs_inode
*ip
),
3499 __field(xfs_agnumber_t
, agno
)
3500 __field(xfs_agino_t
, agino
)
3503 __entry
->dev
= VFS_I(ip
)->i_sb
->s_dev
;
3504 __entry
->agno
= XFS_INO_TO_AGNO(ip
->i_mount
, ip
->i_ino
);
3505 __entry
->agino
= XFS_INO_TO_AGINO(ip
->i_mount
, ip
->i_ino
);
3507 TP_printk("dev %d:%d agno %u agino %u",
3508 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3509 __entry
->agno
, __entry
->agino
)
3512 #define DEFINE_AGINODE_EVENT(name) \
3513 DEFINE_EVENT(xfs_ag_inode_class, name, \
3514 TP_PROTO(struct xfs_inode *ip), \
3516 DEFINE_AGINODE_EVENT(xfs_iunlink
);
3517 DEFINE_AGINODE_EVENT(xfs_iunlink_remove
);
3518 DEFINE_AG_EVENT(xfs_iunlink_map_prev_fallback
);
3520 DECLARE_EVENT_CLASS(xfs_fs_corrupt_class
,
3521 TP_PROTO(struct xfs_mount
*mp
, unsigned int flags
),
3525 __field(unsigned int, flags
)
3528 __entry
->dev
= mp
->m_super
->s_dev
;
3529 __entry
->flags
= flags
;
3531 TP_printk("dev %d:%d flags 0x%x",
3532 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3535 #define DEFINE_FS_CORRUPT_EVENT(name) \
3536 DEFINE_EVENT(xfs_fs_corrupt_class, name, \
3537 TP_PROTO(struct xfs_mount *mp, unsigned int flags), \
3539 DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_sick
);
3540 DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_healthy
);
3541 DEFINE_FS_CORRUPT_EVENT(xfs_fs_unfixed_corruption
);
3542 DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_sick
);
3543 DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_healthy
);
3544 DEFINE_FS_CORRUPT_EVENT(xfs_rt_unfixed_corruption
);
3546 DECLARE_EVENT_CLASS(xfs_ag_corrupt_class
,
3547 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
, unsigned int flags
),
3548 TP_ARGS(mp
, agno
, flags
),
3551 __field(xfs_agnumber_t
, agno
)
3552 __field(unsigned int, flags
)
3555 __entry
->dev
= mp
->m_super
->s_dev
;
3556 __entry
->agno
= agno
;
3557 __entry
->flags
= flags
;
3559 TP_printk("dev %d:%d agno %u flags 0x%x",
3560 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3561 __entry
->agno
, __entry
->flags
)
3563 #define DEFINE_AG_CORRUPT_EVENT(name) \
3564 DEFINE_EVENT(xfs_ag_corrupt_class, name, \
3565 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
3566 unsigned int flags), \
3567 TP_ARGS(mp, agno, flags))
3568 DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_sick
);
3569 DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_healthy
);
3570 DEFINE_AG_CORRUPT_EVENT(xfs_ag_unfixed_corruption
);
3572 DECLARE_EVENT_CLASS(xfs_inode_corrupt_class
,
3573 TP_PROTO(struct xfs_inode
*ip
, unsigned int flags
),
3577 __field(xfs_ino_t
, ino
)
3578 __field(unsigned int, flags
)
3581 __entry
->dev
= ip
->i_mount
->m_super
->s_dev
;
3582 __entry
->ino
= ip
->i_ino
;
3583 __entry
->flags
= flags
;
3585 TP_printk("dev %d:%d ino 0x%llx flags 0x%x",
3586 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3587 __entry
->ino
, __entry
->flags
)
3589 #define DEFINE_INODE_CORRUPT_EVENT(name) \
3590 DEFINE_EVENT(xfs_inode_corrupt_class, name, \
3591 TP_PROTO(struct xfs_inode *ip, unsigned int flags), \
3593 DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_sick
);
3594 DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_healthy
);
3596 TRACE_EVENT(xfs_iwalk_ag
,
3597 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
3598 xfs_agino_t startino
),
3599 TP_ARGS(mp
, agno
, startino
),
3602 __field(xfs_agnumber_t
, agno
)
3603 __field(xfs_agino_t
, startino
)
3606 __entry
->dev
= mp
->m_super
->s_dev
;
3607 __entry
->agno
= agno
;
3608 __entry
->startino
= startino
;
3610 TP_printk("dev %d:%d agno %d startino %u",
3611 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->agno
,
3615 TRACE_EVENT(xfs_iwalk_ag_rec
,
3616 TP_PROTO(struct xfs_mount
*mp
, xfs_agnumber_t agno
,
3617 struct xfs_inobt_rec_incore
*irec
),
3618 TP_ARGS(mp
, agno
, irec
),
3621 __field(xfs_agnumber_t
, agno
)
3622 __field(xfs_agino_t
, startino
)
3623 __field(uint64_t, freemask
)
3626 __entry
->dev
= mp
->m_super
->s_dev
;
3627 __entry
->agno
= agno
;
3628 __entry
->startino
= irec
->ir_startino
;
3629 __entry
->freemask
= irec
->ir_free
;
3631 TP_printk("dev %d:%d agno %d startino %u freemask 0x%llx",
3632 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->agno
,
3633 __entry
->startino
, __entry
->freemask
)
3636 TRACE_EVENT(xfs_pwork_init
,
3637 TP_PROTO(struct xfs_mount
*mp
, unsigned int nr_threads
, pid_t pid
),
3638 TP_ARGS(mp
, nr_threads
, pid
),
3641 __field(unsigned int, nr_threads
)
3645 __entry
->dev
= mp
->m_super
->s_dev
;
3646 __entry
->nr_threads
= nr_threads
;
3649 TP_printk("dev %d:%d nr_threads %u pid %u",
3650 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3651 __entry
->nr_threads
, __entry
->pid
)
3654 DECLARE_EVENT_CLASS(xfs_kmem_class
,
3655 TP_PROTO(ssize_t size
, int flags
, unsigned long caller_ip
),
3656 TP_ARGS(size
, flags
, caller_ip
),
3658 __field(ssize_t
, size
)
3660 __field(unsigned long, caller_ip
)
3663 __entry
->size
= size
;
3664 __entry
->flags
= flags
;
3665 __entry
->caller_ip
= caller_ip
;
3667 TP_printk("size %zd flags 0x%x caller %pS",
3670 (char *)__entry
->caller_ip
)
3673 #define DEFINE_KMEM_EVENT(name) \
3674 DEFINE_EVENT(xfs_kmem_class, name, \
3675 TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), \
3676 TP_ARGS(size, flags, caller_ip))
3677 DEFINE_KMEM_EVENT(kmem_alloc
);
3678 DEFINE_KMEM_EVENT(kmem_alloc_io
);
3679 DEFINE_KMEM_EVENT(kmem_alloc_large
);
3681 TRACE_EVENT(xfs_check_new_dalign
,
3682 TP_PROTO(struct xfs_mount
*mp
, int new_dalign
, xfs_ino_t calc_rootino
),
3683 TP_ARGS(mp
, new_dalign
, calc_rootino
),
3686 __field(int, new_dalign
)
3687 __field(xfs_ino_t
, sb_rootino
)
3688 __field(xfs_ino_t
, calc_rootino
)
3691 __entry
->dev
= mp
->m_super
->s_dev
;
3692 __entry
->new_dalign
= new_dalign
;
3693 __entry
->sb_rootino
= mp
->m_sb
.sb_rootino
;
3694 __entry
->calc_rootino
= calc_rootino
;
3696 TP_printk("dev %d:%d new_dalign %d sb_rootino %llu calc_rootino %llu",
3697 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3698 __entry
->new_dalign
, __entry
->sb_rootino
,
3699 __entry
->calc_rootino
)
3702 TRACE_EVENT(xfs_btree_commit_afakeroot
,
3703 TP_PROTO(struct xfs_btree_cur
*cur
),
3707 __field(xfs_btnum_t
, btnum
)
3708 __field(xfs_agnumber_t
, agno
)
3709 __field(xfs_agblock_t
, agbno
)
3710 __field(unsigned int, levels
)
3711 __field(unsigned int, blocks
)
3714 __entry
->dev
= cur
->bc_mp
->m_super
->s_dev
;
3715 __entry
->btnum
= cur
->bc_btnum
;
3716 __entry
->agno
= cur
->bc_ag
.agno
;
3717 __entry
->agbno
= cur
->bc_ag
.afake
->af_root
;
3718 __entry
->levels
= cur
->bc_ag
.afake
->af_levels
;
3719 __entry
->blocks
= cur
->bc_ag
.afake
->af_blocks
;
3721 TP_printk("dev %d:%d btree %s ag %u levels %u blocks %u root %u",
3722 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3723 __print_symbolic(__entry
->btnum
, XFS_BTNUM_STRINGS
),
3730 TRACE_EVENT(xfs_btree_commit_ifakeroot
,
3731 TP_PROTO(struct xfs_btree_cur
*cur
),
3735 __field(xfs_btnum_t
, btnum
)
3736 __field(xfs_agnumber_t
, agno
)
3737 __field(xfs_agino_t
, agino
)
3738 __field(unsigned int, levels
)
3739 __field(unsigned int, blocks
)
3740 __field(int, whichfork
)
3743 __entry
->dev
= cur
->bc_mp
->m_super
->s_dev
;
3744 __entry
->btnum
= cur
->bc_btnum
;
3745 __entry
->agno
= XFS_INO_TO_AGNO(cur
->bc_mp
,
3746 cur
->bc_ino
.ip
->i_ino
);
3747 __entry
->agino
= XFS_INO_TO_AGINO(cur
->bc_mp
,
3748 cur
->bc_ino
.ip
->i_ino
);
3749 __entry
->levels
= cur
->bc_ino
.ifake
->if_levels
;
3750 __entry
->blocks
= cur
->bc_ino
.ifake
->if_blocks
;
3751 __entry
->whichfork
= cur
->bc_ino
.whichfork
;
3753 TP_printk("dev %d:%d btree %s ag %u agino %u whichfork %s levels %u blocks %u",
3754 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3755 __print_symbolic(__entry
->btnum
, XFS_BTNUM_STRINGS
),
3758 __entry
->whichfork
== XFS_ATTR_FORK
? "attr" : "data",
3763 TRACE_EVENT(xfs_btree_bload_level_geometry
,
3764 TP_PROTO(struct xfs_btree_cur
*cur
, unsigned int level
,
3765 uint64_t nr_this_level
, unsigned int nr_per_block
,
3766 unsigned int desired_npb
, uint64_t blocks
,
3767 uint64_t blocks_with_extra
),
3768 TP_ARGS(cur
, level
, nr_this_level
, nr_per_block
, desired_npb
, blocks
,
3772 __field(xfs_btnum_t
, btnum
)
3773 __field(unsigned int, level
)
3774 __field(unsigned int, nlevels
)
3775 __field(uint64_t, nr_this_level
)
3776 __field(unsigned int, nr_per_block
)
3777 __field(unsigned int, desired_npb
)
3778 __field(unsigned long long, blocks
)
3779 __field(unsigned long long, blocks_with_extra
)
3782 __entry
->dev
= cur
->bc_mp
->m_super
->s_dev
;
3783 __entry
->btnum
= cur
->bc_btnum
;
3784 __entry
->level
= level
;
3785 __entry
->nlevels
= cur
->bc_nlevels
;
3786 __entry
->nr_this_level
= nr_this_level
;
3787 __entry
->nr_per_block
= nr_per_block
;
3788 __entry
->desired_npb
= desired_npb
;
3789 __entry
->blocks
= blocks
;
3790 __entry
->blocks_with_extra
= blocks_with_extra
;
3792 TP_printk("dev %d:%d btree %s level %u/%u nr_this_level %llu nr_per_block %u desired_npb %u blocks %llu blocks_with_extra %llu",
3793 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3794 __print_symbolic(__entry
->btnum
, XFS_BTNUM_STRINGS
),
3797 __entry
->nr_this_level
,
3798 __entry
->nr_per_block
,
3799 __entry
->desired_npb
,
3801 __entry
->blocks_with_extra
)
3804 TRACE_EVENT(xfs_btree_bload_block
,
3805 TP_PROTO(struct xfs_btree_cur
*cur
, unsigned int level
,
3806 uint64_t block_idx
, uint64_t nr_blocks
,
3807 union xfs_btree_ptr
*ptr
, unsigned int nr_records
),
3808 TP_ARGS(cur
, level
, block_idx
, nr_blocks
, ptr
, nr_records
),
3811 __field(xfs_btnum_t
, btnum
)
3812 __field(unsigned int, level
)
3813 __field(unsigned long long, block_idx
)
3814 __field(unsigned long long, nr_blocks
)
3815 __field(xfs_agnumber_t
, agno
)
3816 __field(xfs_agblock_t
, agbno
)
3817 __field(unsigned int, nr_records
)
3820 __entry
->dev
= cur
->bc_mp
->m_super
->s_dev
;
3821 __entry
->btnum
= cur
->bc_btnum
;
3822 __entry
->level
= level
;
3823 __entry
->block_idx
= block_idx
;
3824 __entry
->nr_blocks
= nr_blocks
;
3825 if (cur
->bc_flags
& XFS_BTREE_LONG_PTRS
) {
3826 xfs_fsblock_t fsb
= be64_to_cpu(ptr
->l
);
3828 __entry
->agno
= XFS_FSB_TO_AGNO(cur
->bc_mp
, fsb
);
3829 __entry
->agbno
= XFS_FSB_TO_AGBNO(cur
->bc_mp
, fsb
);
3831 __entry
->agno
= cur
->bc_ag
.agno
;
3832 __entry
->agbno
= be32_to_cpu(ptr
->s
);
3834 __entry
->nr_records
= nr_records
;
3836 TP_printk("dev %d:%d btree %s level %u block %llu/%llu fsb (%u/%u) recs %u",
3837 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3838 __print_symbolic(__entry
->btnum
, XFS_BTNUM_STRINGS
),
3844 __entry
->nr_records
)
3847 DECLARE_EVENT_CLASS(xfs_timestamp_range_class
,
3848 TP_PROTO(struct xfs_mount
*mp
, time64_t min
, time64_t max
),
3849 TP_ARGS(mp
, min
, max
),
3852 __field(long long, min
)
3853 __field(long long, max
)
3856 __entry
->dev
= mp
->m_super
->s_dev
;
3860 TP_printk("dev %d:%d min %lld max %lld",
3861 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
3866 #define DEFINE_TIMESTAMP_RANGE_EVENT(name) \
3867 DEFINE_EVENT(xfs_timestamp_range_class, name, \
3868 TP_PROTO(struct xfs_mount *mp, long long min, long long max), \
3869 TP_ARGS(mp, min, max))
3870 DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range
);
3871 DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range
);
3873 #endif /* _TRACE_XFS_H */
3875 #undef TRACE_INCLUDE_PATH
3876 #define TRACE_INCLUDE_PATH .
3877 #define TRACE_INCLUDE_FILE xfs_trace
3878 #include <trace/define_trace.h>