162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2017-2023 Oracle.  All Rights Reserved.
462306a36Sopenharmony_ci * Author: Darrick J. Wong <djwong@kernel.org>
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * NOTE: none of these tracepoints shall be considered a stable kernel ABI
762306a36Sopenharmony_ci * as they can change at any time.  See xfs_trace.h for documentation of
862306a36Sopenharmony_ci * specific units found in tracepoint output.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci#undef TRACE_SYSTEM
1162306a36Sopenharmony_ci#define TRACE_SYSTEM xfs_scrub
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
1462306a36Sopenharmony_ci#define _TRACE_XFS_SCRUB_TRACE_H
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <linux/tracepoint.h>
1762306a36Sopenharmony_ci#include "xfs_bit.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct xfile;
2062306a36Sopenharmony_cistruct xfarray;
2162306a36Sopenharmony_cistruct xfarray_sortinfo;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci/*
2462306a36Sopenharmony_ci * ftrace's __print_symbolic requires that all enum values be wrapped in the
2562306a36Sopenharmony_ci * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
2662306a36Sopenharmony_ci * ring buffer.  Somehow this was only worth mentioning in the ftrace sample
2762306a36Sopenharmony_ci * code.
2862306a36Sopenharmony_ci */
2962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_BNOi);
3062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_CNTi);
3162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi);
3262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_INOi);
3362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_FINOi);
3462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi);
3562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_BTNUM_REFCi);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);
3862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE);
4162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB);
4262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF);
4362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL);
4462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI);
4562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT);
4662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT);
4762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT);
4862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT);
4962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT);
5062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT);
5162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE);
5262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD);
5362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA);
5462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC);
5562306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR);
5662306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR);
5762306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK);
5862306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT);
5962306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP);
6062306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM);
6162306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA);
6262306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA);
6362306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA);
6462306a36Sopenharmony_ciTRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS);
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci#define XFS_SCRUB_TYPE_STRINGS \
6762306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_PROBE,		"probe" }, \
6862306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_SB,		"sb" }, \
6962306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_AGF,		"agf" }, \
7062306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_AGFL,		"agfl" }, \
7162306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_AGI,		"agi" }, \
7262306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_BNOBT,		"bnobt" }, \
7362306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_CNTBT,		"cntbt" }, \
7462306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_INOBT,		"inobt" }, \
7562306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_FINOBT,	"finobt" }, \
7662306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_RMAPBT,	"rmapbt" }, \
7762306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_REFCNTBT,	"refcountbt" }, \
7862306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_INODE,		"inode" }, \
7962306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_BMBTD,		"bmapbtd" }, \
8062306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_BMBTA,		"bmapbta" }, \
8162306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_BMBTC,		"bmapbtc" }, \
8262306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_DIR,		"directory" }, \
8362306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_XATTR,		"xattr" }, \
8462306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_SYMLINK,	"symlink" }, \
8562306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_PARENT,	"parent" }, \
8662306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_RTBITMAP,	"rtbitmap" }, \
8762306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_RTSUM,		"rtsummary" }, \
8862306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_UQUOTA,	"usrquota" }, \
8962306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_GQUOTA,	"grpquota" }, \
9062306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_PQUOTA,	"prjquota" }, \
9162306a36Sopenharmony_ci	{ XFS_SCRUB_TYPE_FSCOUNTERS,	"fscounters" }
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci#define XFS_SCRUB_FLAG_STRINGS \
9462306a36Sopenharmony_ci	{ XFS_SCRUB_IFLAG_REPAIR,		"repair" }, \
9562306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_CORRUPT,		"corrupt" }, \
9662306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_PREEN,		"preen" }, \
9762306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_XFAIL,		"xfail" }, \
9862306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_XCORRUPT,		"xcorrupt" }, \
9962306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_INCOMPLETE,		"incomplete" }, \
10062306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_WARNING,		"warning" }, \
10162306a36Sopenharmony_ci	{ XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED,	"norepair" }, \
10262306a36Sopenharmony_ci	{ XFS_SCRUB_IFLAG_FORCE_REBUILD,	"rebuild" }
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci#define XFS_SCRUB_STATE_STRINGS \
10562306a36Sopenharmony_ci	{ XCHK_TRY_HARDER,			"try_harder" }, \
10662306a36Sopenharmony_ci	{ XCHK_HAVE_FREEZE_PROT,		"nofreeze" }, \
10762306a36Sopenharmony_ci	{ XCHK_FSGATES_DRAIN,			"fsgates_drain" }, \
10862306a36Sopenharmony_ci	{ XCHK_NEED_DRAIN,			"need_drain" }, \
10962306a36Sopenharmony_ci	{ XREP_ALREADY_FIXED,			"already_fixed" }
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_class,
11262306a36Sopenharmony_ci	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,
11362306a36Sopenharmony_ci		 int error),
11462306a36Sopenharmony_ci	TP_ARGS(ip, sm, error),
11562306a36Sopenharmony_ci	TP_STRUCT__entry(
11662306a36Sopenharmony_ci		__field(dev_t, dev)
11762306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
11862306a36Sopenharmony_ci		__field(unsigned int, type)
11962306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
12062306a36Sopenharmony_ci		__field(xfs_ino_t, inum)
12162306a36Sopenharmony_ci		__field(unsigned int, gen)
12262306a36Sopenharmony_ci		__field(unsigned int, flags)
12362306a36Sopenharmony_ci		__field(int, error)
12462306a36Sopenharmony_ci	),
12562306a36Sopenharmony_ci	TP_fast_assign(
12662306a36Sopenharmony_ci		__entry->dev = ip->i_mount->m_super->s_dev;
12762306a36Sopenharmony_ci		__entry->ino = ip->i_ino;
12862306a36Sopenharmony_ci		__entry->type = sm->sm_type;
12962306a36Sopenharmony_ci		__entry->agno = sm->sm_agno;
13062306a36Sopenharmony_ci		__entry->inum = sm->sm_ino;
13162306a36Sopenharmony_ci		__entry->gen = sm->sm_gen;
13262306a36Sopenharmony_ci		__entry->flags = sm->sm_flags;
13362306a36Sopenharmony_ci		__entry->error = error;
13462306a36Sopenharmony_ci	),
13562306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%llx type %s agno 0x%x inum 0x%llx gen 0x%x flags (%s) error %d",
13662306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
13762306a36Sopenharmony_ci		  __entry->ino,
13862306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
13962306a36Sopenharmony_ci		  __entry->agno,
14062306a36Sopenharmony_ci		  __entry->inum,
14162306a36Sopenharmony_ci		  __entry->gen,
14262306a36Sopenharmony_ci		  __print_flags(__entry->flags, "|", XFS_SCRUB_FLAG_STRINGS),
14362306a36Sopenharmony_ci		  __entry->error)
14462306a36Sopenharmony_ci)
14562306a36Sopenharmony_ci#define DEFINE_SCRUB_EVENT(name) \
14662306a36Sopenharmony_ciDEFINE_EVENT(xchk_class, name, \
14762306a36Sopenharmony_ci	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \
14862306a36Sopenharmony_ci		 int error), \
14962306a36Sopenharmony_ci	TP_ARGS(ip, sm, error))
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ciDEFINE_SCRUB_EVENT(xchk_start);
15262306a36Sopenharmony_ciDEFINE_SCRUB_EVENT(xchk_done);
15362306a36Sopenharmony_ciDEFINE_SCRUB_EVENT(xchk_deadlock_retry);
15462306a36Sopenharmony_ciDEFINE_SCRUB_EVENT(xrep_attempt);
15562306a36Sopenharmony_ciDEFINE_SCRUB_EVENT(xrep_done);
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_fsgate_class,
15862306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, unsigned int fsgate_flags),
15962306a36Sopenharmony_ci	TP_ARGS(sc, fsgate_flags),
16062306a36Sopenharmony_ci	TP_STRUCT__entry(
16162306a36Sopenharmony_ci		__field(dev_t, dev)
16262306a36Sopenharmony_ci		__field(unsigned int, type)
16362306a36Sopenharmony_ci		__field(unsigned int, fsgate_flags)
16462306a36Sopenharmony_ci	),
16562306a36Sopenharmony_ci	TP_fast_assign(
16662306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
16762306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
16862306a36Sopenharmony_ci		__entry->fsgate_flags = fsgate_flags;
16962306a36Sopenharmony_ci	),
17062306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s fsgates '%s'",
17162306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
17262306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
17362306a36Sopenharmony_ci		  __print_flags(__entry->fsgate_flags, "|", XFS_SCRUB_STATE_STRINGS))
17462306a36Sopenharmony_ci)
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci#define DEFINE_SCRUB_FSHOOK_EVENT(name) \
17762306a36Sopenharmony_ciDEFINE_EVENT(xchk_fsgate_class, name, \
17862306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \
17962306a36Sopenharmony_ci	TP_ARGS(sc, fsgates_flags))
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ciDEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable);
18262306a36Sopenharmony_ciDEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable);
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciTRACE_EVENT(xchk_op_error,
18562306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno,
18662306a36Sopenharmony_ci		 xfs_agblock_t bno, int error, void *ret_ip),
18762306a36Sopenharmony_ci	TP_ARGS(sc, agno, bno, error, ret_ip),
18862306a36Sopenharmony_ci	TP_STRUCT__entry(
18962306a36Sopenharmony_ci		__field(dev_t, dev)
19062306a36Sopenharmony_ci		__field(unsigned int, type)
19162306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
19262306a36Sopenharmony_ci		__field(xfs_agblock_t, bno)
19362306a36Sopenharmony_ci		__field(int, error)
19462306a36Sopenharmony_ci		__field(void *, ret_ip)
19562306a36Sopenharmony_ci	),
19662306a36Sopenharmony_ci	TP_fast_assign(
19762306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
19862306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
19962306a36Sopenharmony_ci		__entry->agno = agno;
20062306a36Sopenharmony_ci		__entry->bno = bno;
20162306a36Sopenharmony_ci		__entry->error = error;
20262306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
20362306a36Sopenharmony_ci	),
20462306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x error %d ret_ip %pS",
20562306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
20662306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
20762306a36Sopenharmony_ci		  __entry->agno,
20862306a36Sopenharmony_ci		  __entry->bno,
20962306a36Sopenharmony_ci		  __entry->error,
21062306a36Sopenharmony_ci		  __entry->ret_ip)
21162306a36Sopenharmony_ci);
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ciTRACE_EVENT(xchk_file_op_error,
21462306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, int whichfork,
21562306a36Sopenharmony_ci		 xfs_fileoff_t offset, int error, void *ret_ip),
21662306a36Sopenharmony_ci	TP_ARGS(sc, whichfork, offset, error, ret_ip),
21762306a36Sopenharmony_ci	TP_STRUCT__entry(
21862306a36Sopenharmony_ci		__field(dev_t, dev)
21962306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
22062306a36Sopenharmony_ci		__field(int, whichfork)
22162306a36Sopenharmony_ci		__field(unsigned int, type)
22262306a36Sopenharmony_ci		__field(xfs_fileoff_t, offset)
22362306a36Sopenharmony_ci		__field(int, error)
22462306a36Sopenharmony_ci		__field(void *, ret_ip)
22562306a36Sopenharmony_ci	),
22662306a36Sopenharmony_ci	TP_fast_assign(
22762306a36Sopenharmony_ci		__entry->dev = sc->ip->i_mount->m_super->s_dev;
22862306a36Sopenharmony_ci		__entry->ino = sc->ip->i_ino;
22962306a36Sopenharmony_ci		__entry->whichfork = whichfork;
23062306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
23162306a36Sopenharmony_ci		__entry->offset = offset;
23262306a36Sopenharmony_ci		__entry->error = error;
23362306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
23462306a36Sopenharmony_ci	),
23562306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx error %d ret_ip %pS",
23662306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
23762306a36Sopenharmony_ci		  __entry->ino,
23862306a36Sopenharmony_ci		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
23962306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
24062306a36Sopenharmony_ci		  __entry->offset,
24162306a36Sopenharmony_ci		  __entry->error,
24262306a36Sopenharmony_ci		  __entry->ret_ip)
24362306a36Sopenharmony_ci);
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_block_error_class,
24662306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip),
24762306a36Sopenharmony_ci	TP_ARGS(sc, daddr, ret_ip),
24862306a36Sopenharmony_ci	TP_STRUCT__entry(
24962306a36Sopenharmony_ci		__field(dev_t, dev)
25062306a36Sopenharmony_ci		__field(unsigned int, type)
25162306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
25262306a36Sopenharmony_ci		__field(xfs_agblock_t, agbno)
25362306a36Sopenharmony_ci		__field(void *, ret_ip)
25462306a36Sopenharmony_ci	),
25562306a36Sopenharmony_ci	TP_fast_assign(
25662306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
25762306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
25862306a36Sopenharmony_ci		__entry->agno = xfs_daddr_to_agno(sc->mp, daddr);
25962306a36Sopenharmony_ci		__entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr);
26062306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
26162306a36Sopenharmony_ci	),
26262306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x ret_ip %pS",
26362306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
26462306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
26562306a36Sopenharmony_ci		  __entry->agno,
26662306a36Sopenharmony_ci		  __entry->agbno,
26762306a36Sopenharmony_ci		  __entry->ret_ip)
26862306a36Sopenharmony_ci)
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ci#define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \
27162306a36Sopenharmony_ciDEFINE_EVENT(xchk_block_error_class, name, \
27262306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \
27362306a36Sopenharmony_ci		 void *ret_ip), \
27462306a36Sopenharmony_ci	TP_ARGS(sc, daddr, ret_ip))
27562306a36Sopenharmony_ci
27662306a36Sopenharmony_ciDEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error);
27762306a36Sopenharmony_ciDEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error);
27862306a36Sopenharmony_ciDEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen);
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_ino_error_class,
28162306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip),
28262306a36Sopenharmony_ci	TP_ARGS(sc, ino, ret_ip),
28362306a36Sopenharmony_ci	TP_STRUCT__entry(
28462306a36Sopenharmony_ci		__field(dev_t, dev)
28562306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
28662306a36Sopenharmony_ci		__field(unsigned int, type)
28762306a36Sopenharmony_ci		__field(void *, ret_ip)
28862306a36Sopenharmony_ci	),
28962306a36Sopenharmony_ci	TP_fast_assign(
29062306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
29162306a36Sopenharmony_ci		__entry->ino = ino;
29262306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
29362306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
29462306a36Sopenharmony_ci	),
29562306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS",
29662306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
29762306a36Sopenharmony_ci		  __entry->ino,
29862306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
29962306a36Sopenharmony_ci		  __entry->ret_ip)
30062306a36Sopenharmony_ci)
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci#define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
30362306a36Sopenharmony_ciDEFINE_EVENT(xchk_ino_error_class, name, \
30462306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \
30562306a36Sopenharmony_ci		 void *ret_ip), \
30662306a36Sopenharmony_ci	TP_ARGS(sc, ino, ret_ip))
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ciDEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error);
30962306a36Sopenharmony_ciDEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen);
31062306a36Sopenharmony_ciDEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning);
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_fblock_error_class,
31362306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, int whichfork,
31462306a36Sopenharmony_ci		 xfs_fileoff_t offset, void *ret_ip),
31562306a36Sopenharmony_ci	TP_ARGS(sc, whichfork, offset, ret_ip),
31662306a36Sopenharmony_ci	TP_STRUCT__entry(
31762306a36Sopenharmony_ci		__field(dev_t, dev)
31862306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
31962306a36Sopenharmony_ci		__field(int, whichfork)
32062306a36Sopenharmony_ci		__field(unsigned int, type)
32162306a36Sopenharmony_ci		__field(xfs_fileoff_t, offset)
32262306a36Sopenharmony_ci		__field(void *, ret_ip)
32362306a36Sopenharmony_ci	),
32462306a36Sopenharmony_ci	TP_fast_assign(
32562306a36Sopenharmony_ci		__entry->dev = sc->ip->i_mount->m_super->s_dev;
32662306a36Sopenharmony_ci		__entry->ino = sc->ip->i_ino;
32762306a36Sopenharmony_ci		__entry->whichfork = whichfork;
32862306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
32962306a36Sopenharmony_ci		__entry->offset = offset;
33062306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
33162306a36Sopenharmony_ci	),
33262306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx ret_ip %pS",
33362306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
33462306a36Sopenharmony_ci		  __entry->ino,
33562306a36Sopenharmony_ci		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
33662306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
33762306a36Sopenharmony_ci		  __entry->offset,
33862306a36Sopenharmony_ci		  __entry->ret_ip)
33962306a36Sopenharmony_ci);
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci#define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \
34262306a36Sopenharmony_ciDEFINE_EVENT(xchk_fblock_error_class, name, \
34362306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, int whichfork, \
34462306a36Sopenharmony_ci		 xfs_fileoff_t offset, void *ret_ip), \
34562306a36Sopenharmony_ci	TP_ARGS(sc, whichfork, offset, ret_ip))
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ciDEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error);
34862306a36Sopenharmony_ciDEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);
34962306a36Sopenharmony_ci
35062306a36Sopenharmony_ciTRACE_EVENT(xchk_incomplete,
35162306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, void *ret_ip),
35262306a36Sopenharmony_ci	TP_ARGS(sc, ret_ip),
35362306a36Sopenharmony_ci	TP_STRUCT__entry(
35462306a36Sopenharmony_ci		__field(dev_t, dev)
35562306a36Sopenharmony_ci		__field(unsigned int, type)
35662306a36Sopenharmony_ci		__field(void *, ret_ip)
35762306a36Sopenharmony_ci	),
35862306a36Sopenharmony_ci	TP_fast_assign(
35962306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
36062306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
36162306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
36262306a36Sopenharmony_ci	),
36362306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s ret_ip %pS",
36462306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
36562306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
36662306a36Sopenharmony_ci		  __entry->ret_ip)
36762306a36Sopenharmony_ci);
36862306a36Sopenharmony_ci
36962306a36Sopenharmony_ciTRACE_EVENT(xchk_btree_op_error,
37062306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
37162306a36Sopenharmony_ci		 int level, int error, void *ret_ip),
37262306a36Sopenharmony_ci	TP_ARGS(sc, cur, level, error, ret_ip),
37362306a36Sopenharmony_ci	TP_STRUCT__entry(
37462306a36Sopenharmony_ci		__field(dev_t, dev)
37562306a36Sopenharmony_ci		__field(unsigned int, type)
37662306a36Sopenharmony_ci		__field(xfs_btnum_t, btnum)
37762306a36Sopenharmony_ci		__field(int, level)
37862306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
37962306a36Sopenharmony_ci		__field(xfs_agblock_t, bno)
38062306a36Sopenharmony_ci		__field(int, ptr)
38162306a36Sopenharmony_ci		__field(int, error)
38262306a36Sopenharmony_ci		__field(void *, ret_ip)
38362306a36Sopenharmony_ci	),
38462306a36Sopenharmony_ci	TP_fast_assign(
38562306a36Sopenharmony_ci		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
38862306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
38962306a36Sopenharmony_ci		__entry->btnum = cur->bc_btnum;
39062306a36Sopenharmony_ci		__entry->level = level;
39162306a36Sopenharmony_ci		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
39262306a36Sopenharmony_ci		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
39362306a36Sopenharmony_ci		__entry->ptr = cur->bc_levels[level].ptr;
39462306a36Sopenharmony_ci		__entry->error = error;
39562306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
39662306a36Sopenharmony_ci	),
39762306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",
39862306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
39962306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
40062306a36Sopenharmony_ci		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
40162306a36Sopenharmony_ci		  __entry->level,
40262306a36Sopenharmony_ci		  __entry->ptr,
40362306a36Sopenharmony_ci		  __entry->agno,
40462306a36Sopenharmony_ci		  __entry->bno,
40562306a36Sopenharmony_ci		  __entry->error,
40662306a36Sopenharmony_ci		  __entry->ret_ip)
40762306a36Sopenharmony_ci);
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ciTRACE_EVENT(xchk_ifork_btree_op_error,
41062306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
41162306a36Sopenharmony_ci		 int level, int error, void *ret_ip),
41262306a36Sopenharmony_ci	TP_ARGS(sc, cur, level, error, ret_ip),
41362306a36Sopenharmony_ci	TP_STRUCT__entry(
41462306a36Sopenharmony_ci		__field(dev_t, dev)
41562306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
41662306a36Sopenharmony_ci		__field(int, whichfork)
41762306a36Sopenharmony_ci		__field(unsigned int, type)
41862306a36Sopenharmony_ci		__field(xfs_btnum_t, btnum)
41962306a36Sopenharmony_ci		__field(int, level)
42062306a36Sopenharmony_ci		__field(int, ptr)
42162306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
42262306a36Sopenharmony_ci		__field(xfs_agblock_t, bno)
42362306a36Sopenharmony_ci		__field(int, error)
42462306a36Sopenharmony_ci		__field(void *, ret_ip)
42562306a36Sopenharmony_ci	),
42662306a36Sopenharmony_ci	TP_fast_assign(
42762306a36Sopenharmony_ci		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
42862306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
42962306a36Sopenharmony_ci		__entry->ino = sc->ip->i_ino;
43062306a36Sopenharmony_ci		__entry->whichfork = cur->bc_ino.whichfork;
43162306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
43262306a36Sopenharmony_ci		__entry->btnum = cur->bc_btnum;
43362306a36Sopenharmony_ci		__entry->level = level;
43462306a36Sopenharmony_ci		__entry->ptr = cur->bc_levels[level].ptr;
43562306a36Sopenharmony_ci		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
43662306a36Sopenharmony_ci		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
43762306a36Sopenharmony_ci		__entry->error = error;
43862306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
43962306a36Sopenharmony_ci	),
44062306a36Sopenharmony_ci	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",
44162306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
44262306a36Sopenharmony_ci		  __entry->ino,
44362306a36Sopenharmony_ci		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
44462306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
44562306a36Sopenharmony_ci		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
44662306a36Sopenharmony_ci		  __entry->level,
44762306a36Sopenharmony_ci		  __entry->ptr,
44862306a36Sopenharmony_ci		  __entry->agno,
44962306a36Sopenharmony_ci		  __entry->bno,
45062306a36Sopenharmony_ci		  __entry->error,
45162306a36Sopenharmony_ci		  __entry->ret_ip)
45262306a36Sopenharmony_ci);
45362306a36Sopenharmony_ci
45462306a36Sopenharmony_ciTRACE_EVENT(xchk_btree_error,
45562306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
45662306a36Sopenharmony_ci		 int level, void *ret_ip),
45762306a36Sopenharmony_ci	TP_ARGS(sc, cur, level, ret_ip),
45862306a36Sopenharmony_ci	TP_STRUCT__entry(
45962306a36Sopenharmony_ci		__field(dev_t, dev)
46062306a36Sopenharmony_ci		__field(unsigned int, type)
46162306a36Sopenharmony_ci		__field(xfs_btnum_t, btnum)
46262306a36Sopenharmony_ci		__field(int, level)
46362306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
46462306a36Sopenharmony_ci		__field(xfs_agblock_t, bno)
46562306a36Sopenharmony_ci		__field(int, ptr)
46662306a36Sopenharmony_ci		__field(void *, ret_ip)
46762306a36Sopenharmony_ci	),
46862306a36Sopenharmony_ci	TP_fast_assign(
46962306a36Sopenharmony_ci		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
47062306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
47162306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
47262306a36Sopenharmony_ci		__entry->btnum = cur->bc_btnum;
47362306a36Sopenharmony_ci		__entry->level = level;
47462306a36Sopenharmony_ci		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
47562306a36Sopenharmony_ci		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
47662306a36Sopenharmony_ci		__entry->ptr = cur->bc_levels[level].ptr;
47762306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
47862306a36Sopenharmony_ci	),
47962306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",
48062306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
48162306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
48262306a36Sopenharmony_ci		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
48362306a36Sopenharmony_ci		  __entry->level,
48462306a36Sopenharmony_ci		  __entry->ptr,
48562306a36Sopenharmony_ci		  __entry->agno,
48662306a36Sopenharmony_ci		  __entry->bno,
48762306a36Sopenharmony_ci		  __entry->ret_ip)
48862306a36Sopenharmony_ci);
48962306a36Sopenharmony_ci
49062306a36Sopenharmony_ciTRACE_EVENT(xchk_ifork_btree_error,
49162306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
49262306a36Sopenharmony_ci		 int level, void *ret_ip),
49362306a36Sopenharmony_ci	TP_ARGS(sc, cur, level, ret_ip),
49462306a36Sopenharmony_ci	TP_STRUCT__entry(
49562306a36Sopenharmony_ci		__field(dev_t, dev)
49662306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
49762306a36Sopenharmony_ci		__field(int, whichfork)
49862306a36Sopenharmony_ci		__field(unsigned int, type)
49962306a36Sopenharmony_ci		__field(xfs_btnum_t, btnum)
50062306a36Sopenharmony_ci		__field(int, level)
50162306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
50262306a36Sopenharmony_ci		__field(xfs_agblock_t, bno)
50362306a36Sopenharmony_ci		__field(int, ptr)
50462306a36Sopenharmony_ci		__field(void *, ret_ip)
50562306a36Sopenharmony_ci	),
50662306a36Sopenharmony_ci	TP_fast_assign(
50762306a36Sopenharmony_ci		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
50862306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
50962306a36Sopenharmony_ci		__entry->ino = sc->ip->i_ino;
51062306a36Sopenharmony_ci		__entry->whichfork = cur->bc_ino.whichfork;
51162306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
51262306a36Sopenharmony_ci		__entry->btnum = cur->bc_btnum;
51362306a36Sopenharmony_ci		__entry->level = level;
51462306a36Sopenharmony_ci		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
51562306a36Sopenharmony_ci		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
51662306a36Sopenharmony_ci		__entry->ptr = cur->bc_levels[level].ptr;
51762306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
51862306a36Sopenharmony_ci	),
51962306a36Sopenharmony_ci	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",
52062306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
52162306a36Sopenharmony_ci		  __entry->ino,
52262306a36Sopenharmony_ci		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
52362306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
52462306a36Sopenharmony_ci		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
52562306a36Sopenharmony_ci		  __entry->level,
52662306a36Sopenharmony_ci		  __entry->ptr,
52762306a36Sopenharmony_ci		  __entry->agno,
52862306a36Sopenharmony_ci		  __entry->bno,
52962306a36Sopenharmony_ci		  __entry->ret_ip)
53062306a36Sopenharmony_ci);
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_sbtree_class,
53362306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
53462306a36Sopenharmony_ci		 int level),
53562306a36Sopenharmony_ci	TP_ARGS(sc, cur, level),
53662306a36Sopenharmony_ci	TP_STRUCT__entry(
53762306a36Sopenharmony_ci		__field(dev_t, dev)
53862306a36Sopenharmony_ci		__field(int, type)
53962306a36Sopenharmony_ci		__field(xfs_btnum_t, btnum)
54062306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
54162306a36Sopenharmony_ci		__field(xfs_agblock_t, bno)
54262306a36Sopenharmony_ci		__field(int, level)
54362306a36Sopenharmony_ci		__field(int, nlevels)
54462306a36Sopenharmony_ci		__field(int, ptr)
54562306a36Sopenharmony_ci	),
54662306a36Sopenharmony_ci	TP_fast_assign(
54762306a36Sopenharmony_ci		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
54862306a36Sopenharmony_ci
54962306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
55062306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
55162306a36Sopenharmony_ci		__entry->btnum = cur->bc_btnum;
55262306a36Sopenharmony_ci		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
55362306a36Sopenharmony_ci		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
55462306a36Sopenharmony_ci		__entry->level = level;
55562306a36Sopenharmony_ci		__entry->nlevels = cur->bc_nlevels;
55662306a36Sopenharmony_ci		__entry->ptr = cur->bc_levels[level].ptr;
55762306a36Sopenharmony_ci	),
55862306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s btree %s agno 0x%x agbno 0x%x level %d nlevels %d ptr %d",
55962306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
56062306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
56162306a36Sopenharmony_ci		  __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
56262306a36Sopenharmony_ci		  __entry->agno,
56362306a36Sopenharmony_ci		  __entry->bno,
56462306a36Sopenharmony_ci		  __entry->level,
56562306a36Sopenharmony_ci		  __entry->nlevels,
56662306a36Sopenharmony_ci		  __entry->ptr)
56762306a36Sopenharmony_ci)
56862306a36Sopenharmony_ci#define DEFINE_SCRUB_SBTREE_EVENT(name) \
56962306a36Sopenharmony_ciDEFINE_EVENT(xchk_sbtree_class, name, \
57062306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \
57162306a36Sopenharmony_ci		 int level), \
57262306a36Sopenharmony_ci	TP_ARGS(sc, cur, level))
57362306a36Sopenharmony_ci
57462306a36Sopenharmony_ciDEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec);
57562306a36Sopenharmony_ciDEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key);
57662306a36Sopenharmony_ci
57762306a36Sopenharmony_ciTRACE_EVENT(xchk_xref_error,
57862306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip),
57962306a36Sopenharmony_ci	TP_ARGS(sc, error, ret_ip),
58062306a36Sopenharmony_ci	TP_STRUCT__entry(
58162306a36Sopenharmony_ci		__field(dev_t, dev)
58262306a36Sopenharmony_ci		__field(int, type)
58362306a36Sopenharmony_ci		__field(int, error)
58462306a36Sopenharmony_ci		__field(void *, ret_ip)
58562306a36Sopenharmony_ci	),
58662306a36Sopenharmony_ci	TP_fast_assign(
58762306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
58862306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
58962306a36Sopenharmony_ci		__entry->error = error;
59062306a36Sopenharmony_ci		__entry->ret_ip = ret_ip;
59162306a36Sopenharmony_ci	),
59262306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s xref error %d ret_ip %pS",
59362306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
59462306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
59562306a36Sopenharmony_ci		  __entry->error,
59662306a36Sopenharmony_ci		  __entry->ret_ip)
59762306a36Sopenharmony_ci);
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ciTRACE_EVENT(xchk_iallocbt_check_cluster,
60062306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
60162306a36Sopenharmony_ci		 xfs_agino_t startino, xfs_daddr_t map_daddr,
60262306a36Sopenharmony_ci		 unsigned short map_len, unsigned int chunk_ino,
60362306a36Sopenharmony_ci		 unsigned int nr_inodes, uint16_t cluster_mask,
60462306a36Sopenharmony_ci		 uint16_t holemask, unsigned int cluster_ino),
60562306a36Sopenharmony_ci	TP_ARGS(mp, agno, startino, map_daddr, map_len, chunk_ino, nr_inodes,
60662306a36Sopenharmony_ci		cluster_mask, holemask, cluster_ino),
60762306a36Sopenharmony_ci	TP_STRUCT__entry(
60862306a36Sopenharmony_ci		__field(dev_t, dev)
60962306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
61062306a36Sopenharmony_ci		__field(xfs_agino_t, startino)
61162306a36Sopenharmony_ci		__field(xfs_daddr_t, map_daddr)
61262306a36Sopenharmony_ci		__field(unsigned short, map_len)
61362306a36Sopenharmony_ci		__field(unsigned int, chunk_ino)
61462306a36Sopenharmony_ci		__field(unsigned int, nr_inodes)
61562306a36Sopenharmony_ci		__field(unsigned int, cluster_ino)
61662306a36Sopenharmony_ci		__field(uint16_t, cluster_mask)
61762306a36Sopenharmony_ci		__field(uint16_t, holemask)
61862306a36Sopenharmony_ci	),
61962306a36Sopenharmony_ci	TP_fast_assign(
62062306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
62162306a36Sopenharmony_ci		__entry->agno = agno;
62262306a36Sopenharmony_ci		__entry->startino = startino;
62362306a36Sopenharmony_ci		__entry->map_daddr = map_daddr;
62462306a36Sopenharmony_ci		__entry->map_len = map_len;
62562306a36Sopenharmony_ci		__entry->chunk_ino = chunk_ino;
62662306a36Sopenharmony_ci		__entry->nr_inodes = nr_inodes;
62762306a36Sopenharmony_ci		__entry->cluster_mask = cluster_mask;
62862306a36Sopenharmony_ci		__entry->holemask = holemask;
62962306a36Sopenharmony_ci		__entry->cluster_ino = cluster_ino;
63062306a36Sopenharmony_ci	),
63162306a36Sopenharmony_ci	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",
63262306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
63362306a36Sopenharmony_ci		  __entry->agno,
63462306a36Sopenharmony_ci		  __entry->startino,
63562306a36Sopenharmony_ci		  __entry->map_daddr,
63662306a36Sopenharmony_ci		  __entry->map_len,
63762306a36Sopenharmony_ci		  __entry->chunk_ino,
63862306a36Sopenharmony_ci		  __entry->nr_inodes,
63962306a36Sopenharmony_ci		  __entry->cluster_mask,
64062306a36Sopenharmony_ci		  __entry->holemask,
64162306a36Sopenharmony_ci		  __entry->cluster_ino)
64262306a36Sopenharmony_ci)
64362306a36Sopenharmony_ci
64462306a36Sopenharmony_ciTRACE_EVENT(xchk_inode_is_allocated,
64562306a36Sopenharmony_ci	TP_PROTO(struct xfs_inode *ip),
64662306a36Sopenharmony_ci	TP_ARGS(ip),
64762306a36Sopenharmony_ci	TP_STRUCT__entry(
64862306a36Sopenharmony_ci		__field(dev_t, dev)
64962306a36Sopenharmony_ci		__field(xfs_ino_t, ino)
65062306a36Sopenharmony_ci		__field(unsigned long, iflags)
65162306a36Sopenharmony_ci		__field(umode_t, mode)
65262306a36Sopenharmony_ci	),
65362306a36Sopenharmony_ci	TP_fast_assign(
65462306a36Sopenharmony_ci		__entry->dev = VFS_I(ip)->i_sb->s_dev;
65562306a36Sopenharmony_ci		__entry->ino = ip->i_ino;
65662306a36Sopenharmony_ci		__entry->iflags = ip->i_flags;
65762306a36Sopenharmony_ci		__entry->mode = VFS_I(ip)->i_mode;
65862306a36Sopenharmony_ci	),
65962306a36Sopenharmony_ci	TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx mode 0x%x",
66062306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
66162306a36Sopenharmony_ci		  __entry->ino,
66262306a36Sopenharmony_ci		  __entry->iflags,
66362306a36Sopenharmony_ci		  __entry->mode)
66462306a36Sopenharmony_ci);
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_ciTRACE_EVENT(xchk_fscounters_calc,
66762306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree,
66862306a36Sopenharmony_ci		 uint64_t fdblocks, uint64_t delalloc),
66962306a36Sopenharmony_ci	TP_ARGS(mp, icount, ifree, fdblocks, delalloc),
67062306a36Sopenharmony_ci	TP_STRUCT__entry(
67162306a36Sopenharmony_ci		__field(dev_t, dev)
67262306a36Sopenharmony_ci		__field(int64_t, icount_sb)
67362306a36Sopenharmony_ci		__field(uint64_t, icount_calculated)
67462306a36Sopenharmony_ci		__field(int64_t, ifree_sb)
67562306a36Sopenharmony_ci		__field(uint64_t, ifree_calculated)
67662306a36Sopenharmony_ci		__field(int64_t, fdblocks_sb)
67762306a36Sopenharmony_ci		__field(uint64_t, fdblocks_calculated)
67862306a36Sopenharmony_ci		__field(uint64_t, delalloc)
67962306a36Sopenharmony_ci	),
68062306a36Sopenharmony_ci	TP_fast_assign(
68162306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
68262306a36Sopenharmony_ci		__entry->icount_sb = mp->m_sb.sb_icount;
68362306a36Sopenharmony_ci		__entry->icount_calculated = icount;
68462306a36Sopenharmony_ci		__entry->ifree_sb = mp->m_sb.sb_ifree;
68562306a36Sopenharmony_ci		__entry->ifree_calculated = ifree;
68662306a36Sopenharmony_ci		__entry->fdblocks_sb = mp->m_sb.sb_fdblocks;
68762306a36Sopenharmony_ci		__entry->fdblocks_calculated = fdblocks;
68862306a36Sopenharmony_ci		__entry->delalloc = delalloc;
68962306a36Sopenharmony_ci	),
69062306a36Sopenharmony_ci	TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu",
69162306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
69262306a36Sopenharmony_ci		  __entry->icount_sb,
69362306a36Sopenharmony_ci		  __entry->icount_calculated,
69462306a36Sopenharmony_ci		  __entry->ifree_sb,
69562306a36Sopenharmony_ci		  __entry->ifree_calculated,
69662306a36Sopenharmony_ci		  __entry->fdblocks_sb,
69762306a36Sopenharmony_ci		  __entry->fdblocks_calculated,
69862306a36Sopenharmony_ci		  __entry->delalloc)
69962306a36Sopenharmony_ci)
70062306a36Sopenharmony_ci
70162306a36Sopenharmony_ciTRACE_EVENT(xchk_fscounters_within_range,
70262306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value,
70362306a36Sopenharmony_ci		 int64_t old_value),
70462306a36Sopenharmony_ci	TP_ARGS(mp, expected, curr_value, old_value),
70562306a36Sopenharmony_ci	TP_STRUCT__entry(
70662306a36Sopenharmony_ci		__field(dev_t, dev)
70762306a36Sopenharmony_ci		__field(uint64_t, expected)
70862306a36Sopenharmony_ci		__field(int64_t, curr_value)
70962306a36Sopenharmony_ci		__field(int64_t, old_value)
71062306a36Sopenharmony_ci	),
71162306a36Sopenharmony_ci	TP_fast_assign(
71262306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
71362306a36Sopenharmony_ci		__entry->expected = expected;
71462306a36Sopenharmony_ci		__entry->curr_value = curr_value;
71562306a36Sopenharmony_ci		__entry->old_value = old_value;
71662306a36Sopenharmony_ci	),
71762306a36Sopenharmony_ci	TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld",
71862306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
71962306a36Sopenharmony_ci		  __entry->expected,
72062306a36Sopenharmony_ci		  __entry->curr_value,
72162306a36Sopenharmony_ci		  __entry->old_value)
72262306a36Sopenharmony_ci)
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xchk_fsfreeze_class,
72562306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, int error),
72662306a36Sopenharmony_ci	TP_ARGS(sc, error),
72762306a36Sopenharmony_ci	TP_STRUCT__entry(
72862306a36Sopenharmony_ci		__field(dev_t, dev)
72962306a36Sopenharmony_ci		__field(unsigned int, type)
73062306a36Sopenharmony_ci		__field(int, error)
73162306a36Sopenharmony_ci	),
73262306a36Sopenharmony_ci	TP_fast_assign(
73362306a36Sopenharmony_ci		__entry->dev = sc->mp->m_super->s_dev;
73462306a36Sopenharmony_ci		__entry->type = sc->sm->sm_type;
73562306a36Sopenharmony_ci		__entry->error = error;
73662306a36Sopenharmony_ci	),
73762306a36Sopenharmony_ci	TP_printk("dev %d:%d type %s error %d",
73862306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
73962306a36Sopenharmony_ci		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
74062306a36Sopenharmony_ci		  __entry->error)
74162306a36Sopenharmony_ci);
74262306a36Sopenharmony_ci#define DEFINE_XCHK_FSFREEZE_EVENT(name) \
74362306a36Sopenharmony_ciDEFINE_EVENT(xchk_fsfreeze_class, name, \
74462306a36Sopenharmony_ci	TP_PROTO(struct xfs_scrub *sc, int error), \
74562306a36Sopenharmony_ci	TP_ARGS(sc, error))
74662306a36Sopenharmony_ciDEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze);
74762306a36Sopenharmony_ciDEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw);
74862306a36Sopenharmony_ci
74962306a36Sopenharmony_ciTRACE_EVENT(xchk_refcount_incorrect,
75062306a36Sopenharmony_ci	TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *irec,
75162306a36Sopenharmony_ci		 xfs_nlink_t seen),
75262306a36Sopenharmony_ci	TP_ARGS(pag, irec, seen),
75362306a36Sopenharmony_ci	TP_STRUCT__entry(
75462306a36Sopenharmony_ci		__field(dev_t, dev)
75562306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
75662306a36Sopenharmony_ci		__field(enum xfs_refc_domain, domain)
75762306a36Sopenharmony_ci		__field(xfs_agblock_t, startblock)
75862306a36Sopenharmony_ci		__field(xfs_extlen_t, blockcount)
75962306a36Sopenharmony_ci		__field(xfs_nlink_t, refcount)
76062306a36Sopenharmony_ci		__field(xfs_nlink_t, seen)
76162306a36Sopenharmony_ci	),
76262306a36Sopenharmony_ci	TP_fast_assign(
76362306a36Sopenharmony_ci		__entry->dev = pag->pag_mount->m_super->s_dev;
76462306a36Sopenharmony_ci		__entry->agno = pag->pag_agno;
76562306a36Sopenharmony_ci		__entry->domain = irec->rc_domain;
76662306a36Sopenharmony_ci		__entry->startblock = irec->rc_startblock;
76762306a36Sopenharmony_ci		__entry->blockcount = irec->rc_blockcount;
76862306a36Sopenharmony_ci		__entry->refcount = irec->rc_refcount;
76962306a36Sopenharmony_ci		__entry->seen = seen;
77062306a36Sopenharmony_ci	),
77162306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u",
77262306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
77362306a36Sopenharmony_ci		  __entry->agno,
77462306a36Sopenharmony_ci		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
77562306a36Sopenharmony_ci		  __entry->startblock,
77662306a36Sopenharmony_ci		  __entry->blockcount,
77762306a36Sopenharmony_ci		  __entry->refcount,
77862306a36Sopenharmony_ci		  __entry->seen)
77962306a36Sopenharmony_ci)
78062306a36Sopenharmony_ci
78162306a36Sopenharmony_ciTRACE_EVENT(xfile_create,
78262306a36Sopenharmony_ci	TP_PROTO(struct xfile *xf),
78362306a36Sopenharmony_ci	TP_ARGS(xf),
78462306a36Sopenharmony_ci	TP_STRUCT__entry(
78562306a36Sopenharmony_ci		__field(dev_t, dev)
78662306a36Sopenharmony_ci		__field(unsigned long, ino)
78762306a36Sopenharmony_ci		__array(char, pathname, 256)
78862306a36Sopenharmony_ci	),
78962306a36Sopenharmony_ci	TP_fast_assign(
79062306a36Sopenharmony_ci		char		pathname[257];
79162306a36Sopenharmony_ci		char		*path;
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_ci		__entry->ino = file_inode(xf->file)->i_ino;
79462306a36Sopenharmony_ci		memset(pathname, 0, sizeof(pathname));
79562306a36Sopenharmony_ci		path = file_path(xf->file, pathname, sizeof(pathname) - 1);
79662306a36Sopenharmony_ci		if (IS_ERR(path))
79762306a36Sopenharmony_ci			path = "(unknown)";
79862306a36Sopenharmony_ci		strncpy(__entry->pathname, path, sizeof(__entry->pathname));
79962306a36Sopenharmony_ci	),
80062306a36Sopenharmony_ci	TP_printk("xfino 0x%lx path '%s'",
80162306a36Sopenharmony_ci		  __entry->ino,
80262306a36Sopenharmony_ci		  __entry->pathname)
80362306a36Sopenharmony_ci);
80462306a36Sopenharmony_ci
80562306a36Sopenharmony_ciTRACE_EVENT(xfile_destroy,
80662306a36Sopenharmony_ci	TP_PROTO(struct xfile *xf),
80762306a36Sopenharmony_ci	TP_ARGS(xf),
80862306a36Sopenharmony_ci	TP_STRUCT__entry(
80962306a36Sopenharmony_ci		__field(unsigned long, ino)
81062306a36Sopenharmony_ci		__field(unsigned long long, bytes)
81162306a36Sopenharmony_ci		__field(loff_t, size)
81262306a36Sopenharmony_ci	),
81362306a36Sopenharmony_ci	TP_fast_assign(
81462306a36Sopenharmony_ci		struct xfile_stat	statbuf;
81562306a36Sopenharmony_ci		int			ret;
81662306a36Sopenharmony_ci
81762306a36Sopenharmony_ci		ret = xfile_stat(xf, &statbuf);
81862306a36Sopenharmony_ci		if (!ret) {
81962306a36Sopenharmony_ci			__entry->bytes = statbuf.bytes;
82062306a36Sopenharmony_ci			__entry->size = statbuf.size;
82162306a36Sopenharmony_ci		} else {
82262306a36Sopenharmony_ci			__entry->bytes = -1;
82362306a36Sopenharmony_ci			__entry->size = -1;
82462306a36Sopenharmony_ci		}
82562306a36Sopenharmony_ci		__entry->ino = file_inode(xf->file)->i_ino;
82662306a36Sopenharmony_ci	),
82762306a36Sopenharmony_ci	TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx",
82862306a36Sopenharmony_ci		  __entry->ino,
82962306a36Sopenharmony_ci		  __entry->bytes,
83062306a36Sopenharmony_ci		  __entry->size)
83162306a36Sopenharmony_ci);
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xfile_class,
83462306a36Sopenharmony_ci	TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount),
83562306a36Sopenharmony_ci	TP_ARGS(xf, pos, bytecount),
83662306a36Sopenharmony_ci	TP_STRUCT__entry(
83762306a36Sopenharmony_ci		__field(unsigned long, ino)
83862306a36Sopenharmony_ci		__field(unsigned long long, bytes_used)
83962306a36Sopenharmony_ci		__field(loff_t, pos)
84062306a36Sopenharmony_ci		__field(loff_t, size)
84162306a36Sopenharmony_ci		__field(unsigned long long, bytecount)
84262306a36Sopenharmony_ci	),
84362306a36Sopenharmony_ci	TP_fast_assign(
84462306a36Sopenharmony_ci		struct xfile_stat	statbuf;
84562306a36Sopenharmony_ci		int			ret;
84662306a36Sopenharmony_ci
84762306a36Sopenharmony_ci		ret = xfile_stat(xf, &statbuf);
84862306a36Sopenharmony_ci		if (!ret) {
84962306a36Sopenharmony_ci			__entry->bytes_used = statbuf.bytes;
85062306a36Sopenharmony_ci			__entry->size = statbuf.size;
85162306a36Sopenharmony_ci		} else {
85262306a36Sopenharmony_ci			__entry->bytes_used = -1;
85362306a36Sopenharmony_ci			__entry->size = -1;
85462306a36Sopenharmony_ci		}
85562306a36Sopenharmony_ci		__entry->ino = file_inode(xf->file)->i_ino;
85662306a36Sopenharmony_ci		__entry->pos = pos;
85762306a36Sopenharmony_ci		__entry->bytecount = bytecount;
85862306a36Sopenharmony_ci	),
85962306a36Sopenharmony_ci	TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx",
86062306a36Sopenharmony_ci		  __entry->ino,
86162306a36Sopenharmony_ci		  __entry->bytes_used,
86262306a36Sopenharmony_ci		  __entry->pos,
86362306a36Sopenharmony_ci		  __entry->bytecount,
86462306a36Sopenharmony_ci		  __entry->size)
86562306a36Sopenharmony_ci);
86662306a36Sopenharmony_ci#define DEFINE_XFILE_EVENT(name) \
86762306a36Sopenharmony_ciDEFINE_EVENT(xfile_class, name, \
86862306a36Sopenharmony_ci	TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), \
86962306a36Sopenharmony_ci	TP_ARGS(xf, pos, bytecount))
87062306a36Sopenharmony_ciDEFINE_XFILE_EVENT(xfile_pread);
87162306a36Sopenharmony_ciDEFINE_XFILE_EVENT(xfile_pwrite);
87262306a36Sopenharmony_ciDEFINE_XFILE_EVENT(xfile_seek_data);
87362306a36Sopenharmony_ciDEFINE_XFILE_EVENT(xfile_get_page);
87462306a36Sopenharmony_ciDEFINE_XFILE_EVENT(xfile_put_page);
87562306a36Sopenharmony_ci
87662306a36Sopenharmony_ciTRACE_EVENT(xfarray_create,
87762306a36Sopenharmony_ci	TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity),
87862306a36Sopenharmony_ci	TP_ARGS(xfa, required_capacity),
87962306a36Sopenharmony_ci	TP_STRUCT__entry(
88062306a36Sopenharmony_ci		__field(unsigned long, ino)
88162306a36Sopenharmony_ci		__field(uint64_t, max_nr)
88262306a36Sopenharmony_ci		__field(size_t, obj_size)
88362306a36Sopenharmony_ci		__field(int, obj_size_log)
88462306a36Sopenharmony_ci		__field(unsigned long long, required_capacity)
88562306a36Sopenharmony_ci	),
88662306a36Sopenharmony_ci	TP_fast_assign(
88762306a36Sopenharmony_ci		__entry->max_nr = xfa->max_nr;
88862306a36Sopenharmony_ci		__entry->obj_size = xfa->obj_size;
88962306a36Sopenharmony_ci		__entry->obj_size_log = xfa->obj_size_log;
89062306a36Sopenharmony_ci		__entry->ino = file_inode(xfa->xfile->file)->i_ino;
89162306a36Sopenharmony_ci		__entry->required_capacity = required_capacity;
89262306a36Sopenharmony_ci	),
89362306a36Sopenharmony_ci	TP_printk("xfino 0x%lx max_nr %llu reqd_nr %llu objsz %zu objszlog %d",
89462306a36Sopenharmony_ci		  __entry->ino,
89562306a36Sopenharmony_ci		  __entry->max_nr,
89662306a36Sopenharmony_ci		  __entry->required_capacity,
89762306a36Sopenharmony_ci		  __entry->obj_size,
89862306a36Sopenharmony_ci		  __entry->obj_size_log)
89962306a36Sopenharmony_ci);
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_ciTRACE_EVENT(xfarray_isort,
90262306a36Sopenharmony_ci	TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
90362306a36Sopenharmony_ci	TP_ARGS(si, lo, hi),
90462306a36Sopenharmony_ci	TP_STRUCT__entry(
90562306a36Sopenharmony_ci		__field(unsigned long, ino)
90662306a36Sopenharmony_ci		__field(unsigned long long, lo)
90762306a36Sopenharmony_ci		__field(unsigned long long, hi)
90862306a36Sopenharmony_ci	),
90962306a36Sopenharmony_ci	TP_fast_assign(
91062306a36Sopenharmony_ci		__entry->ino = file_inode(si->array->xfile->file)->i_ino;
91162306a36Sopenharmony_ci		__entry->lo = lo;
91262306a36Sopenharmony_ci		__entry->hi = hi;
91362306a36Sopenharmony_ci	),
91462306a36Sopenharmony_ci	TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
91562306a36Sopenharmony_ci		  __entry->ino,
91662306a36Sopenharmony_ci		  __entry->lo,
91762306a36Sopenharmony_ci		  __entry->hi,
91862306a36Sopenharmony_ci		  __entry->hi - __entry->lo)
91962306a36Sopenharmony_ci);
92062306a36Sopenharmony_ci
92162306a36Sopenharmony_ciTRACE_EVENT(xfarray_pagesort,
92262306a36Sopenharmony_ci	TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
92362306a36Sopenharmony_ci	TP_ARGS(si, lo, hi),
92462306a36Sopenharmony_ci	TP_STRUCT__entry(
92562306a36Sopenharmony_ci		__field(unsigned long, ino)
92662306a36Sopenharmony_ci		__field(unsigned long long, lo)
92762306a36Sopenharmony_ci		__field(unsigned long long, hi)
92862306a36Sopenharmony_ci	),
92962306a36Sopenharmony_ci	TP_fast_assign(
93062306a36Sopenharmony_ci		__entry->ino = file_inode(si->array->xfile->file)->i_ino;
93162306a36Sopenharmony_ci		__entry->lo = lo;
93262306a36Sopenharmony_ci		__entry->hi = hi;
93362306a36Sopenharmony_ci	),
93462306a36Sopenharmony_ci	TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
93562306a36Sopenharmony_ci		  __entry->ino,
93662306a36Sopenharmony_ci		  __entry->lo,
93762306a36Sopenharmony_ci		  __entry->hi,
93862306a36Sopenharmony_ci		  __entry->hi - __entry->lo)
93962306a36Sopenharmony_ci);
94062306a36Sopenharmony_ci
94162306a36Sopenharmony_ciTRACE_EVENT(xfarray_qsort,
94262306a36Sopenharmony_ci	TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
94362306a36Sopenharmony_ci	TP_ARGS(si, lo, hi),
94462306a36Sopenharmony_ci	TP_STRUCT__entry(
94562306a36Sopenharmony_ci		__field(unsigned long, ino)
94662306a36Sopenharmony_ci		__field(unsigned long long, lo)
94762306a36Sopenharmony_ci		__field(unsigned long long, hi)
94862306a36Sopenharmony_ci		__field(int, stack_depth)
94962306a36Sopenharmony_ci		__field(int, max_stack_depth)
95062306a36Sopenharmony_ci	),
95162306a36Sopenharmony_ci	TP_fast_assign(
95262306a36Sopenharmony_ci		__entry->ino = file_inode(si->array->xfile->file)->i_ino;
95362306a36Sopenharmony_ci		__entry->lo = lo;
95462306a36Sopenharmony_ci		__entry->hi = hi;
95562306a36Sopenharmony_ci		__entry->stack_depth = si->stack_depth;
95662306a36Sopenharmony_ci		__entry->max_stack_depth = si->max_stack_depth;
95762306a36Sopenharmony_ci	),
95862306a36Sopenharmony_ci	TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu stack %d/%d",
95962306a36Sopenharmony_ci		  __entry->ino,
96062306a36Sopenharmony_ci		  __entry->lo,
96162306a36Sopenharmony_ci		  __entry->hi,
96262306a36Sopenharmony_ci		  __entry->hi - __entry->lo,
96362306a36Sopenharmony_ci		  __entry->stack_depth,
96462306a36Sopenharmony_ci		  __entry->max_stack_depth)
96562306a36Sopenharmony_ci);
96662306a36Sopenharmony_ci
96762306a36Sopenharmony_ciTRACE_EVENT(xfarray_sort,
96862306a36Sopenharmony_ci	TP_PROTO(struct xfarray_sortinfo *si, size_t bytes),
96962306a36Sopenharmony_ci	TP_ARGS(si, bytes),
97062306a36Sopenharmony_ci	TP_STRUCT__entry(
97162306a36Sopenharmony_ci		__field(unsigned long, ino)
97262306a36Sopenharmony_ci		__field(unsigned long long, nr)
97362306a36Sopenharmony_ci		__field(size_t, obj_size)
97462306a36Sopenharmony_ci		__field(size_t, bytes)
97562306a36Sopenharmony_ci		__field(unsigned int, max_stack_depth)
97662306a36Sopenharmony_ci	),
97762306a36Sopenharmony_ci	TP_fast_assign(
97862306a36Sopenharmony_ci		__entry->nr = si->array->nr;
97962306a36Sopenharmony_ci		__entry->obj_size = si->array->obj_size;
98062306a36Sopenharmony_ci		__entry->ino = file_inode(si->array->xfile->file)->i_ino;
98162306a36Sopenharmony_ci		__entry->bytes = bytes;
98262306a36Sopenharmony_ci		__entry->max_stack_depth = si->max_stack_depth;
98362306a36Sopenharmony_ci	),
98462306a36Sopenharmony_ci	TP_printk("xfino 0x%lx nr %llu objsz %zu stack %u bytes %zu",
98562306a36Sopenharmony_ci		  __entry->ino,
98662306a36Sopenharmony_ci		  __entry->nr,
98762306a36Sopenharmony_ci		  __entry->obj_size,
98862306a36Sopenharmony_ci		  __entry->max_stack_depth,
98962306a36Sopenharmony_ci		  __entry->bytes)
99062306a36Sopenharmony_ci);
99162306a36Sopenharmony_ci
99262306a36Sopenharmony_ciTRACE_EVENT(xfarray_sort_stats,
99362306a36Sopenharmony_ci	TP_PROTO(struct xfarray_sortinfo *si, int error),
99462306a36Sopenharmony_ci	TP_ARGS(si, error),
99562306a36Sopenharmony_ci	TP_STRUCT__entry(
99662306a36Sopenharmony_ci		__field(unsigned long, ino)
99762306a36Sopenharmony_ci#ifdef DEBUG
99862306a36Sopenharmony_ci		__field(unsigned long long, loads)
99962306a36Sopenharmony_ci		__field(unsigned long long, stores)
100062306a36Sopenharmony_ci		__field(unsigned long long, compares)
100162306a36Sopenharmony_ci		__field(unsigned long long, heapsorts)
100262306a36Sopenharmony_ci#endif
100362306a36Sopenharmony_ci		__field(unsigned int, max_stack_depth)
100462306a36Sopenharmony_ci		__field(unsigned int, max_stack_used)
100562306a36Sopenharmony_ci		__field(int, error)
100662306a36Sopenharmony_ci	),
100762306a36Sopenharmony_ci	TP_fast_assign(
100862306a36Sopenharmony_ci		__entry->ino = file_inode(si->array->xfile->file)->i_ino;
100962306a36Sopenharmony_ci#ifdef DEBUG
101062306a36Sopenharmony_ci		__entry->loads = si->loads;
101162306a36Sopenharmony_ci		__entry->stores = si->stores;
101262306a36Sopenharmony_ci		__entry->compares = si->compares;
101362306a36Sopenharmony_ci		__entry->heapsorts = si->heapsorts;
101462306a36Sopenharmony_ci#endif
101562306a36Sopenharmony_ci		__entry->max_stack_depth = si->max_stack_depth;
101662306a36Sopenharmony_ci		__entry->max_stack_used = si->max_stack_used;
101762306a36Sopenharmony_ci		__entry->error = error;
101862306a36Sopenharmony_ci	),
101962306a36Sopenharmony_ci	TP_printk(
102062306a36Sopenharmony_ci#ifdef DEBUG
102162306a36Sopenharmony_ci		  "xfino 0x%lx loads %llu stores %llu compares %llu heapsorts %llu stack_depth %u/%u error %d",
102262306a36Sopenharmony_ci#else
102362306a36Sopenharmony_ci		  "xfino 0x%lx stack_depth %u/%u error %d",
102462306a36Sopenharmony_ci#endif
102562306a36Sopenharmony_ci		  __entry->ino,
102662306a36Sopenharmony_ci#ifdef DEBUG
102762306a36Sopenharmony_ci		  __entry->loads,
102862306a36Sopenharmony_ci		  __entry->stores,
102962306a36Sopenharmony_ci		  __entry->compares,
103062306a36Sopenharmony_ci		  __entry->heapsorts,
103162306a36Sopenharmony_ci#endif
103262306a36Sopenharmony_ci		  __entry->max_stack_used,
103362306a36Sopenharmony_ci		  __entry->max_stack_depth,
103462306a36Sopenharmony_ci		  __entry->error)
103562306a36Sopenharmony_ci);
103662306a36Sopenharmony_ci
103762306a36Sopenharmony_ci#ifdef CONFIG_XFS_RT
103862306a36Sopenharmony_ciTRACE_EVENT(xchk_rtsum_record_free,
103962306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_rtblock_t start,
104062306a36Sopenharmony_ci		 uint64_t len, unsigned int log, loff_t pos, xfs_suminfo_t v),
104162306a36Sopenharmony_ci	TP_ARGS(mp, start, len, log, pos, v),
104262306a36Sopenharmony_ci	TP_STRUCT__entry(
104362306a36Sopenharmony_ci		__field(dev_t, dev)
104462306a36Sopenharmony_ci		__field(dev_t, rtdev)
104562306a36Sopenharmony_ci		__field(xfs_rtblock_t, start)
104662306a36Sopenharmony_ci		__field(unsigned long long, len)
104762306a36Sopenharmony_ci		__field(unsigned int, log)
104862306a36Sopenharmony_ci		__field(loff_t, pos)
104962306a36Sopenharmony_ci		__field(xfs_suminfo_t, v)
105062306a36Sopenharmony_ci	),
105162306a36Sopenharmony_ci	TP_fast_assign(
105262306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
105362306a36Sopenharmony_ci		__entry->rtdev = mp->m_rtdev_targp->bt_dev;
105462306a36Sopenharmony_ci		__entry->start = start;
105562306a36Sopenharmony_ci		__entry->len = len;
105662306a36Sopenharmony_ci		__entry->log = log;
105762306a36Sopenharmony_ci		__entry->pos = pos;
105862306a36Sopenharmony_ci		__entry->v = v;
105962306a36Sopenharmony_ci	),
106062306a36Sopenharmony_ci	TP_printk("dev %d:%d rtdev %d:%d rtx 0x%llx rtxcount 0x%llx log %u rsumpos 0x%llx sumcount %u",
106162306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
106262306a36Sopenharmony_ci		  MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
106362306a36Sopenharmony_ci		  __entry->start,
106462306a36Sopenharmony_ci		  __entry->len,
106562306a36Sopenharmony_ci		  __entry->log,
106662306a36Sopenharmony_ci		  __entry->pos,
106762306a36Sopenharmony_ci		  __entry->v)
106862306a36Sopenharmony_ci);
106962306a36Sopenharmony_ci#endif /* CONFIG_XFS_RT */
107062306a36Sopenharmony_ci
107162306a36Sopenharmony_ci/* repair tracepoints */
107262306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)
107362306a36Sopenharmony_ci
107462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xrep_extent_class,
107562306a36Sopenharmony_ci	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len),
107662306a36Sopenharmony_ci	TP_ARGS(pag, agbno, len),
107762306a36Sopenharmony_ci	TP_STRUCT__entry(
107862306a36Sopenharmony_ci		__field(dev_t, dev)
107962306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
108062306a36Sopenharmony_ci		__field(xfs_agblock_t, agbno)
108162306a36Sopenharmony_ci		__field(xfs_extlen_t, len)
108262306a36Sopenharmony_ci	),
108362306a36Sopenharmony_ci	TP_fast_assign(
108462306a36Sopenharmony_ci		__entry->dev = pag->pag_mount->m_super->s_dev;
108562306a36Sopenharmony_ci		__entry->agno = pag->pag_agno;
108662306a36Sopenharmony_ci		__entry->agbno = agbno;
108762306a36Sopenharmony_ci		__entry->len = len;
108862306a36Sopenharmony_ci	),
108962306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
109062306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
109162306a36Sopenharmony_ci		  __entry->agno,
109262306a36Sopenharmony_ci		  __entry->agbno,
109362306a36Sopenharmony_ci		  __entry->len)
109462306a36Sopenharmony_ci);
109562306a36Sopenharmony_ci#define DEFINE_REPAIR_EXTENT_EVENT(name) \
109662306a36Sopenharmony_ciDEFINE_EVENT(xrep_extent_class, name, \
109762306a36Sopenharmony_ci	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len), \
109862306a36Sopenharmony_ci	TP_ARGS(pag, agbno, len))
109962306a36Sopenharmony_ciDEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent);
110062306a36Sopenharmony_ciDEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent);
110162306a36Sopenharmony_ciDEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval);
110262306a36Sopenharmony_ciDEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert);
110362306a36Sopenharmony_ci
110462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xrep_reap_find_class,
110562306a36Sopenharmony_ci	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len,
110662306a36Sopenharmony_ci		bool crosslinked),
110762306a36Sopenharmony_ci	TP_ARGS(pag, agbno, len, crosslinked),
110862306a36Sopenharmony_ci	TP_STRUCT__entry(
110962306a36Sopenharmony_ci		__field(dev_t, dev)
111062306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
111162306a36Sopenharmony_ci		__field(xfs_agblock_t, agbno)
111262306a36Sopenharmony_ci		__field(xfs_extlen_t, len)
111362306a36Sopenharmony_ci		__field(bool, crosslinked)
111462306a36Sopenharmony_ci	),
111562306a36Sopenharmony_ci	TP_fast_assign(
111662306a36Sopenharmony_ci		__entry->dev = pag->pag_mount->m_super->s_dev;
111762306a36Sopenharmony_ci		__entry->agno = pag->pag_agno;
111862306a36Sopenharmony_ci		__entry->agbno = agbno;
111962306a36Sopenharmony_ci		__entry->len = len;
112062306a36Sopenharmony_ci		__entry->crosslinked = crosslinked;
112162306a36Sopenharmony_ci	),
112262306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x crosslinked %d",
112362306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
112462306a36Sopenharmony_ci		  __entry->agno,
112562306a36Sopenharmony_ci		  __entry->agbno,
112662306a36Sopenharmony_ci		  __entry->len,
112762306a36Sopenharmony_ci		  __entry->crosslinked ? 1 : 0)
112862306a36Sopenharmony_ci);
112962306a36Sopenharmony_ci#define DEFINE_REPAIR_REAP_FIND_EVENT(name) \
113062306a36Sopenharmony_ciDEFINE_EVENT(xrep_reap_find_class, name, \
113162306a36Sopenharmony_ci	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len, \
113262306a36Sopenharmony_ci		 bool crosslinked), \
113362306a36Sopenharmony_ci	TP_ARGS(pag, agbno, len, crosslinked))
113462306a36Sopenharmony_ciDEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select);
113562306a36Sopenharmony_ci
113662306a36Sopenharmony_ciDECLARE_EVENT_CLASS(xrep_rmap_class,
113762306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
113862306a36Sopenharmony_ci		 xfs_agblock_t agbno, xfs_extlen_t len,
113962306a36Sopenharmony_ci		 uint64_t owner, uint64_t offset, unsigned int flags),
114062306a36Sopenharmony_ci	TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
114162306a36Sopenharmony_ci	TP_STRUCT__entry(
114262306a36Sopenharmony_ci		__field(dev_t, dev)
114362306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
114462306a36Sopenharmony_ci		__field(xfs_agblock_t, agbno)
114562306a36Sopenharmony_ci		__field(xfs_extlen_t, len)
114662306a36Sopenharmony_ci		__field(uint64_t, owner)
114762306a36Sopenharmony_ci		__field(uint64_t, offset)
114862306a36Sopenharmony_ci		__field(unsigned int, flags)
114962306a36Sopenharmony_ci	),
115062306a36Sopenharmony_ci	TP_fast_assign(
115162306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
115262306a36Sopenharmony_ci		__entry->agno = agno;
115362306a36Sopenharmony_ci		__entry->agbno = agbno;
115462306a36Sopenharmony_ci		__entry->len = len;
115562306a36Sopenharmony_ci		__entry->owner = owner;
115662306a36Sopenharmony_ci		__entry->offset = offset;
115762306a36Sopenharmony_ci		__entry->flags = flags;
115862306a36Sopenharmony_ci	),
115962306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
116062306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
116162306a36Sopenharmony_ci		  __entry->agno,
116262306a36Sopenharmony_ci		  __entry->agbno,
116362306a36Sopenharmony_ci		  __entry->len,
116462306a36Sopenharmony_ci		  __entry->owner,
116562306a36Sopenharmony_ci		  __entry->offset,
116662306a36Sopenharmony_ci		  __entry->flags)
116762306a36Sopenharmony_ci);
116862306a36Sopenharmony_ci#define DEFINE_REPAIR_RMAP_EVENT(name) \
116962306a36Sopenharmony_ciDEFINE_EVENT(xrep_rmap_class, name, \
117062306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
117162306a36Sopenharmony_ci		 xfs_agblock_t agbno, xfs_extlen_t len, \
117262306a36Sopenharmony_ci		 uint64_t owner, uint64_t offset, unsigned int flags), \
117362306a36Sopenharmony_ci	TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
117462306a36Sopenharmony_ciDEFINE_REPAIR_RMAP_EVENT(xrep_alloc_extent_fn);
117562306a36Sopenharmony_ciDEFINE_REPAIR_RMAP_EVENT(xrep_ialloc_extent_fn);
117662306a36Sopenharmony_ciDEFINE_REPAIR_RMAP_EVENT(xrep_rmap_extent_fn);
117762306a36Sopenharmony_ciDEFINE_REPAIR_RMAP_EVENT(xrep_bmap_extent_fn);
117862306a36Sopenharmony_ci
117962306a36Sopenharmony_ciTRACE_EVENT(xrep_refcount_extent_fn,
118062306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
118162306a36Sopenharmony_ci		 struct xfs_refcount_irec *irec),
118262306a36Sopenharmony_ci	TP_ARGS(mp, agno, irec),
118362306a36Sopenharmony_ci	TP_STRUCT__entry(
118462306a36Sopenharmony_ci		__field(dev_t, dev)
118562306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
118662306a36Sopenharmony_ci		__field(xfs_agblock_t, startblock)
118762306a36Sopenharmony_ci		__field(xfs_extlen_t, blockcount)
118862306a36Sopenharmony_ci		__field(xfs_nlink_t, refcount)
118962306a36Sopenharmony_ci	),
119062306a36Sopenharmony_ci	TP_fast_assign(
119162306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
119262306a36Sopenharmony_ci		__entry->agno = agno;
119362306a36Sopenharmony_ci		__entry->startblock = irec->rc_startblock;
119462306a36Sopenharmony_ci		__entry->blockcount = irec->rc_blockcount;
119562306a36Sopenharmony_ci		__entry->refcount = irec->rc_refcount;
119662306a36Sopenharmony_ci	),
119762306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u",
119862306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
119962306a36Sopenharmony_ci		  __entry->agno,
120062306a36Sopenharmony_ci		  __entry->startblock,
120162306a36Sopenharmony_ci		  __entry->blockcount,
120262306a36Sopenharmony_ci		  __entry->refcount)
120362306a36Sopenharmony_ci)
120462306a36Sopenharmony_ci
120562306a36Sopenharmony_ciTRACE_EVENT(xrep_findroot_block,
120662306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
120762306a36Sopenharmony_ci		 uint32_t magic, uint16_t level),
120862306a36Sopenharmony_ci	TP_ARGS(mp, agno, agbno, magic, level),
120962306a36Sopenharmony_ci	TP_STRUCT__entry(
121062306a36Sopenharmony_ci		__field(dev_t, dev)
121162306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
121262306a36Sopenharmony_ci		__field(xfs_agblock_t, agbno)
121362306a36Sopenharmony_ci		__field(uint32_t, magic)
121462306a36Sopenharmony_ci		__field(uint16_t, level)
121562306a36Sopenharmony_ci	),
121662306a36Sopenharmony_ci	TP_fast_assign(
121762306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
121862306a36Sopenharmony_ci		__entry->agno = agno;
121962306a36Sopenharmony_ci		__entry->agbno = agbno;
122062306a36Sopenharmony_ci		__entry->magic = magic;
122162306a36Sopenharmony_ci		__entry->level = level;
122262306a36Sopenharmony_ci	),
122362306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x agbno 0x%x magic 0x%x level %u",
122462306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
122562306a36Sopenharmony_ci		  __entry->agno,
122662306a36Sopenharmony_ci		  __entry->agbno,
122762306a36Sopenharmony_ci		  __entry->magic,
122862306a36Sopenharmony_ci		  __entry->level)
122962306a36Sopenharmony_ci)
123062306a36Sopenharmony_ciTRACE_EVENT(xrep_calc_ag_resblks,
123162306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
123262306a36Sopenharmony_ci		 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen,
123362306a36Sopenharmony_ci		 xfs_agblock_t usedlen),
123462306a36Sopenharmony_ci	TP_ARGS(mp, agno, icount, aglen, freelen, usedlen),
123562306a36Sopenharmony_ci	TP_STRUCT__entry(
123662306a36Sopenharmony_ci		__field(dev_t, dev)
123762306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
123862306a36Sopenharmony_ci		__field(xfs_agino_t, icount)
123962306a36Sopenharmony_ci		__field(xfs_agblock_t, aglen)
124062306a36Sopenharmony_ci		__field(xfs_agblock_t, freelen)
124162306a36Sopenharmony_ci		__field(xfs_agblock_t, usedlen)
124262306a36Sopenharmony_ci	),
124362306a36Sopenharmony_ci	TP_fast_assign(
124462306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
124562306a36Sopenharmony_ci		__entry->agno = agno;
124662306a36Sopenharmony_ci		__entry->icount = icount;
124762306a36Sopenharmony_ci		__entry->aglen = aglen;
124862306a36Sopenharmony_ci		__entry->freelen = freelen;
124962306a36Sopenharmony_ci		__entry->usedlen = usedlen;
125062306a36Sopenharmony_ci	),
125162306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x icount %u aglen %u freelen %u usedlen %u",
125262306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
125362306a36Sopenharmony_ci		  __entry->agno,
125462306a36Sopenharmony_ci		  __entry->icount,
125562306a36Sopenharmony_ci		  __entry->aglen,
125662306a36Sopenharmony_ci		  __entry->freelen,
125762306a36Sopenharmony_ci		  __entry->usedlen)
125862306a36Sopenharmony_ci)
125962306a36Sopenharmony_ciTRACE_EVENT(xrep_calc_ag_resblks_btsize,
126062306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
126162306a36Sopenharmony_ci		 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz,
126262306a36Sopenharmony_ci		 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz),
126362306a36Sopenharmony_ci	TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),
126462306a36Sopenharmony_ci	TP_STRUCT__entry(
126562306a36Sopenharmony_ci		__field(dev_t, dev)
126662306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
126762306a36Sopenharmony_ci		__field(xfs_agblock_t, bnobt_sz)
126862306a36Sopenharmony_ci		__field(xfs_agblock_t, inobt_sz)
126962306a36Sopenharmony_ci		__field(xfs_agblock_t, rmapbt_sz)
127062306a36Sopenharmony_ci		__field(xfs_agblock_t, refcbt_sz)
127162306a36Sopenharmony_ci	),
127262306a36Sopenharmony_ci	TP_fast_assign(
127362306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
127462306a36Sopenharmony_ci		__entry->agno = agno;
127562306a36Sopenharmony_ci		__entry->bnobt_sz = bnobt_sz;
127662306a36Sopenharmony_ci		__entry->inobt_sz = inobt_sz;
127762306a36Sopenharmony_ci		__entry->rmapbt_sz = rmapbt_sz;
127862306a36Sopenharmony_ci		__entry->refcbt_sz = refcbt_sz;
127962306a36Sopenharmony_ci	),
128062306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x bnobt %u inobt %u rmapbt %u refcountbt %u",
128162306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
128262306a36Sopenharmony_ci		  __entry->agno,
128362306a36Sopenharmony_ci		  __entry->bnobt_sz,
128462306a36Sopenharmony_ci		  __entry->inobt_sz,
128562306a36Sopenharmony_ci		  __entry->rmapbt_sz,
128662306a36Sopenharmony_ci		  __entry->refcbt_sz)
128762306a36Sopenharmony_ci)
128862306a36Sopenharmony_ciTRACE_EVENT(xrep_reset_counters,
128962306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp),
129062306a36Sopenharmony_ci	TP_ARGS(mp),
129162306a36Sopenharmony_ci	TP_STRUCT__entry(
129262306a36Sopenharmony_ci		__field(dev_t, dev)
129362306a36Sopenharmony_ci	),
129462306a36Sopenharmony_ci	TP_fast_assign(
129562306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
129662306a36Sopenharmony_ci	),
129762306a36Sopenharmony_ci	TP_printk("dev %d:%d",
129862306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev))
129962306a36Sopenharmony_ci)
130062306a36Sopenharmony_ci
130162306a36Sopenharmony_ciTRACE_EVENT(xrep_ialloc_insert,
130262306a36Sopenharmony_ci	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
130362306a36Sopenharmony_ci		 xfs_agino_t startino, uint16_t holemask, uint8_t count,
130462306a36Sopenharmony_ci		 uint8_t freecount, uint64_t freemask),
130562306a36Sopenharmony_ci	TP_ARGS(mp, agno, startino, holemask, count, freecount, freemask),
130662306a36Sopenharmony_ci	TP_STRUCT__entry(
130762306a36Sopenharmony_ci		__field(dev_t, dev)
130862306a36Sopenharmony_ci		__field(xfs_agnumber_t, agno)
130962306a36Sopenharmony_ci		__field(xfs_agino_t, startino)
131062306a36Sopenharmony_ci		__field(uint16_t, holemask)
131162306a36Sopenharmony_ci		__field(uint8_t, count)
131262306a36Sopenharmony_ci		__field(uint8_t, freecount)
131362306a36Sopenharmony_ci		__field(uint64_t, freemask)
131462306a36Sopenharmony_ci	),
131562306a36Sopenharmony_ci	TP_fast_assign(
131662306a36Sopenharmony_ci		__entry->dev = mp->m_super->s_dev;
131762306a36Sopenharmony_ci		__entry->agno = agno;
131862306a36Sopenharmony_ci		__entry->startino = startino;
131962306a36Sopenharmony_ci		__entry->holemask = holemask;
132062306a36Sopenharmony_ci		__entry->count = count;
132162306a36Sopenharmony_ci		__entry->freecount = freecount;
132262306a36Sopenharmony_ci		__entry->freemask = freemask;
132362306a36Sopenharmony_ci	),
132462306a36Sopenharmony_ci	TP_printk("dev %d:%d agno 0x%x startino 0x%x holemask 0x%x count %u freecount %u freemask 0x%llx",
132562306a36Sopenharmony_ci		  MAJOR(__entry->dev), MINOR(__entry->dev),
132662306a36Sopenharmony_ci		  __entry->agno,
132762306a36Sopenharmony_ci		  __entry->startino,
132862306a36Sopenharmony_ci		  __entry->holemask,
132962306a36Sopenharmony_ci		  __entry->count,
133062306a36Sopenharmony_ci		  __entry->freecount,
133162306a36Sopenharmony_ci		  __entry->freemask)
133262306a36Sopenharmony_ci)
133362306a36Sopenharmony_ci
133462306a36Sopenharmony_ci#endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */
133562306a36Sopenharmony_ci
133662306a36Sopenharmony_ci#endif /* _TRACE_XFS_SCRUB_TRACE_H */
133762306a36Sopenharmony_ci
133862306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
133962306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH .
134062306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE scrub/trace
134162306a36Sopenharmony_ci#include <trace/define_trace.h>
1342