1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2017-2023 Oracle. All Rights Reserved.
6 * NOTE: none of these tracepoints shall be considered a stable kernel ABI
7 * as they can change at any time. See xfs_trace.h for documentation of
8 * specific units found in tracepoint output.
11 #define TRACE_SYSTEM xfs_scrub
13 #if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
14 #define _TRACE_XFS_SCRUB_TRACE_H
16 #include <linux/tracepoint.h>
21 struct xfarray_sortinfo;
24 * ftrace's __print_symbolic requires that all enum values be wrapped in the
25 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
26 * ring buffer. Somehow this was only worth mentioning in the ftrace sample
29 TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi);
30 TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi);
31 TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi);
32 TRACE_DEFINE_ENUM(XFS_BTNUM_INOi);
33 TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi);
34 TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi);
35 TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi);
37 TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);
38 TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);
40 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE);
41 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB);
42 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF);
43 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL);
44 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI);
45 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT);
46 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT);
47 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT);
48 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT);
49 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT);
50 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT);
51 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE);
52 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD);
53 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA);
54 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC);
55 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR);
56 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR);
57 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK);
58 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT);
59 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP);
60 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM);
61 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA);
62 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA);
63 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA);
64 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS);
66 #define XFS_SCRUB_TYPE_STRINGS \
67 { XFS_SCRUB_TYPE_PROBE, "probe" }, \
68 { XFS_SCRUB_TYPE_SB, "sb" }, \
69 { XFS_SCRUB_TYPE_AGF, "agf" }, \
70 { XFS_SCRUB_TYPE_AGFL, "agfl" }, \
71 { XFS_SCRUB_TYPE_AGI, "agi" }, \
72 { XFS_SCRUB_TYPE_BNOBT, "bnobt" }, \
73 { XFS_SCRUB_TYPE_CNTBT, "cntbt" }, \
74 { XFS_SCRUB_TYPE_INOBT, "inobt" }, \
75 { XFS_SCRUB_TYPE_FINOBT, "finobt" }, \
76 { XFS_SCRUB_TYPE_RMAPBT, "rmapbt" }, \
77 { XFS_SCRUB_TYPE_REFCNTBT, "refcountbt" }, \
78 { XFS_SCRUB_TYPE_INODE, "inode" }, \
79 { XFS_SCRUB_TYPE_BMBTD, "bmapbtd" }, \
80 { XFS_SCRUB_TYPE_BMBTA, "bmapbta" }, \
81 { XFS_SCRUB_TYPE_BMBTC, "bmapbtc" }, \
82 { XFS_SCRUB_TYPE_DIR, "directory" }, \
83 { XFS_SCRUB_TYPE_XATTR, "xattr" }, \
84 { XFS_SCRUB_TYPE_SYMLINK, "symlink" }, \
85 { XFS_SCRUB_TYPE_PARENT, "parent" }, \
86 { XFS_SCRUB_TYPE_RTBITMAP, "rtbitmap" }, \
87 { XFS_SCRUB_TYPE_RTSUM, "rtsummary" }, \
88 { XFS_SCRUB_TYPE_UQUOTA, "usrquota" }, \
89 { XFS_SCRUB_TYPE_GQUOTA, "grpquota" }, \
90 { XFS_SCRUB_TYPE_PQUOTA, "prjquota" }, \
91 { XFS_SCRUB_TYPE_FSCOUNTERS, "fscounters" }
93 #define XFS_SCRUB_FLAG_STRINGS \
94 { XFS_SCRUB_IFLAG_REPAIR, "repair" }, \
95 { XFS_SCRUB_OFLAG_CORRUPT, "corrupt" }, \
96 { XFS_SCRUB_OFLAG_PREEN, "preen" }, \
97 { XFS_SCRUB_OFLAG_XFAIL, "xfail" }, \
98 { XFS_SCRUB_OFLAG_XCORRUPT, "xcorrupt" }, \
99 { XFS_SCRUB_OFLAG_INCOMPLETE, "incomplete" }, \
100 { XFS_SCRUB_OFLAG_WARNING, "warning" }, \
101 { XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED, "norepair" }, \
102 { XFS_SCRUB_IFLAG_FORCE_REBUILD, "rebuild" }
104 #define XFS_SCRUB_STATE_STRINGS \
105 { XCHK_TRY_HARDER, "try_harder" }, \
106 { XCHK_HAVE_FREEZE_PROT, "nofreeze" }, \
107 { XCHK_FSGATES_DRAIN, "fsgates_drain" }, \
108 { XCHK_NEED_DRAIN, "need_drain" }, \
109 { XREP_ALREADY_FIXED, "already_fixed" }
111 DECLARE_EVENT_CLASS(xchk_class,
112 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,
114 TP_ARGS(ip, sm, error),
117 __field(xfs_ino_t, ino)
118 __field(unsigned int, type)
119 __field(xfs_agnumber_t, agno)
120 __field(xfs_ino_t, inum)
121 __field(unsigned int, gen)
122 __field(unsigned int, flags)
126 __entry->dev = ip->i_mount->m_super->s_dev;
127 __entry->ino = ip->i_ino;
128 __entry->type = sm->sm_type;
129 __entry->agno = sm->sm_agno;
130 __entry->inum = sm->sm_ino;
131 __entry->gen = sm->sm_gen;
132 __entry->flags = sm->sm_flags;
133 __entry->error = error;
135 TP_printk("dev %d:%d ino 0x%llx type %s agno 0x%x inum 0x%llx gen 0x%x flags (%s) error %d",
136 MAJOR(__entry->dev), MINOR(__entry->dev),
138 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
142 __print_flags(__entry->flags, "|", XFS_SCRUB_FLAG_STRINGS),
145 #define DEFINE_SCRUB_EVENT(name) \
146 DEFINE_EVENT(xchk_class, name, \
147 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \
149 TP_ARGS(ip, sm, error))
151 DEFINE_SCRUB_EVENT(xchk_start);
152 DEFINE_SCRUB_EVENT(xchk_done);
153 DEFINE_SCRUB_EVENT(xchk_deadlock_retry);
154 DEFINE_SCRUB_EVENT(xrep_attempt);
155 DEFINE_SCRUB_EVENT(xrep_done);
157 DECLARE_EVENT_CLASS(xchk_fsgate_class,
158 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgate_flags),
159 TP_ARGS(sc, fsgate_flags),
162 __field(unsigned int, type)
163 __field(unsigned int, fsgate_flags)
166 __entry->dev = sc->mp->m_super->s_dev;
167 __entry->type = sc->sm->sm_type;
168 __entry->fsgate_flags = fsgate_flags;
170 TP_printk("dev %d:%d type %s fsgates '%s'",
171 MAJOR(__entry->dev), MINOR(__entry->dev),
172 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
173 __print_flags(__entry->fsgate_flags, "|", XFS_SCRUB_STATE_STRINGS))
176 #define DEFINE_SCRUB_FSHOOK_EVENT(name) \
177 DEFINE_EVENT(xchk_fsgate_class, name, \
178 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \
179 TP_ARGS(sc, fsgates_flags))
181 DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable);
182 DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable);
184 TRACE_EVENT(xchk_op_error,
185 TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno,
186 xfs_agblock_t bno, int error, void *ret_ip),
187 TP_ARGS(sc, agno, bno, error, ret_ip),
190 __field(unsigned int, type)
191 __field(xfs_agnumber_t, agno)
192 __field(xfs_agblock_t, bno)
194 __field(void *, ret_ip)
197 __entry->dev = sc->mp->m_super->s_dev;
198 __entry->type = sc->sm->sm_type;
199 __entry->agno = agno;
201 __entry->error = error;
202 __entry->ret_ip = ret_ip;
204 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x error %d ret_ip %pS",
205 MAJOR(__entry->dev), MINOR(__entry->dev),
206 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
213 TRACE_EVENT(xchk_file_op_error,
214 TP_PROTO(struct xfs_scrub *sc, int whichfork,
215 xfs_fileoff_t offset, int error, void *ret_ip),
216 TP_ARGS(sc, whichfork, offset, error, ret_ip),
219 __field(xfs_ino_t, ino)
220 __field(int, whichfork)
221 __field(unsigned int, type)
222 __field(xfs_fileoff_t, offset)
224 __field(void *, ret_ip)
227 __entry->dev = sc->ip->i_mount->m_super->s_dev;
228 __entry->ino = sc->ip->i_ino;
229 __entry->whichfork = whichfork;
230 __entry->type = sc->sm->sm_type;
231 __entry->offset = offset;
232 __entry->error = error;
233 __entry->ret_ip = ret_ip;
235 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx error %d ret_ip %pS",
236 MAJOR(__entry->dev), MINOR(__entry->dev),
238 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
239 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
245 DECLARE_EVENT_CLASS(xchk_block_error_class,
246 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip),
247 TP_ARGS(sc, daddr, ret_ip),
250 __field(unsigned int, type)
251 __field(xfs_agnumber_t, agno)
252 __field(xfs_agblock_t, agbno)
253 __field(void *, ret_ip)
256 __entry->dev = sc->mp->m_super->s_dev;
257 __entry->type = sc->sm->sm_type;
258 __entry->agno = xfs_daddr_to_agno(sc->mp, daddr);
259 __entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr);
260 __entry->ret_ip = ret_ip;
262 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x ret_ip %pS",
263 MAJOR(__entry->dev), MINOR(__entry->dev),
264 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
270 #define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \
271 DEFINE_EVENT(xchk_block_error_class, name, \
272 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \
274 TP_ARGS(sc, daddr, ret_ip))
276 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error);
277 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error);
278 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen);
280 DECLARE_EVENT_CLASS(xchk_ino_error_class,
281 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip),
282 TP_ARGS(sc, ino, ret_ip),
285 __field(xfs_ino_t, ino)
286 __field(unsigned int, type)
287 __field(void *, ret_ip)
290 __entry->dev = sc->mp->m_super->s_dev;
292 __entry->type = sc->sm->sm_type;
293 __entry->ret_ip = ret_ip;
295 TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS",
296 MAJOR(__entry->dev), MINOR(__entry->dev),
298 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
302 #define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
303 DEFINE_EVENT(xchk_ino_error_class, name, \
304 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \
306 TP_ARGS(sc, ino, ret_ip))
308 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error);
309 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen);
310 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning);
312 DECLARE_EVENT_CLASS(xchk_fblock_error_class,
313 TP_PROTO(struct xfs_scrub *sc, int whichfork,
314 xfs_fileoff_t offset, void *ret_ip),
315 TP_ARGS(sc, whichfork, offset, ret_ip),
318 __field(xfs_ino_t, ino)
319 __field(int, whichfork)
320 __field(unsigned int, type)
321 __field(xfs_fileoff_t, offset)
322 __field(void *, ret_ip)
325 __entry->dev = sc->ip->i_mount->m_super->s_dev;
326 __entry->ino = sc->ip->i_ino;
327 __entry->whichfork = whichfork;
328 __entry->type = sc->sm->sm_type;
329 __entry->offset = offset;
330 __entry->ret_ip = ret_ip;
332 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx ret_ip %pS",
333 MAJOR(__entry->dev), MINOR(__entry->dev),
335 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
336 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
341 #define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \
342 DEFINE_EVENT(xchk_fblock_error_class, name, \
343 TP_PROTO(struct xfs_scrub *sc, int whichfork, \
344 xfs_fileoff_t offset, void *ret_ip), \
345 TP_ARGS(sc, whichfork, offset, ret_ip))
347 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error);
348 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);
350 TRACE_EVENT(xchk_incomplete,
351 TP_PROTO(struct xfs_scrub *sc, void *ret_ip),
355 __field(unsigned int, type)
356 __field(void *, ret_ip)
359 __entry->dev = sc->mp->m_super->s_dev;
360 __entry->type = sc->sm->sm_type;
361 __entry->ret_ip = ret_ip;
363 TP_printk("dev %d:%d type %s ret_ip %pS",
364 MAJOR(__entry->dev), MINOR(__entry->dev),
365 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
369 TRACE_EVENT(xchk_btree_op_error,
370 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
371 int level, int error, void *ret_ip),
372 TP_ARGS(sc, cur, level, error, ret_ip),
375 __field(unsigned int, type)
376 __field(xfs_btnum_t, btnum)
378 __field(xfs_agnumber_t, agno)
379 __field(xfs_agblock_t, bno)
382 __field(void *, ret_ip)
385 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
387 __entry->dev = sc->mp->m_super->s_dev;
388 __entry->type = sc->sm->sm_type;
389 __entry->btnum = cur->bc_btnum;
390 __entry->level = level;
391 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
392 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
393 __entry->ptr = cur->bc_levels[level].ptr;
394 __entry->error = error;
395 __entry->ret_ip = ret_ip;
397 TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",
398 MAJOR(__entry->dev), MINOR(__entry->dev),
399 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
400 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
409 TRACE_EVENT(xchk_ifork_btree_op_error,
410 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
411 int level, int error, void *ret_ip),
412 TP_ARGS(sc, cur, level, error, ret_ip),
415 __field(xfs_ino_t, ino)
416 __field(int, whichfork)
417 __field(unsigned int, type)
418 __field(xfs_btnum_t, btnum)
421 __field(xfs_agnumber_t, agno)
422 __field(xfs_agblock_t, bno)
424 __field(void *, ret_ip)
427 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
428 __entry->dev = sc->mp->m_super->s_dev;
429 __entry->ino = sc->ip->i_ino;
430 __entry->whichfork = cur->bc_ino.whichfork;
431 __entry->type = sc->sm->sm_type;
432 __entry->btnum = cur->bc_btnum;
433 __entry->level = level;
434 __entry->ptr = cur->bc_levels[level].ptr;
435 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
436 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
437 __entry->error = error;
438 __entry->ret_ip = ret_ip;
440 TP_printk("dev %d:%d ino 0x%llx fork %s type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",
441 MAJOR(__entry->dev), MINOR(__entry->dev),
443 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
444 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
445 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
454 TRACE_EVENT(xchk_btree_error,
455 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
456 int level, void *ret_ip),
457 TP_ARGS(sc, cur, level, ret_ip),
460 __field(unsigned int, type)
461 __field(xfs_btnum_t, btnum)
463 __field(xfs_agnumber_t, agno)
464 __field(xfs_agblock_t, bno)
466 __field(void *, ret_ip)
469 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
470 __entry->dev = sc->mp->m_super->s_dev;
471 __entry->type = sc->sm->sm_type;
472 __entry->btnum = cur->bc_btnum;
473 __entry->level = level;
474 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
475 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
476 __entry->ptr = cur->bc_levels[level].ptr;
477 __entry->ret_ip = ret_ip;
479 TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",
480 MAJOR(__entry->dev), MINOR(__entry->dev),
481 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
482 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
490 TRACE_EVENT(xchk_ifork_btree_error,
491 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
492 int level, void *ret_ip),
493 TP_ARGS(sc, cur, level, ret_ip),
496 __field(xfs_ino_t, ino)
497 __field(int, whichfork)
498 __field(unsigned int, type)
499 __field(xfs_btnum_t, btnum)
501 __field(xfs_agnumber_t, agno)
502 __field(xfs_agblock_t, bno)
504 __field(void *, ret_ip)
507 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
508 __entry->dev = sc->mp->m_super->s_dev;
509 __entry->ino = sc->ip->i_ino;
510 __entry->whichfork = cur->bc_ino.whichfork;
511 __entry->type = sc->sm->sm_type;
512 __entry->btnum = cur->bc_btnum;
513 __entry->level = level;
514 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
515 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
516 __entry->ptr = cur->bc_levels[level].ptr;
517 __entry->ret_ip = ret_ip;
519 TP_printk("dev %d:%d ino 0x%llx fork %s type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",
520 MAJOR(__entry->dev), MINOR(__entry->dev),
522 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
523 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
524 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
532 DECLARE_EVENT_CLASS(xchk_sbtree_class,
533 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
535 TP_ARGS(sc, cur, level),
539 __field(xfs_btnum_t, btnum)
540 __field(xfs_agnumber_t, agno)
541 __field(xfs_agblock_t, bno)
543 __field(int, nlevels)
547 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
549 __entry->dev = sc->mp->m_super->s_dev;
550 __entry->type = sc->sm->sm_type;
551 __entry->btnum = cur->bc_btnum;
552 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
553 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
554 __entry->level = level;
555 __entry->nlevels = cur->bc_nlevels;
556 __entry->ptr = cur->bc_levels[level].ptr;
558 TP_printk("dev %d:%d type %s btree %s agno 0x%x agbno 0x%x level %d nlevels %d ptr %d",
559 MAJOR(__entry->dev), MINOR(__entry->dev),
560 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
561 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
568 #define DEFINE_SCRUB_SBTREE_EVENT(name) \
569 DEFINE_EVENT(xchk_sbtree_class, name, \
570 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \
572 TP_ARGS(sc, cur, level))
574 DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec);
575 DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key);
577 TRACE_EVENT(xchk_xref_error,
578 TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip),
579 TP_ARGS(sc, error, ret_ip),
584 __field(void *, ret_ip)
587 __entry->dev = sc->mp->m_super->s_dev;
588 __entry->type = sc->sm->sm_type;
589 __entry->error = error;
590 __entry->ret_ip = ret_ip;
592 TP_printk("dev %d:%d type %s xref error %d ret_ip %pS",
593 MAJOR(__entry->dev), MINOR(__entry->dev),
594 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
599 TRACE_EVENT(xchk_iallocbt_check_cluster,
600 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
601 xfs_agino_t startino, xfs_daddr_t map_daddr,
602 unsigned short map_len, unsigned int chunk_ino,
603 unsigned int nr_inodes, uint16_t cluster_mask,
604 uint16_t holemask, unsigned int cluster_ino),
605 TP_ARGS(mp, agno, startino, map_daddr, map_len, chunk_ino, nr_inodes,
606 cluster_mask, holemask, cluster_ino),
609 __field(xfs_agnumber_t, agno)
610 __field(xfs_agino_t, startino)
611 __field(xfs_daddr_t, map_daddr)
612 __field(unsigned short, map_len)
613 __field(unsigned int, chunk_ino)
614 __field(unsigned int, nr_inodes)
615 __field(unsigned int, cluster_ino)
616 __field(uint16_t, cluster_mask)
617 __field(uint16_t, holemask)
620 __entry->dev = mp->m_super->s_dev;
621 __entry->agno = agno;
622 __entry->startino = startino;
623 __entry->map_daddr = map_daddr;
624 __entry->map_len = map_len;
625 __entry->chunk_ino = chunk_ino;
626 __entry->nr_inodes = nr_inodes;
627 __entry->cluster_mask = cluster_mask;
628 __entry->holemask = holemask;
629 __entry->cluster_ino = cluster_ino;
631 TP_printk("dev %d:%d agno 0x%x startino 0x%x daddr 0x%llx bbcount 0x%x chunkino 0x%x nr_inodes %u cluster_mask 0x%x holemask 0x%x cluster_ino 0x%x",
632 MAJOR(__entry->dev), MINOR(__entry->dev),
639 __entry->cluster_mask,
641 __entry->cluster_ino)
644 TRACE_EVENT(xchk_inode_is_allocated,
645 TP_PROTO(struct xfs_inode *ip),
649 __field(xfs_ino_t, ino)
650 __field(unsigned long, iflags)
651 __field(umode_t, mode)
654 __entry->dev = VFS_I(ip)->i_sb->s_dev;
655 __entry->ino = ip->i_ino;
656 __entry->iflags = ip->i_flags;
657 __entry->mode = VFS_I(ip)->i_mode;
659 TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx mode 0x%x",
660 MAJOR(__entry->dev), MINOR(__entry->dev),
666 TRACE_EVENT(xchk_fscounters_calc,
667 TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree,
668 uint64_t fdblocks, uint64_t delalloc),
669 TP_ARGS(mp, icount, ifree, fdblocks, delalloc),
672 __field(int64_t, icount_sb)
673 __field(uint64_t, icount_calculated)
674 __field(int64_t, ifree_sb)
675 __field(uint64_t, ifree_calculated)
676 __field(int64_t, fdblocks_sb)
677 __field(uint64_t, fdblocks_calculated)
678 __field(uint64_t, delalloc)
681 __entry->dev = mp->m_super->s_dev;
682 __entry->icount_sb = mp->m_sb.sb_icount;
683 __entry->icount_calculated = icount;
684 __entry->ifree_sb = mp->m_sb.sb_ifree;
685 __entry->ifree_calculated = ifree;
686 __entry->fdblocks_sb = mp->m_sb.sb_fdblocks;
687 __entry->fdblocks_calculated = fdblocks;
688 __entry->delalloc = delalloc;
690 TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu",
691 MAJOR(__entry->dev), MINOR(__entry->dev),
693 __entry->icount_calculated,
695 __entry->ifree_calculated,
696 __entry->fdblocks_sb,
697 __entry->fdblocks_calculated,
701 TRACE_EVENT(xchk_fscounters_within_range,
702 TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value,
704 TP_ARGS(mp, expected, curr_value, old_value),
707 __field(uint64_t, expected)
708 __field(int64_t, curr_value)
709 __field(int64_t, old_value)
712 __entry->dev = mp->m_super->s_dev;
713 __entry->expected = expected;
714 __entry->curr_value = curr_value;
715 __entry->old_value = old_value;
717 TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld",
718 MAJOR(__entry->dev), MINOR(__entry->dev),
724 DECLARE_EVENT_CLASS(xchk_fsfreeze_class,
725 TP_PROTO(struct xfs_scrub *sc, int error),
729 __field(unsigned int, type)
733 __entry->dev = sc->mp->m_super->s_dev;
734 __entry->type = sc->sm->sm_type;
735 __entry->error = error;
737 TP_printk("dev %d:%d type %s error %d",
738 MAJOR(__entry->dev), MINOR(__entry->dev),
739 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
742 #define DEFINE_XCHK_FSFREEZE_EVENT(name) \
743 DEFINE_EVENT(xchk_fsfreeze_class, name, \
744 TP_PROTO(struct xfs_scrub *sc, int error), \
746 DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze);
747 DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw);
749 TRACE_EVENT(xchk_refcount_incorrect,
750 TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *irec,
752 TP_ARGS(pag, irec, seen),
755 __field(xfs_agnumber_t, agno)
756 __field(enum xfs_refc_domain, domain)
757 __field(xfs_agblock_t, startblock)
758 __field(xfs_extlen_t, blockcount)
759 __field(xfs_nlink_t, refcount)
760 __field(xfs_nlink_t, seen)
763 __entry->dev = pag->pag_mount->m_super->s_dev;
764 __entry->agno = pag->pag_agno;
765 __entry->domain = irec->rc_domain;
766 __entry->startblock = irec->rc_startblock;
767 __entry->blockcount = irec->rc_blockcount;
768 __entry->refcount = irec->rc_refcount;
769 __entry->seen = seen;
771 TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u",
772 MAJOR(__entry->dev), MINOR(__entry->dev),
774 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
781 TRACE_EVENT(xfile_create,
782 TP_PROTO(struct xfile *xf),
786 __field(unsigned long, ino)
787 __array(char, pathname, 256)
793 __entry->ino = file_inode(xf->file)->i_ino;
794 memset(pathname, 0, sizeof(pathname));
795 path = file_path(xf->file, pathname, sizeof(pathname) - 1);
798 strncpy(__entry->pathname, path, sizeof(__entry->pathname));
800 TP_printk("xfino 0x%lx path '%s'",
805 TRACE_EVENT(xfile_destroy,
806 TP_PROTO(struct xfile *xf),
809 __field(unsigned long, ino)
810 __field(unsigned long long, bytes)
811 __field(loff_t, size)
814 struct xfile_stat statbuf;
817 ret = xfile_stat(xf, &statbuf);
819 __entry->bytes = statbuf.bytes;
820 __entry->size = statbuf.size;
825 __entry->ino = file_inode(xf->file)->i_ino;
827 TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx",
833 DECLARE_EVENT_CLASS(xfile_class,
834 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount),
835 TP_ARGS(xf, pos, bytecount),
837 __field(unsigned long, ino)
838 __field(unsigned long long, bytes_used)
840 __field(loff_t, size)
841 __field(unsigned long long, bytecount)
844 struct xfile_stat statbuf;
847 ret = xfile_stat(xf, &statbuf);
849 __entry->bytes_used = statbuf.bytes;
850 __entry->size = statbuf.size;
852 __entry->bytes_used = -1;
855 __entry->ino = file_inode(xf->file)->i_ino;
857 __entry->bytecount = bytecount;
859 TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx",
866 #define DEFINE_XFILE_EVENT(name) \
867 DEFINE_EVENT(xfile_class, name, \
868 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), \
869 TP_ARGS(xf, pos, bytecount))
870 DEFINE_XFILE_EVENT(xfile_pread);
871 DEFINE_XFILE_EVENT(xfile_pwrite);
872 DEFINE_XFILE_EVENT(xfile_seek_data);
873 DEFINE_XFILE_EVENT(xfile_get_page);
874 DEFINE_XFILE_EVENT(xfile_put_page);
876 TRACE_EVENT(xfarray_create,
877 TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity),
878 TP_ARGS(xfa, required_capacity),
880 __field(unsigned long, ino)
881 __field(uint64_t, max_nr)
882 __field(size_t, obj_size)
883 __field(int, obj_size_log)
884 __field(unsigned long long, required_capacity)
887 __entry->max_nr = xfa->max_nr;
888 __entry->obj_size = xfa->obj_size;
889 __entry->obj_size_log = xfa->obj_size_log;
890 __entry->ino = file_inode(xfa->xfile->file)->i_ino;
891 __entry->required_capacity = required_capacity;
893 TP_printk("xfino 0x%lx max_nr %llu reqd_nr %llu objsz %zu objszlog %d",
896 __entry->required_capacity,
898 __entry->obj_size_log)
901 TRACE_EVENT(xfarray_isort,
902 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
905 __field(unsigned long, ino)
906 __field(unsigned long long, lo)
907 __field(unsigned long long, hi)
910 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
914 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
918 __entry->hi - __entry->lo)
921 TRACE_EVENT(xfarray_pagesort,
922 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
925 __field(unsigned long, ino)
926 __field(unsigned long long, lo)
927 __field(unsigned long long, hi)
930 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
934 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
938 __entry->hi - __entry->lo)
941 TRACE_EVENT(xfarray_qsort,
942 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
945 __field(unsigned long, ino)
946 __field(unsigned long long, lo)
947 __field(unsigned long long, hi)
948 __field(int, stack_depth)
949 __field(int, max_stack_depth)
952 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
955 __entry->stack_depth = si->stack_depth;
956 __entry->max_stack_depth = si->max_stack_depth;
958 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu stack %d/%d",
962 __entry->hi - __entry->lo,
963 __entry->stack_depth,
964 __entry->max_stack_depth)
967 TRACE_EVENT(xfarray_sort,
968 TP_PROTO(struct xfarray_sortinfo *si, size_t bytes),
971 __field(unsigned long, ino)
972 __field(unsigned long long, nr)
973 __field(size_t, obj_size)
974 __field(size_t, bytes)
975 __field(unsigned int, max_stack_depth)
978 __entry->nr = si->array->nr;
979 __entry->obj_size = si->array->obj_size;
980 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
981 __entry->bytes = bytes;
982 __entry->max_stack_depth = si->max_stack_depth;
984 TP_printk("xfino 0x%lx nr %llu objsz %zu stack %u bytes %zu",
988 __entry->max_stack_depth,
992 TRACE_EVENT(xfarray_sort_stats,
993 TP_PROTO(struct xfarray_sortinfo *si, int error),
996 __field(unsigned long, ino)
998 __field(unsigned long long, loads)
999 __field(unsigned long long, stores)
1000 __field(unsigned long long, compares)
1001 __field(unsigned long long, heapsorts)
1003 __field(unsigned int, max_stack_depth)
1004 __field(unsigned int, max_stack_used)
1008 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1010 __entry->loads = si->loads;
1011 __entry->stores = si->stores;
1012 __entry->compares = si->compares;
1013 __entry->heapsorts = si->heapsorts;
1015 __entry->max_stack_depth = si->max_stack_depth;
1016 __entry->max_stack_used = si->max_stack_used;
1017 __entry->error = error;
1021 "xfino 0x%lx loads %llu stores %llu compares %llu heapsorts %llu stack_depth %u/%u error %d",
1023 "xfino 0x%lx stack_depth %u/%u error %d",
1032 __entry->max_stack_used,
1033 __entry->max_stack_depth,
1037 #ifdef CONFIG_XFS_RT
1038 TRACE_EVENT(xchk_rtsum_record_free,
1039 TP_PROTO(struct xfs_mount *mp, xfs_rtblock_t start,
1040 uint64_t len, unsigned int log, loff_t pos, xfs_suminfo_t v),
1041 TP_ARGS(mp, start, len, log, pos, v),
1044 __field(dev_t, rtdev)
1045 __field(xfs_rtblock_t, start)
1046 __field(unsigned long long, len)
1047 __field(unsigned int, log)
1048 __field(loff_t, pos)
1049 __field(xfs_suminfo_t, v)
1052 __entry->dev = mp->m_super->s_dev;
1053 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
1054 __entry->start = start;
1060 TP_printk("dev %d:%d rtdev %d:%d rtx 0x%llx rtxcount 0x%llx log %u rsumpos 0x%llx sumcount %u",
1061 MAJOR(__entry->dev), MINOR(__entry->dev),
1062 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
1069 #endif /* CONFIG_XFS_RT */
1071 /* repair tracepoints */
1072 #if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)
1074 DECLARE_EVENT_CLASS(xrep_extent_class,
1075 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len),
1076 TP_ARGS(pag, agbno, len),
1079 __field(xfs_agnumber_t, agno)
1080 __field(xfs_agblock_t, agbno)
1081 __field(xfs_extlen_t, len)
1084 __entry->dev = pag->pag_mount->m_super->s_dev;
1085 __entry->agno = pag->pag_agno;
1086 __entry->agbno = agbno;
1089 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
1090 MAJOR(__entry->dev), MINOR(__entry->dev),
1095 #define DEFINE_REPAIR_EXTENT_EVENT(name) \
1096 DEFINE_EVENT(xrep_extent_class, name, \
1097 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len), \
1098 TP_ARGS(pag, agbno, len))
1099 DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent);
1100 DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent);
1101 DEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval);
1102 DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert);
1104 DECLARE_EVENT_CLASS(xrep_reap_find_class,
1105 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len,
1107 TP_ARGS(pag, agbno, len, crosslinked),
1110 __field(xfs_agnumber_t, agno)
1111 __field(xfs_agblock_t, agbno)
1112 __field(xfs_extlen_t, len)
1113 __field(bool, crosslinked)
1116 __entry->dev = pag->pag_mount->m_super->s_dev;
1117 __entry->agno = pag->pag_agno;
1118 __entry->agbno = agbno;
1120 __entry->crosslinked = crosslinked;
1122 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x crosslinked %d",
1123 MAJOR(__entry->dev), MINOR(__entry->dev),
1127 __entry->crosslinked ? 1 : 0)
1129 #define DEFINE_REPAIR_REAP_FIND_EVENT(name) \
1130 DEFINE_EVENT(xrep_reap_find_class, name, \
1131 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len, \
1132 bool crosslinked), \
1133 TP_ARGS(pag, agbno, len, crosslinked))
1134 DEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select);
1136 DECLARE_EVENT_CLASS(xrep_rmap_class,
1137 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1138 xfs_agblock_t agbno, xfs_extlen_t len,
1139 uint64_t owner, uint64_t offset, unsigned int flags),
1140 TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
1143 __field(xfs_agnumber_t, agno)
1144 __field(xfs_agblock_t, agbno)
1145 __field(xfs_extlen_t, len)
1146 __field(uint64_t, owner)
1147 __field(uint64_t, offset)
1148 __field(unsigned int, flags)
1151 __entry->dev = mp->m_super->s_dev;
1152 __entry->agno = agno;
1153 __entry->agbno = agbno;
1155 __entry->owner = owner;
1156 __entry->offset = offset;
1157 __entry->flags = flags;
1159 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
1160 MAJOR(__entry->dev), MINOR(__entry->dev),
1168 #define DEFINE_REPAIR_RMAP_EVENT(name) \
1169 DEFINE_EVENT(xrep_rmap_class, name, \
1170 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
1171 xfs_agblock_t agbno, xfs_extlen_t len, \
1172 uint64_t owner, uint64_t offset, unsigned int flags), \
1173 TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
1174 DEFINE_REPAIR_RMAP_EVENT(xrep_alloc_extent_fn);
1175 DEFINE_REPAIR_RMAP_EVENT(xrep_ialloc_extent_fn);
1176 DEFINE_REPAIR_RMAP_EVENT(xrep_rmap_extent_fn);
1177 DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_extent_fn);
1179 TRACE_EVENT(xrep_refcount_extent_fn,
1180 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1181 struct xfs_refcount_irec *irec),
1182 TP_ARGS(mp, agno, irec),
1185 __field(xfs_agnumber_t, agno)
1186 __field(xfs_agblock_t, startblock)
1187 __field(xfs_extlen_t, blockcount)
1188 __field(xfs_nlink_t, refcount)
1191 __entry->dev = mp->m_super->s_dev;
1192 __entry->agno = agno;
1193 __entry->startblock = irec->rc_startblock;
1194 __entry->blockcount = irec->rc_blockcount;
1195 __entry->refcount = irec->rc_refcount;
1197 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u",
1198 MAJOR(__entry->dev), MINOR(__entry->dev),
1200 __entry->startblock,
1201 __entry->blockcount,
1205 TRACE_EVENT(xrep_findroot_block,
1206 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
1207 uint32_t magic, uint16_t level),
1208 TP_ARGS(mp, agno, agbno, magic, level),
1211 __field(xfs_agnumber_t, agno)
1212 __field(xfs_agblock_t, agbno)
1213 __field(uint32_t, magic)
1214 __field(uint16_t, level)
1217 __entry->dev = mp->m_super->s_dev;
1218 __entry->agno = agno;
1219 __entry->agbno = agbno;
1220 __entry->magic = magic;
1221 __entry->level = level;
1223 TP_printk("dev %d:%d agno 0x%x agbno 0x%x magic 0x%x level %u",
1224 MAJOR(__entry->dev), MINOR(__entry->dev),
1230 TRACE_EVENT(xrep_calc_ag_resblks,
1231 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1232 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen,
1233 xfs_agblock_t usedlen),
1234 TP_ARGS(mp, agno, icount, aglen, freelen, usedlen),
1237 __field(xfs_agnumber_t, agno)
1238 __field(xfs_agino_t, icount)
1239 __field(xfs_agblock_t, aglen)
1240 __field(xfs_agblock_t, freelen)
1241 __field(xfs_agblock_t, usedlen)
1244 __entry->dev = mp->m_super->s_dev;
1245 __entry->agno = agno;
1246 __entry->icount = icount;
1247 __entry->aglen = aglen;
1248 __entry->freelen = freelen;
1249 __entry->usedlen = usedlen;
1251 TP_printk("dev %d:%d agno 0x%x icount %u aglen %u freelen %u usedlen %u",
1252 MAJOR(__entry->dev), MINOR(__entry->dev),
1259 TRACE_EVENT(xrep_calc_ag_resblks_btsize,
1260 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1261 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz,
1262 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz),
1263 TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),
1266 __field(xfs_agnumber_t, agno)
1267 __field(xfs_agblock_t, bnobt_sz)
1268 __field(xfs_agblock_t, inobt_sz)
1269 __field(xfs_agblock_t, rmapbt_sz)
1270 __field(xfs_agblock_t, refcbt_sz)
1273 __entry->dev = mp->m_super->s_dev;
1274 __entry->agno = agno;
1275 __entry->bnobt_sz = bnobt_sz;
1276 __entry->inobt_sz = inobt_sz;
1277 __entry->rmapbt_sz = rmapbt_sz;
1278 __entry->refcbt_sz = refcbt_sz;
1280 TP_printk("dev %d:%d agno 0x%x bnobt %u inobt %u rmapbt %u refcountbt %u",
1281 MAJOR(__entry->dev), MINOR(__entry->dev),
1288 TRACE_EVENT(xrep_reset_counters,
1289 TP_PROTO(struct xfs_mount *mp),
1295 __entry->dev = mp->m_super->s_dev;
1297 TP_printk("dev %d:%d",
1298 MAJOR(__entry->dev), MINOR(__entry->dev))
1301 TRACE_EVENT(xrep_ialloc_insert,
1302 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1303 xfs_agino_t startino, uint16_t holemask, uint8_t count,
1304 uint8_t freecount, uint64_t freemask),
1305 TP_ARGS(mp, agno, startino, holemask, count, freecount, freemask),
1308 __field(xfs_agnumber_t, agno)
1309 __field(xfs_agino_t, startino)
1310 __field(uint16_t, holemask)
1311 __field(uint8_t, count)
1312 __field(uint8_t, freecount)
1313 __field(uint64_t, freemask)
1316 __entry->dev = mp->m_super->s_dev;
1317 __entry->agno = agno;
1318 __entry->startino = startino;
1319 __entry->holemask = holemask;
1320 __entry->count = count;
1321 __entry->freecount = freecount;
1322 __entry->freemask = freemask;
1324 TP_printk("dev %d:%d agno 0x%x startino 0x%x holemask 0x%x count %u freecount %u freemask 0x%llx",
1325 MAJOR(__entry->dev), MINOR(__entry->dev),
1334 #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */
1336 #endif /* _TRACE_XFS_SCRUB_TRACE_H */
1338 #undef TRACE_INCLUDE_PATH
1339 #define TRACE_INCLUDE_PATH .
1340 #define TRACE_INCLUDE_FILE scrub/trace
1341 #include <trace/define_trace.h>