brintos

brintos / linux-shallow public Read only

0
0
Text · 109.4 KiB · c886d5d Raw
3583 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Copyright (C) 2017-2023 Oracle.  All Rights Reserved.4 * Author: Darrick J. Wong <djwong@kernel.org>5 *6 * NOTE: none of these tracepoints shall be considered a stable kernel ABI7 * as they can change at any time.  See xfs_trace.h for documentation of8 * specific units found in tracepoint output.9 */10#undef TRACE_SYSTEM11#define TRACE_SYSTEM xfs_scrub12 13#if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)14#define _TRACE_XFS_SCRUB_TRACE_H15 16#include <linux/tracepoint.h>17#include "xfs_bit.h"18#include "xfs_quota_defs.h"19 20struct xfs_scrub;21struct xfile;22struct xfarray;23struct xfarray_sortinfo;24struct xchk_dqiter;25struct xchk_iscan;26struct xchk_nlink;27struct xchk_fscounters;28struct xfs_rmap_update_params;29struct xfs_parent_rec;30enum xchk_dirpath_outcome;31struct xchk_dirtree;32struct xchk_dirtree_outcomes;33 34/*35 * ftrace's __print_symbolic requires that all enum values be wrapped in the36 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace37 * ring buffer.  Somehow this was only worth mentioning in the ftrace sample38 * code.39 */40TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);41TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);42 43TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE);44TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB);45TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF);46TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL);47TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI);48TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT);49TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT);50TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT);51TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT);52TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT);53TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT);54TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE);55TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD);56TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA);57TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC);58TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR);59TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR);60TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK);61TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT);62TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP);63TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM);64TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA);65TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA);66TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA);67TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS);68TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_QUOTACHECK);69TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_NLINKS);70TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_HEALTHY);71TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIRTREE);72TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BARRIER);73 74#define XFS_SCRUB_TYPE_STRINGS \75	{ XFS_SCRUB_TYPE_PROBE,		"probe" }, \76	{ XFS_SCRUB_TYPE_SB,		"sb" }, \77	{ XFS_SCRUB_TYPE_AGF,		"agf" }, \78	{ XFS_SCRUB_TYPE_AGFL,		"agfl" }, \79	{ XFS_SCRUB_TYPE_AGI,		"agi" }, \80	{ XFS_SCRUB_TYPE_BNOBT,		"bnobt" }, \81	{ XFS_SCRUB_TYPE_CNTBT,		"cntbt" }, \82	{ XFS_SCRUB_TYPE_INOBT,		"inobt" }, \83	{ XFS_SCRUB_TYPE_FINOBT,	"finobt" }, \84	{ XFS_SCRUB_TYPE_RMAPBT,	"rmapbt" }, \85	{ XFS_SCRUB_TYPE_REFCNTBT,	"refcountbt" }, \86	{ XFS_SCRUB_TYPE_INODE,		"inode" }, \87	{ XFS_SCRUB_TYPE_BMBTD,		"bmapbtd" }, \88	{ XFS_SCRUB_TYPE_BMBTA,		"bmapbta" }, \89	{ XFS_SCRUB_TYPE_BMBTC,		"bmapbtc" }, \90	{ XFS_SCRUB_TYPE_DIR,		"directory" }, \91	{ XFS_SCRUB_TYPE_XATTR,		"xattr" }, \92	{ XFS_SCRUB_TYPE_SYMLINK,	"symlink" }, \93	{ XFS_SCRUB_TYPE_PARENT,	"parent" }, \94	{ XFS_SCRUB_TYPE_RTBITMAP,	"rtbitmap" }, \95	{ XFS_SCRUB_TYPE_RTSUM,		"rtsummary" }, \96	{ XFS_SCRUB_TYPE_UQUOTA,	"usrquota" }, \97	{ XFS_SCRUB_TYPE_GQUOTA,	"grpquota" }, \98	{ XFS_SCRUB_TYPE_PQUOTA,	"prjquota" }, \99	{ XFS_SCRUB_TYPE_FSCOUNTERS,	"fscounters" }, \100	{ XFS_SCRUB_TYPE_QUOTACHECK,	"quotacheck" }, \101	{ XFS_SCRUB_TYPE_NLINKS,	"nlinks" }, \102	{ XFS_SCRUB_TYPE_HEALTHY,	"healthy" }, \103	{ XFS_SCRUB_TYPE_DIRTREE,	"dirtree" }, \104	{ XFS_SCRUB_TYPE_BARRIER,	"barrier" }105 106#define XFS_SCRUB_FLAG_STRINGS \107	{ XFS_SCRUB_IFLAG_REPAIR,		"repair" }, \108	{ XFS_SCRUB_OFLAG_CORRUPT,		"corrupt" }, \109	{ XFS_SCRUB_OFLAG_PREEN,		"preen" }, \110	{ XFS_SCRUB_OFLAG_XFAIL,		"xfail" }, \111	{ XFS_SCRUB_OFLAG_XCORRUPT,		"xcorrupt" }, \112	{ XFS_SCRUB_OFLAG_INCOMPLETE,		"incomplete" }, \113	{ XFS_SCRUB_OFLAG_WARNING,		"warning" }, \114	{ XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED,	"norepair" }, \115	{ XFS_SCRUB_IFLAG_FORCE_REBUILD,	"rebuild" }116 117#define XFS_SCRUB_STATE_STRINGS \118	{ XCHK_TRY_HARDER,			"try_harder" }, \119	{ XCHK_HAVE_FREEZE_PROT,		"nofreeze" }, \120	{ XCHK_FSGATES_DRAIN,			"fsgates_drain" }, \121	{ XCHK_NEED_DRAIN,			"need_drain" }, \122	{ XCHK_FSGATES_QUOTA,			"fsgates_quota" }, \123	{ XCHK_FSGATES_DIRENTS,			"fsgates_dirents" }, \124	{ XCHK_FSGATES_RMAP,			"fsgates_rmap" }, \125	{ XREP_RESET_PERAG_RESV,		"reset_perag_resv" }, \126	{ XREP_ALREADY_FIXED,			"already_fixed" }127 128TRACE_DEFINE_ENUM(XFS_RMAP_MAP);129TRACE_DEFINE_ENUM(XFS_RMAP_MAP_SHARED);130TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP);131TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP_SHARED);132TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT);133TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT_SHARED);134TRACE_DEFINE_ENUM(XFS_RMAP_ALLOC);135TRACE_DEFINE_ENUM(XFS_RMAP_FREE);136 137DECLARE_EVENT_CLASS(xchk_class,138	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,139		 int error),140	TP_ARGS(ip, sm, error),141	TP_STRUCT__entry(142		__field(dev_t, dev)143		__field(xfs_ino_t, ino)144		__field(unsigned int, type)145		__field(xfs_agnumber_t, agno)146		__field(xfs_ino_t, inum)147		__field(unsigned int, gen)148		__field(unsigned int, flags)149		__field(int, error)150	),151	TP_fast_assign(152		__entry->dev = ip->i_mount->m_super->s_dev;153		__entry->ino = ip->i_ino;154		__entry->type = sm->sm_type;155		__entry->agno = sm->sm_agno;156		__entry->inum = sm->sm_ino;157		__entry->gen = sm->sm_gen;158		__entry->flags = sm->sm_flags;159		__entry->error = error;160	),161	TP_printk("dev %d:%d ino 0x%llx type %s agno 0x%x inum 0x%llx gen 0x%x flags (%s) error %d",162		  MAJOR(__entry->dev), MINOR(__entry->dev),163		  __entry->ino,164		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),165		  __entry->agno,166		  __entry->inum,167		  __entry->gen,168		  __print_flags(__entry->flags, "|", XFS_SCRUB_FLAG_STRINGS),169		  __entry->error)170)171#define DEFINE_SCRUB_EVENT(name) \172DEFINE_EVENT(xchk_class, name, \173	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \174		 int error), \175	TP_ARGS(ip, sm, error))176 177DEFINE_SCRUB_EVENT(xchk_start);178DEFINE_SCRUB_EVENT(xchk_done);179DEFINE_SCRUB_EVENT(xchk_deadlock_retry);180DEFINE_SCRUB_EVENT(xchk_dirtree_start);181DEFINE_SCRUB_EVENT(xchk_dirtree_done);182DEFINE_SCRUB_EVENT(xrep_attempt);183DEFINE_SCRUB_EVENT(xrep_done);184 185DECLARE_EVENT_CLASS(xchk_fsgate_class,186	TP_PROTO(struct xfs_scrub *sc, unsigned int fsgate_flags),187	TP_ARGS(sc, fsgate_flags),188	TP_STRUCT__entry(189		__field(dev_t, dev)190		__field(unsigned int, type)191		__field(unsigned int, fsgate_flags)192	),193	TP_fast_assign(194		__entry->dev = sc->mp->m_super->s_dev;195		__entry->type = sc->sm->sm_type;196		__entry->fsgate_flags = fsgate_flags;197	),198	TP_printk("dev %d:%d type %s fsgates '%s'",199		  MAJOR(__entry->dev), MINOR(__entry->dev),200		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),201		  __print_flags(__entry->fsgate_flags, "|", XFS_SCRUB_STATE_STRINGS))202)203 204#define DEFINE_SCRUB_FSHOOK_EVENT(name) \205DEFINE_EVENT(xchk_fsgate_class, name, \206	TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \207	TP_ARGS(sc, fsgates_flags))208 209DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable);210DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable);211 212DECLARE_EVENT_CLASS(xchk_vector_head_class,213	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_vec_head *vhead),214	TP_ARGS(ip, vhead),215	TP_STRUCT__entry(216		__field(dev_t, dev)217		__field(xfs_ino_t, ino)218		__field(xfs_agnumber_t, agno)219		__field(xfs_ino_t, inum)220		__field(unsigned int, gen)221		__field(unsigned int, flags)222		__field(unsigned short, rest_us)223		__field(unsigned short, nr_vecs)224	),225	TP_fast_assign(226		__entry->dev = ip->i_mount->m_super->s_dev;227		__entry->ino = ip->i_ino;228		__entry->agno = vhead->svh_agno;229		__entry->inum = vhead->svh_ino;230		__entry->gen = vhead->svh_gen;231		__entry->flags = vhead->svh_flags;232		__entry->rest_us = vhead->svh_rest_us;233		__entry->nr_vecs = vhead->svh_nr;234	),235	TP_printk("dev %d:%d ino 0x%llx agno 0x%x inum 0x%llx gen 0x%x flags 0x%x rest_us %u nr_vecs %u",236		  MAJOR(__entry->dev), MINOR(__entry->dev),237		  __entry->ino,238		  __entry->agno,239		  __entry->inum,240		  __entry->gen,241		  __entry->flags,242		  __entry->rest_us,243		  __entry->nr_vecs)244)245#define DEFINE_SCRUBV_HEAD_EVENT(name) \246DEFINE_EVENT(xchk_vector_head_class, name, \247	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_vec_head *vhead), \248	TP_ARGS(ip, vhead))249 250DEFINE_SCRUBV_HEAD_EVENT(xchk_scrubv_start);251 252DECLARE_EVENT_CLASS(xchk_vector_class,253	TP_PROTO(struct xfs_mount *mp, struct xfs_scrub_vec_head *vhead,254		 unsigned int vec_nr, struct xfs_scrub_vec *v),255	TP_ARGS(mp, vhead, vec_nr, v),256	TP_STRUCT__entry(257		__field(dev_t, dev)258		__field(unsigned int, vec_nr)259		__field(unsigned int, vec_type)260		__field(unsigned int, vec_flags)261		__field(int, vec_ret)262	),263	TP_fast_assign(264		__entry->dev = mp->m_super->s_dev;265		__entry->vec_nr = vec_nr;266		__entry->vec_type = v->sv_type;267		__entry->vec_flags = v->sv_flags;268		__entry->vec_ret = v->sv_ret;269	),270	TP_printk("dev %d:%d vec[%u] type %s flags %s ret %d",271		  MAJOR(__entry->dev), MINOR(__entry->dev),272		  __entry->vec_nr,273		  __print_symbolic(__entry->vec_type, XFS_SCRUB_TYPE_STRINGS),274		  __print_flags(__entry->vec_flags, "|", XFS_SCRUB_FLAG_STRINGS),275		  __entry->vec_ret)276)277#define DEFINE_SCRUBV_EVENT(name) \278DEFINE_EVENT(xchk_vector_class, name, \279	TP_PROTO(struct xfs_mount *mp, struct xfs_scrub_vec_head *vhead, \280		 unsigned int vec_nr, struct xfs_scrub_vec *v), \281	TP_ARGS(mp, vhead, vec_nr, v))282 283DEFINE_SCRUBV_EVENT(xchk_scrubv_barrier_fail);284DEFINE_SCRUBV_EVENT(xchk_scrubv_item);285DEFINE_SCRUBV_EVENT(xchk_scrubv_outcome);286 287TRACE_EVENT(xchk_op_error,288	TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno,289		 xfs_agblock_t bno, int error, void *ret_ip),290	TP_ARGS(sc, agno, bno, error, ret_ip),291	TP_STRUCT__entry(292		__field(dev_t, dev)293		__field(unsigned int, type)294		__field(xfs_agnumber_t, agno)295		__field(xfs_agblock_t, bno)296		__field(int, error)297		__field(void *, ret_ip)298	),299	TP_fast_assign(300		__entry->dev = sc->mp->m_super->s_dev;301		__entry->type = sc->sm->sm_type;302		__entry->agno = agno;303		__entry->bno = bno;304		__entry->error = error;305		__entry->ret_ip = ret_ip;306	),307	TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x error %d ret_ip %pS",308		  MAJOR(__entry->dev), MINOR(__entry->dev),309		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),310		  __entry->agno,311		  __entry->bno,312		  __entry->error,313		  __entry->ret_ip)314);315 316TRACE_EVENT(xchk_file_op_error,317	TP_PROTO(struct xfs_scrub *sc, int whichfork,318		 xfs_fileoff_t offset, int error, void *ret_ip),319	TP_ARGS(sc, whichfork, offset, error, ret_ip),320	TP_STRUCT__entry(321		__field(dev_t, dev)322		__field(xfs_ino_t, ino)323		__field(int, whichfork)324		__field(unsigned int, type)325		__field(xfs_fileoff_t, offset)326		__field(int, error)327		__field(void *, ret_ip)328	),329	TP_fast_assign(330		__entry->dev = sc->ip->i_mount->m_super->s_dev;331		__entry->ino = sc->ip->i_ino;332		__entry->whichfork = whichfork;333		__entry->type = sc->sm->sm_type;334		__entry->offset = offset;335		__entry->error = error;336		__entry->ret_ip = ret_ip;337	),338	TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx error %d ret_ip %pS",339		  MAJOR(__entry->dev), MINOR(__entry->dev),340		  __entry->ino,341		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),342		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),343		  __entry->offset,344		  __entry->error,345		  __entry->ret_ip)346);347 348DECLARE_EVENT_CLASS(xchk_block_error_class,349	TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip),350	TP_ARGS(sc, daddr, ret_ip),351	TP_STRUCT__entry(352		__field(dev_t, dev)353		__field(unsigned int, type)354		__field(xfs_agnumber_t, agno)355		__field(xfs_agblock_t, agbno)356		__field(void *, ret_ip)357	),358	TP_fast_assign(359		__entry->dev = sc->mp->m_super->s_dev;360		__entry->type = sc->sm->sm_type;361		__entry->agno = xfs_daddr_to_agno(sc->mp, daddr);362		__entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr);363		__entry->ret_ip = ret_ip;364	),365	TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x ret_ip %pS",366		  MAJOR(__entry->dev), MINOR(__entry->dev),367		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),368		  __entry->agno,369		  __entry->agbno,370		  __entry->ret_ip)371)372 373#define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \374DEFINE_EVENT(xchk_block_error_class, name, \375	TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \376		 void *ret_ip), \377	TP_ARGS(sc, daddr, ret_ip))378 379DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error);380DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error);381DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen);382 383DECLARE_EVENT_CLASS(xchk_ino_error_class,384	TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip),385	TP_ARGS(sc, ino, ret_ip),386	TP_STRUCT__entry(387		__field(dev_t, dev)388		__field(xfs_ino_t, ino)389		__field(unsigned int, type)390		__field(void *, ret_ip)391	),392	TP_fast_assign(393		__entry->dev = sc->mp->m_super->s_dev;394		__entry->ino = ino;395		__entry->type = sc->sm->sm_type;396		__entry->ret_ip = ret_ip;397	),398	TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS",399		  MAJOR(__entry->dev), MINOR(__entry->dev),400		  __entry->ino,401		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),402		  __entry->ret_ip)403)404 405#define DEFINE_SCRUB_INO_ERROR_EVENT(name) \406DEFINE_EVENT(xchk_ino_error_class, name, \407	TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \408		 void *ret_ip), \409	TP_ARGS(sc, ino, ret_ip))410 411DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error);412DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen);413DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning);414 415DECLARE_EVENT_CLASS(xchk_fblock_error_class,416	TP_PROTO(struct xfs_scrub *sc, int whichfork,417		 xfs_fileoff_t offset, void *ret_ip),418	TP_ARGS(sc, whichfork, offset, ret_ip),419	TP_STRUCT__entry(420		__field(dev_t, dev)421		__field(xfs_ino_t, ino)422		__field(int, whichfork)423		__field(unsigned int, type)424		__field(xfs_fileoff_t, offset)425		__field(void *, ret_ip)426	),427	TP_fast_assign(428		__entry->dev = sc->ip->i_mount->m_super->s_dev;429		__entry->ino = sc->ip->i_ino;430		__entry->whichfork = whichfork;431		__entry->type = sc->sm->sm_type;432		__entry->offset = offset;433		__entry->ret_ip = ret_ip;434	),435	TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx ret_ip %pS",436		  MAJOR(__entry->dev), MINOR(__entry->dev),437		  __entry->ino,438		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),439		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),440		  __entry->offset,441		  __entry->ret_ip)442);443 444#define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \445DEFINE_EVENT(xchk_fblock_error_class, name, \446	TP_PROTO(struct xfs_scrub *sc, int whichfork, \447		 xfs_fileoff_t offset, void *ret_ip), \448	TP_ARGS(sc, whichfork, offset, ret_ip))449 450DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error);451DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);452DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_preen);453 454#ifdef CONFIG_XFS_QUOTA455DECLARE_EVENT_CLASS(xchk_dqiter_class,456	TP_PROTO(struct xchk_dqiter *cursor, uint64_t id),457	TP_ARGS(cursor, id),458	TP_STRUCT__entry(459		__field(dev_t, dev)460		__field(xfs_dqtype_t, dqtype)461		__field(xfs_ino_t, ino)462		__field(unsigned long long, cur_id)463		__field(unsigned long long, id)464		__field(xfs_fileoff_t, startoff)465		__field(xfs_fsblock_t, startblock)466		__field(xfs_filblks_t, blockcount)467		__field(xfs_exntst_t, state)468	),469	TP_fast_assign(470		__entry->dev = cursor->sc->ip->i_mount->m_super->s_dev;471		__entry->dqtype = cursor->dqtype;472		__entry->ino = cursor->quota_ip->i_ino;473		__entry->cur_id = cursor->id;474		__entry->startoff = cursor->bmap.br_startoff;475		__entry->startblock = cursor->bmap.br_startblock;476		__entry->blockcount = cursor->bmap.br_blockcount;477		__entry->state = cursor->bmap.br_state;478		__entry->id = id;479	),480	TP_printk("dev %d:%d dquot type %s ino 0x%llx cursor_id 0x%llx startoff 0x%llx startblock 0x%llx blockcount 0x%llx state %u id 0x%llx",481		  MAJOR(__entry->dev), MINOR(__entry->dev),482		  __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS),483		  __entry->ino,484		  __entry->cur_id,485		  __entry->startoff,486		  __entry->startblock,487		  __entry->blockcount,488		  __entry->state,489		  __entry->id)490);491 492#define DEFINE_SCRUB_DQITER_EVENT(name) \493DEFINE_EVENT(xchk_dqiter_class, name, \494	TP_PROTO(struct xchk_dqiter *cursor, uint64_t id), \495	TP_ARGS(cursor, id))496DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_revalidate_bmap);497DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_bmap);498DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_incore);499DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter);500 501TRACE_EVENT(xchk_qcheck_error,502	TP_PROTO(struct xfs_scrub *sc, xfs_dqtype_t dqtype, xfs_dqid_t id,503		 void *ret_ip),504	TP_ARGS(sc, dqtype, id, ret_ip),505	TP_STRUCT__entry(506		__field(dev_t, dev)507		__field(xfs_dqtype_t, dqtype)508		__field(xfs_dqid_t, id)509		__field(void *, ret_ip)510	),511	TP_fast_assign(512		__entry->dev = sc->mp->m_super->s_dev;513		__entry->dqtype = dqtype;514		__entry->id = id;515		__entry->ret_ip = ret_ip;516	),517	TP_printk("dev %d:%d dquot type %s id 0x%x ret_ip %pS",518		  MAJOR(__entry->dev), MINOR(__entry->dev),519		  __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS),520		  __entry->id,521		  __entry->ret_ip)522);523#endif /* CONFIG_XFS_QUOTA */524 525TRACE_EVENT(xchk_incomplete,526	TP_PROTO(struct xfs_scrub *sc, void *ret_ip),527	TP_ARGS(sc, ret_ip),528	TP_STRUCT__entry(529		__field(dev_t, dev)530		__field(unsigned int, type)531		__field(void *, ret_ip)532	),533	TP_fast_assign(534		__entry->dev = sc->mp->m_super->s_dev;535		__entry->type = sc->sm->sm_type;536		__entry->ret_ip = ret_ip;537	),538	TP_printk("dev %d:%d type %s ret_ip %pS",539		  MAJOR(__entry->dev), MINOR(__entry->dev),540		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),541		  __entry->ret_ip)542);543 544TRACE_EVENT(xchk_btree_op_error,545	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,546		 int level, int error, void *ret_ip),547	TP_ARGS(sc, cur, level, error, ret_ip),548	TP_STRUCT__entry(549		__field(dev_t, dev)550		__field(unsigned int, type)551		__string(name, cur->bc_ops->name)552		__field(int, level)553		__field(xfs_agnumber_t, agno)554		__field(xfs_agblock_t, bno)555		__field(int, ptr)556		__field(int, error)557		__field(void *, ret_ip)558	),559	TP_fast_assign(560		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);561 562		__entry->dev = sc->mp->m_super->s_dev;563		__entry->type = sc->sm->sm_type;564		__assign_str(name);565		__entry->level = level;566		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);567		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);568		__entry->ptr = cur->bc_levels[level].ptr;569		__entry->error = error;570		__entry->ret_ip = ret_ip;571	),572	TP_printk("dev %d:%d type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",573		  MAJOR(__entry->dev), MINOR(__entry->dev),574		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),575		  __get_str(name),576		  __entry->level,577		  __entry->ptr,578		  __entry->agno,579		  __entry->bno,580		  __entry->error,581		  __entry->ret_ip)582);583 584TRACE_EVENT(xchk_ifork_btree_op_error,585	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,586		 int level, int error, void *ret_ip),587	TP_ARGS(sc, cur, level, error, ret_ip),588	TP_STRUCT__entry(589		__field(dev_t, dev)590		__field(xfs_ino_t, ino)591		__field(int, whichfork)592		__field(unsigned int, type)593		__string(name, cur->bc_ops->name)594		__field(int, level)595		__field(int, ptr)596		__field(xfs_agnumber_t, agno)597		__field(xfs_agblock_t, bno)598		__field(int, error)599		__field(void *, ret_ip)600	),601	TP_fast_assign(602		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);603		__entry->dev = sc->mp->m_super->s_dev;604		__entry->ino = sc->ip->i_ino;605		__entry->whichfork = cur->bc_ino.whichfork;606		__entry->type = sc->sm->sm_type;607		__assign_str(name);608		__entry->level = level;609		__entry->ptr = cur->bc_levels[level].ptr;610		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);611		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);612		__entry->error = error;613		__entry->ret_ip = ret_ip;614	),615	TP_printk("dev %d:%d ino 0x%llx fork %s type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",616		  MAJOR(__entry->dev), MINOR(__entry->dev),617		  __entry->ino,618		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),619		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),620		  __get_str(name),621		  __entry->level,622		  __entry->ptr,623		  __entry->agno,624		  __entry->bno,625		  __entry->error,626		  __entry->ret_ip)627);628 629TRACE_EVENT(xchk_btree_error,630	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,631		 int level, void *ret_ip),632	TP_ARGS(sc, cur, level, ret_ip),633	TP_STRUCT__entry(634		__field(dev_t, dev)635		__field(unsigned int, type)636		__string(name, cur->bc_ops->name)637		__field(int, level)638		__field(xfs_agnumber_t, agno)639		__field(xfs_agblock_t, bno)640		__field(int, ptr)641		__field(void *, ret_ip)642	),643	TP_fast_assign(644		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);645		__entry->dev = sc->mp->m_super->s_dev;646		__entry->type = sc->sm->sm_type;647		__assign_str(name);648		__entry->level = level;649		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);650		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);651		__entry->ptr = cur->bc_levels[level].ptr;652		__entry->ret_ip = ret_ip;653	),654	TP_printk("dev %d:%d type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",655		  MAJOR(__entry->dev), MINOR(__entry->dev),656		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),657		  __get_str(name),658		  __entry->level,659		  __entry->ptr,660		  __entry->agno,661		  __entry->bno,662		  __entry->ret_ip)663);664 665TRACE_EVENT(xchk_ifork_btree_error,666	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,667		 int level, void *ret_ip),668	TP_ARGS(sc, cur, level, ret_ip),669	TP_STRUCT__entry(670		__field(dev_t, dev)671		__field(xfs_ino_t, ino)672		__field(int, whichfork)673		__field(unsigned int, type)674		__string(name, cur->bc_ops->name)675		__field(int, level)676		__field(xfs_agnumber_t, agno)677		__field(xfs_agblock_t, bno)678		__field(int, ptr)679		__field(void *, ret_ip)680	),681	TP_fast_assign(682		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);683		__entry->dev = sc->mp->m_super->s_dev;684		__entry->ino = sc->ip->i_ino;685		__entry->whichfork = cur->bc_ino.whichfork;686		__entry->type = sc->sm->sm_type;687		__assign_str(name);688		__entry->level = level;689		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);690		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);691		__entry->ptr = cur->bc_levels[level].ptr;692		__entry->ret_ip = ret_ip;693	),694	TP_printk("dev %d:%d ino 0x%llx fork %s type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",695		  MAJOR(__entry->dev), MINOR(__entry->dev),696		  __entry->ino,697		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),698		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),699		  __get_str(name),700		  __entry->level,701		  __entry->ptr,702		  __entry->agno,703		  __entry->bno,704		  __entry->ret_ip)705);706 707DECLARE_EVENT_CLASS(xchk_sbtree_class,708	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,709		 int level),710	TP_ARGS(sc, cur, level),711	TP_STRUCT__entry(712		__field(dev_t, dev)713		__field(int, type)714		__string(name, cur->bc_ops->name)715		__field(xfs_agnumber_t, agno)716		__field(xfs_agblock_t, bno)717		__field(int, level)718		__field(int, nlevels)719		__field(int, ptr)720	),721	TP_fast_assign(722		xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);723 724		__entry->dev = sc->mp->m_super->s_dev;725		__entry->type = sc->sm->sm_type;726		__assign_str(name);727		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);728		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);729		__entry->level = level;730		__entry->nlevels = cur->bc_nlevels;731		__entry->ptr = cur->bc_levels[level].ptr;732	),733	TP_printk("dev %d:%d type %s %sbt agno 0x%x agbno 0x%x level %d nlevels %d ptr %d",734		  MAJOR(__entry->dev), MINOR(__entry->dev),735		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),736		  __get_str(name),737		  __entry->agno,738		  __entry->bno,739		  __entry->level,740		  __entry->nlevels,741		  __entry->ptr)742)743#define DEFINE_SCRUB_SBTREE_EVENT(name) \744DEFINE_EVENT(xchk_sbtree_class, name, \745	TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \746		 int level), \747	TP_ARGS(sc, cur, level))748 749DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec);750DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key);751 752TRACE_EVENT(xchk_xref_error,753	TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip),754	TP_ARGS(sc, error, ret_ip),755	TP_STRUCT__entry(756		__field(dev_t, dev)757		__field(int, type)758		__field(int, error)759		__field(void *, ret_ip)760	),761	TP_fast_assign(762		__entry->dev = sc->mp->m_super->s_dev;763		__entry->type = sc->sm->sm_type;764		__entry->error = error;765		__entry->ret_ip = ret_ip;766	),767	TP_printk("dev %d:%d type %s xref error %d ret_ip %pS",768		  MAJOR(__entry->dev), MINOR(__entry->dev),769		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),770		  __entry->error,771		  __entry->ret_ip)772);773 774TRACE_EVENT(xchk_iallocbt_check_cluster,775	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,776		 xfs_agino_t startino, xfs_daddr_t map_daddr,777		 unsigned short map_len, unsigned int chunk_ino,778		 unsigned int nr_inodes, uint16_t cluster_mask,779		 uint16_t holemask, unsigned int cluster_ino),780	TP_ARGS(mp, agno, startino, map_daddr, map_len, chunk_ino, nr_inodes,781		cluster_mask, holemask, cluster_ino),782	TP_STRUCT__entry(783		__field(dev_t, dev)784		__field(xfs_agnumber_t, agno)785		__field(xfs_agino_t, startino)786		__field(xfs_daddr_t, map_daddr)787		__field(unsigned short, map_len)788		__field(unsigned int, chunk_ino)789		__field(unsigned int, nr_inodes)790		__field(unsigned int, cluster_ino)791		__field(uint16_t, cluster_mask)792		__field(uint16_t, holemask)793	),794	TP_fast_assign(795		__entry->dev = mp->m_super->s_dev;796		__entry->agno = agno;797		__entry->startino = startino;798		__entry->map_daddr = map_daddr;799		__entry->map_len = map_len;800		__entry->chunk_ino = chunk_ino;801		__entry->nr_inodes = nr_inodes;802		__entry->cluster_mask = cluster_mask;803		__entry->holemask = holemask;804		__entry->cluster_ino = cluster_ino;805	),806	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",807		  MAJOR(__entry->dev), MINOR(__entry->dev),808		  __entry->agno,809		  __entry->startino,810		  __entry->map_daddr,811		  __entry->map_len,812		  __entry->chunk_ino,813		  __entry->nr_inodes,814		  __entry->cluster_mask,815		  __entry->holemask,816		  __entry->cluster_ino)817)818 819TRACE_EVENT(xchk_inode_is_allocated,820	TP_PROTO(struct xfs_inode *ip),821	TP_ARGS(ip),822	TP_STRUCT__entry(823		__field(dev_t, dev)824		__field(xfs_ino_t, ino)825		__field(unsigned long, iflags)826		__field(umode_t, mode)827	),828	TP_fast_assign(829		__entry->dev = VFS_I(ip)->i_sb->s_dev;830		__entry->ino = ip->i_ino;831		__entry->iflags = ip->i_flags;832		__entry->mode = VFS_I(ip)->i_mode;833	),834	TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx mode 0x%x",835		  MAJOR(__entry->dev), MINOR(__entry->dev),836		  __entry->ino,837		  __entry->iflags,838		  __entry->mode)839);840 841TRACE_EVENT(xchk_fscounters_calc,842	TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree,843		 uint64_t fdblocks, uint64_t delalloc),844	TP_ARGS(mp, icount, ifree, fdblocks, delalloc),845	TP_STRUCT__entry(846		__field(dev_t, dev)847		__field(int64_t, icount_sb)848		__field(uint64_t, icount_calculated)849		__field(int64_t, ifree_sb)850		__field(uint64_t, ifree_calculated)851		__field(int64_t, fdblocks_sb)852		__field(uint64_t, fdblocks_calculated)853		__field(uint64_t, delalloc)854	),855	TP_fast_assign(856		__entry->dev = mp->m_super->s_dev;857		__entry->icount_sb = mp->m_sb.sb_icount;858		__entry->icount_calculated = icount;859		__entry->ifree_sb = mp->m_sb.sb_ifree;860		__entry->ifree_calculated = ifree;861		__entry->fdblocks_sb = mp->m_sb.sb_fdblocks;862		__entry->fdblocks_calculated = fdblocks;863		__entry->delalloc = delalloc;864	),865	TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu",866		  MAJOR(__entry->dev), MINOR(__entry->dev),867		  __entry->icount_sb,868		  __entry->icount_calculated,869		  __entry->ifree_sb,870		  __entry->ifree_calculated,871		  __entry->fdblocks_sb,872		  __entry->fdblocks_calculated,873		  __entry->delalloc)874)875 876TRACE_EVENT(xchk_fscounters_within_range,877	TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value,878		 int64_t old_value),879	TP_ARGS(mp, expected, curr_value, old_value),880	TP_STRUCT__entry(881		__field(dev_t, dev)882		__field(uint64_t, expected)883		__field(int64_t, curr_value)884		__field(int64_t, old_value)885	),886	TP_fast_assign(887		__entry->dev = mp->m_super->s_dev;888		__entry->expected = expected;889		__entry->curr_value = curr_value;890		__entry->old_value = old_value;891	),892	TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld",893		  MAJOR(__entry->dev), MINOR(__entry->dev),894		  __entry->expected,895		  __entry->curr_value,896		  __entry->old_value)897)898 899DECLARE_EVENT_CLASS(xchk_fsfreeze_class,900	TP_PROTO(struct xfs_scrub *sc, int error),901	TP_ARGS(sc, error),902	TP_STRUCT__entry(903		__field(dev_t, dev)904		__field(unsigned int, type)905		__field(int, error)906	),907	TP_fast_assign(908		__entry->dev = sc->mp->m_super->s_dev;909		__entry->type = sc->sm->sm_type;910		__entry->error = error;911	),912	TP_printk("dev %d:%d type %s error %d",913		  MAJOR(__entry->dev), MINOR(__entry->dev),914		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),915		  __entry->error)916);917#define DEFINE_XCHK_FSFREEZE_EVENT(name) \918DEFINE_EVENT(xchk_fsfreeze_class, name, \919	TP_PROTO(struct xfs_scrub *sc, int error), \920	TP_ARGS(sc, error))921DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze);922DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw);923 924TRACE_EVENT(xchk_refcount_incorrect,925	TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *irec,926		 xfs_nlink_t seen),927	TP_ARGS(pag, irec, seen),928	TP_STRUCT__entry(929		__field(dev_t, dev)930		__field(xfs_agnumber_t, agno)931		__field(enum xfs_refc_domain, domain)932		__field(xfs_agblock_t, startblock)933		__field(xfs_extlen_t, blockcount)934		__field(xfs_nlink_t, refcount)935		__field(xfs_nlink_t, seen)936	),937	TP_fast_assign(938		__entry->dev = pag->pag_mount->m_super->s_dev;939		__entry->agno = pag->pag_agno;940		__entry->domain = irec->rc_domain;941		__entry->startblock = irec->rc_startblock;942		__entry->blockcount = irec->rc_blockcount;943		__entry->refcount = irec->rc_refcount;944		__entry->seen = seen;945	),946	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u",947		  MAJOR(__entry->dev), MINOR(__entry->dev),948		  __entry->agno,949		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),950		  __entry->startblock,951		  __entry->blockcount,952		  __entry->refcount,953		  __entry->seen)954)955 956TRACE_EVENT(xfile_create,957	TP_PROTO(struct xfile *xf),958	TP_ARGS(xf),959	TP_STRUCT__entry(960		__field(dev_t, dev)961		__field(unsigned long, ino)962		__array(char, pathname, MAXNAMELEN)963	),964	TP_fast_assign(965		char		*path;966 967		__entry->ino = file_inode(xf->file)->i_ino;968		path = file_path(xf->file, __entry->pathname, MAXNAMELEN);969		if (IS_ERR(path))970			strncpy(__entry->pathname, "(unknown)",971					sizeof(__entry->pathname));972	),973	TP_printk("xfino 0x%lx path '%s'",974		  __entry->ino,975		  __entry->pathname)976);977 978TRACE_EVENT(xfile_destroy,979	TP_PROTO(struct xfile *xf),980	TP_ARGS(xf),981	TP_STRUCT__entry(982		__field(unsigned long, ino)983		__field(unsigned long long, bytes)984		__field(loff_t, size)985	),986	TP_fast_assign(987		struct inode		*inode = file_inode(xf->file);988 989		__entry->ino = inode->i_ino;990		__entry->bytes = inode->i_blocks << SECTOR_SHIFT;991		__entry->size = i_size_read(inode);992	),993	TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx",994		  __entry->ino,995		  __entry->bytes,996		  __entry->size)997);998 999DECLARE_EVENT_CLASS(xfile_class,1000	TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount),1001	TP_ARGS(xf, pos, bytecount),1002	TP_STRUCT__entry(1003		__field(unsigned long, ino)1004		__field(unsigned long long, bytes_used)1005		__field(loff_t, pos)1006		__field(loff_t, size)1007		__field(unsigned long long, bytecount)1008	),1009	TP_fast_assign(1010		struct inode		*inode = file_inode(xf->file);1011 1012		__entry->ino = inode->i_ino;1013		__entry->bytes_used = inode->i_blocks << SECTOR_SHIFT;1014		__entry->pos = pos;1015		__entry->size = i_size_read(inode);1016		__entry->bytecount = bytecount;1017	),1018	TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx",1019		  __entry->ino,1020		  __entry->bytes_used,1021		  __entry->pos,1022		  __entry->bytecount,1023		  __entry->size)1024);1025#define DEFINE_XFILE_EVENT(name) \1026DEFINE_EVENT(xfile_class, name, \1027	TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), \1028	TP_ARGS(xf, pos, bytecount))1029DEFINE_XFILE_EVENT(xfile_load);1030DEFINE_XFILE_EVENT(xfile_store);1031DEFINE_XFILE_EVENT(xfile_seek_data);1032DEFINE_XFILE_EVENT(xfile_get_folio);1033DEFINE_XFILE_EVENT(xfile_put_folio);1034DEFINE_XFILE_EVENT(xfile_discard);1035 1036TRACE_EVENT(xfarray_create,1037	TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity),1038	TP_ARGS(xfa, required_capacity),1039	TP_STRUCT__entry(1040		__field(unsigned long, ino)1041		__field(uint64_t, max_nr)1042		__field(size_t, obj_size)1043		__field(int, obj_size_log)1044		__field(unsigned long long, required_capacity)1045	),1046	TP_fast_assign(1047		__entry->max_nr = xfa->max_nr;1048		__entry->obj_size = xfa->obj_size;1049		__entry->obj_size_log = xfa->obj_size_log;1050		__entry->ino = file_inode(xfa->xfile->file)->i_ino;1051		__entry->required_capacity = required_capacity;1052	),1053	TP_printk("xfino 0x%lx max_nr %llu reqd_nr %llu objsz %zu objszlog %d",1054		  __entry->ino,1055		  __entry->max_nr,1056		  __entry->required_capacity,1057		  __entry->obj_size,1058		  __entry->obj_size_log)1059);1060 1061TRACE_EVENT(xfarray_isort,1062	TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),1063	TP_ARGS(si, lo, hi),1064	TP_STRUCT__entry(1065		__field(unsigned long, ino)1066		__field(unsigned long long, lo)1067		__field(unsigned long long, hi)1068	),1069	TP_fast_assign(1070		__entry->ino = file_inode(si->array->xfile->file)->i_ino;1071		__entry->lo = lo;1072		__entry->hi = hi;1073	),1074	TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",1075		  __entry->ino,1076		  __entry->lo,1077		  __entry->hi,1078		  __entry->hi - __entry->lo)1079);1080 1081TRACE_EVENT(xfarray_foliosort,1082	TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),1083	TP_ARGS(si, lo, hi),1084	TP_STRUCT__entry(1085		__field(unsigned long, ino)1086		__field(unsigned long long, lo)1087		__field(unsigned long long, hi)1088	),1089	TP_fast_assign(1090		__entry->ino = file_inode(si->array->xfile->file)->i_ino;1091		__entry->lo = lo;1092		__entry->hi = hi;1093	),1094	TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",1095		  __entry->ino,1096		  __entry->lo,1097		  __entry->hi,1098		  __entry->hi - __entry->lo)1099);1100 1101TRACE_EVENT(xfarray_qsort,1102	TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),1103	TP_ARGS(si, lo, hi),1104	TP_STRUCT__entry(1105		__field(unsigned long, ino)1106		__field(unsigned long long, lo)1107		__field(unsigned long long, hi)1108		__field(int, stack_depth)1109		__field(int, max_stack_depth)1110	),1111	TP_fast_assign(1112		__entry->ino = file_inode(si->array->xfile->file)->i_ino;1113		__entry->lo = lo;1114		__entry->hi = hi;1115		__entry->stack_depth = si->stack_depth;1116		__entry->max_stack_depth = si->max_stack_depth;1117	),1118	TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu stack %d/%d",1119		  __entry->ino,1120		  __entry->lo,1121		  __entry->hi,1122		  __entry->hi - __entry->lo,1123		  __entry->stack_depth,1124		  __entry->max_stack_depth)1125);1126 1127TRACE_EVENT(xfarray_sort,1128	TP_PROTO(struct xfarray_sortinfo *si, size_t bytes),1129	TP_ARGS(si, bytes),1130	TP_STRUCT__entry(1131		__field(unsigned long, ino)1132		__field(unsigned long long, nr)1133		__field(size_t, obj_size)1134		__field(size_t, bytes)1135		__field(unsigned int, max_stack_depth)1136	),1137	TP_fast_assign(1138		__entry->nr = si->array->nr;1139		__entry->obj_size = si->array->obj_size;1140		__entry->ino = file_inode(si->array->xfile->file)->i_ino;1141		__entry->bytes = bytes;1142		__entry->max_stack_depth = si->max_stack_depth;1143	),1144	TP_printk("xfino 0x%lx nr %llu objsz %zu stack %u bytes %zu",1145		  __entry->ino,1146		  __entry->nr,1147		  __entry->obj_size,1148		  __entry->max_stack_depth,1149		  __entry->bytes)1150);1151 1152TRACE_EVENT(xfarray_sort_scan,1153	TP_PROTO(struct xfarray_sortinfo *si, unsigned long long idx),1154	TP_ARGS(si, idx),1155	TP_STRUCT__entry(1156		__field(unsigned long, ino)1157		__field(unsigned long long, nr)1158		__field(size_t, obj_size)1159		__field(unsigned long long, idx)1160		__field(unsigned long long, folio_pos)1161		__field(unsigned long, folio_bytes)1162		__field(unsigned long long, first_idx)1163		__field(unsigned long long, last_idx)1164	),1165	TP_fast_assign(1166		__entry->nr = si->array->nr;1167		__entry->obj_size = si->array->obj_size;1168		__entry->ino = file_inode(si->array->xfile->file)->i_ino;1169		__entry->idx = idx;1170		if (si->folio) {1171			__entry->folio_pos = folio_pos(si->folio);1172			__entry->folio_bytes = folio_size(si->folio);1173			__entry->first_idx = si->first_folio_idx;1174			__entry->last_idx = si->last_folio_idx;1175		} else {1176			__entry->folio_pos = 0;1177			__entry->folio_bytes = 0;1178			__entry->first_idx = 0;1179			__entry->last_idx = 0;1180		}1181	),1182	TP_printk("xfino 0x%lx nr %llu objsz %zu idx %llu folio_pos 0x%llx folio_bytes 0x%lx first_idx %llu last_idx %llu",1183		  __entry->ino,1184		  __entry->nr,1185		  __entry->obj_size,1186		  __entry->idx,1187		  __entry->folio_pos,1188		  __entry->folio_bytes,1189		  __entry->first_idx,1190		  __entry->last_idx)1191);1192 1193TRACE_EVENT(xfarray_sort_stats,1194	TP_PROTO(struct xfarray_sortinfo *si, int error),1195	TP_ARGS(si, error),1196	TP_STRUCT__entry(1197		__field(unsigned long, ino)1198#ifdef DEBUG1199		__field(unsigned long long, loads)1200		__field(unsigned long long, stores)1201		__field(unsigned long long, compares)1202		__field(unsigned long long, heapsorts)1203#endif1204		__field(unsigned int, max_stack_depth)1205		__field(unsigned int, max_stack_used)1206		__field(int, error)1207	),1208	TP_fast_assign(1209		__entry->ino = file_inode(si->array->xfile->file)->i_ino;1210#ifdef DEBUG1211		__entry->loads = si->loads;1212		__entry->stores = si->stores;1213		__entry->compares = si->compares;1214		__entry->heapsorts = si->heapsorts;1215#endif1216		__entry->max_stack_depth = si->max_stack_depth;1217		__entry->max_stack_used = si->max_stack_used;1218		__entry->error = error;1219	),1220	TP_printk(1221#ifdef DEBUG1222		  "xfino 0x%lx loads %llu stores %llu compares %llu heapsorts %llu stack_depth %u/%u error %d",1223#else1224		  "xfino 0x%lx stack_depth %u/%u error %d",1225#endif1226		  __entry->ino,1227#ifdef DEBUG1228		  __entry->loads,1229		  __entry->stores,1230		  __entry->compares,1231		  __entry->heapsorts,1232#endif1233		  __entry->max_stack_used,1234		  __entry->max_stack_depth,1235		  __entry->error)1236);1237 1238#ifdef CONFIG_XFS_RT1239TRACE_EVENT(xchk_rtsum_record_free,1240	TP_PROTO(struct xfs_mount *mp, xfs_rtxnum_t start,1241		 xfs_rtbxlen_t len, unsigned int log, loff_t pos,1242		 xfs_suminfo_t value),1243	TP_ARGS(mp, start, len, log, pos, value),1244	TP_STRUCT__entry(1245		__field(dev_t, dev)1246		__field(dev_t, rtdev)1247		__field(xfs_rtxnum_t, start)1248		__field(unsigned long long, len)1249		__field(unsigned int, log)1250		__field(loff_t, pos)1251		__field(xfs_suminfo_t, value)1252	),1253	TP_fast_assign(1254		__entry->dev = mp->m_super->s_dev;1255		__entry->rtdev = mp->m_rtdev_targp->bt_dev;1256		__entry->start = start;1257		__entry->len = len;1258		__entry->log = log;1259		__entry->pos = pos;1260		__entry->value = value;1261	),1262	TP_printk("dev %d:%d rtdev %d:%d rtx 0x%llx rtxcount 0x%llx log %u rsumpos 0x%llx sumcount %u",1263		  MAJOR(__entry->dev), MINOR(__entry->dev),1264		  MAJOR(__entry->rtdev), MINOR(__entry->rtdev),1265		  __entry->start,1266		  __entry->len,1267		  __entry->log,1268		  __entry->pos,1269		  __entry->value)1270);1271#endif /* CONFIG_XFS_RT */1272 1273DECLARE_EVENT_CLASS(xchk_iscan_class,1274	TP_PROTO(struct xchk_iscan *iscan),1275	TP_ARGS(iscan),1276	TP_STRUCT__entry(1277		__field(dev_t, dev)1278		__field(xfs_ino_t, cursor)1279		__field(xfs_ino_t, visited)1280	),1281	TP_fast_assign(1282		__entry->dev = iscan->sc->mp->m_super->s_dev;1283		__entry->cursor = iscan->cursor_ino;1284		__entry->visited = iscan->__visited_ino;1285	),1286	TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx",1287		  MAJOR(__entry->dev), MINOR(__entry->dev),1288		  __entry->cursor,1289		  __entry->visited)1290)1291#define DEFINE_ISCAN_EVENT(name) \1292DEFINE_EVENT(xchk_iscan_class, name, \1293	TP_PROTO(struct xchk_iscan *iscan), \1294	TP_ARGS(iscan))1295DEFINE_ISCAN_EVENT(xchk_iscan_move_cursor);1296DEFINE_ISCAN_EVENT(xchk_iscan_visit);1297DEFINE_ISCAN_EVENT(xchk_iscan_skip);1298DEFINE_ISCAN_EVENT(xchk_iscan_advance_ag);1299 1300DECLARE_EVENT_CLASS(xchk_iscan_ino_class,1301	TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino),1302	TP_ARGS(iscan, ino),1303	TP_STRUCT__entry(1304		__field(dev_t, dev)1305		__field(xfs_ino_t, startino)1306		__field(xfs_ino_t, cursor)1307		__field(xfs_ino_t, visited)1308		__field(xfs_ino_t, ino)1309	),1310	TP_fast_assign(1311		__entry->dev = iscan->sc->mp->m_super->s_dev;1312		__entry->startino = iscan->scan_start_ino;1313		__entry->cursor = iscan->cursor_ino;1314		__entry->visited = iscan->__visited_ino;1315		__entry->ino = ino;1316	),1317	TP_printk("dev %d:%d iscan start 0x%llx cursor 0x%llx visited 0x%llx ino 0x%llx",1318		  MAJOR(__entry->dev), MINOR(__entry->dev),1319		  __entry->startino,1320		  __entry->cursor,1321		  __entry->visited,1322		  __entry->ino)1323)1324#define DEFINE_ISCAN_INO_EVENT(name) \1325DEFINE_EVENT(xchk_iscan_ino_class, name, \1326	TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino), \1327	TP_ARGS(iscan, ino))1328DEFINE_ISCAN_INO_EVENT(xchk_iscan_want_live_update);1329DEFINE_ISCAN_INO_EVENT(xchk_iscan_start);1330 1331TRACE_EVENT(xchk_iscan_iget,1332	TP_PROTO(struct xchk_iscan *iscan, int error),1333	TP_ARGS(iscan, error),1334	TP_STRUCT__entry(1335		__field(dev_t, dev)1336		__field(xfs_ino_t, cursor)1337		__field(xfs_ino_t, visited)1338		__field(int, error)1339	),1340	TP_fast_assign(1341		__entry->dev = iscan->sc->mp->m_super->s_dev;1342		__entry->cursor = iscan->cursor_ino;1343		__entry->visited = iscan->__visited_ino;1344		__entry->error = error;1345	),1346	TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx error %d",1347		  MAJOR(__entry->dev), MINOR(__entry->dev),1348		  __entry->cursor,1349		  __entry->visited,1350		  __entry->error)1351);1352 1353TRACE_EVENT(xchk_iscan_iget_batch,1354	TP_PROTO(struct xfs_mount *mp, struct xchk_iscan *iscan,1355		 unsigned int nr, unsigned int avail),1356	TP_ARGS(mp, iscan, nr, avail),1357	TP_STRUCT__entry(1358		__field(dev_t, dev)1359		__field(xfs_ino_t, cursor)1360		__field(xfs_ino_t, visited)1361		__field(unsigned int, nr)1362		__field(unsigned int, avail)1363		__field(unsigned int, unavail)1364		__field(xfs_ino_t, batch_ino)1365		__field(unsigned long long, skipmask)1366	),1367	TP_fast_assign(1368		__entry->dev = mp->m_super->s_dev;1369		__entry->cursor = iscan->cursor_ino;1370		__entry->visited = iscan->__visited_ino;1371		__entry->nr = nr;1372		__entry->avail = avail;1373		__entry->unavail = hweight64(iscan->__skipped_inomask);1374		__entry->batch_ino = iscan->__batch_ino;1375		__entry->skipmask = iscan->__skipped_inomask;1376	),1377	TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx batchino 0x%llx skipmask 0x%llx nr %u avail %u unavail %u",1378		  MAJOR(__entry->dev), MINOR(__entry->dev),1379		  __entry->cursor,1380		  __entry->visited,1381		  __entry->batch_ino,1382		  __entry->skipmask,1383		  __entry->nr,1384		  __entry->avail,1385		  __entry->unavail)1386);1387 1388DECLARE_EVENT_CLASS(xchk_iscan_retry_wait_class,1389	TP_PROTO(struct xchk_iscan *iscan),1390	TP_ARGS(iscan),1391	TP_STRUCT__entry(1392		__field(dev_t, dev)1393		__field(xfs_ino_t, cursor)1394		__field(xfs_ino_t, visited)1395		__field(unsigned int, retry_delay)1396		__field(unsigned long, remaining)1397		__field(unsigned int, iget_timeout)1398	),1399	TP_fast_assign(1400		__entry->dev = iscan->sc->mp->m_super->s_dev;1401		__entry->cursor = iscan->cursor_ino;1402		__entry->visited = iscan->__visited_ino;1403		__entry->retry_delay = iscan->iget_retry_delay;1404		__entry->remaining = jiffies_to_msecs(iscan->__iget_deadline - jiffies);1405		__entry->iget_timeout = iscan->iget_timeout;1406	),1407	TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx remaining %lu timeout %u delay %u",1408		  MAJOR(__entry->dev), MINOR(__entry->dev),1409		  __entry->cursor,1410		  __entry->visited,1411		  __entry->remaining,1412		  __entry->iget_timeout,1413		  __entry->retry_delay)1414)1415#define DEFINE_ISCAN_RETRY_WAIT_EVENT(name) \1416DEFINE_EVENT(xchk_iscan_retry_wait_class, name, \1417	TP_PROTO(struct xchk_iscan *iscan), \1418	TP_ARGS(iscan))1419DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_iget_retry_wait);1420DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_agi_retry_wait);1421 1422TRACE_EVENT(xchk_nlinks_collect_dirent,1423	TP_PROTO(struct xfs_mount *mp, struct xfs_inode *dp,1424		 xfs_ino_t ino, const struct xfs_name *name),1425	TP_ARGS(mp, dp, ino, name),1426	TP_STRUCT__entry(1427		__field(dev_t, dev)1428		__field(xfs_ino_t, dir)1429		__field(xfs_ino_t, ino)1430		__field(unsigned int, namelen)1431		__dynamic_array(char, name, name->len)1432	),1433	TP_fast_assign(1434		__entry->dev = mp->m_super->s_dev;1435		__entry->dir = dp->i_ino;1436		__entry->ino = ino;1437		__entry->namelen = name->len;1438		memcpy(__get_str(name), name->name, name->len);1439	),1440	TP_printk("dev %d:%d dir 0x%llx -> ino 0x%llx name '%.*s'",1441		  MAJOR(__entry->dev), MINOR(__entry->dev),1442		  __entry->dir,1443		  __entry->ino,1444		  __entry->namelen,1445		  __get_str(name))1446);1447 1448TRACE_EVENT(xchk_nlinks_collect_pptr,1449	TP_PROTO(struct xfs_mount *mp, struct xfs_inode *dp,1450		 const struct xfs_name *name,1451		 const struct xfs_parent_rec *pptr),1452	TP_ARGS(mp, dp, name, pptr),1453	TP_STRUCT__entry(1454		__field(dev_t, dev)1455		__field(xfs_ino_t, dir)1456		__field(xfs_ino_t, ino)1457		__field(unsigned int, namelen)1458		__dynamic_array(char, name, name->len)1459	),1460	TP_fast_assign(1461		__entry->dev = mp->m_super->s_dev;1462		__entry->dir = dp->i_ino;1463		__entry->ino = be64_to_cpu(pptr->p_ino);1464		__entry->namelen = name->len;1465		memcpy(__get_str(name), name->name, name->len);1466	),1467	TP_printk("dev %d:%d dir 0x%llx -> ino 0x%llx name '%.*s'",1468		  MAJOR(__entry->dev), MINOR(__entry->dev),1469		  __entry->dir,1470		  __entry->ino,1471		  __entry->namelen,1472		  __get_str(name))1473);1474 1475TRACE_EVENT(xchk_nlinks_collect_metafile,1476	TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino),1477	TP_ARGS(mp, ino),1478	TP_STRUCT__entry(1479		__field(dev_t, dev)1480		__field(xfs_ino_t, ino)1481	),1482	TP_fast_assign(1483		__entry->dev = mp->m_super->s_dev;1484		__entry->ino = ino;1485	),1486	TP_printk("dev %d:%d ino 0x%llx",1487		  MAJOR(__entry->dev), MINOR(__entry->dev),1488		  __entry->ino)1489);1490 1491TRACE_EVENT(xchk_nlinks_live_update,1492	TP_PROTO(struct xfs_mount *mp, const struct xfs_inode *dp,1493		 int action, xfs_ino_t ino, int delta,1494		 const char *name, unsigned int namelen),1495	TP_ARGS(mp, dp, action, ino, delta, name, namelen),1496	TP_STRUCT__entry(1497		__field(dev_t, dev)1498		__field(xfs_ino_t, dir)1499		__field(int, action)1500		__field(xfs_ino_t, ino)1501		__field(int, delta)1502		__field(unsigned int, namelen)1503		__dynamic_array(char, name, namelen)1504	),1505	TP_fast_assign(1506		__entry->dev = mp->m_super->s_dev;1507		__entry->dir = dp ? dp->i_ino : NULLFSINO;1508		__entry->action = action;1509		__entry->ino = ino;1510		__entry->delta = delta;1511		__entry->namelen = namelen;1512		memcpy(__get_str(name), name, namelen);1513	),1514	TP_printk("dev %d:%d dir 0x%llx ino 0x%llx nlink_delta %d name '%.*s'",1515		  MAJOR(__entry->dev), MINOR(__entry->dev),1516		  __entry->dir,1517		  __entry->ino,1518		  __entry->delta,1519		  __entry->namelen,1520		  __get_str(name))1521);1522 1523TRACE_EVENT(xchk_nlinks_check_zero,1524	TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,1525		 const struct xchk_nlink *live),1526	TP_ARGS(mp, ino, live),1527	TP_STRUCT__entry(1528		__field(dev_t, dev)1529		__field(xfs_ino_t, ino)1530		__field(xfs_nlink_t, parents)1531		__field(xfs_nlink_t, backrefs)1532		__field(xfs_nlink_t, children)1533	),1534	TP_fast_assign(1535		__entry->dev = mp->m_super->s_dev;1536		__entry->ino = ino;1537		__entry->parents = live->parents;1538		__entry->backrefs = live->backrefs;1539		__entry->children = live->children;1540	),1541	TP_printk("dev %d:%d ino 0x%llx parents %u backrefs %u children %u",1542		  MAJOR(__entry->dev), MINOR(__entry->dev),1543		  __entry->ino,1544		  __entry->parents,1545		  __entry->backrefs,1546		  __entry->children)1547);1548 1549TRACE_EVENT(xchk_nlinks_update_incore,1550	TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,1551		 const struct xchk_nlink *live, int parents_delta,1552		 int backrefs_delta, int children_delta),1553	TP_ARGS(mp, ino, live, parents_delta, backrefs_delta, children_delta),1554	TP_STRUCT__entry(1555		__field(dev_t, dev)1556		__field(xfs_ino_t, ino)1557		__field(xfs_nlink_t, parents)1558		__field(xfs_nlink_t, backrefs)1559		__field(xfs_nlink_t, children)1560		__field(int, parents_delta)1561		__field(int, backrefs_delta)1562		__field(int, children_delta)1563	),1564	TP_fast_assign(1565		__entry->dev = mp->m_super->s_dev;1566		__entry->ino = ino;1567		__entry->parents = live->parents;1568		__entry->backrefs = live->backrefs;1569		__entry->children = live->children;1570		__entry->parents_delta = parents_delta;1571		__entry->backrefs_delta = backrefs_delta;1572		__entry->children_delta = children_delta;1573	),1574	TP_printk("dev %d:%d ino 0x%llx parents %d:%u backrefs %d:%u children %d:%u",1575		  MAJOR(__entry->dev), MINOR(__entry->dev),1576		  __entry->ino,1577		  __entry->parents_delta,1578		  __entry->parents,1579		  __entry->backrefs_delta,1580		  __entry->backrefs,1581		  __entry->children_delta,1582		  __entry->children)1583);1584 1585DECLARE_EVENT_CLASS(xchk_nlinks_diff_class,1586	TP_PROTO(struct xfs_mount *mp, struct xfs_inode *ip,1587		 const struct xchk_nlink *live),1588	TP_ARGS(mp, ip, live),1589	TP_STRUCT__entry(1590		__field(dev_t, dev)1591		__field(xfs_ino_t, ino)1592		__field(uint8_t, ftype)1593		__field(xfs_nlink_t, nlink)1594		__field(xfs_nlink_t, parents)1595		__field(xfs_nlink_t, backrefs)1596		__field(xfs_nlink_t, children)1597	),1598	TP_fast_assign(1599		__entry->dev = mp->m_super->s_dev;1600		__entry->ino = ip->i_ino;1601		__entry->ftype = xfs_mode_to_ftype(VFS_I(ip)->i_mode);1602		__entry->nlink = VFS_I(ip)->i_nlink;1603		__entry->parents = live->parents;1604		__entry->backrefs = live->backrefs;1605		__entry->children = live->children;1606	),1607	TP_printk("dev %d:%d ino 0x%llx ftype %s nlink %u parents %u backrefs %u children %u",1608		  MAJOR(__entry->dev), MINOR(__entry->dev),1609		  __entry->ino,1610		  __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),1611		  __entry->nlink,1612		  __entry->parents,1613		  __entry->backrefs,1614		  __entry->children)1615);1616#define DEFINE_SCRUB_NLINKS_DIFF_EVENT(name) \1617DEFINE_EVENT(xchk_nlinks_diff_class, name, \1618	TP_PROTO(struct xfs_mount *mp, struct xfs_inode *ip, \1619		 const struct xchk_nlink *live), \1620	TP_ARGS(mp, ip, live))1621DEFINE_SCRUB_NLINKS_DIFF_EVENT(xchk_nlinks_compare_inode);1622 1623DECLARE_EVENT_CLASS(xchk_pptr_class,1624	TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name,1625		 xfs_ino_t far_ino),1626	TP_ARGS(ip, name, far_ino),1627	TP_STRUCT__entry(1628		__field(dev_t, dev)1629		__field(xfs_ino_t, ino)1630		__field(unsigned int, namelen)1631		__dynamic_array(char, name, name->len)1632		__field(xfs_ino_t, far_ino)1633	),1634	TP_fast_assign(1635		__entry->dev = ip->i_mount->m_super->s_dev;1636		__entry->ino = ip->i_ino;1637		__entry->namelen = name->len;1638		memcpy(__get_str(name), name, name->len);1639		__entry->far_ino = far_ino;1640	),1641	TP_printk("dev %d:%d ino 0x%llx name '%.*s' far_ino 0x%llx",1642		  MAJOR(__entry->dev), MINOR(__entry->dev),1643		  __entry->ino,1644		  __entry->namelen,1645		  __get_str(name),1646		  __entry->far_ino)1647)1648#define DEFINE_XCHK_PPTR_EVENT(name) \1649DEFINE_EVENT(xchk_pptr_class, name, \1650	TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name, \1651		 xfs_ino_t far_ino), \1652	TP_ARGS(ip, name, far_ino))1653DEFINE_XCHK_PPTR_EVENT(xchk_dir_defer);1654DEFINE_XCHK_PPTR_EVENT(xchk_dir_slowpath);1655DEFINE_XCHK_PPTR_EVENT(xchk_dir_ultraslowpath);1656DEFINE_XCHK_PPTR_EVENT(xchk_parent_defer);1657DEFINE_XCHK_PPTR_EVENT(xchk_parent_slowpath);1658DEFINE_XCHK_PPTR_EVENT(xchk_parent_ultraslowpath);1659 1660DECLARE_EVENT_CLASS(xchk_dirtree_class,1661	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip,1662		 unsigned int path_nr, const struct xfs_name *name,1663		 const struct xfs_parent_rec *pptr),1664	TP_ARGS(sc, ip, path_nr, name, pptr),1665	TP_STRUCT__entry(1666		__field(dev_t, dev)1667		__field(unsigned int, path_nr)1668		__field(xfs_ino_t, child_ino)1669		__field(unsigned int, child_gen)1670		__field(xfs_ino_t, parent_ino)1671		__field(unsigned int, parent_gen)1672		__field(unsigned int, namelen)1673		__dynamic_array(char, name, name->len)1674	),1675	TP_fast_assign(1676		__entry->dev = sc->mp->m_super->s_dev;1677		__entry->path_nr = path_nr;1678		__entry->child_ino = ip->i_ino;1679		__entry->child_gen = VFS_I(ip)->i_generation;1680		__entry->parent_ino = be64_to_cpu(pptr->p_ino);1681		__entry->parent_gen = be32_to_cpu(pptr->p_gen);1682		__entry->namelen = name->len;1683		memcpy(__get_str(name), name->name, name->len);1684	),1685	TP_printk("dev %d:%d path %u child_ino 0x%llx child_gen 0x%x parent_ino 0x%llx parent_gen 0x%x name '%.*s'",1686		  MAJOR(__entry->dev), MINOR(__entry->dev),1687		  __entry->path_nr,1688		  __entry->child_ino,1689		  __entry->child_gen,1690		  __entry->parent_ino,1691		  __entry->parent_gen,1692		  __entry->namelen,1693		  __get_str(name))1694);1695#define DEFINE_XCHK_DIRTREE_EVENT(name) \1696DEFINE_EVENT(xchk_dirtree_class, name, \1697	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, \1698		 unsigned int path_nr, const struct xfs_name *name, \1699		 const struct xfs_parent_rec *pptr), \1700	TP_ARGS(sc, ip, path_nr, name, pptr))1701DEFINE_XCHK_DIRTREE_EVENT(xchk_dirtree_create_path);1702DEFINE_XCHK_DIRTREE_EVENT(xchk_dirpath_walk_upwards);1703 1704DECLARE_EVENT_CLASS(xchk_dirpath_class,1705	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip,1706		 unsigned int path_nr, unsigned int step_nr,1707		 const struct xfs_name *name,1708		 const struct xfs_parent_rec *pptr),1709	TP_ARGS(sc, ip, path_nr, step_nr, name, pptr),1710	TP_STRUCT__entry(1711		__field(dev_t, dev)1712		__field(unsigned int, path_nr)1713		__field(unsigned int, step_nr)1714		__field(xfs_ino_t, child_ino)1715		__field(unsigned int, child_gen)1716		__field(xfs_ino_t, parent_ino)1717		__field(unsigned int, parent_gen)1718		__field(unsigned int, namelen)1719		__dynamic_array(char, name, name->len)1720	),1721	TP_fast_assign(1722		__entry->dev = sc->mp->m_super->s_dev;1723		__entry->path_nr = path_nr;1724		__entry->step_nr = step_nr;1725		__entry->child_ino = ip->i_ino;1726		__entry->child_gen = VFS_I(ip)->i_generation;1727		__entry->parent_ino = be64_to_cpu(pptr->p_ino);1728		__entry->parent_gen = be32_to_cpu(pptr->p_gen);1729		__entry->namelen = name->len;1730		memcpy(__get_str(name), name->name, name->len);1731	),1732	TP_printk("dev %d:%d path %u step %u child_ino 0x%llx child_gen 0x%x parent_ino 0x%llx parent_gen 0x%x name '%.*s'",1733		  MAJOR(__entry->dev), MINOR(__entry->dev),1734		  __entry->path_nr,1735		  __entry->step_nr,1736		  __entry->child_ino,1737		  __entry->child_gen,1738		  __entry->parent_ino,1739		  __entry->parent_gen,1740		  __entry->namelen,1741		  __get_str(name))1742);1743#define DEFINE_XCHK_DIRPATH_EVENT(name) \1744DEFINE_EVENT(xchk_dirpath_class, name, \1745	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, \1746		 unsigned int path_nr, unsigned int step_nr, \1747		 const struct xfs_name *name, \1748		 const struct xfs_parent_rec *pptr), \1749	TP_ARGS(sc, ip, path_nr, step_nr, name, pptr))1750DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_disappeared);1751DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_badgen);1752DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_nondir_parent);1753DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_unlinked_parent);1754DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_found_next_step);1755 1756TRACE_DEFINE_ENUM(XCHK_DIRPATH_SCANNING);1757TRACE_DEFINE_ENUM(XCHK_DIRPATH_DELETE);1758TRACE_DEFINE_ENUM(XCHK_DIRPATH_CORRUPT);1759TRACE_DEFINE_ENUM(XCHK_DIRPATH_LOOP);1760TRACE_DEFINE_ENUM(XCHK_DIRPATH_STALE);1761TRACE_DEFINE_ENUM(XCHK_DIRPATH_OK);1762TRACE_DEFINE_ENUM(XREP_DIRPATH_DELETING);1763TRACE_DEFINE_ENUM(XREP_DIRPATH_DELETED);1764TRACE_DEFINE_ENUM(XREP_DIRPATH_ADOPTING);1765TRACE_DEFINE_ENUM(XREP_DIRPATH_ADOPTED);1766 1767#define XCHK_DIRPATH_OUTCOME_STRINGS \1768	{ XCHK_DIRPATH_SCANNING,	"scanning" }, \1769	{ XCHK_DIRPATH_DELETE,		"delete" }, \1770	{ XCHK_DIRPATH_CORRUPT,		"corrupt" }, \1771	{ XCHK_DIRPATH_LOOP,		"loop" }, \1772	{ XCHK_DIRPATH_STALE,		"stale" }, \1773	{ XCHK_DIRPATH_OK,		"ok" }, \1774	{ XREP_DIRPATH_DELETING,	"deleting" }, \1775	{ XREP_DIRPATH_DELETED,		"deleted" }, \1776	{ XREP_DIRPATH_ADOPTING,	"adopting" }, \1777	{ XREP_DIRPATH_ADOPTED,		"adopted" }1778 1779DECLARE_EVENT_CLASS(xchk_dirpath_outcome_class,1780	TP_PROTO(struct xfs_scrub *sc, unsigned long long path_nr,1781		 unsigned int nr_steps, \1782		 unsigned int outcome),1783	TP_ARGS(sc, path_nr, nr_steps, outcome),1784	TP_STRUCT__entry(1785		__field(dev_t, dev)1786		__field(unsigned long long, path_nr)1787		__field(unsigned int, nr_steps)1788		__field(unsigned int, outcome)1789	),1790	TP_fast_assign(1791		__entry->dev = sc->mp->m_super->s_dev;1792		__entry->path_nr = path_nr;1793		__entry->nr_steps = nr_steps;1794		__entry->outcome = outcome;1795	),1796	TP_printk("dev %d:%d path %llu steps %u outcome %s",1797		  MAJOR(__entry->dev), MINOR(__entry->dev),1798		  __entry->path_nr,1799		  __entry->nr_steps,1800		  __print_symbolic(__entry->outcome, XCHK_DIRPATH_OUTCOME_STRINGS))1801);1802#define DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(name) \1803DEFINE_EVENT(xchk_dirpath_outcome_class, name, \1804	TP_PROTO(struct xfs_scrub *sc, unsigned long long path_nr, \1805		 unsigned int nr_steps, \1806		 unsigned int outcome), \1807	TP_ARGS(sc, path_nr, nr_steps, outcome))1808DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(xchk_dirpath_set_outcome);1809DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(xchk_dirpath_evaluate_path);1810 1811DECLARE_EVENT_CLASS(xchk_dirtree_evaluate_class,1812	TP_PROTO(const struct xchk_dirtree *dl,1813		 const struct xchk_dirtree_outcomes *oc),1814	TP_ARGS(dl, oc),1815	TP_STRUCT__entry(1816		__field(dev_t, dev)1817		__field(xfs_ino_t, ino)1818		__field(xfs_ino_t, rootino)1819		__field(unsigned int, nr_paths)1820		__field(unsigned int, bad)1821		__field(unsigned int, suspect)1822		__field(unsigned int, good)1823		__field(bool, needs_adoption)1824	),1825	TP_fast_assign(1826		__entry->dev = dl->sc->mp->m_super->s_dev;1827		__entry->ino = dl->sc->ip->i_ino;1828		__entry->rootino = dl->root_ino;1829		__entry->nr_paths = dl->nr_paths;1830		__entry->bad = oc->bad;1831		__entry->suspect = oc->suspect;1832		__entry->good = oc->good;1833		__entry->needs_adoption = oc->needs_adoption ? 1 : 0;1834	),1835	TP_printk("dev %d:%d ino 0x%llx rootino 0x%llx nr_paths %u bad %u suspect %u good %u adopt? %d",1836		  MAJOR(__entry->dev), MINOR(__entry->dev),1837		  __entry->ino,1838		  __entry->rootino,1839		  __entry->nr_paths,1840		  __entry->bad,1841		  __entry->suspect,1842		  __entry->good,1843		  __entry->needs_adoption)1844);1845#define DEFINE_XCHK_DIRTREE_EVALUATE_EVENT(name) \1846DEFINE_EVENT(xchk_dirtree_evaluate_class, name, \1847	TP_PROTO(const struct xchk_dirtree *dl, \1848		 const struct xchk_dirtree_outcomes *oc), \1849	TP_ARGS(dl, oc))1850DEFINE_XCHK_DIRTREE_EVALUATE_EVENT(xchk_dirtree_evaluate);1851 1852TRACE_EVENT(xchk_dirpath_changed,1853	TP_PROTO(struct xfs_scrub *sc, unsigned int path_nr,1854		 unsigned int step_nr, const struct xfs_inode *dp,1855		 const struct xfs_inode *ip, const struct xfs_name *xname),1856	TP_ARGS(sc, path_nr, step_nr, dp, ip, xname),1857	TP_STRUCT__entry(1858		__field(dev_t, dev)1859		__field(unsigned int, path_nr)1860		__field(unsigned int, step_nr)1861		__field(xfs_ino_t, child_ino)1862		__field(xfs_ino_t, parent_ino)1863		__field(unsigned int, namelen)1864		__dynamic_array(char, name, xname->len)1865	),1866	TP_fast_assign(1867		__entry->dev = sc->mp->m_super->s_dev;1868		__entry->path_nr = path_nr;1869		__entry->step_nr = step_nr;1870		__entry->child_ino = ip->i_ino;1871		__entry->parent_ino = dp->i_ino;1872		__entry->namelen = xname->len;1873		memcpy(__get_str(name), xname->name, xname->len);1874	),1875	TP_printk("dev %d:%d path %u step %u child_ino 0x%llx parent_ino 0x%llx name '%.*s'",1876		  MAJOR(__entry->dev), MINOR(__entry->dev),1877		  __entry->path_nr,1878		  __entry->step_nr,1879		  __entry->child_ino,1880		  __entry->parent_ino,1881		  __entry->namelen,1882		  __get_str(name))1883);1884 1885TRACE_EVENT(xchk_dirtree_live_update,1886	TP_PROTO(struct xfs_scrub *sc, const struct xfs_inode *dp,1887		 int action, const struct xfs_inode *ip, int delta,1888		 const struct xfs_name *xname),1889	TP_ARGS(sc, dp, action, ip, delta, xname),1890	TP_STRUCT__entry(1891		__field(dev_t, dev)1892		__field(xfs_ino_t, parent_ino)1893		__field(int, action)1894		__field(xfs_ino_t, child_ino)1895		__field(int, delta)1896		__field(unsigned int, namelen)1897		__dynamic_array(char, name, xname->len)1898	),1899	TP_fast_assign(1900		__entry->dev = sc->mp->m_super->s_dev;1901		__entry->parent_ino = dp->i_ino;1902		__entry->action = action;1903		__entry->child_ino = ip->i_ino;1904		__entry->delta = delta;1905		__entry->namelen = xname->len;1906		memcpy(__get_str(name), xname->name, xname->len);1907	),1908	TP_printk("dev %d:%d parent_ino 0x%llx child_ino 0x%llx nlink_delta %d name '%.*s'",1909		  MAJOR(__entry->dev), MINOR(__entry->dev),1910		  __entry->parent_ino,1911		  __entry->child_ino,1912		  __entry->delta,1913		  __entry->namelen,1914		  __get_str(name))1915);1916 1917/* repair tracepoints */1918#if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)1919 1920DECLARE_EVENT_CLASS(xrep_extent_class,1921	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len),1922	TP_ARGS(pag, agbno, len),1923	TP_STRUCT__entry(1924		__field(dev_t, dev)1925		__field(xfs_agnumber_t, agno)1926		__field(xfs_agblock_t, agbno)1927		__field(xfs_extlen_t, len)1928	),1929	TP_fast_assign(1930		__entry->dev = pag->pag_mount->m_super->s_dev;1931		__entry->agno = pag->pag_agno;1932		__entry->agbno = agbno;1933		__entry->len = len;1934	),1935	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",1936		  MAJOR(__entry->dev), MINOR(__entry->dev),1937		  __entry->agno,1938		  __entry->agbno,1939		  __entry->len)1940);1941#define DEFINE_REPAIR_EXTENT_EVENT(name) \1942DEFINE_EVENT(xrep_extent_class, name, \1943	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len), \1944	TP_ARGS(pag, agbno, len))1945DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent);1946DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent);1947DEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval);1948DEFINE_REPAIR_EXTENT_EVENT(xreap_bmapi_binval);1949DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert);1950 1951DECLARE_EVENT_CLASS(xrep_reap_find_class,1952	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len,1953		bool crosslinked),1954	TP_ARGS(pag, agbno, len, crosslinked),1955	TP_STRUCT__entry(1956		__field(dev_t, dev)1957		__field(xfs_agnumber_t, agno)1958		__field(xfs_agblock_t, agbno)1959		__field(xfs_extlen_t, len)1960		__field(bool, crosslinked)1961	),1962	TP_fast_assign(1963		__entry->dev = pag->pag_mount->m_super->s_dev;1964		__entry->agno = pag->pag_agno;1965		__entry->agbno = agbno;1966		__entry->len = len;1967		__entry->crosslinked = crosslinked;1968	),1969	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x crosslinked %d",1970		  MAJOR(__entry->dev), MINOR(__entry->dev),1971		  __entry->agno,1972		  __entry->agbno,1973		  __entry->len,1974		  __entry->crosslinked ? 1 : 0)1975);1976#define DEFINE_REPAIR_REAP_FIND_EVENT(name) \1977DEFINE_EVENT(xrep_reap_find_class, name, \1978	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len, \1979		 bool crosslinked), \1980	TP_ARGS(pag, agbno, len, crosslinked))1981DEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select);1982DEFINE_REPAIR_REAP_FIND_EVENT(xreap_bmapi_select);1983 1984DECLARE_EVENT_CLASS(xrep_rmap_class,1985	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,1986		 xfs_agblock_t agbno, xfs_extlen_t len,1987		 uint64_t owner, uint64_t offset, unsigned int flags),1988	TP_ARGS(mp, agno, agbno, len, owner, offset, flags),1989	TP_STRUCT__entry(1990		__field(dev_t, dev)1991		__field(xfs_agnumber_t, agno)1992		__field(xfs_agblock_t, agbno)1993		__field(xfs_extlen_t, len)1994		__field(uint64_t, owner)1995		__field(uint64_t, offset)1996		__field(unsigned int, flags)1997	),1998	TP_fast_assign(1999		__entry->dev = mp->m_super->s_dev;2000		__entry->agno = agno;2001		__entry->agbno = agbno;2002		__entry->len = len;2003		__entry->owner = owner;2004		__entry->offset = offset;2005		__entry->flags = flags;2006	),2007	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",2008		  MAJOR(__entry->dev), MINOR(__entry->dev),2009		  __entry->agno,2010		  __entry->agbno,2011		  __entry->len,2012		  __entry->owner,2013		  __entry->offset,2014		  __entry->flags)2015);2016#define DEFINE_REPAIR_RMAP_EVENT(name) \2017DEFINE_EVENT(xrep_rmap_class, name, \2018	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \2019		 xfs_agblock_t agbno, xfs_extlen_t len, \2020		 uint64_t owner, uint64_t offset, unsigned int flags), \2021	TP_ARGS(mp, agno, agbno, len, owner, offset, flags))2022DEFINE_REPAIR_RMAP_EVENT(xrep_ibt_walk_rmap);2023DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_walk_rmap);2024 2025TRACE_EVENT(xrep_abt_found,2026	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2027		 const struct xfs_alloc_rec_incore *rec),2028	TP_ARGS(mp, agno, rec),2029	TP_STRUCT__entry(2030		__field(dev_t, dev)2031		__field(xfs_agnumber_t, agno)2032		__field(xfs_agblock_t, startblock)2033		__field(xfs_extlen_t, blockcount)2034	),2035	TP_fast_assign(2036		__entry->dev = mp->m_super->s_dev;2037		__entry->agno = agno;2038		__entry->startblock = rec->ar_startblock;2039		__entry->blockcount = rec->ar_blockcount;2040	),2041	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",2042		  MAJOR(__entry->dev), MINOR(__entry->dev),2043		  __entry->agno,2044		  __entry->startblock,2045		  __entry->blockcount)2046)2047 2048TRACE_EVENT(xrep_ibt_found,2049	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2050		 const struct xfs_inobt_rec_incore *rec),2051	TP_ARGS(mp, agno, rec),2052	TP_STRUCT__entry(2053		__field(dev_t, dev)2054		__field(xfs_agnumber_t, agno)2055		__field(xfs_agino_t, startino)2056		__field(uint16_t, holemask)2057		__field(uint8_t, count)2058		__field(uint8_t, freecount)2059		__field(uint64_t, freemask)2060	),2061	TP_fast_assign(2062		__entry->dev = mp->m_super->s_dev;2063		__entry->agno = agno;2064		__entry->startino = rec->ir_startino;2065		__entry->holemask = rec->ir_holemask;2066		__entry->count = rec->ir_count;2067		__entry->freecount = rec->ir_freecount;2068		__entry->freemask = rec->ir_free;2069	),2070	TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x count 0x%x freecount 0x%x freemask 0x%llx",2071		  MAJOR(__entry->dev), MINOR(__entry->dev),2072		  __entry->agno,2073		  __entry->startino,2074		  __entry->holemask,2075		  __entry->count,2076		  __entry->freecount,2077		  __entry->freemask)2078)2079 2080TRACE_EVENT(xrep_refc_found,2081	TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *rec),2082	TP_ARGS(pag, rec),2083	TP_STRUCT__entry(2084		__field(dev_t, dev)2085		__field(xfs_agnumber_t, agno)2086		__field(enum xfs_refc_domain, domain)2087		__field(xfs_agblock_t, startblock)2088		__field(xfs_extlen_t, blockcount)2089		__field(xfs_nlink_t, refcount)2090	),2091	TP_fast_assign(2092		__entry->dev = pag->pag_mount->m_super->s_dev;2093		__entry->agno = pag->pag_agno;2094		__entry->domain = rec->rc_domain;2095		__entry->startblock = rec->rc_startblock;2096		__entry->blockcount = rec->rc_blockcount;2097		__entry->refcount = rec->rc_refcount;2098	),2099	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u",2100		  MAJOR(__entry->dev), MINOR(__entry->dev),2101		  __entry->agno,2102		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),2103		  __entry->startblock,2104		  __entry->blockcount,2105		  __entry->refcount)2106)2107 2108TRACE_EVENT(xrep_bmap_found,2109	TP_PROTO(struct xfs_inode *ip, int whichfork,2110		 struct xfs_bmbt_irec *irec),2111	TP_ARGS(ip, whichfork, irec),2112	TP_STRUCT__entry(2113		__field(dev_t, dev)2114		__field(xfs_ino_t, ino)2115		__field(int, whichfork)2116		__field(xfs_fileoff_t, lblk)2117		__field(xfs_filblks_t, len)2118		__field(xfs_fsblock_t, pblk)2119		__field(int, state)2120	),2121	TP_fast_assign(2122		__entry->dev = VFS_I(ip)->i_sb->s_dev;2123		__entry->ino = ip->i_ino;2124		__entry->whichfork = whichfork;2125		__entry->lblk = irec->br_startoff;2126		__entry->len = irec->br_blockcount;2127		__entry->pblk = irec->br_startblock;2128		__entry->state = irec->br_state;2129	),2130	TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d",2131		  MAJOR(__entry->dev), MINOR(__entry->dev),2132		  __entry->ino,2133		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),2134		  __entry->lblk,2135		  __entry->len,2136		  __entry->pblk,2137		  __entry->state)2138);2139 2140TRACE_EVENT(xrep_rmap_found,2141	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2142		 const struct xfs_rmap_irec *rec),2143	TP_ARGS(mp, agno, rec),2144	TP_STRUCT__entry(2145		__field(dev_t, dev)2146		__field(xfs_agnumber_t, agno)2147		__field(xfs_agblock_t, agbno)2148		__field(xfs_extlen_t, len)2149		__field(uint64_t, owner)2150		__field(uint64_t, offset)2151		__field(unsigned int, flags)2152	),2153	TP_fast_assign(2154		__entry->dev = mp->m_super->s_dev;2155		__entry->agno = agno;2156		__entry->agbno = rec->rm_startblock;2157		__entry->len = rec->rm_blockcount;2158		__entry->owner = rec->rm_owner;2159		__entry->offset = rec->rm_offset;2160		__entry->flags = rec->rm_flags;2161	),2162	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",2163		  MAJOR(__entry->dev), MINOR(__entry->dev),2164		  __entry->agno,2165		  __entry->agbno,2166		  __entry->len,2167		  __entry->owner,2168		  __entry->offset,2169		  __entry->flags)2170);2171 2172TRACE_EVENT(xrep_findroot_block,2173	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,2174		 uint32_t magic, uint16_t level),2175	TP_ARGS(mp, agno, agbno, magic, level),2176	TP_STRUCT__entry(2177		__field(dev_t, dev)2178		__field(xfs_agnumber_t, agno)2179		__field(xfs_agblock_t, agbno)2180		__field(uint32_t, magic)2181		__field(uint16_t, level)2182	),2183	TP_fast_assign(2184		__entry->dev = mp->m_super->s_dev;2185		__entry->agno = agno;2186		__entry->agbno = agbno;2187		__entry->magic = magic;2188		__entry->level = level;2189	),2190	TP_printk("dev %d:%d agno 0x%x agbno 0x%x magic 0x%x level %u",2191		  MAJOR(__entry->dev), MINOR(__entry->dev),2192		  __entry->agno,2193		  __entry->agbno,2194		  __entry->magic,2195		  __entry->level)2196)2197TRACE_EVENT(xrep_calc_ag_resblks,2198	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2199		 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen,2200		 xfs_agblock_t usedlen),2201	TP_ARGS(mp, agno, icount, aglen, freelen, usedlen),2202	TP_STRUCT__entry(2203		__field(dev_t, dev)2204		__field(xfs_agnumber_t, agno)2205		__field(xfs_agino_t, icount)2206		__field(xfs_agblock_t, aglen)2207		__field(xfs_agblock_t, freelen)2208		__field(xfs_agblock_t, usedlen)2209	),2210	TP_fast_assign(2211		__entry->dev = mp->m_super->s_dev;2212		__entry->agno = agno;2213		__entry->icount = icount;2214		__entry->aglen = aglen;2215		__entry->freelen = freelen;2216		__entry->usedlen = usedlen;2217	),2218	TP_printk("dev %d:%d agno 0x%x icount %u aglen %u freelen %u usedlen %u",2219		  MAJOR(__entry->dev), MINOR(__entry->dev),2220		  __entry->agno,2221		  __entry->icount,2222		  __entry->aglen,2223		  __entry->freelen,2224		  __entry->usedlen)2225)2226TRACE_EVENT(xrep_calc_ag_resblks_btsize,2227	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2228		 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz,2229		 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz),2230	TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),2231	TP_STRUCT__entry(2232		__field(dev_t, dev)2233		__field(xfs_agnumber_t, agno)2234		__field(xfs_agblock_t, bnobt_sz)2235		__field(xfs_agblock_t, inobt_sz)2236		__field(xfs_agblock_t, rmapbt_sz)2237		__field(xfs_agblock_t, refcbt_sz)2238	),2239	TP_fast_assign(2240		__entry->dev = mp->m_super->s_dev;2241		__entry->agno = agno;2242		__entry->bnobt_sz = bnobt_sz;2243		__entry->inobt_sz = inobt_sz;2244		__entry->rmapbt_sz = rmapbt_sz;2245		__entry->refcbt_sz = refcbt_sz;2246	),2247	TP_printk("dev %d:%d agno 0x%x bnobt %u inobt %u rmapbt %u refcountbt %u",2248		  MAJOR(__entry->dev), MINOR(__entry->dev),2249		  __entry->agno,2250		  __entry->bnobt_sz,2251		  __entry->inobt_sz,2252		  __entry->rmapbt_sz,2253		  __entry->refcbt_sz)2254)2255TRACE_EVENT(xrep_reset_counters,2256	TP_PROTO(struct xfs_mount *mp, struct xchk_fscounters *fsc),2257	TP_ARGS(mp, fsc),2258	TP_STRUCT__entry(2259		__field(dev_t, dev)2260		__field(uint64_t, icount)2261		__field(uint64_t, ifree)2262		__field(uint64_t, fdblocks)2263		__field(uint64_t, frextents)2264	),2265	TP_fast_assign(2266		__entry->dev = mp->m_super->s_dev;2267		__entry->icount = fsc->icount;2268		__entry->ifree = fsc->ifree;2269		__entry->fdblocks = fsc->fdblocks;2270		__entry->frextents = fsc->frextents;2271	),2272	TP_printk("dev %d:%d icount %llu ifree %llu fdblocks %llu frextents %llu",2273		  MAJOR(__entry->dev), MINOR(__entry->dev),2274		  __entry->icount,2275		  __entry->ifree,2276		  __entry->fdblocks,2277		  __entry->frextents)2278)2279 2280DECLARE_EVENT_CLASS(xrep_newbt_extent_class,2281	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2282		 xfs_agblock_t agbno, xfs_extlen_t len,2283		 int64_t owner),2284	TP_ARGS(mp, agno, agbno, len, owner),2285	TP_STRUCT__entry(2286		__field(dev_t, dev)2287		__field(xfs_agnumber_t, agno)2288		__field(xfs_agblock_t, agbno)2289		__field(xfs_extlen_t, len)2290		__field(int64_t, owner)2291	),2292	TP_fast_assign(2293		__entry->dev = mp->m_super->s_dev;2294		__entry->agno = agno;2295		__entry->agbno = agbno;2296		__entry->len = len;2297		__entry->owner = owner;2298	),2299	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx",2300		  MAJOR(__entry->dev), MINOR(__entry->dev),2301		  __entry->agno,2302		  __entry->agbno,2303		  __entry->len,2304		  __entry->owner)2305);2306#define DEFINE_NEWBT_EXTENT_EVENT(name) \2307DEFINE_EVENT(xrep_newbt_extent_class, name, \2308	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \2309		 xfs_agblock_t agbno, xfs_extlen_t len, \2310		 int64_t owner), \2311	TP_ARGS(mp, agno, agbno, len, owner))2312DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_ag_blocks);2313DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_file_blocks);2314DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_free_blocks);2315DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_claim_block);2316 2317DECLARE_EVENT_CLASS(xrep_dinode_class,2318	TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip),2319	TP_ARGS(sc, dip),2320	TP_STRUCT__entry(2321		__field(dev_t, dev)2322		__field(xfs_ino_t, ino)2323		__field(uint16_t, mode)2324		__field(uint8_t, version)2325		__field(uint8_t, format)2326		__field(uint32_t, uid)2327		__field(uint32_t, gid)2328		__field(uint64_t, size)2329		__field(uint64_t, nblocks)2330		__field(uint32_t, extsize)2331		__field(uint32_t, nextents)2332		__field(uint16_t, anextents)2333		__field(uint8_t, forkoff)2334		__field(uint8_t, aformat)2335		__field(uint16_t, flags)2336		__field(uint32_t, gen)2337		__field(uint64_t, flags2)2338		__field(uint32_t, cowextsize)2339	),2340	TP_fast_assign(2341		__entry->dev = sc->mp->m_super->s_dev;2342		__entry->ino = sc->sm->sm_ino;2343		__entry->mode = be16_to_cpu(dip->di_mode);2344		__entry->version = dip->di_version;2345		__entry->format = dip->di_format;2346		__entry->uid = be32_to_cpu(dip->di_uid);2347		__entry->gid = be32_to_cpu(dip->di_gid);2348		__entry->size = be64_to_cpu(dip->di_size);2349		__entry->nblocks = be64_to_cpu(dip->di_nblocks);2350		__entry->extsize = be32_to_cpu(dip->di_extsize);2351		__entry->nextents = be32_to_cpu(dip->di_nextents);2352		__entry->anextents = be16_to_cpu(dip->di_anextents);2353		__entry->forkoff = dip->di_forkoff;2354		__entry->aformat = dip->di_aformat;2355		__entry->flags = be16_to_cpu(dip->di_flags);2356		__entry->gen = be32_to_cpu(dip->di_gen);2357		__entry->flags2 = be64_to_cpu(dip->di_flags2);2358		__entry->cowextsize = be32_to_cpu(dip->di_cowextsize);2359	),2360	TP_printk("dev %d:%d ino 0x%llx mode 0x%x version %u format %u uid %u gid %u disize 0x%llx nblocks 0x%llx extsize %u nextents %u anextents %u forkoff 0x%x aformat %u flags 0x%x gen 0x%x flags2 0x%llx cowextsize %u",2361		  MAJOR(__entry->dev), MINOR(__entry->dev),2362		  __entry->ino,2363		  __entry->mode,2364		  __entry->version,2365		  __entry->format,2366		  __entry->uid,2367		  __entry->gid,2368		  __entry->size,2369		  __entry->nblocks,2370		  __entry->extsize,2371		  __entry->nextents,2372		  __entry->anextents,2373		  __entry->forkoff,2374		  __entry->aformat,2375		  __entry->flags,2376		  __entry->gen,2377		  __entry->flags2,2378		  __entry->cowextsize)2379)2380 2381#define DEFINE_REPAIR_DINODE_EVENT(name) \2382DEFINE_EVENT(xrep_dinode_class, name, \2383	TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip), \2384	TP_ARGS(sc, dip))2385DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_header);2386DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_mode);2387DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_flags);2388DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_size);2389DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_extsize_hints);2390DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_symlink);2391DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dir);2392DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_fixed);2393DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_forks);2394DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dfork);2395DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_afork);2396DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_ensure_forkoff);2397 2398DECLARE_EVENT_CLASS(xrep_inode_class,2399	TP_PROTO(struct xfs_scrub *sc),2400	TP_ARGS(sc),2401	TP_STRUCT__entry(2402		__field(dev_t, dev)2403		__field(xfs_ino_t, ino)2404		__field(xfs_fsize_t, size)2405		__field(xfs_rfsblock_t, nblocks)2406		__field(uint16_t, flags)2407		__field(uint64_t, flags2)2408		__field(uint32_t, nextents)2409		__field(uint8_t, format)2410		__field(uint32_t, anextents)2411		__field(uint8_t, aformat)2412	),2413	TP_fast_assign(2414		__entry->dev = sc->mp->m_super->s_dev;2415		__entry->ino = sc->sm->sm_ino;2416		__entry->size = sc->ip->i_disk_size;2417		__entry->nblocks = sc->ip->i_nblocks;2418		__entry->flags = sc->ip->i_diflags;2419		__entry->flags2 = sc->ip->i_diflags2;2420		__entry->nextents = sc->ip->i_df.if_nextents;2421		__entry->format = sc->ip->i_df.if_format;2422		__entry->anextents = sc->ip->i_af.if_nextents;2423		__entry->aformat = sc->ip->i_af.if_format;2424	),2425	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx nblocks 0x%llx flags 0x%x flags2 0x%llx nextents %u format %u anextents %u aformat %u",2426		  MAJOR(__entry->dev), MINOR(__entry->dev),2427		  __entry->ino,2428		  __entry->size,2429		  __entry->nblocks,2430		  __entry->flags,2431		  __entry->flags2,2432		  __entry->nextents,2433		  __entry->format,2434		  __entry->anextents,2435		  __entry->aformat)2436)2437 2438#define DEFINE_REPAIR_INODE_EVENT(name) \2439DEFINE_EVENT(xrep_inode_class, name, \2440	TP_PROTO(struct xfs_scrub *sc), \2441	TP_ARGS(sc))2442DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockcounts);2443DEFINE_REPAIR_INODE_EVENT(xrep_inode_ids);2444DEFINE_REPAIR_INODE_EVENT(xrep_inode_flags);2445DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockdir_size);2446DEFINE_REPAIR_INODE_EVENT(xrep_inode_sfdir_size);2447DEFINE_REPAIR_INODE_EVENT(xrep_inode_dir_size);2448DEFINE_REPAIR_INODE_EVENT(xrep_inode_fixed);2449 2450TRACE_EVENT(xrep_dinode_count_rmaps,2451	TP_PROTO(struct xfs_scrub *sc, xfs_rfsblock_t data_blocks,2452		xfs_rfsblock_t rt_blocks, xfs_rfsblock_t attr_blocks,2453		xfs_extnum_t data_extents, xfs_extnum_t rt_extents,2454		xfs_aextnum_t attr_extents),2455	TP_ARGS(sc, data_blocks, rt_blocks, attr_blocks, data_extents,2456		rt_extents, attr_extents),2457	TP_STRUCT__entry(2458		__field(dev_t, dev)2459		__field(xfs_ino_t, ino)2460		__field(xfs_rfsblock_t, data_blocks)2461		__field(xfs_rfsblock_t, rt_blocks)2462		__field(xfs_rfsblock_t, attr_blocks)2463		__field(xfs_extnum_t, data_extents)2464		__field(xfs_extnum_t, rt_extents)2465		__field(xfs_aextnum_t, attr_extents)2466	),2467	TP_fast_assign(2468		__entry->dev = sc->mp->m_super->s_dev;2469		__entry->ino = sc->sm->sm_ino;2470		__entry->data_blocks = data_blocks;2471		__entry->rt_blocks = rt_blocks;2472		__entry->attr_blocks = attr_blocks;2473		__entry->data_extents = data_extents;2474		__entry->rt_extents = rt_extents;2475		__entry->attr_extents = attr_extents;2476	),2477	TP_printk("dev %d:%d ino 0x%llx dblocks 0x%llx rtblocks 0x%llx ablocks 0x%llx dextents %llu rtextents %llu aextents %u",2478		  MAJOR(__entry->dev), MINOR(__entry->dev),2479		  __entry->ino,2480		  __entry->data_blocks,2481		  __entry->rt_blocks,2482		  __entry->attr_blocks,2483		  __entry->data_extents,2484		  __entry->rt_extents,2485		  __entry->attr_extents)2486);2487 2488TRACE_EVENT(xrep_dinode_findmode_dirent,2489	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *dp,2490		 unsigned int ftype),2491	TP_ARGS(sc, dp, ftype),2492	TP_STRUCT__entry(2493		__field(dev_t, dev)2494		__field(xfs_ino_t, ino)2495		__field(xfs_ino_t, parent_ino)2496		__field(unsigned int, ftype)2497	),2498	TP_fast_assign(2499		__entry->dev = sc->mp->m_super->s_dev;2500		__entry->ino = sc->sm->sm_ino;2501		__entry->parent_ino = dp->i_ino;2502		__entry->ftype = ftype;2503	),2504	TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx ftype '%s'",2505		  MAJOR(__entry->dev), MINOR(__entry->dev),2506		  __entry->ino,2507		  __entry->parent_ino,2508		  __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR))2509);2510 2511TRACE_EVENT(xrep_dinode_findmode_dirent_inval,2512	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *dp,2513		 unsigned int ftype, unsigned int found_ftype),2514	TP_ARGS(sc, dp, ftype, found_ftype),2515	TP_STRUCT__entry(2516		__field(dev_t, dev)2517		__field(xfs_ino_t, ino)2518		__field(xfs_ino_t, parent_ino)2519		__field(unsigned int, ftype)2520		__field(unsigned int, found_ftype)2521	),2522	TP_fast_assign(2523		__entry->dev = sc->mp->m_super->s_dev;2524		__entry->ino = sc->sm->sm_ino;2525		__entry->parent_ino = dp->i_ino;2526		__entry->ftype = ftype;2527		__entry->found_ftype = found_ftype;2528	),2529	TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx ftype '%s' found_ftype '%s'",2530		  MAJOR(__entry->dev), MINOR(__entry->dev),2531		  __entry->ino,2532		  __entry->parent_ino,2533		  __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),2534		  __print_symbolic(__entry->found_ftype, XFS_DIR3_FTYPE_STR))2535);2536 2537TRACE_EVENT(xrep_cow_mark_file_range,2538	TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t startblock,2539		 xfs_fileoff_t startoff, xfs_filblks_t blockcount),2540	TP_ARGS(ip, startblock, startoff, blockcount),2541	TP_STRUCT__entry(2542		__field(dev_t, dev)2543		__field(xfs_ino_t, ino)2544		__field(xfs_fsblock_t, startblock)2545		__field(xfs_fileoff_t, startoff)2546		__field(xfs_filblks_t, blockcount)2547	),2548	TP_fast_assign(2549		__entry->dev = ip->i_mount->m_super->s_dev;2550		__entry->ino = ip->i_ino;2551		__entry->startoff = startoff;2552		__entry->startblock = startblock;2553		__entry->blockcount = blockcount;2554	),2555	TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx",2556		  MAJOR(__entry->dev), MINOR(__entry->dev),2557		  __entry->ino,2558		  __entry->startoff,2559		  __entry->startblock,2560		  __entry->blockcount)2561);2562 2563TRACE_EVENT(xrep_cow_replace_mapping,2564	TP_PROTO(struct xfs_inode *ip, const struct xfs_bmbt_irec *irec,2565		 xfs_fsblock_t new_startblock, xfs_extlen_t new_blockcount),2566	TP_ARGS(ip, irec, new_startblock, new_blockcount),2567	TP_STRUCT__entry(2568		__field(dev_t, dev)2569		__field(xfs_ino_t, ino)2570		__field(xfs_fsblock_t, startblock)2571		__field(xfs_fileoff_t, startoff)2572		__field(xfs_filblks_t, blockcount)2573		__field(xfs_exntst_t, state)2574		__field(xfs_fsblock_t, new_startblock)2575		__field(xfs_extlen_t, new_blockcount)2576	),2577	TP_fast_assign(2578		__entry->dev = ip->i_mount->m_super->s_dev;2579		__entry->ino = ip->i_ino;2580		__entry->startoff = irec->br_startoff;2581		__entry->startblock = irec->br_startblock;2582		__entry->blockcount = irec->br_blockcount;2583		__entry->state = irec->br_state;2584		__entry->new_startblock = new_startblock;2585		__entry->new_blockcount = new_blockcount;2586	),2587	TP_printk("dev %d:%d ino 0x%llx startoff 0x%llx startblock 0x%llx fsbcount 0x%llx state 0x%x new_startblock 0x%llx new_fsbcount 0x%x",2588		  MAJOR(__entry->dev), MINOR(__entry->dev),2589		  __entry->ino,2590		  __entry->startoff,2591		  __entry->startblock,2592		  __entry->blockcount,2593		  __entry->state,2594		  __entry->new_startblock,2595		  __entry->new_blockcount)2596);2597 2598TRACE_EVENT(xrep_cow_free_staging,2599	TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno,2600		 xfs_extlen_t blockcount),2601	TP_ARGS(pag, agbno, blockcount),2602	TP_STRUCT__entry(2603		__field(dev_t, dev)2604		__field(xfs_agnumber_t, agno)2605		__field(xfs_agblock_t, agbno)2606		__field(xfs_extlen_t, blockcount)2607	),2608	TP_fast_assign(2609		__entry->dev = pag->pag_mount->m_super->s_dev;2610		__entry->agno = pag->pag_agno;2611		__entry->agbno = agbno;2612		__entry->blockcount = blockcount;2613	),2614	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",2615		  MAJOR(__entry->dev), MINOR(__entry->dev),2616		  __entry->agno,2617		  __entry->agbno,2618		  __entry->blockcount)2619);2620 2621#ifdef CONFIG_XFS_QUOTA2622DECLARE_EVENT_CLASS(xrep_dquot_class,2623	TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id),2624	TP_ARGS(mp, type, id),2625	TP_STRUCT__entry(2626		__field(dev_t, dev)2627		__field(uint8_t, type)2628		__field(uint32_t, id)2629	),2630	TP_fast_assign(2631		__entry->dev = mp->m_super->s_dev;2632		__entry->id = id;2633		__entry->type = type;2634	),2635	TP_printk("dev %d:%d type %s id 0x%x",2636		  MAJOR(__entry->dev), MINOR(__entry->dev),2637		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),2638		  __entry->id)2639);2640 2641#define DEFINE_XREP_DQUOT_EVENT(name) \2642DEFINE_EVENT(xrep_dquot_class, name, \2643	TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id), \2644	TP_ARGS(mp, type, id))2645DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item);2646DEFINE_XREP_DQUOT_EVENT(xrep_disk_dquot);2647DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item_fill_bmap_hole);2648DEFINE_XREP_DQUOT_EVENT(xrep_quotacheck_dquot);2649#endif /* CONFIG_XFS_QUOTA */2650 2651DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_update_inode);2652DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_unfixable_inode);2653 2654TRACE_EVENT(xrep_rmap_live_update,2655	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int op,2656		 const struct xfs_rmap_update_params *p),2657	TP_ARGS(mp, agno, op, p),2658	TP_STRUCT__entry(2659		__field(dev_t, dev)2660		__field(xfs_agnumber_t, agno)2661		__field(unsigned int, op)2662		__field(xfs_agblock_t, agbno)2663		__field(xfs_extlen_t, len)2664		__field(uint64_t, owner)2665		__field(uint64_t, offset)2666		__field(unsigned int, flags)2667	),2668	TP_fast_assign(2669		__entry->dev = mp->m_super->s_dev;2670		__entry->agno = agno;2671		__entry->op = op;2672		__entry->agbno = p->startblock;2673		__entry->len = p->blockcount;2674		xfs_owner_info_unpack(&p->oinfo, &__entry->owner,2675				&__entry->offset, &__entry->flags);2676		if (p->unwritten)2677			__entry->flags |= XFS_RMAP_UNWRITTEN;2678	),2679	TP_printk("dev %d:%d agno 0x%x op %d agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",2680		  MAJOR(__entry->dev), MINOR(__entry->dev),2681		  __entry->agno,2682		  __entry->op,2683		  __entry->agbno,2684		  __entry->len,2685		  __entry->owner,2686		  __entry->offset,2687		  __entry->flags)2688);2689 2690TRACE_EVENT(xrep_tempfile_create,2691	TP_PROTO(struct xfs_scrub *sc),2692	TP_ARGS(sc),2693	TP_STRUCT__entry(2694		__field(dev_t, dev)2695		__field(xfs_ino_t, ino)2696		__field(unsigned int, type)2697		__field(xfs_agnumber_t, agno)2698		__field(xfs_ino_t, inum)2699		__field(unsigned int, gen)2700		__field(unsigned int, flags)2701		__field(xfs_ino_t, temp_inum)2702	),2703	TP_fast_assign(2704		__entry->dev = sc->mp->m_super->s_dev;2705		__entry->ino = sc->file ? XFS_I(file_inode(sc->file))->i_ino : 0;2706		__entry->type = sc->sm->sm_type;2707		__entry->agno = sc->sm->sm_agno;2708		__entry->inum = sc->sm->sm_ino;2709		__entry->gen = sc->sm->sm_gen;2710		__entry->flags = sc->sm->sm_flags;2711		__entry->temp_inum = sc->tempip->i_ino;2712	),2713	TP_printk("dev %d:%d ino 0x%llx type %s inum 0x%llx gen 0x%x flags 0x%x temp_inum 0x%llx",2714		  MAJOR(__entry->dev), MINOR(__entry->dev),2715		  __entry->ino,2716		  __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),2717		  __entry->inum,2718		  __entry->gen,2719		  __entry->flags,2720		  __entry->temp_inum)2721);2722 2723DECLARE_EVENT_CLASS(xrep_tempfile_class,2724	TP_PROTO(struct xfs_scrub *sc, int whichfork,2725		 struct xfs_bmbt_irec *irec),2726	TP_ARGS(sc, whichfork, irec),2727	TP_STRUCT__entry(2728		__field(dev_t, dev)2729		__field(xfs_ino_t, ino)2730		__field(int, whichfork)2731		__field(xfs_fileoff_t, lblk)2732		__field(xfs_filblks_t, len)2733		__field(xfs_fsblock_t, pblk)2734		__field(int, state)2735	),2736	TP_fast_assign(2737		__entry->dev = sc->mp->m_super->s_dev;2738		__entry->ino = sc->tempip->i_ino;2739		__entry->whichfork = whichfork;2740		__entry->lblk = irec->br_startoff;2741		__entry->len = irec->br_blockcount;2742		__entry->pblk = irec->br_startblock;2743		__entry->state = irec->br_state;2744	),2745	TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d",2746		  MAJOR(__entry->dev), MINOR(__entry->dev),2747		  __entry->ino,2748		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),2749		  __entry->lblk,2750		  __entry->len,2751		  __entry->pblk,2752		  __entry->state)2753);2754#define DEFINE_XREP_TEMPFILE_EVENT(name) \2755DEFINE_EVENT(xrep_tempfile_class, name, \2756	TP_PROTO(struct xfs_scrub *sc, int whichfork, \2757		 struct xfs_bmbt_irec *irec), \2758	TP_ARGS(sc, whichfork, irec))2759DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_prealloc);2760DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_copyin);2761 2762TRACE_EVENT(xreap_ifork_extent,2763	TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, int whichfork,2764		 const struct xfs_bmbt_irec *irec),2765	TP_ARGS(sc, ip, whichfork, irec),2766	TP_STRUCT__entry(2767		__field(dev_t, dev)2768		__field(xfs_ino_t, ino)2769		__field(int, whichfork)2770		__field(xfs_fileoff_t, fileoff)2771		__field(xfs_filblks_t, len)2772		__field(xfs_agnumber_t, agno)2773		__field(xfs_agblock_t, agbno)2774		__field(int, state)2775	),2776	TP_fast_assign(2777		__entry->dev = sc->mp->m_super->s_dev;2778		__entry->ino = ip->i_ino;2779		__entry->whichfork = whichfork;2780		__entry->fileoff = irec->br_startoff;2781		__entry->len = irec->br_blockcount;2782		__entry->agno = XFS_FSB_TO_AGNO(sc->mp, irec->br_startblock);2783		__entry->agbno = XFS_FSB_TO_AGBNO(sc->mp, irec->br_startblock);2784		__entry->state = irec->br_state;2785	),2786	TP_printk("dev %d:%d ip 0x%llx whichfork %s agno 0x%x agbno 0x%x fileoff 0x%llx fsbcount 0x%llx state 0x%x",2787		  MAJOR(__entry->dev), MINOR(__entry->dev),2788		  __entry->ino,2789		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),2790		  __entry->agno,2791		  __entry->agbno,2792		  __entry->fileoff,2793		  __entry->len,2794		  __entry->state)2795);2796 2797TRACE_EVENT(xreap_bmapi_binval_scan,2798	TP_PROTO(struct xfs_scrub *sc, const struct xfs_bmbt_irec *irec,2799		 xfs_extlen_t scan_blocks),2800	TP_ARGS(sc, irec, scan_blocks),2801	TP_STRUCT__entry(2802		__field(dev_t, dev)2803		__field(xfs_filblks_t, len)2804		__field(xfs_agnumber_t, agno)2805		__field(xfs_agblock_t, agbno)2806		__field(xfs_extlen_t, scan_blocks)2807	),2808	TP_fast_assign(2809		__entry->dev = sc->mp->m_super->s_dev;2810		__entry->len = irec->br_blockcount;2811		__entry->agno = XFS_FSB_TO_AGNO(sc->mp, irec->br_startblock);2812		__entry->agbno = XFS_FSB_TO_AGBNO(sc->mp, irec->br_startblock);2813		__entry->scan_blocks = scan_blocks;2814	),2815	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%llx scan_blocks 0x%x",2816		  MAJOR(__entry->dev), MINOR(__entry->dev),2817		  __entry->agno,2818		  __entry->agbno,2819		  __entry->len,2820		  __entry->scan_blocks)2821);2822 2823TRACE_EVENT(xrep_xattr_recover_leafblock,2824	TP_PROTO(struct xfs_inode *ip, xfs_dablk_t dabno, uint16_t magic),2825	TP_ARGS(ip, dabno, magic),2826	TP_STRUCT__entry(2827		__field(dev_t, dev)2828		__field(xfs_ino_t, ino)2829		__field(xfs_dablk_t, dabno)2830		__field(uint16_t, magic)2831	),2832	TP_fast_assign(2833		__entry->dev = ip->i_mount->m_super->s_dev;2834		__entry->ino = ip->i_ino;2835		__entry->dabno = dabno;2836		__entry->magic = magic;2837	),2838	TP_printk("dev %d:%d ino 0x%llx dablk 0x%x magic 0x%x",2839		  MAJOR(__entry->dev), MINOR(__entry->dev),2840		  __entry->ino,2841		  __entry->dabno,2842		  __entry->magic)2843);2844 2845DECLARE_EVENT_CLASS(xrep_xattr_salvage_class,2846	TP_PROTO(struct xfs_inode *ip, unsigned int flags, char *name,2847		 unsigned int namelen, unsigned int valuelen),2848	TP_ARGS(ip, flags, name, namelen, valuelen),2849	TP_STRUCT__entry(2850		__field(dev_t, dev)2851		__field(xfs_ino_t, ino)2852		__field(unsigned int, flags)2853		__field(unsigned int, namelen)2854		__dynamic_array(char, name, namelen)2855		__field(unsigned int, valuelen)2856	),2857	TP_fast_assign(2858		__entry->dev = ip->i_mount->m_super->s_dev;2859		__entry->ino = ip->i_ino;2860		__entry->flags = flags;2861		__entry->namelen = namelen;2862		memcpy(__get_str(name), name, namelen);2863		__entry->valuelen = valuelen;2864	),2865	TP_printk("dev %d:%d ino 0x%llx flags %s name '%.*s' valuelen 0x%x",2866		  MAJOR(__entry->dev), MINOR(__entry->dev),2867		  __entry->ino,2868		   __print_flags(__entry->flags, "|", XFS_ATTR_NAMESPACE_STR),2869		  __entry->namelen,2870		  __get_str(name),2871		  __entry->valuelen)2872);2873#define DEFINE_XREP_XATTR_SALVAGE_EVENT(name) \2874DEFINE_EVENT(xrep_xattr_salvage_class, name, \2875	TP_PROTO(struct xfs_inode *ip, unsigned int flags, char *name, \2876		 unsigned int namelen, unsigned int valuelen), \2877	TP_ARGS(ip, flags, name, namelen, valuelen))2878DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_salvage_rec);2879DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_insert_rec);2880DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_parent_stash_xattr);2881DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_parent_insert_xattr);2882 2883DECLARE_EVENT_CLASS(xrep_pptr_salvage_class,2884	TP_PROTO(struct xfs_inode *ip, unsigned int flags, const void *name,2885		 unsigned int namelen, const void *value, unsigned int valuelen),2886	TP_ARGS(ip, flags, name, namelen, value, valuelen),2887	TP_STRUCT__entry(2888		__field(dev_t, dev)2889		__field(xfs_ino_t, ino)2890		__field(xfs_ino_t, parent_ino)2891		__field(unsigned int, parent_gen)2892		__field(unsigned int, namelen)2893		__dynamic_array(char, name, namelen)2894	),2895	TP_fast_assign(2896		const struct xfs_parent_rec	*rec = value;2897 2898		__entry->dev = ip->i_mount->m_super->s_dev;2899		__entry->ino = ip->i_ino;2900		__entry->parent_ino = be64_to_cpu(rec->p_ino);2901		__entry->parent_gen = be32_to_cpu(rec->p_gen);2902		__entry->namelen = namelen;2903		memcpy(__get_str(name), name, namelen);2904	),2905	TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",2906		  MAJOR(__entry->dev), MINOR(__entry->dev),2907		  __entry->ino,2908		  __entry->parent_ino,2909		  __entry->parent_gen,2910		  __entry->namelen,2911		  __get_str(name))2912)2913#define DEFINE_XREP_PPTR_SALVAGE_EVENT(name) \2914DEFINE_EVENT(xrep_pptr_salvage_class, name, \2915	TP_PROTO(struct xfs_inode *ip, unsigned int flags, const void *name, \2916		 unsigned int namelen, const void *value, unsigned int valuelen), \2917	TP_ARGS(ip, flags, name, namelen, value, valuelen))2918DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_salvage_pptr);2919DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_insert_pptr);2920 2921TRACE_EVENT(xrep_xattr_class,2922	TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip),2923	TP_ARGS(ip, arg_ip),2924	TP_STRUCT__entry(2925		__field(dev_t, dev)2926		__field(xfs_ino_t, ino)2927		__field(xfs_ino_t, src_ino)2928	),2929	TP_fast_assign(2930		__entry->dev = ip->i_mount->m_super->s_dev;2931		__entry->ino = ip->i_ino;2932		__entry->src_ino = arg_ip->i_ino;2933	),2934	TP_printk("dev %d:%d ino 0x%llx src 0x%llx",2935		  MAJOR(__entry->dev), MINOR(__entry->dev),2936		  __entry->ino,2937		  __entry->src_ino)2938)2939#define DEFINE_XREP_XATTR_EVENT(name) \2940DEFINE_EVENT(xrep_xattr_class, name, \2941	TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip), \2942	TP_ARGS(ip, arg_ip))2943DEFINE_XREP_XATTR_EVENT(xrep_xattr_rebuild_tree);2944DEFINE_XREP_XATTR_EVENT(xrep_xattr_reset_fork);2945DEFINE_XREP_XATTR_EVENT(xrep_xattr_full_reset);2946 2947DECLARE_EVENT_CLASS(xrep_xattr_pptr_scan_class,2948	TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp,2949		 const struct xfs_name *name),2950	TP_ARGS(ip, dp, name),2951	TP_STRUCT__entry(2952		__field(dev_t, dev)2953		__field(xfs_ino_t, ino)2954		__field(xfs_ino_t, parent_ino)2955		__field(unsigned int, parent_gen)2956		__field(unsigned int, namelen)2957		__dynamic_array(char, name, name->len)2958	),2959	TP_fast_assign(2960		__entry->dev = ip->i_mount->m_super->s_dev;2961		__entry->ino = ip->i_ino;2962		__entry->parent_ino = dp->i_ino;2963		__entry->parent_gen = VFS_IC(dp)->i_generation;2964		__entry->namelen = name->len;2965		memcpy(__get_str(name), name->name, name->len);2966	),2967	TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",2968		  MAJOR(__entry->dev), MINOR(__entry->dev),2969		  __entry->ino,2970		  __entry->parent_ino,2971		  __entry->parent_gen,2972		  __entry->namelen,2973		  __get_str(name))2974)2975#define DEFINE_XREP_XATTR_PPTR_SCAN_EVENT(name) \2976DEFINE_EVENT(xrep_xattr_pptr_scan_class, name, \2977	TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp, \2978		 const struct xfs_name *name), \2979	TP_ARGS(ip, dp, name))2980DEFINE_XREP_XATTR_PPTR_SCAN_EVENT(xrep_xattr_stash_parentadd);2981DEFINE_XREP_XATTR_PPTR_SCAN_EVENT(xrep_xattr_stash_parentremove);2982 2983TRACE_EVENT(xrep_dir_recover_dirblock,2984	TP_PROTO(struct xfs_inode *dp, xfs_dablk_t dabno, uint32_t magic,2985		 uint32_t magic_guess),2986	TP_ARGS(dp, dabno, magic, magic_guess),2987	TP_STRUCT__entry(2988		__field(dev_t, dev)2989		__field(xfs_ino_t, dir_ino)2990		__field(xfs_dablk_t, dabno)2991		__field(uint32_t, magic)2992		__field(uint32_t, magic_guess)2993	),2994	TP_fast_assign(2995		__entry->dev = dp->i_mount->m_super->s_dev;2996		__entry->dir_ino = dp->i_ino;2997		__entry->dabno = dabno;2998		__entry->magic = magic;2999		__entry->magic_guess = magic_guess;3000	),3001	TP_printk("dev %d:%d dir 0x%llx dablk 0x%x magic 0x%x magic_guess 0x%x",3002		  MAJOR(__entry->dev), MINOR(__entry->dev),3003		  __entry->dir_ino,3004		  __entry->dabno,3005		  __entry->magic,3006		  __entry->magic_guess)3007);3008 3009DECLARE_EVENT_CLASS(xrep_dir_class,3010	TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino),3011	TP_ARGS(dp, parent_ino),3012	TP_STRUCT__entry(3013		__field(dev_t, dev)3014		__field(xfs_ino_t, dir_ino)3015		__field(xfs_ino_t, parent_ino)3016	),3017	TP_fast_assign(3018		__entry->dev = dp->i_mount->m_super->s_dev;3019		__entry->dir_ino = dp->i_ino;3020		__entry->parent_ino = parent_ino;3021	),3022	TP_printk("dev %d:%d dir 0x%llx parent 0x%llx",3023		  MAJOR(__entry->dev), MINOR(__entry->dev),3024		  __entry->dir_ino,3025		  __entry->parent_ino)3026)3027#define DEFINE_XREP_DIR_EVENT(name) \3028DEFINE_EVENT(xrep_dir_class, name, \3029	TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino), \3030	TP_ARGS(dp, parent_ino))3031DEFINE_XREP_DIR_EVENT(xrep_dir_rebuild_tree);3032DEFINE_XREP_DIR_EVENT(xrep_dir_reset_fork);3033DEFINE_XREP_DIR_EVENT(xrep_parent_reset_dotdot);3034 3035DECLARE_EVENT_CLASS(xrep_dirent_class,3036	TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name,3037		 xfs_ino_t ino),3038	TP_ARGS(dp, name, ino),3039	TP_STRUCT__entry(3040		__field(dev_t, dev)3041		__field(xfs_ino_t, dir_ino)3042		__field(unsigned int, namelen)3043		__dynamic_array(char, name, name->len)3044		__field(xfs_ino_t, ino)3045		__field(uint8_t, ftype)3046	),3047	TP_fast_assign(3048		__entry->dev = dp->i_mount->m_super->s_dev;3049		__entry->dir_ino = dp->i_ino;3050		__entry->namelen = name->len;3051		memcpy(__get_str(name), name->name, name->len);3052		__entry->ino = ino;3053		__entry->ftype = name->type;3054	),3055	TP_printk("dev %d:%d dir 0x%llx ftype %s name '%.*s' ino 0x%llx",3056		  MAJOR(__entry->dev), MINOR(__entry->dev),3057		  __entry->dir_ino,3058		  __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),3059		  __entry->namelen,3060		  __get_str(name),3061		  __entry->ino)3062)3063#define DEFINE_XREP_DIRENT_EVENT(name) \3064DEFINE_EVENT(xrep_dirent_class, name, \3065	TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name, \3066		 xfs_ino_t ino), \3067	TP_ARGS(dp, name, ino))3068DEFINE_XREP_DIRENT_EVENT(xrep_dir_salvage_entry);3069DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_createname);3070DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_createname);3071DEFINE_XREP_DIRENT_EVENT(xrep_adoption_reparent);3072DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_removename);3073DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_removename);3074 3075DECLARE_EVENT_CLASS(xrep_adoption_class,3076	TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved),3077	TP_ARGS(dp, ip, moved),3078	TP_STRUCT__entry(3079		__field(dev_t, dev)3080		__field(xfs_ino_t, dir_ino)3081		__field(xfs_ino_t, child_ino)3082		__field(bool, moved)3083	),3084	TP_fast_assign(3085		__entry->dev = dp->i_mount->m_super->s_dev;3086		__entry->dir_ino = dp->i_ino;3087		__entry->child_ino = ip->i_ino;3088		__entry->moved = moved;3089	),3090	TP_printk("dev %d:%d dir 0x%llx child 0x%llx moved? %d",3091		  MAJOR(__entry->dev), MINOR(__entry->dev),3092		  __entry->dir_ino,3093		  __entry->child_ino,3094		  __entry->moved)3095);3096#define DEFINE_XREP_ADOPTION_EVENT(name) \3097DEFINE_EVENT(xrep_adoption_class, name, \3098	TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved), \3099	TP_ARGS(dp, ip, moved))3100DEFINE_XREP_ADOPTION_EVENT(xrep_adoption_trans_roll);3101 3102DECLARE_EVENT_CLASS(xrep_parent_salvage_class,3103	TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino),3104	TP_ARGS(dp, ino),3105	TP_STRUCT__entry(3106		__field(dev_t, dev)3107		__field(xfs_ino_t, dir_ino)3108		__field(xfs_ino_t, ino)3109	),3110	TP_fast_assign(3111		__entry->dev = dp->i_mount->m_super->s_dev;3112		__entry->dir_ino = dp->i_ino;3113		__entry->ino = ino;3114	),3115	TP_printk("dev %d:%d dir 0x%llx parent 0x%llx",3116		  MAJOR(__entry->dev), MINOR(__entry->dev),3117		  __entry->dir_ino,3118		  __entry->ino)3119)3120#define DEFINE_XREP_PARENT_SALVAGE_EVENT(name) \3121DEFINE_EVENT(xrep_parent_salvage_class, name, \3122	TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino), \3123	TP_ARGS(dp, ino))3124DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_dir_salvaged_parent);3125DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_dirent);3126DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_from_dcache);3127 3128DECLARE_EVENT_CLASS(xrep_pptr_class,3129	TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name,3130		 const struct xfs_parent_rec *pptr),3131	TP_ARGS(ip, name, pptr),3132	TP_STRUCT__entry(3133		__field(dev_t, dev)3134		__field(xfs_ino_t, ino)3135		__field(xfs_ino_t, parent_ino)3136		__field(unsigned int, parent_gen)3137		__field(unsigned int, namelen)3138		__dynamic_array(char, name, name->len)3139	),3140	TP_fast_assign(3141		__entry->dev = ip->i_mount->m_super->s_dev;3142		__entry->ino = ip->i_ino;3143		__entry->parent_ino = be64_to_cpu(pptr->p_ino);3144		__entry->parent_gen = be32_to_cpu(pptr->p_gen);3145		__entry->namelen = name->len;3146		memcpy(__get_str(name), name->name, name->len);3147	),3148	TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",3149		  MAJOR(__entry->dev), MINOR(__entry->dev),3150		  __entry->ino,3151		  __entry->parent_ino,3152		  __entry->parent_gen,3153		  __entry->namelen,3154		  __get_str(name))3155)3156#define DEFINE_XREP_PPTR_EVENT(name) \3157DEFINE_EVENT(xrep_pptr_class, name, \3158	TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name, \3159		 const struct xfs_parent_rec *pptr), \3160	TP_ARGS(ip, name, pptr))3161DEFINE_XREP_PPTR_EVENT(xrep_xattr_replay_parentadd);3162DEFINE_XREP_PPTR_EVENT(xrep_xattr_replay_parentremove);3163DEFINE_XREP_PPTR_EVENT(xrep_parent_replay_parentadd);3164DEFINE_XREP_PPTR_EVENT(xrep_parent_replay_parentremove);3165 3166DECLARE_EVENT_CLASS(xrep_pptr_scan_class,3167	TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp,3168		 const struct xfs_name *name),3169	TP_ARGS(ip, dp, name),3170	TP_STRUCT__entry(3171		__field(dev_t, dev)3172		__field(xfs_ino_t, ino)3173		__field(xfs_ino_t, parent_ino)3174		__field(unsigned int, parent_gen)3175		__field(unsigned int, namelen)3176		__dynamic_array(char, name, name->len)3177	),3178	TP_fast_assign(3179		__entry->dev = ip->i_mount->m_super->s_dev;3180		__entry->ino = ip->i_ino;3181		__entry->parent_ino = dp->i_ino;3182		__entry->parent_gen = VFS_IC(dp)->i_generation;3183		__entry->namelen = name->len;3184		memcpy(__get_str(name), name->name, name->len);3185	),3186	TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",3187		  MAJOR(__entry->dev), MINOR(__entry->dev),3188		  __entry->ino,3189		  __entry->parent_ino,3190		  __entry->parent_gen,3191		  __entry->namelen,3192		  __get_str(name))3193)3194#define DEFINE_XREP_PPTR_SCAN_EVENT(name) \3195DEFINE_EVENT(xrep_pptr_scan_class, name, \3196	TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp, \3197		 const struct xfs_name *name), \3198	TP_ARGS(ip, dp, name))3199DEFINE_XREP_PPTR_SCAN_EVENT(xrep_parent_stash_parentadd);3200DEFINE_XREP_PPTR_SCAN_EVENT(xrep_parent_stash_parentremove);3201 3202TRACE_EVENT(xrep_nlinks_set_record,3203	TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,3204		 const struct xchk_nlink *obs),3205	TP_ARGS(mp, ino, obs),3206	TP_STRUCT__entry(3207		__field(dev_t, dev)3208		__field(xfs_ino_t, ino)3209		__field(xfs_nlink_t, parents)3210		__field(xfs_nlink_t, backrefs)3211		__field(xfs_nlink_t, children)3212	),3213	TP_fast_assign(3214		__entry->dev = mp->m_super->s_dev;3215		__entry->ino = ino;3216		__entry->parents = obs->parents;3217		__entry->backrefs = obs->backrefs;3218		__entry->children = obs->children;3219	),3220	TP_printk("dev %d:%d ino 0x%llx parents %u backrefs %u children %u",3221		  MAJOR(__entry->dev), MINOR(__entry->dev),3222		  __entry->ino,3223		  __entry->parents,3224		  __entry->backrefs,3225		  __entry->children)3226);3227 3228DECLARE_EVENT_CLASS(xrep_dentry_class,3229	TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry),3230	TP_ARGS(mp, dentry),3231	TP_STRUCT__entry(3232		__field(dev_t, dev)3233		__field(unsigned int, flags)3234		__field(unsigned long, ino)3235		__field(bool, positive)3236		__field(unsigned long, parent_ino)3237		__field(unsigned int, namelen)3238		__dynamic_array(char, name, dentry->d_name.len)3239	),3240	TP_fast_assign(3241		__entry->dev = mp->m_super->s_dev;3242		__entry->flags = dentry->d_flags;3243		__entry->positive = d_is_positive(dentry);3244		if (dentry->d_parent && d_inode(dentry->d_parent))3245			__entry->parent_ino = d_inode(dentry->d_parent)->i_ino;3246		else3247			__entry->parent_ino = -1UL;3248		__entry->ino = d_inode(dentry) ? d_inode(dentry)->i_ino : 0;3249		__entry->namelen = dentry->d_name.len;3250		memcpy(__get_str(name), dentry->d_name.name, dentry->d_name.len);3251	),3252	TP_printk("dev %d:%d flags 0x%x positive? %d parent_ino 0x%lx ino 0x%lx name '%.*s'",3253		  MAJOR(__entry->dev), MINOR(__entry->dev),3254		  __entry->flags,3255		  __entry->positive,3256		  __entry->parent_ino,3257		  __entry->ino,3258		  __entry->namelen,3259		  __get_str(name))3260);3261#define DEFINE_REPAIR_DENTRY_EVENT(name) \3262DEFINE_EVENT(xrep_dentry_class, name, \3263	TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry), \3264	TP_ARGS(mp, dentry))3265DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_child);3266DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_invalidate_child);3267DEFINE_REPAIR_DENTRY_EVENT(xrep_dirtree_delete_child);3268 3269TRACE_EVENT(xrep_symlink_salvage_target,3270	TP_PROTO(struct xfs_inode *ip, char *target, unsigned int targetlen),3271	TP_ARGS(ip, target, targetlen),3272	TP_STRUCT__entry(3273		__field(dev_t, dev)3274		__field(xfs_ino_t, ino)3275		__field(unsigned int, targetlen)3276		__dynamic_array(char, target, targetlen + 1)3277	),3278	TP_fast_assign(3279		__entry->dev = ip->i_mount->m_super->s_dev;3280		__entry->ino = ip->i_ino;3281		__entry->targetlen = targetlen;3282		memcpy(__get_str(target), target, targetlen);3283		__get_str(target)[targetlen] = 0;3284	),3285	TP_printk("dev %d:%d ip 0x%llx target '%.*s'",3286		  MAJOR(__entry->dev), MINOR(__entry->dev),3287		  __entry->ino,3288		  __entry->targetlen,3289		  __get_str(target))3290);3291 3292DECLARE_EVENT_CLASS(xrep_symlink_class,3293	TP_PROTO(struct xfs_inode *ip),3294	TP_ARGS(ip),3295	TP_STRUCT__entry(3296		__field(dev_t, dev)3297		__field(xfs_ino_t, ino)3298	),3299	TP_fast_assign(3300		__entry->dev = ip->i_mount->m_super->s_dev;3301		__entry->ino = ip->i_ino;3302	),3303	TP_printk("dev %d:%d ip 0x%llx",3304		  MAJOR(__entry->dev), MINOR(__entry->dev),3305		  __entry->ino)3306);3307 3308#define DEFINE_XREP_SYMLINK_EVENT(name) \3309DEFINE_EVENT(xrep_symlink_class, name, \3310	TP_PROTO(struct xfs_inode *ip), \3311	TP_ARGS(ip))3312DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_rebuild);3313DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_reset_fork);3314 3315TRACE_EVENT(xrep_iunlink_visit,3316	TP_PROTO(struct xfs_perag *pag, unsigned int bucket,3317		 xfs_agino_t bucket_agino, struct xfs_inode *ip),3318	TP_ARGS(pag, bucket, bucket_agino, ip),3319	TP_STRUCT__entry(3320		__field(dev_t, dev)3321		__field(xfs_agnumber_t, agno)3322		__field(xfs_agino_t, agino)3323		__field(unsigned int, bucket)3324		__field(xfs_agino_t, bucket_agino)3325		__field(xfs_agino_t, prev_agino)3326		__field(xfs_agino_t, next_agino)3327	),3328	TP_fast_assign(3329		__entry->dev = pag->pag_mount->m_super->s_dev;3330		__entry->agno = pag->pag_agno;3331		__entry->agino = XFS_INO_TO_AGINO(pag->pag_mount, ip->i_ino);3332		__entry->bucket = bucket;3333		__entry->bucket_agino = bucket_agino;3334		__entry->prev_agino = ip->i_prev_unlinked;3335		__entry->next_agino = ip->i_next_unlinked;3336	),3337	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x bucket_agino 0x%x prev_agino 0x%x next_agino 0x%x",3338		  MAJOR(__entry->dev), MINOR(__entry->dev),3339		  __entry->agno,3340		  __entry->bucket,3341		  __entry->agino,3342		  __entry->bucket_agino,3343		  __entry->prev_agino,3344		  __entry->next_agino)3345);3346 3347TRACE_EVENT(xrep_iunlink_reload_next,3348	TP_PROTO(struct xfs_inode *ip, xfs_agino_t prev_agino),3349	TP_ARGS(ip, prev_agino),3350	TP_STRUCT__entry(3351		__field(dev_t, dev)3352		__field(xfs_agnumber_t, agno)3353		__field(xfs_agino_t, agino)3354		__field(xfs_agino_t, old_prev_agino)3355		__field(xfs_agino_t, prev_agino)3356		__field(xfs_agino_t, next_agino)3357		__field(unsigned int, nlink)3358	),3359	TP_fast_assign(3360		__entry->dev = ip->i_mount->m_super->s_dev;3361		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);3362		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);3363		__entry->old_prev_agino = ip->i_prev_unlinked;3364		__entry->prev_agino = prev_agino;3365		__entry->next_agino = ip->i_next_unlinked;3366		__entry->nlink = VFS_I(ip)->i_nlink;3367	),3368	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x nlink %u old_prev_agino %u prev_agino 0x%x next_agino 0x%x",3369		  MAJOR(__entry->dev), MINOR(__entry->dev),3370		  __entry->agno,3371		  __entry->agino % XFS_AGI_UNLINKED_BUCKETS,3372		  __entry->agino,3373		  __entry->nlink,3374		  __entry->old_prev_agino,3375		  __entry->prev_agino,3376		  __entry->next_agino)3377);3378 3379TRACE_EVENT(xrep_iunlink_reload_ondisk,3380	TP_PROTO(struct xfs_inode *ip),3381	TP_ARGS(ip),3382	TP_STRUCT__entry(3383		__field(dev_t, dev)3384		__field(xfs_agnumber_t, agno)3385		__field(xfs_agino_t, agino)3386		__field(unsigned int, nlink)3387		__field(xfs_agino_t, next_agino)3388	),3389	TP_fast_assign(3390		__entry->dev = ip->i_mount->m_super->s_dev;3391		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);3392		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);3393		__entry->nlink = VFS_I(ip)->i_nlink;3394		__entry->next_agino = ip->i_next_unlinked;3395	),3396	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x nlink %u next_agino 0x%x",3397		  MAJOR(__entry->dev), MINOR(__entry->dev),3398		  __entry->agno,3399		  __entry->agino % XFS_AGI_UNLINKED_BUCKETS,3400		  __entry->agino,3401		  __entry->nlink,3402		  __entry->next_agino)3403);3404 3405TRACE_EVENT(xrep_iunlink_walk_ondisk_bucket,3406	TP_PROTO(struct xfs_perag *pag, unsigned int bucket,3407		 xfs_agino_t prev_agino, xfs_agino_t next_agino),3408	TP_ARGS(pag, bucket, prev_agino, next_agino),3409	TP_STRUCT__entry(3410		__field(dev_t, dev)3411		__field(xfs_agnumber_t, agno)3412		__field(unsigned int, bucket)3413		__field(xfs_agino_t, prev_agino)3414		__field(xfs_agino_t, next_agino)3415	),3416	TP_fast_assign(3417		__entry->dev = pag->pag_mount->m_super->s_dev;3418		__entry->agno = pag->pag_agno;3419		__entry->bucket = bucket;3420		__entry->prev_agino = prev_agino;3421		__entry->next_agino = next_agino;3422	),3423	TP_printk("dev %d:%d agno 0x%x bucket %u prev_agino 0x%x next_agino 0x%x",3424		  MAJOR(__entry->dev), MINOR(__entry->dev),3425		  __entry->agno,3426		  __entry->bucket,3427		  __entry->prev_agino,3428		  __entry->next_agino)3429);3430 3431DECLARE_EVENT_CLASS(xrep_iunlink_resolve_class,3432	TP_PROTO(struct xfs_perag *pag, unsigned int bucket,3433		 xfs_agino_t prev_agino, xfs_agino_t next_agino),3434	TP_ARGS(pag, bucket, prev_agino, next_agino),3435	TP_STRUCT__entry(3436		__field(dev_t, dev)3437		__field(xfs_agnumber_t, agno)3438		__field(unsigned int, bucket)3439		__field(xfs_agino_t, prev_agino)3440		__field(xfs_agino_t, next_agino)3441	),3442	TP_fast_assign(3443		__entry->dev = pag->pag_mount->m_super->s_dev;3444		__entry->agno = pag->pag_agno;3445		__entry->bucket = bucket;3446		__entry->prev_agino = prev_agino;3447		__entry->next_agino = next_agino;3448	),3449	TP_printk("dev %d:%d agno 0x%x bucket %u prev_agino 0x%x next_agino 0x%x",3450		  MAJOR(__entry->dev), MINOR(__entry->dev),3451		  __entry->agno,3452		  __entry->bucket,3453		  __entry->prev_agino,3454		  __entry->next_agino)3455);3456#define DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(name) \3457DEFINE_EVENT(xrep_iunlink_resolve_class, name, \3458	TP_PROTO(struct xfs_perag *pag, unsigned int bucket, \3459		 xfs_agino_t prev_agino, xfs_agino_t next_agino), \3460	TP_ARGS(pag, bucket, prev_agino, next_agino))3461DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_uncached);3462DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_wronglist);3463DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_nolist);3464DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_ok);3465 3466TRACE_EVENT(xrep_iunlink_relink_next,3467	TP_PROTO(struct xfs_inode *ip, xfs_agino_t next_agino),3468	TP_ARGS(ip, next_agino),3469	TP_STRUCT__entry(3470		__field(dev_t, dev)3471		__field(xfs_agnumber_t, agno)3472		__field(xfs_agino_t, agino)3473		__field(xfs_agino_t, next_agino)3474		__field(xfs_agino_t, new_next_agino)3475	),3476	TP_fast_assign(3477		__entry->dev = ip->i_mount->m_super->s_dev;3478		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);3479		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);3480		__entry->next_agino = ip->i_next_unlinked;3481		__entry->new_next_agino = next_agino;3482	),3483	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x next_agino 0x%x -> 0x%x",3484		  MAJOR(__entry->dev), MINOR(__entry->dev),3485		  __entry->agno,3486		  __entry->agino % XFS_AGI_UNLINKED_BUCKETS,3487		  __entry->agino,3488		  __entry->next_agino,3489		  __entry->new_next_agino)3490);3491 3492TRACE_EVENT(xrep_iunlink_relink_prev,3493	TP_PROTO(struct xfs_inode *ip, xfs_agino_t prev_agino),3494	TP_ARGS(ip, prev_agino),3495	TP_STRUCT__entry(3496		__field(dev_t, dev)3497		__field(xfs_agnumber_t, agno)3498		__field(xfs_agino_t, agino)3499		__field(xfs_agino_t, prev_agino)3500		__field(xfs_agino_t, new_prev_agino)3501	),3502	TP_fast_assign(3503		__entry->dev = ip->i_mount->m_super->s_dev;3504		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);3505		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);3506		__entry->prev_agino = ip->i_prev_unlinked;3507		__entry->new_prev_agino = prev_agino;3508	),3509	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x prev_agino 0x%x -> 0x%x",3510		  MAJOR(__entry->dev), MINOR(__entry->dev),3511		  __entry->agno,3512		  __entry->agino % XFS_AGI_UNLINKED_BUCKETS,3513		  __entry->agino,3514		  __entry->prev_agino,3515		  __entry->new_prev_agino)3516);3517 3518TRACE_EVENT(xrep_iunlink_add_to_bucket,3519	TP_PROTO(struct xfs_perag *pag, unsigned int bucket,3520		 xfs_agino_t agino, xfs_agino_t curr_head),3521	TP_ARGS(pag, bucket, agino, curr_head),3522	TP_STRUCT__entry(3523		__field(dev_t, dev)3524		__field(xfs_agnumber_t, agno)3525		__field(unsigned int, bucket)3526		__field(xfs_agino_t, agino)3527		__field(xfs_agino_t, next_agino)3528	),3529	TP_fast_assign(3530		__entry->dev = pag->pag_mount->m_super->s_dev;3531		__entry->agno = pag->pag_agno;3532		__entry->bucket = bucket;3533		__entry->agino = agino;3534		__entry->next_agino = curr_head;3535	),3536	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x next_agino 0x%x",3537		  MAJOR(__entry->dev), MINOR(__entry->dev),3538		  __entry->agno,3539		  __entry->bucket,3540		  __entry->agino,3541		  __entry->next_agino)3542);3543 3544TRACE_EVENT(xrep_iunlink_commit_bucket,3545	TP_PROTO(struct xfs_perag *pag, unsigned int bucket,3546		 xfs_agino_t old_agino, xfs_agino_t agino),3547	TP_ARGS(pag, bucket, old_agino, agino),3548	TP_STRUCT__entry(3549		__field(dev_t, dev)3550		__field(xfs_agnumber_t, agno)3551		__field(unsigned int, bucket)3552		__field(xfs_agino_t, old_agino)3553		__field(xfs_agino_t, agino)3554	),3555	TP_fast_assign(3556		__entry->dev = pag->pag_mount->m_super->s_dev;3557		__entry->agno = pag->pag_agno;3558		__entry->bucket = bucket;3559		__entry->old_agino = old_agino;3560		__entry->agino = agino;3561	),3562	TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x -> 0x%x",3563		  MAJOR(__entry->dev), MINOR(__entry->dev),3564		  __entry->agno,3565		  __entry->bucket,3566		  __entry->old_agino,3567		  __entry->agino)3568);3569 3570DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(xrep_dirpath_set_outcome);3571DEFINE_XCHK_DIRTREE_EVENT(xrep_dirtree_delete_path);3572DEFINE_XCHK_DIRTREE_EVENT(xrep_dirtree_create_adoption);3573DEFINE_XCHK_DIRTREE_EVALUATE_EVENT(xrep_dirtree_decided_fate);3574 3575#endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */3576 3577#endif /* _TRACE_XFS_SCRUB_TRACE_H */3578 3579#undef TRACE_INCLUDE_PATH3580#define TRACE_INCLUDE_PATH .3581#define TRACE_INCLUDE_FILE scrub/trace3582#include <trace/define_trace.h>3583