brintos

brintos / linux-shallow public Read only

0
0
Text · 165.4 KiB · fcb2bad Raw
5336 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (c) 2009, Christoph Hellwig4 * All Rights Reserved.5 *6 * NOTE: none of these tracepoints shall be considered a stable kernel ABI7 * as they can change at any time.8 *9 * Current conventions for printing numbers measuring specific units:10 *11 * agno: allocation group number12 *13 * agino: per-AG inode number14 * ino: filesystem inode number15 *16 * agbno: per-AG block number in fs blocks17 * startblock: physical block number for file mappings.  This is either a18 *             segmented fsblock for data device mappings, or a rfsblock19 *             for realtime device mappings20 * fsbcount: number of blocks in an extent, in fs blocks21 *22 * daddr: physical block number in 512b blocks23 * bbcount: number of blocks in a physical extent, in 512b blocks24 *25 * rtx: physical rt extent number for extent mappings26 * rtxcount: number of rt extents in an extent mapping27 *28 * owner: reverse-mapping owner, usually inodes29 *30 * fileoff: file offset, in fs blocks31 * pos: file offset, in bytes32 * bytecount: number of bytes33 *34 * dablk: directory or xattr block offset, in filesystem blocks35 *36 * disize: ondisk file size, in bytes37 * isize: incore file size, in bytes38 *39 * forkoff: inode fork offset, in bytes40 *41 * ireccount: number of inode records42 *43 * Numbers describing space allocations (blocks, extents, inodes) should be44 * formatted in hexadecimal.45 */46#undef TRACE_SYSTEM47#define TRACE_SYSTEM xfs48 49#if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ)50#define _TRACE_XFS_H51 52#include <linux/tracepoint.h>53 54struct xfs_agf;55struct xfs_alloc_arg;56struct xfs_attr_list_context;57struct xfs_buf_log_item;58struct xfs_da_args;59struct xfs_da_node_entry;60struct xfs_dquot;61struct xfs_log_item;62struct xlog;63struct xlog_ticket;64struct xlog_recover;65struct xlog_recover_item;66struct xlog_rec_header;67struct xlog_in_core;68struct xfs_buf_log_format;69struct xfs_inode_log_format;70struct xfs_bmbt_irec;71struct xfs_btree_cur;72struct xfs_defer_op_type;73struct xfs_refcount_irec;74struct xfs_fsmap;75struct xfs_rmap_irec;76struct xfs_icreate_log;77struct xfs_owner_info;78struct xfs_trans_res;79struct xfs_inobt_rec_incore;80union xfs_btree_ptr;81struct xfs_dqtrx;82struct xfs_icwalk;83struct xfs_perag;84struct xfbtree;85struct xfs_btree_ops;86struct xfs_bmap_intent;87struct xfs_exchmaps_intent;88struct xfs_exchmaps_req;89struct xfs_exchrange;90struct xfs_getparents;91struct xfs_parent_irec;92struct xfs_attrlist_cursor_kern;93struct xfs_extent_free_item;94struct xfs_rmap_intent;95struct xfs_refcount_intent;96 97#define XFS_ATTR_FILTER_FLAGS \98	{ XFS_ATTR_ROOT,	"ROOT" }, \99	{ XFS_ATTR_SECURE,	"SECURE" }, \100	{ XFS_ATTR_INCOMPLETE,	"INCOMPLETE" }, \101	{ XFS_ATTR_PARENT,	"PARENT" }102 103DECLARE_EVENT_CLASS(xfs_attr_list_class,104	TP_PROTO(struct xfs_attr_list_context *ctx),105	TP_ARGS(ctx),106	TP_STRUCT__entry(107		__field(dev_t, dev)108		__field(xfs_ino_t, ino)109		__field(u32, hashval)110		__field(u32, blkno)111		__field(u32, offset)112		__field(void *, buffer)113		__field(int, bufsize)114		__field(int, count)115		__field(int, firstu)116		__field(int, dupcnt)117		__field(unsigned int, attr_filter)118	),119	TP_fast_assign(120		__entry->dev = VFS_I(ctx->dp)->i_sb->s_dev;121		__entry->ino = ctx->dp->i_ino;122		__entry->hashval = ctx->cursor.hashval;123		__entry->blkno = ctx->cursor.blkno;124		__entry->offset = ctx->cursor.offset;125		__entry->buffer = ctx->buffer;126		__entry->bufsize = ctx->bufsize;127		__entry->count = ctx->count;128		__entry->firstu = ctx->firstu;129		__entry->attr_filter = ctx->attr_filter;130	),131	TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "132		  "buffer %p size %u count %u firstu %u filter %s",133		  MAJOR(__entry->dev), MINOR(__entry->dev),134		   __entry->ino,135		   __entry->hashval,136		   __entry->blkno,137		   __entry->offset,138		   __entry->dupcnt,139		   __entry->buffer,140		   __entry->bufsize,141		   __entry->count,142		   __entry->firstu,143		   __print_flags(__entry->attr_filter, "|",144				 XFS_ATTR_FILTER_FLAGS)145	)146)147 148#define DEFINE_ATTR_LIST_EVENT(name) \149DEFINE_EVENT(xfs_attr_list_class, name, \150	TP_PROTO(struct xfs_attr_list_context *ctx), \151	TP_ARGS(ctx))152DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf);153DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all);154DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf);155DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end);156DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full);157DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add);158DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk);159DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound);160DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list);161DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list);162 163TRACE_EVENT(xlog_intent_recovery_failed,164	TP_PROTO(struct xfs_mount *mp, const struct xfs_defer_op_type *ops,165		 int error),166	TP_ARGS(mp, ops, error),167	TP_STRUCT__entry(168		__field(dev_t, dev)169		__string(name, ops->name)170		__field(int, error)171	),172	TP_fast_assign(173		__entry->dev = mp->m_super->s_dev;174		__assign_str(name);175		__entry->error = error;176	),177	TP_printk("dev %d:%d optype %s error %d",178		  MAJOR(__entry->dev), MINOR(__entry->dev),179		  __get_str(name),180		  __entry->error)181);182 183DECLARE_EVENT_CLASS(xfs_perag_class,184	TP_PROTO(struct xfs_perag *pag, unsigned long caller_ip),185	TP_ARGS(pag, caller_ip),186	TP_STRUCT__entry(187		__field(dev_t, dev)188		__field(xfs_agnumber_t, agno)189		__field(int, refcount)190		__field(int, active_refcount)191		__field(unsigned long, caller_ip)192	),193	TP_fast_assign(194		__entry->dev = pag->pag_mount->m_super->s_dev;195		__entry->agno = pag->pag_agno;196		__entry->refcount = atomic_read(&pag->pag_ref);197		__entry->active_refcount = atomic_read(&pag->pag_active_ref);198		__entry->caller_ip = caller_ip;199	),200	TP_printk("dev %d:%d agno 0x%x passive refs %d active refs %d caller %pS",201		  MAJOR(__entry->dev), MINOR(__entry->dev),202		  __entry->agno,203		  __entry->refcount,204		  __entry->active_refcount,205		  (char *)__entry->caller_ip)206);207 208#define DEFINE_PERAG_REF_EVENT(name)	\209DEFINE_EVENT(xfs_perag_class, name,	\210	TP_PROTO(struct xfs_perag *pag, unsigned long caller_ip), \211	TP_ARGS(pag, caller_ip))212DEFINE_PERAG_REF_EVENT(xfs_perag_get);213DEFINE_PERAG_REF_EVENT(xfs_perag_hold);214DEFINE_PERAG_REF_EVENT(xfs_perag_put);215DEFINE_PERAG_REF_EVENT(xfs_perag_grab);216DEFINE_PERAG_REF_EVENT(xfs_perag_grab_next_tag);217DEFINE_PERAG_REF_EVENT(xfs_perag_rele);218DEFINE_PERAG_REF_EVENT(xfs_perag_set_inode_tag);219DEFINE_PERAG_REF_EVENT(xfs_perag_clear_inode_tag);220DEFINE_PERAG_REF_EVENT(xfs_reclaim_inodes_count);221 222TRACE_EVENT(xfs_inodegc_worker,223	TP_PROTO(struct xfs_mount *mp, unsigned int shrinker_hits),224	TP_ARGS(mp, shrinker_hits),225	TP_STRUCT__entry(226		__field(dev_t, dev)227		__field(unsigned int, shrinker_hits)228	),229	TP_fast_assign(230		__entry->dev = mp->m_super->s_dev;231		__entry->shrinker_hits = shrinker_hits;232	),233	TP_printk("dev %d:%d shrinker_hits %u",234		  MAJOR(__entry->dev), MINOR(__entry->dev),235		  __entry->shrinker_hits)236);237 238DECLARE_EVENT_CLASS(xfs_fs_class,239	TP_PROTO(struct xfs_mount *mp, void *caller_ip),240	TP_ARGS(mp, caller_ip),241	TP_STRUCT__entry(242		__field(dev_t, dev)243		__field(unsigned long long, mflags)244		__field(unsigned long, opstate)245		__field(unsigned long, sbflags)246		__field(void *, caller_ip)247	),248	TP_fast_assign(249		if (mp) {250			__entry->dev = mp->m_super->s_dev;251			__entry->mflags = mp->m_features;252			__entry->opstate = mp->m_opstate;253			__entry->sbflags = mp->m_super->s_flags;254		}255		__entry->caller_ip = caller_ip;256	),257	TP_printk("dev %d:%d m_features 0x%llx opstate (%s) s_flags 0x%lx caller %pS",258		  MAJOR(__entry->dev), MINOR(__entry->dev),259		  __entry->mflags,260		  __print_flags(__entry->opstate, "|", XFS_OPSTATE_STRINGS),261		  __entry->sbflags,262		  __entry->caller_ip)263);264 265#define DEFINE_FS_EVENT(name)	\266DEFINE_EVENT(xfs_fs_class, name,					\267	TP_PROTO(struct xfs_mount *mp, void *caller_ip), \268	TP_ARGS(mp, caller_ip))269DEFINE_FS_EVENT(xfs_inodegc_flush);270DEFINE_FS_EVENT(xfs_inodegc_push);271DEFINE_FS_EVENT(xfs_inodegc_start);272DEFINE_FS_EVENT(xfs_inodegc_stop);273DEFINE_FS_EVENT(xfs_inodegc_queue);274DEFINE_FS_EVENT(xfs_inodegc_throttle);275DEFINE_FS_EVENT(xfs_fs_sync_fs);276DEFINE_FS_EVENT(xfs_blockgc_start);277DEFINE_FS_EVENT(xfs_blockgc_stop);278DEFINE_FS_EVENT(xfs_blockgc_worker);279DEFINE_FS_EVENT(xfs_blockgc_flush_all);280 281TRACE_EVENT(xfs_inodegc_shrinker_scan,282	TP_PROTO(struct xfs_mount *mp, struct shrink_control *sc,283		 void *caller_ip),284	TP_ARGS(mp, sc, caller_ip),285	TP_STRUCT__entry(286		__field(dev_t, dev)287		__field(unsigned long, nr_to_scan)288		__field(void *, caller_ip)289	),290	TP_fast_assign(291		__entry->dev = mp->m_super->s_dev;292		__entry->nr_to_scan = sc->nr_to_scan;293		__entry->caller_ip = caller_ip;294	),295	TP_printk("dev %d:%d nr_to_scan %lu caller %pS",296		  MAJOR(__entry->dev), MINOR(__entry->dev),297		  __entry->nr_to_scan,298		  __entry->caller_ip)299);300 301DECLARE_EVENT_CLASS(xfs_ag_class,302	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno),303	TP_ARGS(mp, agno),304	TP_STRUCT__entry(305		__field(dev_t, dev)306		__field(xfs_agnumber_t, agno)307	),308	TP_fast_assign(309		__entry->dev = mp->m_super->s_dev;310		__entry->agno = agno;311	),312	TP_printk("dev %d:%d agno 0x%x",313		  MAJOR(__entry->dev), MINOR(__entry->dev),314		  __entry->agno)315);316#define DEFINE_AG_EVENT(name)	\317DEFINE_EVENT(xfs_ag_class, name,	\318	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno),	\319	TP_ARGS(mp, agno))320 321DEFINE_AG_EVENT(xfs_read_agf);322DEFINE_AG_EVENT(xfs_alloc_read_agf);323DEFINE_AG_EVENT(xfs_read_agi);324DEFINE_AG_EVENT(xfs_ialloc_read_agi);325 326TRACE_EVENT(xfs_attr_list_node_descend,327	TP_PROTO(struct xfs_attr_list_context *ctx,328		 struct xfs_da_node_entry *btree),329	TP_ARGS(ctx, btree),330	TP_STRUCT__entry(331		__field(dev_t, dev)332		__field(xfs_ino_t, ino)333		__field(u32, hashval)334		__field(u32, blkno)335		__field(u32, offset)336		__field(void *, buffer)337		__field(int, bufsize)338		__field(int, count)339		__field(int, firstu)340		__field(int, dupcnt)341		__field(unsigned int, attr_filter)342		__field(u32, bt_hashval)343		__field(u32, bt_before)344	),345	TP_fast_assign(346		__entry->dev = VFS_I(ctx->dp)->i_sb->s_dev;347		__entry->ino = ctx->dp->i_ino;348		__entry->hashval = ctx->cursor.hashval;349		__entry->blkno = ctx->cursor.blkno;350		__entry->offset = ctx->cursor.offset;351		__entry->buffer = ctx->buffer;352		__entry->bufsize = ctx->bufsize;353		__entry->count = ctx->count;354		__entry->firstu = ctx->firstu;355		__entry->attr_filter = ctx->attr_filter;356		__entry->bt_hashval = be32_to_cpu(btree->hashval);357		__entry->bt_before = be32_to_cpu(btree->before);358	),359	TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u "360		  "buffer %p size %u count %u firstu %u filter %s "361		  "node hashval %u, node before %u",362		  MAJOR(__entry->dev), MINOR(__entry->dev),363		   __entry->ino,364		   __entry->hashval,365		   __entry->blkno,366		   __entry->offset,367		   __entry->dupcnt,368		   __entry->buffer,369		   __entry->bufsize,370		   __entry->count,371		   __entry->firstu,372		   __print_flags(__entry->attr_filter, "|",373				 XFS_ATTR_FILTER_FLAGS),374		   __entry->bt_hashval,375		   __entry->bt_before)376);377 378DECLARE_EVENT_CLASS(xfs_bmap_class,379	TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state,380		 unsigned long caller_ip),381	TP_ARGS(ip, cur, state, caller_ip),382	TP_STRUCT__entry(383		__field(dev_t, dev)384		__field(xfs_ino_t, ino)385		__field(void *, leaf)386		__field(int, pos)387		__field(xfs_fileoff_t, startoff)388		__field(xfs_fsblock_t, startblock)389		__field(xfs_filblks_t, blockcount)390		__field(xfs_exntst_t, state)391		__field(int, bmap_state)392		__field(unsigned long, caller_ip)393	),394	TP_fast_assign(395		struct xfs_ifork	*ifp;396		struct xfs_bmbt_irec	r;397 398		ifp = xfs_iext_state_to_fork(ip, state);399		xfs_iext_get_extent(ifp, cur, &r);400		__entry->dev = VFS_I(ip)->i_sb->s_dev;401		__entry->ino = ip->i_ino;402		__entry->leaf = cur->leaf;403		__entry->pos = cur->pos;404		__entry->startoff = r.br_startoff;405		__entry->startblock = r.br_startblock;406		__entry->blockcount = r.br_blockcount;407		__entry->state = r.br_state;408		__entry->bmap_state = state;409		__entry->caller_ip = caller_ip;410	),411	TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d "412		  "fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx flag %d caller %pS",413		  MAJOR(__entry->dev), MINOR(__entry->dev),414		  __entry->ino,415		  __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS),416		  __entry->leaf,417		  __entry->pos,418		  __entry->startoff,419		  (int64_t)__entry->startblock,420		  __entry->blockcount,421		  __entry->state,422		  (char *)__entry->caller_ip)423)424 425#define DEFINE_BMAP_EVENT(name) \426DEFINE_EVENT(xfs_bmap_class, name, \427	TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \428		 unsigned long caller_ip), \429	TP_ARGS(ip, cur, state, caller_ip))430DEFINE_BMAP_EVENT(xfs_iext_insert);431DEFINE_BMAP_EVENT(xfs_iext_remove);432DEFINE_BMAP_EVENT(xfs_bmap_pre_update);433DEFINE_BMAP_EVENT(xfs_bmap_post_update);434DEFINE_BMAP_EVENT(xfs_read_extent);435DEFINE_BMAP_EVENT(xfs_write_extent);436 437DECLARE_EVENT_CLASS(xfs_buf_class,438	TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip),439	TP_ARGS(bp, caller_ip),440	TP_STRUCT__entry(441		__field(dev_t, dev)442		__field(xfs_daddr_t, bno)443		__field(int, nblks)444		__field(int, hold)445		__field(int, pincount)446		__field(unsigned, lockval)447		__field(unsigned, flags)448		__field(unsigned long, caller_ip)449		__field(const void *, buf_ops)450	),451	TP_fast_assign(452		__entry->dev = bp->b_target->bt_dev;453		__entry->bno = xfs_buf_daddr(bp);454		__entry->nblks = bp->b_length;455		__entry->hold = atomic_read(&bp->b_hold);456		__entry->pincount = atomic_read(&bp->b_pin_count);457		__entry->lockval = bp->b_sema.count;458		__entry->flags = bp->b_flags;459		__entry->caller_ip = caller_ip;460		__entry->buf_ops = bp->b_ops;461	),462	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "463		  "lock %d flags %s bufops %pS caller %pS",464		  MAJOR(__entry->dev), MINOR(__entry->dev),465		  (unsigned long long)__entry->bno,466		  __entry->nblks,467		  __entry->hold,468		  __entry->pincount,469		  __entry->lockval,470		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),471		  __entry->buf_ops,472		  (void *)__entry->caller_ip)473)474 475#define DEFINE_BUF_EVENT(name) \476DEFINE_EVENT(xfs_buf_class, name, \477	TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \478	TP_ARGS(bp, caller_ip))479DEFINE_BUF_EVENT(xfs_buf_init);480DEFINE_BUF_EVENT(xfs_buf_free);481DEFINE_BUF_EVENT(xfs_buf_hold);482DEFINE_BUF_EVENT(xfs_buf_rele);483DEFINE_BUF_EVENT(xfs_buf_iodone);484DEFINE_BUF_EVENT(xfs_buf_submit);485DEFINE_BUF_EVENT(xfs_buf_lock);486DEFINE_BUF_EVENT(xfs_buf_lock_done);487DEFINE_BUF_EVENT(xfs_buf_trylock_fail);488DEFINE_BUF_EVENT(xfs_buf_trylock);489DEFINE_BUF_EVENT(xfs_buf_unlock);490DEFINE_BUF_EVENT(xfs_buf_iowait);491DEFINE_BUF_EVENT(xfs_buf_iowait_done);492DEFINE_BUF_EVENT(xfs_buf_delwri_queue);493DEFINE_BUF_EVENT(xfs_buf_delwri_queued);494DEFINE_BUF_EVENT(xfs_buf_delwri_split);495DEFINE_BUF_EVENT(xfs_buf_delwri_pushbuf);496DEFINE_BUF_EVENT(xfs_buf_get_uncached);497DEFINE_BUF_EVENT(xfs_buf_item_relse);498DEFINE_BUF_EVENT(xfs_buf_iodone_async);499DEFINE_BUF_EVENT(xfs_buf_error_relse);500DEFINE_BUF_EVENT(xfs_buf_drain_buftarg);501DEFINE_BUF_EVENT(xfs_trans_read_buf_shut);502 503/* not really buffer traces, but the buf provides useful information */504DEFINE_BUF_EVENT(xfs_btree_corrupt);505DEFINE_BUF_EVENT(xfs_reset_dqcounts);506 507/* pass flags explicitly */508DECLARE_EVENT_CLASS(xfs_buf_flags_class,509	TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip),510	TP_ARGS(bp, flags, caller_ip),511	TP_STRUCT__entry(512		__field(dev_t, dev)513		__field(xfs_daddr_t, bno)514		__field(unsigned int, length)515		__field(int, hold)516		__field(int, pincount)517		__field(unsigned, lockval)518		__field(unsigned, flags)519		__field(unsigned long, caller_ip)520	),521	TP_fast_assign(522		__entry->dev = bp->b_target->bt_dev;523		__entry->bno = xfs_buf_daddr(bp);524		__entry->length = bp->b_length;525		__entry->flags = flags;526		__entry->hold = atomic_read(&bp->b_hold);527		__entry->pincount = atomic_read(&bp->b_pin_count);528		__entry->lockval = bp->b_sema.count;529		__entry->caller_ip = caller_ip;530	),531	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "532		  "lock %d flags %s caller %pS",533		  MAJOR(__entry->dev), MINOR(__entry->dev),534		  (unsigned long long)__entry->bno,535		  __entry->length,536		  __entry->hold,537		  __entry->pincount,538		  __entry->lockval,539		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),540		  (void *)__entry->caller_ip)541)542 543#define DEFINE_BUF_FLAGS_EVENT(name) \544DEFINE_EVENT(xfs_buf_flags_class, name, \545	TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \546	TP_ARGS(bp, flags, caller_ip))547DEFINE_BUF_FLAGS_EVENT(xfs_buf_find);548DEFINE_BUF_FLAGS_EVENT(xfs_buf_get);549DEFINE_BUF_FLAGS_EVENT(xfs_buf_read);550 551TRACE_EVENT(xfs_buf_ioerror,552	TP_PROTO(struct xfs_buf *bp, int error, xfs_failaddr_t caller_ip),553	TP_ARGS(bp, error, caller_ip),554	TP_STRUCT__entry(555		__field(dev_t, dev)556		__field(xfs_daddr_t, bno)557		__field(unsigned int, length)558		__field(unsigned, flags)559		__field(int, hold)560		__field(int, pincount)561		__field(unsigned, lockval)562		__field(int, error)563		__field(xfs_failaddr_t, caller_ip)564	),565	TP_fast_assign(566		__entry->dev = bp->b_target->bt_dev;567		__entry->bno = xfs_buf_daddr(bp);568		__entry->length = bp->b_length;569		__entry->hold = atomic_read(&bp->b_hold);570		__entry->pincount = atomic_read(&bp->b_pin_count);571		__entry->lockval = bp->b_sema.count;572		__entry->error = error;573		__entry->flags = bp->b_flags;574		__entry->caller_ip = caller_ip;575	),576	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "577		  "lock %d error %d flags %s caller %pS",578		  MAJOR(__entry->dev), MINOR(__entry->dev),579		  (unsigned long long)__entry->bno,580		  __entry->length,581		  __entry->hold,582		  __entry->pincount,583		  __entry->lockval,584		  __entry->error,585		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS),586		  (void *)__entry->caller_ip)587);588 589DECLARE_EVENT_CLASS(xfs_buf_item_class,590	TP_PROTO(struct xfs_buf_log_item *bip),591	TP_ARGS(bip),592	TP_STRUCT__entry(593		__field(dev_t, dev)594		__field(xfs_daddr_t, buf_bno)595		__field(unsigned int, buf_len)596		__field(int, buf_hold)597		__field(int, buf_pincount)598		__field(int, buf_lockval)599		__field(unsigned, buf_flags)600		__field(unsigned, bli_recur)601		__field(int, bli_refcount)602		__field(unsigned, bli_flags)603		__field(unsigned long, li_flags)604	),605	TP_fast_assign(606		__entry->dev = bip->bli_buf->b_target->bt_dev;607		__entry->bli_flags = bip->bli_flags;608		__entry->bli_recur = bip->bli_recur;609		__entry->bli_refcount = atomic_read(&bip->bli_refcount);610		__entry->buf_bno = xfs_buf_daddr(bip->bli_buf);611		__entry->buf_len = bip->bli_buf->b_length;612		__entry->buf_flags = bip->bli_buf->b_flags;613		__entry->buf_hold = atomic_read(&bip->bli_buf->b_hold);614		__entry->buf_pincount = atomic_read(&bip->bli_buf->b_pin_count);615		__entry->buf_lockval = bip->bli_buf->b_sema.count;616		__entry->li_flags = bip->bli_item.li_flags;617	),618	TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d "619		  "lock %d flags %s recur %d refcount %d bliflags %s "620		  "liflags %s",621		  MAJOR(__entry->dev), MINOR(__entry->dev),622		  (unsigned long long)__entry->buf_bno,623		  __entry->buf_len,624		  __entry->buf_hold,625		  __entry->buf_pincount,626		  __entry->buf_lockval,627		  __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS),628		  __entry->bli_recur,629		  __entry->bli_refcount,630		  __print_flags(__entry->bli_flags, "|", XFS_BLI_FLAGS),631		  __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS))632)633 634#define DEFINE_BUF_ITEM_EVENT(name) \635DEFINE_EVENT(xfs_buf_item_class, name, \636	TP_PROTO(struct xfs_buf_log_item *bip), \637	TP_ARGS(bip))638DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size);639DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered);640DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale);641DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format);642DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale);643DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered);644DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin);645DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin);646DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale);647DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release);648DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed);649DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push);650DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf);651DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur);652DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb);653DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur);654DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf);655DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur);656DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf);657DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse);658DEFINE_BUF_ITEM_EVENT(xfs_trans_bdetach);659DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin);660DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold);661DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release);662DEFINE_BUF_ITEM_EVENT(xfs_trans_binval);663 664DECLARE_EVENT_CLASS(xfs_filestream_class,665	TP_PROTO(struct xfs_perag *pag, xfs_ino_t ino),666	TP_ARGS(pag, ino),667	TP_STRUCT__entry(668		__field(dev_t, dev)669		__field(xfs_ino_t, ino)670		__field(xfs_agnumber_t, agno)671		__field(int, streams)672	),673	TP_fast_assign(674		__entry->dev = pag->pag_mount->m_super->s_dev;675		__entry->ino = ino;676		__entry->agno = pag->pag_agno;677		__entry->streams = atomic_read(&pag->pagf_fstrms);678	),679	TP_printk("dev %d:%d ino 0x%llx agno 0x%x streams %d",680		  MAJOR(__entry->dev), MINOR(__entry->dev),681		  __entry->ino,682		  __entry->agno,683		  __entry->streams)684)685#define DEFINE_FILESTREAM_EVENT(name) \686DEFINE_EVENT(xfs_filestream_class, name, \687	TP_PROTO(struct xfs_perag *pag, xfs_ino_t ino), \688	TP_ARGS(pag, ino))689DEFINE_FILESTREAM_EVENT(xfs_filestream_free);690DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup);691DEFINE_FILESTREAM_EVENT(xfs_filestream_scan);692 693TRACE_EVENT(xfs_filestream_pick,694	TP_PROTO(struct xfs_perag *pag, xfs_ino_t ino),695	TP_ARGS(pag, ino),696	TP_STRUCT__entry(697		__field(dev_t, dev)698		__field(xfs_ino_t, ino)699		__field(xfs_agnumber_t, agno)700		__field(int, streams)701		__field(xfs_extlen_t, free)702	),703	TP_fast_assign(704		__entry->dev = pag->pag_mount->m_super->s_dev;705		__entry->ino = ino;706		__entry->agno = pag->pag_agno;707		__entry->streams = atomic_read(&pag->pagf_fstrms);708		__entry->free = pag->pagf_freeblks;709	),710	TP_printk("dev %d:%d ino 0x%llx agno 0x%x streams %d free %d",711		  MAJOR(__entry->dev), MINOR(__entry->dev),712		  __entry->ino,713		  __entry->agno,714		  __entry->streams,715		  __entry->free)716);717 718DECLARE_EVENT_CLASS(xfs_lock_class,719	TP_PROTO(struct xfs_inode *ip, unsigned lock_flags,720		 unsigned long caller_ip),721	TP_ARGS(ip,  lock_flags, caller_ip),722	TP_STRUCT__entry(723		__field(dev_t, dev)724		__field(xfs_ino_t, ino)725		__field(int, lock_flags)726		__field(unsigned long, caller_ip)727	),728	TP_fast_assign(729		__entry->dev = VFS_I(ip)->i_sb->s_dev;730		__entry->ino = ip->i_ino;731		__entry->lock_flags = lock_flags;732		__entry->caller_ip = caller_ip;733	),734	TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS",735		  MAJOR(__entry->dev), MINOR(__entry->dev),736		  __entry->ino,737		  __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS),738		  (void *)__entry->caller_ip)739)740 741#define DEFINE_LOCK_EVENT(name) \742DEFINE_EVENT(xfs_lock_class, name, \743	TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \744		 unsigned long caller_ip), \745	TP_ARGS(ip,  lock_flags, caller_ip))746DEFINE_LOCK_EVENT(xfs_ilock);747DEFINE_LOCK_EVENT(xfs_ilock_nowait);748DEFINE_LOCK_EVENT(xfs_ilock_demote);749DEFINE_LOCK_EVENT(xfs_iunlock);750 751DECLARE_EVENT_CLASS(xfs_inode_class,752	TP_PROTO(struct xfs_inode *ip),753	TP_ARGS(ip),754	TP_STRUCT__entry(755		__field(dev_t, dev)756		__field(xfs_ino_t, ino)757		__field(unsigned long, iflags)758	),759	TP_fast_assign(760		__entry->dev = VFS_I(ip)->i_sb->s_dev;761		__entry->ino = ip->i_ino;762		__entry->iflags = ip->i_flags;763	),764	TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx",765		  MAJOR(__entry->dev), MINOR(__entry->dev),766		  __entry->ino,767		  __entry->iflags)768)769 770#define DEFINE_INODE_EVENT(name) \771DEFINE_EVENT(xfs_inode_class, name, \772	TP_PROTO(struct xfs_inode *ip), \773	TP_ARGS(ip))774DEFINE_INODE_EVENT(xfs_iget_skip);775DEFINE_INODE_EVENT(xfs_iget_recycle);776DEFINE_INODE_EVENT(xfs_iget_recycle_fail);777DEFINE_INODE_EVENT(xfs_iget_hit);778DEFINE_INODE_EVENT(xfs_iget_miss);779 780DEFINE_INODE_EVENT(xfs_getattr);781DEFINE_INODE_EVENT(xfs_setattr);782DEFINE_INODE_EVENT(xfs_readlink);783DEFINE_INODE_EVENT(xfs_inactive_symlink);784DEFINE_INODE_EVENT(xfs_alloc_file_space);785DEFINE_INODE_EVENT(xfs_free_file_space);786DEFINE_INODE_EVENT(xfs_zero_file_space);787DEFINE_INODE_EVENT(xfs_collapse_file_space);788DEFINE_INODE_EVENT(xfs_insert_file_space);789DEFINE_INODE_EVENT(xfs_readdir);790#ifdef CONFIG_XFS_POSIX_ACL791DEFINE_INODE_EVENT(xfs_get_acl);792#endif793DEFINE_INODE_EVENT(xfs_vm_bmap);794DEFINE_INODE_EVENT(xfs_file_ioctl);795DEFINE_INODE_EVENT(xfs_file_compat_ioctl);796DEFINE_INODE_EVENT(xfs_ioctl_setattr);797DEFINE_INODE_EVENT(xfs_dir_fsync);798DEFINE_INODE_EVENT(xfs_file_fsync);799DEFINE_INODE_EVENT(xfs_destroy_inode);800DEFINE_INODE_EVENT(xfs_update_time);801 802DEFINE_INODE_EVENT(xfs_dquot_dqalloc);803DEFINE_INODE_EVENT(xfs_dquot_dqdetach);804 805DEFINE_INODE_EVENT(xfs_inode_set_eofblocks_tag);806DEFINE_INODE_EVENT(xfs_inode_clear_eofblocks_tag);807DEFINE_INODE_EVENT(xfs_inode_free_eofblocks_invalid);808DEFINE_INODE_EVENT(xfs_inode_set_cowblocks_tag);809DEFINE_INODE_EVENT(xfs_inode_clear_cowblocks_tag);810DEFINE_INODE_EVENT(xfs_inode_free_cowblocks_invalid);811DEFINE_INODE_EVENT(xfs_inode_set_reclaimable);812DEFINE_INODE_EVENT(xfs_inode_reclaiming);813DEFINE_INODE_EVENT(xfs_inode_set_need_inactive);814DEFINE_INODE_EVENT(xfs_inode_inactivating);815 816/*817 * ftrace's __print_symbolic requires that all enum values be wrapped in the818 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace819 * ring buffer.  Somehow this was only worth mentioning in the ftrace sample820 * code.821 */822TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);823TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);824 825TRACE_EVENT(xfs_filemap_fault,826	TP_PROTO(struct xfs_inode *ip, unsigned int order, bool write_fault),827	TP_ARGS(ip, order, write_fault),828	TP_STRUCT__entry(829		__field(dev_t, dev)830		__field(xfs_ino_t, ino)831		__field(unsigned int, order)832		__field(bool, write_fault)833	),834	TP_fast_assign(835		__entry->dev = VFS_I(ip)->i_sb->s_dev;836		__entry->ino = ip->i_ino;837		__entry->order = order;838		__entry->write_fault = write_fault;839	),840	TP_printk("dev %d:%d ino 0x%llx order %u write_fault %d",841		  MAJOR(__entry->dev), MINOR(__entry->dev),842		  __entry->ino,843		  __entry->order,844		  __entry->write_fault)845)846 847DECLARE_EVENT_CLASS(xfs_iref_class,848	TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip),849	TP_ARGS(ip, caller_ip),850	TP_STRUCT__entry(851		__field(dev_t, dev)852		__field(xfs_ino_t, ino)853		__field(int, count)854		__field(int, pincount)855		__field(unsigned long, caller_ip)856	),857	TP_fast_assign(858		__entry->dev = VFS_I(ip)->i_sb->s_dev;859		__entry->ino = ip->i_ino;860		__entry->count = atomic_read(&VFS_I(ip)->i_count);861		__entry->pincount = atomic_read(&ip->i_pincount);862		__entry->caller_ip = caller_ip;863	),864	TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pS",865		  MAJOR(__entry->dev), MINOR(__entry->dev),866		  __entry->ino,867		  __entry->count,868		  __entry->pincount,869		  (char *)__entry->caller_ip)870)871 872TRACE_EVENT(xfs_iomap_prealloc_size,873	TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t blocks, int shift,874		 unsigned int writeio_blocks),875	TP_ARGS(ip, blocks, shift, writeio_blocks),876	TP_STRUCT__entry(877		__field(dev_t, dev)878		__field(xfs_ino_t, ino)879		__field(xfs_fsblock_t, blocks)880		__field(int, shift)881		__field(unsigned int, writeio_blocks)882	),883	TP_fast_assign(884		__entry->dev = VFS_I(ip)->i_sb->s_dev;885		__entry->ino = ip->i_ino;886		__entry->blocks = blocks;887		__entry->shift = shift;888		__entry->writeio_blocks = writeio_blocks;889	),890	TP_printk("dev %d:%d ino 0x%llx prealloc blocks %llu shift %d "891		  "m_allocsize_blocks %u",892		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino,893		  __entry->blocks, __entry->shift, __entry->writeio_blocks)894)895 896TRACE_EVENT(xfs_irec_merge_pre,897	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,898		 uint16_t holemask, xfs_agino_t nagino, uint16_t nholemask),899	TP_ARGS(mp, agno, agino, holemask, nagino, nholemask),900	TP_STRUCT__entry(901		__field(dev_t, dev)902		__field(xfs_agnumber_t, agno)903		__field(xfs_agino_t, agino)904		__field(uint16_t, holemask)905		__field(xfs_agino_t, nagino)906		__field(uint16_t, nholemask)907	),908	TP_fast_assign(909		__entry->dev = mp->m_super->s_dev;910		__entry->agno = agno;911		__entry->agino = agino;912		__entry->holemask = holemask;913		__entry->nagino = nagino;914		__entry->nholemask = holemask;915	),916	TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x new_agino 0x%x new_holemask 0x%x",917		  MAJOR(__entry->dev), MINOR(__entry->dev),918		  __entry->agno,919		  __entry->agino,920		  __entry->holemask,921		  __entry->nagino,922		  __entry->nholemask)923)924 925TRACE_EVENT(xfs_irec_merge_post,926	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,927		 uint16_t holemask),928	TP_ARGS(mp, agno, agino, holemask),929	TP_STRUCT__entry(930		__field(dev_t, dev)931		__field(xfs_agnumber_t, agno)932		__field(xfs_agino_t, agino)933		__field(uint16_t, holemask)934	),935	TP_fast_assign(936		__entry->dev = mp->m_super->s_dev;937		__entry->agno = agno;938		__entry->agino = agino;939		__entry->holemask = holemask;940	),941	TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x",942		  MAJOR(__entry->dev),943		  MINOR(__entry->dev),944		  __entry->agno,945		  __entry->agino,946		  __entry->holemask)947)948 949#define DEFINE_IREF_EVENT(name) \950DEFINE_EVENT(xfs_iref_class, name, \951	TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), \952	TP_ARGS(ip, caller_ip))953DEFINE_IREF_EVENT(xfs_irele);954DEFINE_IREF_EVENT(xfs_inode_pin);955DEFINE_IREF_EVENT(xfs_inode_unpin);956DEFINE_IREF_EVENT(xfs_inode_unpin_nowait);957 958DECLARE_EVENT_CLASS(xfs_namespace_class,959	TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name),960	TP_ARGS(dp, name),961	TP_STRUCT__entry(962		__field(dev_t, dev)963		__field(xfs_ino_t, dp_ino)964		__field(int, namelen)965		__dynamic_array(char, name, name->len)966	),967	TP_fast_assign(968		__entry->dev = VFS_I(dp)->i_sb->s_dev;969		__entry->dp_ino = dp->i_ino;970		__entry->namelen = name->len;971		memcpy(__get_str(name), name->name, name->len);972	),973	TP_printk("dev %d:%d dp ino 0x%llx name %.*s",974		  MAJOR(__entry->dev), MINOR(__entry->dev),975		  __entry->dp_ino,976		  __entry->namelen,977		  __get_str(name))978)979 980#define DEFINE_NAMESPACE_EVENT(name) \981DEFINE_EVENT(xfs_namespace_class, name, \982	TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name), \983	TP_ARGS(dp, name))984DEFINE_NAMESPACE_EVENT(xfs_remove);985DEFINE_NAMESPACE_EVENT(xfs_link);986DEFINE_NAMESPACE_EVENT(xfs_lookup);987DEFINE_NAMESPACE_EVENT(xfs_create);988DEFINE_NAMESPACE_EVENT(xfs_symlink);989 990TRACE_EVENT(xfs_rename,991	TP_PROTO(struct xfs_inode *src_dp, struct xfs_inode *target_dp,992		 struct xfs_name *src_name, struct xfs_name *target_name),993	TP_ARGS(src_dp, target_dp, src_name, target_name),994	TP_STRUCT__entry(995		__field(dev_t, dev)996		__field(xfs_ino_t, src_dp_ino)997		__field(xfs_ino_t, target_dp_ino)998		__field(int, src_namelen)999		__field(int, target_namelen)1000		__dynamic_array(char, src_name, src_name->len)1001		__dynamic_array(char, target_name, target_name->len)1002	),1003	TP_fast_assign(1004		__entry->dev = VFS_I(src_dp)->i_sb->s_dev;1005		__entry->src_dp_ino = src_dp->i_ino;1006		__entry->target_dp_ino = target_dp->i_ino;1007		__entry->src_namelen = src_name->len;1008		__entry->target_namelen = target_name->len;1009		memcpy(__get_str(src_name), src_name->name, src_name->len);1010		memcpy(__get_str(target_name), target_name->name,1011			target_name->len);1012	),1013	TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx"1014		  " src name %.*s target name %.*s",1015		  MAJOR(__entry->dev), MINOR(__entry->dev),1016		  __entry->src_dp_ino,1017		  __entry->target_dp_ino,1018		  __entry->src_namelen,1019		  __get_str(src_name),1020		  __entry->target_namelen,1021		  __get_str(target_name))1022)1023 1024DECLARE_EVENT_CLASS(xfs_dquot_class,1025	TP_PROTO(struct xfs_dquot *dqp),1026	TP_ARGS(dqp),1027	TP_STRUCT__entry(1028		__field(dev_t, dev)1029		__field(u32, id)1030		__field(xfs_dqtype_t, type)1031		__field(unsigned, flags)1032		__field(unsigned, nrefs)1033		__field(unsigned long long, res_bcount)1034		__field(unsigned long long, res_rtbcount)1035		__field(unsigned long long, res_icount)1036 1037		__field(unsigned long long, bcount)1038		__field(unsigned long long, rtbcount)1039		__field(unsigned long long, icount)1040 1041		__field(unsigned long long, blk_hardlimit)1042		__field(unsigned long long, blk_softlimit)1043		__field(unsigned long long, rtb_hardlimit)1044		__field(unsigned long long, rtb_softlimit)1045		__field(unsigned long long, ino_hardlimit)1046		__field(unsigned long long, ino_softlimit)1047	),1048	TP_fast_assign(1049		__entry->dev = dqp->q_mount->m_super->s_dev;1050		__entry->id = dqp->q_id;1051		__entry->type = dqp->q_type;1052		__entry->flags = dqp->q_flags;1053		__entry->nrefs = dqp->q_nrefs;1054 1055		__entry->res_bcount = dqp->q_blk.reserved;1056		__entry->res_rtbcount = dqp->q_rtb.reserved;1057		__entry->res_icount = dqp->q_ino.reserved;1058 1059		__entry->bcount = dqp->q_blk.count;1060		__entry->rtbcount = dqp->q_rtb.count;1061		__entry->icount = dqp->q_ino.count;1062 1063		__entry->blk_hardlimit = dqp->q_blk.hardlimit;1064		__entry->blk_softlimit = dqp->q_blk.softlimit;1065		__entry->rtb_hardlimit = dqp->q_rtb.hardlimit;1066		__entry->rtb_softlimit = dqp->q_rtb.softlimit;1067		__entry->ino_hardlimit = dqp->q_ino.hardlimit;1068		__entry->ino_softlimit = dqp->q_ino.softlimit;1069	),1070	TP_printk("dev %d:%d id 0x%x type %s flags %s nrefs %u "1071		  "res_bc 0x%llx res_rtbc 0x%llx res_ic 0x%llx "1072		  "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx "1073		  "rtbcnt 0x%llx rtbhardlimit 0x%llx rtbsoftlimit 0x%llx "1074		  "icnt 0x%llx ihardlimit 0x%llx isoftlimit 0x%llx]",1075		  MAJOR(__entry->dev), MINOR(__entry->dev),1076		  __entry->id,1077		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),1078		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),1079		  __entry->nrefs,1080		  __entry->res_bcount,1081		  __entry->res_rtbcount,1082		  __entry->res_icount,1083		  __entry->bcount,1084		  __entry->blk_hardlimit,1085		  __entry->blk_softlimit,1086		  __entry->rtbcount,1087		  __entry->rtb_hardlimit,1088		  __entry->rtb_softlimit,1089		  __entry->icount,1090		  __entry->ino_hardlimit,1091		  __entry->ino_softlimit)1092)1093 1094#define DEFINE_DQUOT_EVENT(name) \1095DEFINE_EVENT(xfs_dquot_class, name, \1096	TP_PROTO(struct xfs_dquot *dqp), \1097	TP_ARGS(dqp))1098DEFINE_DQUOT_EVENT(xfs_dqadjust);1099DEFINE_DQUOT_EVENT(xfs_dqreclaim_want);1100DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty);1101DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy);1102DEFINE_DQUOT_EVENT(xfs_dqreclaim_done);1103DEFINE_DQUOT_EVENT(xfs_dqattach_found);1104DEFINE_DQUOT_EVENT(xfs_dqattach_get);1105DEFINE_DQUOT_EVENT(xfs_dqalloc);1106DEFINE_DQUOT_EVENT(xfs_dqtobp_read);1107DEFINE_DQUOT_EVENT(xfs_dqread);1108DEFINE_DQUOT_EVENT(xfs_dqread_fail);1109DEFINE_DQUOT_EVENT(xfs_dqget_hit);1110DEFINE_DQUOT_EVENT(xfs_dqget_miss);1111DEFINE_DQUOT_EVENT(xfs_dqget_freeing);1112DEFINE_DQUOT_EVENT(xfs_dqget_dup);1113DEFINE_DQUOT_EVENT(xfs_dqput);1114DEFINE_DQUOT_EVENT(xfs_dqput_free);1115DEFINE_DQUOT_EVENT(xfs_dqrele);1116DEFINE_DQUOT_EVENT(xfs_dqflush);1117DEFINE_DQUOT_EVENT(xfs_dqflush_force);1118DEFINE_DQUOT_EVENT(xfs_dqflush_done);1119DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_before);1120DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_after);1121 1122TRACE_EVENT(xfs_trans_mod_dquot,1123	TP_PROTO(struct xfs_trans *tp, struct xfs_dquot *dqp,1124		 unsigned int field, int64_t delta),1125	TP_ARGS(tp, dqp, field, delta),1126	TP_STRUCT__entry(1127		__field(dev_t, dev)1128		__field(xfs_dqtype_t, type)1129		__field(unsigned int, flags)1130		__field(unsigned int, dqid)1131		__field(unsigned int, field)1132		__field(int64_t, delta)1133	),1134	TP_fast_assign(1135		__entry->dev = tp->t_mountp->m_super->s_dev;1136		__entry->type = dqp->q_type;1137		__entry->flags = dqp->q_flags;1138		__entry->dqid = dqp->q_id;1139		__entry->field = field;1140		__entry->delta = delta;1141	),1142	TP_printk("dev %d:%d dquot id 0x%x type %s flags %s field %s delta %lld",1143		  MAJOR(__entry->dev), MINOR(__entry->dev),1144		  __entry->dqid,1145		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),1146		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),1147		  __print_flags(__entry->field, "|", XFS_QMOPT_FLAGS),1148		  __entry->delta)1149);1150 1151DECLARE_EVENT_CLASS(xfs_dqtrx_class,1152	TP_PROTO(struct xfs_dqtrx *qtrx),1153	TP_ARGS(qtrx),1154	TP_STRUCT__entry(1155		__field(dev_t, dev)1156		__field(xfs_dqtype_t, type)1157		__field(unsigned int, flags)1158		__field(u32, dqid)1159 1160		__field(uint64_t, blk_res)1161		__field(int64_t,  bcount_delta)1162		__field(int64_t,  delbcnt_delta)1163 1164		__field(uint64_t, rtblk_res)1165		__field(uint64_t, rtblk_res_used)1166		__field(int64_t,  rtbcount_delta)1167		__field(int64_t,  delrtb_delta)1168 1169		__field(uint64_t, ino_res)1170		__field(uint64_t, ino_res_used)1171		__field(int64_t,  icount_delta)1172	),1173	TP_fast_assign(1174		__entry->dev = qtrx->qt_dquot->q_mount->m_super->s_dev;1175		__entry->type = qtrx->qt_dquot->q_type;1176		__entry->flags = qtrx->qt_dquot->q_flags;1177		__entry->dqid = qtrx->qt_dquot->q_id;1178 1179		__entry->blk_res = qtrx->qt_blk_res;1180		__entry->bcount_delta = qtrx->qt_bcount_delta;1181		__entry->delbcnt_delta = qtrx->qt_delbcnt_delta;1182 1183		__entry->rtblk_res = qtrx->qt_rtblk_res;1184		__entry->rtblk_res_used = qtrx->qt_rtblk_res_used;1185		__entry->rtbcount_delta = qtrx->qt_rtbcount_delta;1186		__entry->delrtb_delta = qtrx->qt_delrtb_delta;1187 1188		__entry->ino_res = qtrx->qt_ino_res;1189		__entry->ino_res_used = qtrx->qt_ino_res_used;1190		__entry->icount_delta = qtrx->qt_icount_delta;1191	),1192	TP_printk("dev %d:%d dquot id 0x%x type %s flags %s "1193		  "blk_res %llu bcount_delta %lld delbcnt_delta %lld "1194		  "rtblk_res %llu rtblk_res_used %llu rtbcount_delta %lld delrtb_delta %lld "1195		  "ino_res %llu ino_res_used %llu icount_delta %lld",1196		MAJOR(__entry->dev), MINOR(__entry->dev),1197		__entry->dqid,1198		  __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),1199		  __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS),1200 1201		__entry->blk_res,1202		__entry->bcount_delta,1203		__entry->delbcnt_delta,1204 1205		__entry->rtblk_res,1206		__entry->rtblk_res_used,1207		__entry->rtbcount_delta,1208		__entry->delrtb_delta,1209 1210		__entry->ino_res,1211		__entry->ino_res_used,1212		__entry->icount_delta)1213)1214 1215#define DEFINE_DQTRX_EVENT(name) \1216DEFINE_EVENT(xfs_dqtrx_class, name, \1217	TP_PROTO(struct xfs_dqtrx *qtrx), \1218	TP_ARGS(qtrx))1219DEFINE_DQTRX_EVENT(xfs_trans_apply_dquot_deltas);1220DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_before);1221DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_after);1222 1223DECLARE_EVENT_CLASS(xfs_loggrant_class,1224	TP_PROTO(struct xlog *log, struct xlog_ticket *tic),1225	TP_ARGS(log, tic),1226	TP_STRUCT__entry(1227		__field(dev_t, dev)1228		__field(unsigned long, tic)1229		__field(char, ocnt)1230		__field(char, cnt)1231		__field(int, curr_res)1232		__field(int, unit_res)1233		__field(unsigned int, flags)1234		__field(int, reserveq)1235		__field(int, writeq)1236		__field(uint64_t, grant_reserve_bytes)1237		__field(uint64_t, grant_write_bytes)1238		__field(uint64_t, tail_space)1239		__field(int, curr_cycle)1240		__field(int, curr_block)1241		__field(xfs_lsn_t, tail_lsn)1242	),1243	TP_fast_assign(1244		__entry->dev = log->l_mp->m_super->s_dev;1245		__entry->tic = (unsigned long)tic;1246		__entry->ocnt = tic->t_ocnt;1247		__entry->cnt = tic->t_cnt;1248		__entry->curr_res = tic->t_curr_res;1249		__entry->unit_res = tic->t_unit_res;1250		__entry->flags = tic->t_flags;1251		__entry->reserveq = list_empty(&log->l_reserve_head.waiters);1252		__entry->writeq = list_empty(&log->l_write_head.waiters);1253		__entry->tail_space = READ_ONCE(log->l_tail_space);1254		__entry->grant_reserve_bytes = __entry->tail_space +1255			atomic64_read(&log->l_reserve_head.grant);1256		__entry->grant_write_bytes = __entry->tail_space +1257			atomic64_read(&log->l_write_head.grant);1258		__entry->curr_cycle = log->l_curr_cycle;1259		__entry->curr_block = log->l_curr_block;1260		__entry->tail_lsn = atomic64_read(&log->l_tail_lsn);1261	),1262	TP_printk("dev %d:%d tic 0x%lx t_ocnt %u t_cnt %u t_curr_res %u "1263		  "t_unit_res %u t_flags %s reserveq %s writeq %s "1264		  "tail space %llu grant_reserve_bytes %llu "1265		  "grant_write_bytes %llu curr_cycle %d curr_block %d "1266		  "tail_cycle %d tail_block %d",1267		  MAJOR(__entry->dev), MINOR(__entry->dev),1268		  __entry->tic,1269		  __entry->ocnt,1270		  __entry->cnt,1271		  __entry->curr_res,1272		  __entry->unit_res,1273		  __print_flags(__entry->flags, "|", XLOG_TIC_FLAGS),1274		  __entry->reserveq ? "empty" : "active",1275		  __entry->writeq ? "empty" : "active",1276		  __entry->tail_space,1277		  __entry->grant_reserve_bytes,1278		  __entry->grant_write_bytes,1279		  __entry->curr_cycle,1280		  __entry->curr_block,1281		  CYCLE_LSN(__entry->tail_lsn),1282		  BLOCK_LSN(__entry->tail_lsn)1283	)1284)1285 1286#define DEFINE_LOGGRANT_EVENT(name) \1287DEFINE_EVENT(xfs_loggrant_class, name, \1288	TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \1289	TP_ARGS(log, tic))1290DEFINE_LOGGRANT_EVENT(xfs_log_umount_write);1291DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep);1292DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake);1293DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up);1294DEFINE_LOGGRANT_EVENT(xfs_log_reserve);1295DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit);1296DEFINE_LOGGRANT_EVENT(xfs_log_regrant);1297DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit);1298DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant);1299DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit);1300DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub);1301DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant);1302DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub);1303DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit);1304DEFINE_LOGGRANT_EVENT(xfs_log_cil_wait);1305DEFINE_LOGGRANT_EVENT(xfs_log_cil_return);1306 1307DECLARE_EVENT_CLASS(xfs_log_item_class,1308	TP_PROTO(struct xfs_log_item *lip),1309	TP_ARGS(lip),1310	TP_STRUCT__entry(1311		__field(dev_t, dev)1312		__field(void *, lip)1313		__field(uint, type)1314		__field(unsigned long, flags)1315		__field(xfs_lsn_t, lsn)1316	),1317	TP_fast_assign(1318		__entry->dev = lip->li_log->l_mp->m_super->s_dev;1319		__entry->lip = lip;1320		__entry->type = lip->li_type;1321		__entry->flags = lip->li_flags;1322		__entry->lsn = lip->li_lsn;1323	),1324	TP_printk("dev %d:%d lip %p lsn %d/%d type %s flags %s",1325		  MAJOR(__entry->dev), MINOR(__entry->dev),1326		  __entry->lip,1327		  CYCLE_LSN(__entry->lsn), BLOCK_LSN(__entry->lsn),1328		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),1329		  __print_flags(__entry->flags, "|", XFS_LI_FLAGS))1330)1331 1332TRACE_EVENT(xfs_log_force,1333	TP_PROTO(struct xfs_mount *mp, xfs_lsn_t lsn, unsigned long caller_ip),1334	TP_ARGS(mp, lsn, caller_ip),1335	TP_STRUCT__entry(1336		__field(dev_t, dev)1337		__field(xfs_lsn_t, lsn)1338		__field(unsigned long, caller_ip)1339	),1340	TP_fast_assign(1341		__entry->dev = mp->m_super->s_dev;1342		__entry->lsn = lsn;1343		__entry->caller_ip = caller_ip;1344	),1345	TP_printk("dev %d:%d lsn 0x%llx caller %pS",1346		  MAJOR(__entry->dev), MINOR(__entry->dev),1347		  __entry->lsn, (void *)__entry->caller_ip)1348)1349 1350#define DEFINE_LOG_ITEM_EVENT(name) \1351DEFINE_EVENT(xfs_log_item_class, name, \1352	TP_PROTO(struct xfs_log_item *lip), \1353	TP_ARGS(lip))1354DEFINE_LOG_ITEM_EVENT(xfs_ail_push);1355DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned);1356DEFINE_LOG_ITEM_EVENT(xfs_ail_locked);1357DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing);1358DEFINE_LOG_ITEM_EVENT(xfs_cil_whiteout_mark);1359DEFINE_LOG_ITEM_EVENT(xfs_cil_whiteout_skip);1360DEFINE_LOG_ITEM_EVENT(xfs_cil_whiteout_unpin);1361 1362DECLARE_EVENT_CLASS(xfs_ail_class,1363	TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn),1364	TP_ARGS(lip, old_lsn, new_lsn),1365	TP_STRUCT__entry(1366		__field(dev_t, dev)1367		__field(void *, lip)1368		__field(uint, type)1369		__field(unsigned long, flags)1370		__field(xfs_lsn_t, old_lsn)1371		__field(xfs_lsn_t, new_lsn)1372	),1373	TP_fast_assign(1374		__entry->dev = lip->li_log->l_mp->m_super->s_dev;1375		__entry->lip = lip;1376		__entry->type = lip->li_type;1377		__entry->flags = lip->li_flags;1378		__entry->old_lsn = old_lsn;1379		__entry->new_lsn = new_lsn;1380	),1381	TP_printk("dev %d:%d lip %p old lsn %d/%d new lsn %d/%d type %s flags %s",1382		  MAJOR(__entry->dev), MINOR(__entry->dev),1383		  __entry->lip,1384		  CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn),1385		  CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn),1386		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),1387		  __print_flags(__entry->flags, "|", XFS_LI_FLAGS))1388)1389 1390#define DEFINE_AIL_EVENT(name) \1391DEFINE_EVENT(xfs_ail_class, name, \1392	TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), \1393	TP_ARGS(lip, old_lsn, new_lsn))1394DEFINE_AIL_EVENT(xfs_ail_insert);1395DEFINE_AIL_EVENT(xfs_ail_move);1396DEFINE_AIL_EVENT(xfs_ail_delete);1397 1398TRACE_EVENT(xfs_log_assign_tail_lsn,1399	TP_PROTO(struct xlog *log, xfs_lsn_t new_lsn),1400	TP_ARGS(log, new_lsn),1401	TP_STRUCT__entry(1402		__field(dev_t, dev)1403		__field(xfs_lsn_t, new_lsn)1404		__field(xfs_lsn_t, old_lsn)1405		__field(xfs_lsn_t, head_lsn)1406	),1407	TP_fast_assign(1408		__entry->dev = log->l_mp->m_super->s_dev;1409		__entry->new_lsn = new_lsn;1410		__entry->old_lsn = atomic64_read(&log->l_tail_lsn);1411		__entry->head_lsn = log->l_ailp->ail_head_lsn;1412	),1413	TP_printk("dev %d:%d new tail lsn %d/%d, old lsn %d/%d, head lsn %d/%d",1414		  MAJOR(__entry->dev), MINOR(__entry->dev),1415		  CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn),1416		  CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn),1417		  CYCLE_LSN(__entry->head_lsn), BLOCK_LSN(__entry->head_lsn))1418)1419 1420DECLARE_EVENT_CLASS(xfs_file_class,1421	TP_PROTO(struct kiocb *iocb, struct iov_iter *iter),1422	TP_ARGS(iocb, iter),1423	TP_STRUCT__entry(1424		__field(dev_t, dev)1425		__field(xfs_ino_t, ino)1426		__field(xfs_fsize_t, size)1427		__field(loff_t, offset)1428		__field(size_t, count)1429	),1430	TP_fast_assign(1431		__entry->dev = file_inode(iocb->ki_filp)->i_sb->s_dev;1432		__entry->ino = XFS_I(file_inode(iocb->ki_filp))->i_ino;1433		__entry->size = XFS_I(file_inode(iocb->ki_filp))->i_disk_size;1434		__entry->offset = iocb->ki_pos;1435		__entry->count = iov_iter_count(iter);1436	),1437	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx pos 0x%llx bytecount 0x%zx",1438		  MAJOR(__entry->dev), MINOR(__entry->dev),1439		  __entry->ino,1440		  __entry->size,1441		  __entry->offset,1442		  __entry->count)1443)1444 1445#define DEFINE_RW_EVENT(name)		\1446DEFINE_EVENT(xfs_file_class, name,	\1447	TP_PROTO(struct kiocb *iocb, struct iov_iter *iter),		\1448	TP_ARGS(iocb, iter))1449DEFINE_RW_EVENT(xfs_file_buffered_read);1450DEFINE_RW_EVENT(xfs_file_direct_read);1451DEFINE_RW_EVENT(xfs_file_dax_read);1452DEFINE_RW_EVENT(xfs_file_buffered_write);1453DEFINE_RW_EVENT(xfs_file_direct_write);1454DEFINE_RW_EVENT(xfs_file_dax_write);1455DEFINE_RW_EVENT(xfs_reflink_bounce_dio_write);1456 1457DECLARE_EVENT_CLASS(xfs_imap_class,1458	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,1459		 int whichfork, struct xfs_bmbt_irec *irec),1460	TP_ARGS(ip, offset, count, whichfork, irec),1461	TP_STRUCT__entry(1462		__field(dev_t, dev)1463		__field(xfs_ino_t, ino)1464		__field(loff_t, size)1465		__field(loff_t, offset)1466		__field(size_t, count)1467		__field(int, whichfork)1468		__field(xfs_fileoff_t, startoff)1469		__field(xfs_fsblock_t, startblock)1470		__field(xfs_filblks_t, blockcount)1471	),1472	TP_fast_assign(1473		__entry->dev = VFS_I(ip)->i_sb->s_dev;1474		__entry->ino = ip->i_ino;1475		__entry->size = ip->i_disk_size;1476		__entry->offset = offset;1477		__entry->count = count;1478		__entry->whichfork = whichfork;1479		__entry->startoff = irec ? irec->br_startoff : 0;1480		__entry->startblock = irec ? irec->br_startblock : 0;1481		__entry->blockcount = irec ? irec->br_blockcount : 0;1482	),1483	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx pos 0x%llx bytecount 0x%zx "1484		  "fork %s startoff 0x%llx startblock 0x%llx fsbcount 0x%llx",1485		  MAJOR(__entry->dev), MINOR(__entry->dev),1486		  __entry->ino,1487		  __entry->size,1488		  __entry->offset,1489		  __entry->count,1490		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),1491		  __entry->startoff,1492		  (int64_t)__entry->startblock,1493		  __entry->blockcount)1494)1495 1496#define DEFINE_IMAP_EVENT(name)	\1497DEFINE_EVENT(xfs_imap_class, name,	\1498	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,	\1499		 int whichfork, struct xfs_bmbt_irec *irec),		\1500	TP_ARGS(ip, offset, count, whichfork, irec))1501DEFINE_IMAP_EVENT(xfs_map_blocks_found);1502DEFINE_IMAP_EVENT(xfs_map_blocks_alloc);1503DEFINE_IMAP_EVENT(xfs_iomap_alloc);1504DEFINE_IMAP_EVENT(xfs_iomap_found);1505 1506DECLARE_EVENT_CLASS(xfs_simple_io_class,1507	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count),1508	TP_ARGS(ip, offset, count),1509	TP_STRUCT__entry(1510		__field(dev_t, dev)1511		__field(xfs_ino_t, ino)1512		__field(loff_t, isize)1513		__field(loff_t, disize)1514		__field(loff_t, offset)1515		__field(size_t, count)1516	),1517	TP_fast_assign(1518		__entry->dev = VFS_I(ip)->i_sb->s_dev;1519		__entry->ino = ip->i_ino;1520		__entry->isize = VFS_I(ip)->i_size;1521		__entry->disize = ip->i_disk_size;1522		__entry->offset = offset;1523		__entry->count = count;1524	),1525	TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx "1526		  "pos 0x%llx bytecount 0x%zx",1527		  MAJOR(__entry->dev), MINOR(__entry->dev),1528		  __entry->ino,1529		  __entry->isize,1530		  __entry->disize,1531		  __entry->offset,1532		  __entry->count)1533);1534 1535#define DEFINE_SIMPLE_IO_EVENT(name)	\1536DEFINE_EVENT(xfs_simple_io_class, name,	\1537	TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count),	\1538	TP_ARGS(ip, offset, count))1539DEFINE_SIMPLE_IO_EVENT(xfs_delalloc_enospc);1540DEFINE_SIMPLE_IO_EVENT(xfs_unwritten_convert);1541DEFINE_SIMPLE_IO_EVENT(xfs_setfilesize);1542DEFINE_SIMPLE_IO_EVENT(xfs_zero_eof);1543DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write);1544DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_unwritten);1545DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_append);1546DEFINE_SIMPLE_IO_EVENT(xfs_file_splice_read);1547 1548DECLARE_EVENT_CLASS(xfs_itrunc_class,1549	TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size),1550	TP_ARGS(ip, new_size),1551	TP_STRUCT__entry(1552		__field(dev_t, dev)1553		__field(xfs_ino_t, ino)1554		__field(xfs_fsize_t, size)1555		__field(xfs_fsize_t, new_size)1556	),1557	TP_fast_assign(1558		__entry->dev = VFS_I(ip)->i_sb->s_dev;1559		__entry->ino = ip->i_ino;1560		__entry->size = ip->i_disk_size;1561		__entry->new_size = new_size;1562	),1563	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx new_size 0x%llx",1564		  MAJOR(__entry->dev), MINOR(__entry->dev),1565		  __entry->ino,1566		  __entry->size,1567		  __entry->new_size)1568)1569 1570#define DEFINE_ITRUNC_EVENT(name) \1571DEFINE_EVENT(xfs_itrunc_class, name, \1572	TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \1573	TP_ARGS(ip, new_size))1574DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start);1575DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end);1576 1577TRACE_EVENT(xfs_pagecache_inval,1578	TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish),1579	TP_ARGS(ip, start, finish),1580	TP_STRUCT__entry(1581		__field(dev_t, dev)1582		__field(xfs_ino_t, ino)1583		__field(xfs_fsize_t, size)1584		__field(xfs_off_t, start)1585		__field(xfs_off_t, finish)1586	),1587	TP_fast_assign(1588		__entry->dev = VFS_I(ip)->i_sb->s_dev;1589		__entry->ino = ip->i_ino;1590		__entry->size = ip->i_disk_size;1591		__entry->start = start;1592		__entry->finish = finish;1593	),1594	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx start 0x%llx finish 0x%llx",1595		  MAJOR(__entry->dev), MINOR(__entry->dev),1596		  __entry->ino,1597		  __entry->size,1598		  __entry->start,1599		  __entry->finish)1600);1601 1602TRACE_EVENT(xfs_bunmap,1603	TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t fileoff, xfs_filblks_t len,1604		 int flags, unsigned long caller_ip),1605	TP_ARGS(ip, fileoff, len, flags, caller_ip),1606	TP_STRUCT__entry(1607		__field(dev_t, dev)1608		__field(xfs_ino_t, ino)1609		__field(xfs_fsize_t, size)1610		__field(xfs_fileoff_t, fileoff)1611		__field(xfs_filblks_t, len)1612		__field(unsigned long, caller_ip)1613		__field(int, flags)1614	),1615	TP_fast_assign(1616		__entry->dev = VFS_I(ip)->i_sb->s_dev;1617		__entry->ino = ip->i_ino;1618		__entry->size = ip->i_disk_size;1619		__entry->fileoff = fileoff;1620		__entry->len = len;1621		__entry->caller_ip = caller_ip;1622		__entry->flags = flags;1623	),1624	TP_printk("dev %d:%d ino 0x%llx disize 0x%llx fileoff 0x%llx fsbcount 0x%llx "1625		  "flags %s caller %pS",1626		  MAJOR(__entry->dev), MINOR(__entry->dev),1627		  __entry->ino,1628		  __entry->size,1629		  __entry->fileoff,1630		  __entry->len,1631		  __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS),1632		  (void *)__entry->caller_ip)1633 1634);1635 1636DECLARE_EVENT_CLASS(xfs_extent_busy_class,1637	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,1638		 xfs_agblock_t agbno, xfs_extlen_t len),1639	TP_ARGS(mp, agno, agbno, len),1640	TP_STRUCT__entry(1641		__field(dev_t, dev)1642		__field(xfs_agnumber_t, agno)1643		__field(xfs_agblock_t, agbno)1644		__field(xfs_extlen_t, len)1645	),1646	TP_fast_assign(1647		__entry->dev = mp->m_super->s_dev;1648		__entry->agno = agno;1649		__entry->agbno = agbno;1650		__entry->len = len;1651	),1652	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",1653		  MAJOR(__entry->dev), MINOR(__entry->dev),1654		  __entry->agno,1655		  __entry->agbno,1656		  __entry->len)1657);1658#define DEFINE_BUSY_EVENT(name) \1659DEFINE_EVENT(xfs_extent_busy_class, name, \1660	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \1661		 xfs_agblock_t agbno, xfs_extlen_t len), \1662	TP_ARGS(mp, agno, agbno, len))1663DEFINE_BUSY_EVENT(xfs_extent_busy);1664DEFINE_BUSY_EVENT(xfs_extent_busy_force);1665DEFINE_BUSY_EVENT(xfs_extent_busy_reuse);1666DEFINE_BUSY_EVENT(xfs_extent_busy_clear);1667 1668TRACE_EVENT(xfs_extent_busy_trim,1669	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,1670		 xfs_agblock_t agbno, xfs_extlen_t len,1671		 xfs_agblock_t tbno, xfs_extlen_t tlen),1672	TP_ARGS(mp, agno, agbno, len, tbno, tlen),1673	TP_STRUCT__entry(1674		__field(dev_t, dev)1675		__field(xfs_agnumber_t, agno)1676		__field(xfs_agblock_t, agbno)1677		__field(xfs_extlen_t, len)1678		__field(xfs_agblock_t, tbno)1679		__field(xfs_extlen_t, tlen)1680	),1681	TP_fast_assign(1682		__entry->dev = mp->m_super->s_dev;1683		__entry->agno = agno;1684		__entry->agbno = agbno;1685		__entry->len = len;1686		__entry->tbno = tbno;1687		__entry->tlen = tlen;1688	),1689	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x found_agbno 0x%x found_fsbcount 0x%x",1690		  MAJOR(__entry->dev), MINOR(__entry->dev),1691		  __entry->agno,1692		  __entry->agbno,1693		  __entry->len,1694		  __entry->tbno,1695		  __entry->tlen)1696);1697 1698DECLARE_EVENT_CLASS(xfs_agf_class,1699	TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags,1700		 unsigned long caller_ip),1701	TP_ARGS(mp, agf, flags, caller_ip),1702	TP_STRUCT__entry(1703		__field(dev_t, dev)1704		__field(xfs_agnumber_t, agno)1705		__field(int, flags)1706		__field(__u32, length)1707		__field(__u32, bno_root)1708		__field(__u32, cnt_root)1709		__field(__u32, bno_level)1710		__field(__u32, cnt_level)1711		__field(__u32, flfirst)1712		__field(__u32, fllast)1713		__field(__u32, flcount)1714		__field(__u32, freeblks)1715		__field(__u32, longest)1716		__field(unsigned long, caller_ip)1717	),1718	TP_fast_assign(1719		__entry->dev = mp->m_super->s_dev;1720		__entry->agno = be32_to_cpu(agf->agf_seqno),1721		__entry->flags = flags;1722		__entry->length = be32_to_cpu(agf->agf_length),1723		__entry->bno_root = be32_to_cpu(agf->agf_bno_root),1724		__entry->cnt_root = be32_to_cpu(agf->agf_cnt_root),1725		__entry->bno_level = be32_to_cpu(agf->agf_bno_level),1726		__entry->cnt_level = be32_to_cpu(agf->agf_cnt_level),1727		__entry->flfirst = be32_to_cpu(agf->agf_flfirst),1728		__entry->fllast = be32_to_cpu(agf->agf_fllast),1729		__entry->flcount = be32_to_cpu(agf->agf_flcount),1730		__entry->freeblks = be32_to_cpu(agf->agf_freeblks),1731		__entry->longest = be32_to_cpu(agf->agf_longest);1732		__entry->caller_ip = caller_ip;1733	),1734	TP_printk("dev %d:%d agno 0x%x flags %s length %u roots b %u c %u "1735		  "levels b %u c %u flfirst %u fllast %u flcount %u "1736		  "freeblks %u longest %u caller %pS",1737		  MAJOR(__entry->dev), MINOR(__entry->dev),1738		  __entry->agno,1739		  __print_flags(__entry->flags, "|", XFS_AGF_FLAGS),1740		  __entry->length,1741		  __entry->bno_root,1742		  __entry->cnt_root,1743		  __entry->bno_level,1744		  __entry->cnt_level,1745		  __entry->flfirst,1746		  __entry->fllast,1747		  __entry->flcount,1748		  __entry->freeblks,1749		  __entry->longest,1750		  (void *)__entry->caller_ip)1751);1752#define DEFINE_AGF_EVENT(name) \1753DEFINE_EVENT(xfs_agf_class, name, \1754	TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, \1755		 unsigned long caller_ip), \1756	TP_ARGS(mp, agf, flags, caller_ip))1757DEFINE_AGF_EVENT(xfs_agf);1758DEFINE_AGF_EVENT(xfs_agfl_reset);1759 1760TRACE_EVENT(xfs_free_extent,1761	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,1762		 xfs_extlen_t len, enum xfs_ag_resv_type resv, int haveleft,1763		 int haveright),1764	TP_ARGS(mp, agno, agbno, len, resv, haveleft, haveright),1765	TP_STRUCT__entry(1766		__field(dev_t, dev)1767		__field(xfs_agnumber_t, agno)1768		__field(xfs_agblock_t, agbno)1769		__field(xfs_extlen_t, len)1770		__field(int, resv)1771		__field(int, haveleft)1772		__field(int, haveright)1773	),1774	TP_fast_assign(1775		__entry->dev = mp->m_super->s_dev;1776		__entry->agno = agno;1777		__entry->agbno = agbno;1778		__entry->len = len;1779		__entry->resv = resv;1780		__entry->haveleft = haveleft;1781		__entry->haveright = haveright;1782	),1783	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x resv %d %s",1784		  MAJOR(__entry->dev), MINOR(__entry->dev),1785		  __entry->agno,1786		  __entry->agbno,1787		  __entry->len,1788		  __entry->resv,1789		  __entry->haveleft ?1790			(__entry->haveright ? "both" : "left") :1791			(__entry->haveright ? "right" : "none"))1792 1793);1794 1795DECLARE_EVENT_CLASS(xfs_alloc_class,1796	TP_PROTO(struct xfs_alloc_arg *args),1797	TP_ARGS(args),1798	TP_STRUCT__entry(1799		__field(dev_t, dev)1800		__field(xfs_agnumber_t, agno)1801		__field(xfs_agblock_t, agbno)1802		__field(xfs_extlen_t, minlen)1803		__field(xfs_extlen_t, maxlen)1804		__field(xfs_extlen_t, mod)1805		__field(xfs_extlen_t, prod)1806		__field(xfs_extlen_t, minleft)1807		__field(xfs_extlen_t, total)1808		__field(xfs_extlen_t, alignment)1809		__field(xfs_extlen_t, minalignslop)1810		__field(xfs_extlen_t, len)1811		__field(char, wasdel)1812		__field(char, wasfromfl)1813		__field(int, resv)1814		__field(int, datatype)1815		__field(xfs_agnumber_t, highest_agno)1816	),1817	TP_fast_assign(1818		__entry->dev = args->mp->m_super->s_dev;1819		__entry->agno = args->agno;1820		__entry->agbno = args->agbno;1821		__entry->minlen = args->minlen;1822		__entry->maxlen = args->maxlen;1823		__entry->mod = args->mod;1824		__entry->prod = args->prod;1825		__entry->minleft = args->minleft;1826		__entry->total = args->total;1827		__entry->alignment = args->alignment;1828		__entry->minalignslop = args->minalignslop;1829		__entry->len = args->len;1830		__entry->wasdel = args->wasdel;1831		__entry->wasfromfl = args->wasfromfl;1832		__entry->resv = args->resv;1833		__entry->datatype = args->datatype;1834		__entry->highest_agno = args->tp->t_highest_agno;1835	),1836	TP_printk("dev %d:%d agno 0x%x agbno 0x%x minlen %u maxlen %u mod %u "1837		  "prod %u minleft %u total %u alignment %u minalignslop %u "1838		  "len %u wasdel %d wasfromfl %d resv %d "1839		  "datatype 0x%x highest_agno 0x%x",1840		  MAJOR(__entry->dev), MINOR(__entry->dev),1841		  __entry->agno,1842		  __entry->agbno,1843		  __entry->minlen,1844		  __entry->maxlen,1845		  __entry->mod,1846		  __entry->prod,1847		  __entry->minleft,1848		  __entry->total,1849		  __entry->alignment,1850		  __entry->minalignslop,1851		  __entry->len,1852		  __entry->wasdel,1853		  __entry->wasfromfl,1854		  __entry->resv,1855		  __entry->datatype,1856		  __entry->highest_agno)1857)1858 1859#define DEFINE_ALLOC_EVENT(name) \1860DEFINE_EVENT(xfs_alloc_class, name, \1861	TP_PROTO(struct xfs_alloc_arg *args), \1862	TP_ARGS(args))1863DEFINE_ALLOC_EVENT(xfs_alloc_exact_done);1864DEFINE_ALLOC_EVENT(xfs_alloc_exact_notfound);1865DEFINE_ALLOC_EVENT(xfs_alloc_exact_error);1866DEFINE_ALLOC_EVENT(xfs_alloc_near_nominleft);1867DEFINE_ALLOC_EVENT(xfs_alloc_near_first);1868DEFINE_ALLOC_EVENT(xfs_alloc_cur);1869DEFINE_ALLOC_EVENT(xfs_alloc_cur_right);1870DEFINE_ALLOC_EVENT(xfs_alloc_cur_left);1871DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup);1872DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup_done);1873DEFINE_ALLOC_EVENT(xfs_alloc_near_error);1874DEFINE_ALLOC_EVENT(xfs_alloc_near_noentry);1875DEFINE_ALLOC_EVENT(xfs_alloc_near_busy);1876DEFINE_ALLOC_EVENT(xfs_alloc_size_neither);1877DEFINE_ALLOC_EVENT(xfs_alloc_size_noentry);1878DEFINE_ALLOC_EVENT(xfs_alloc_size_nominleft);1879DEFINE_ALLOC_EVENT(xfs_alloc_size_done);1880DEFINE_ALLOC_EVENT(xfs_alloc_size_error);1881DEFINE_ALLOC_EVENT(xfs_alloc_size_busy);1882DEFINE_ALLOC_EVENT(xfs_alloc_small_freelist);1883DEFINE_ALLOC_EVENT(xfs_alloc_small_notenough);1884DEFINE_ALLOC_EVENT(xfs_alloc_small_done);1885DEFINE_ALLOC_EVENT(xfs_alloc_small_error);1886DEFINE_ALLOC_EVENT(xfs_alloc_vextent_badargs);1887DEFINE_ALLOC_EVENT(xfs_alloc_vextent_skip_deadlock);1888DEFINE_ALLOC_EVENT(xfs_alloc_vextent_nofix);1889DEFINE_ALLOC_EVENT(xfs_alloc_vextent_noagbp);1890DEFINE_ALLOC_EVENT(xfs_alloc_vextent_loopfailed);1891DEFINE_ALLOC_EVENT(xfs_alloc_vextent_allfailed);1892 1893DEFINE_ALLOC_EVENT(xfs_alloc_vextent_this_ag);1894DEFINE_ALLOC_EVENT(xfs_alloc_vextent_start_ag);1895DEFINE_ALLOC_EVENT(xfs_alloc_vextent_first_ag);1896DEFINE_ALLOC_EVENT(xfs_alloc_vextent_exact_bno);1897DEFINE_ALLOC_EVENT(xfs_alloc_vextent_near_bno);1898DEFINE_ALLOC_EVENT(xfs_alloc_vextent_finish);1899 1900TRACE_EVENT(xfs_alloc_cur_check,1901	TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t bno,1902		 xfs_extlen_t len, xfs_extlen_t diff, bool new),1903	TP_ARGS(cur, bno, len, diff, new),1904	TP_STRUCT__entry(1905		__field(dev_t, dev)1906		__string(name, cur->bc_ops->name)1907		__field(xfs_agblock_t, bno)1908		__field(xfs_extlen_t, len)1909		__field(xfs_extlen_t, diff)1910		__field(bool, new)1911	),1912	TP_fast_assign(1913		__entry->dev = cur->bc_mp->m_super->s_dev;1914		__assign_str(name);1915		__entry->bno = bno;1916		__entry->len = len;1917		__entry->diff = diff;1918		__entry->new = new;1919	),1920	TP_printk("dev %d:%d %sbt agbno 0x%x fsbcount 0x%x diff 0x%x new %d",1921		  MAJOR(__entry->dev), MINOR(__entry->dev),1922		  __get_str(name),1923		  __entry->bno, __entry->len, __entry->diff, __entry->new)1924)1925 1926DECLARE_EVENT_CLASS(xfs_da_class,1927	TP_PROTO(struct xfs_da_args *args),1928	TP_ARGS(args),1929	TP_STRUCT__entry(1930		__field(dev_t, dev)1931		__field(xfs_ino_t, ino)1932		__dynamic_array(char, name, args->namelen)1933		__field(int, namelen)1934		__field(xfs_dahash_t, hashval)1935		__field(xfs_ino_t, inumber)1936		__field(uint32_t, op_flags)1937		__field(xfs_ino_t, owner)1938	),1939	TP_fast_assign(1940		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;1941		__entry->ino = args->dp->i_ino;1942		if (args->namelen)1943			memcpy(__get_str(name), args->name, args->namelen);1944		__entry->namelen = args->namelen;1945		__entry->hashval = args->hashval;1946		__entry->inumber = args->inumber;1947		__entry->op_flags = args->op_flags;1948		__entry->owner = args->owner;1949	),1950	TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d hashval 0x%x "1951		  "inumber 0x%llx op_flags %s owner 0x%llx",1952		  MAJOR(__entry->dev), MINOR(__entry->dev),1953		  __entry->ino,1954		  __entry->namelen,1955		  __entry->namelen ? __get_str(name) : NULL,1956		  __entry->namelen,1957		  __entry->hashval,1958		  __entry->inumber,1959		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),1960		  __entry->owner)1961)1962 1963#define DEFINE_DIR2_EVENT(name) \1964DEFINE_EVENT(xfs_da_class, name, \1965	TP_PROTO(struct xfs_da_args *args), \1966	TP_ARGS(args))1967DEFINE_DIR2_EVENT(xfs_dir2_sf_addname);1968DEFINE_DIR2_EVENT(xfs_dir2_sf_create);1969DEFINE_DIR2_EVENT(xfs_dir2_sf_lookup);1970DEFINE_DIR2_EVENT(xfs_dir2_sf_replace);1971DEFINE_DIR2_EVENT(xfs_dir2_sf_removename);1972DEFINE_DIR2_EVENT(xfs_dir2_sf_toino4);1973DEFINE_DIR2_EVENT(xfs_dir2_sf_toino8);1974DEFINE_DIR2_EVENT(xfs_dir2_sf_to_block);1975DEFINE_DIR2_EVENT(xfs_dir2_block_addname);1976DEFINE_DIR2_EVENT(xfs_dir2_block_lookup);1977DEFINE_DIR2_EVENT(xfs_dir2_block_replace);1978DEFINE_DIR2_EVENT(xfs_dir2_block_removename);1979DEFINE_DIR2_EVENT(xfs_dir2_block_to_sf);1980DEFINE_DIR2_EVENT(xfs_dir2_block_to_leaf);1981DEFINE_DIR2_EVENT(xfs_dir2_leaf_addname);1982DEFINE_DIR2_EVENT(xfs_dir2_leaf_lookup);1983DEFINE_DIR2_EVENT(xfs_dir2_leaf_replace);1984DEFINE_DIR2_EVENT(xfs_dir2_leaf_removename);1985DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_block);1986DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_node);1987DEFINE_DIR2_EVENT(xfs_dir2_node_addname);1988DEFINE_DIR2_EVENT(xfs_dir2_node_lookup);1989DEFINE_DIR2_EVENT(xfs_dir2_node_replace);1990DEFINE_DIR2_EVENT(xfs_dir2_node_removename);1991DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf);1992 1993DECLARE_EVENT_CLASS(xfs_attr_class,1994	TP_PROTO(struct xfs_da_args *args),1995	TP_ARGS(args),1996	TP_STRUCT__entry(1997		__field(dev_t, dev)1998		__field(xfs_ino_t, ino)1999		__dynamic_array(char, name, args->namelen)2000		__field(int, namelen)2001		__field(int, valuelen)2002		__field(xfs_dahash_t, hashval)2003		__field(unsigned int, attr_filter)2004		__field(uint32_t, op_flags)2005	),2006	TP_fast_assign(2007		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;2008		__entry->ino = args->dp->i_ino;2009		if (args->namelen)2010			memcpy(__get_str(name), args->name, args->namelen);2011		__entry->namelen = args->namelen;2012		__entry->valuelen = args->valuelen;2013		__entry->hashval = args->hashval;2014		__entry->attr_filter = args->attr_filter;2015		__entry->op_flags = args->op_flags;2016	),2017	TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d "2018		  "hashval 0x%x filter %s op_flags %s",2019		  MAJOR(__entry->dev), MINOR(__entry->dev),2020		  __entry->ino,2021		  __entry->namelen,2022		  __entry->namelen ? __get_str(name) : NULL,2023		  __entry->namelen,2024		  __entry->valuelen,2025		  __entry->hashval,2026		  __print_flags(__entry->attr_filter, "|",2027				XFS_ATTR_FILTER_FLAGS),2028		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS))2029)2030 2031#define DEFINE_ATTR_EVENT(name) \2032DEFINE_EVENT(xfs_attr_class, name, \2033	TP_PROTO(struct xfs_da_args *args), \2034	TP_ARGS(args))2035DEFINE_ATTR_EVENT(xfs_attr_sf_add);2036DEFINE_ATTR_EVENT(xfs_attr_sf_addname);2037DEFINE_ATTR_EVENT(xfs_attr_sf_create);2038DEFINE_ATTR_EVENT(xfs_attr_sf_lookup);2039DEFINE_ATTR_EVENT(xfs_attr_sf_remove);2040DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf);2041 2042DEFINE_ATTR_EVENT(xfs_attr_leaf_add);2043DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old);2044DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new);2045DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work);2046DEFINE_ATTR_EVENT(xfs_attr_leaf_create);2047DEFINE_ATTR_EVENT(xfs_attr_leaf_compact);2048DEFINE_ATTR_EVENT(xfs_attr_leaf_get);2049DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup);2050DEFINE_ATTR_EVENT(xfs_attr_leaf_replace);2051DEFINE_ATTR_EVENT(xfs_attr_leaf_remove);2052DEFINE_ATTR_EVENT(xfs_attr_leaf_removename);2053DEFINE_ATTR_EVENT(xfs_attr_leaf_split);2054DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before);2055DEFINE_ATTR_EVENT(xfs_attr_leaf_split_after);2056DEFINE_ATTR_EVENT(xfs_attr_leaf_clearflag);2057DEFINE_ATTR_EVENT(xfs_attr_leaf_setflag);2058DEFINE_ATTR_EVENT(xfs_attr_leaf_flipflags);2059DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf);2060DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node);2061DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance);2062DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance);2063DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall);2064 2065DEFINE_ATTR_EVENT(xfs_attr_node_addname);2066DEFINE_ATTR_EVENT(xfs_attr_node_get);2067DEFINE_ATTR_EVENT(xfs_attr_node_replace);2068DEFINE_ATTR_EVENT(xfs_attr_node_removename);2069 2070DEFINE_ATTR_EVENT(xfs_attr_fillstate);2071DEFINE_ATTR_EVENT(xfs_attr_refillstate);2072 2073DEFINE_ATTR_EVENT(xfs_attr_rmtval_get);2074DEFINE_ATTR_EVENT(xfs_attr_rmtval_set);2075 2076#define DEFINE_DA_EVENT(name) \2077DEFINE_EVENT(xfs_da_class, name, \2078	TP_PROTO(struct xfs_da_args *args), \2079	TP_ARGS(args))2080DEFINE_DA_EVENT(xfs_da_split);2081DEFINE_DA_EVENT(xfs_da_join);2082DEFINE_DA_EVENT(xfs_da_link_before);2083DEFINE_DA_EVENT(xfs_da_link_after);2084DEFINE_DA_EVENT(xfs_da_unlink_back);2085DEFINE_DA_EVENT(xfs_da_unlink_forward);2086DEFINE_DA_EVENT(xfs_da_root_split);2087DEFINE_DA_EVENT(xfs_da_root_join);2088DEFINE_DA_EVENT(xfs_da_node_add);2089DEFINE_DA_EVENT(xfs_da_node_create);2090DEFINE_DA_EVENT(xfs_da_node_split);2091DEFINE_DA_EVENT(xfs_da_node_remove);2092DEFINE_DA_EVENT(xfs_da_node_rebalance);2093DEFINE_DA_EVENT(xfs_da_node_unbalance);2094DEFINE_DA_EVENT(xfs_da_node_toosmall);2095DEFINE_DA_EVENT(xfs_da_swap_lastblock);2096DEFINE_DA_EVENT(xfs_da_grow_inode);2097DEFINE_DA_EVENT(xfs_da_shrink_inode);2098DEFINE_DA_EVENT(xfs_da_fixhashpath);2099DEFINE_DA_EVENT(xfs_da_path_shift);2100 2101DECLARE_EVENT_CLASS(xfs_dir2_space_class,2102	TP_PROTO(struct xfs_da_args *args, int idx),2103	TP_ARGS(args, idx),2104	TP_STRUCT__entry(2105		__field(dev_t, dev)2106		__field(xfs_ino_t, ino)2107		__field(uint32_t, op_flags)2108		__field(int, idx)2109	),2110	TP_fast_assign(2111		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;2112		__entry->ino = args->dp->i_ino;2113		__entry->op_flags = args->op_flags;2114		__entry->idx = idx;2115	),2116	TP_printk("dev %d:%d ino 0x%llx op_flags %s index %d",2117		  MAJOR(__entry->dev), MINOR(__entry->dev),2118		  __entry->ino,2119		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),2120		  __entry->idx)2121)2122 2123#define DEFINE_DIR2_SPACE_EVENT(name) \2124DEFINE_EVENT(xfs_dir2_space_class, name, \2125	TP_PROTO(struct xfs_da_args *args, int idx), \2126	TP_ARGS(args, idx))2127DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_add);2128DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_remove);2129DEFINE_DIR2_SPACE_EVENT(xfs_dir2_grow_inode);2130DEFINE_DIR2_SPACE_EVENT(xfs_dir2_shrink_inode);2131 2132TRACE_EVENT(xfs_dir2_leafn_moveents,2133	TP_PROTO(struct xfs_da_args *args, int src_idx, int dst_idx, int count),2134	TP_ARGS(args, src_idx, dst_idx, count),2135	TP_STRUCT__entry(2136		__field(dev_t, dev)2137		__field(xfs_ino_t, ino)2138		__field(uint32_t, op_flags)2139		__field(int, src_idx)2140		__field(int, dst_idx)2141		__field(int, count)2142	),2143	TP_fast_assign(2144		__entry->dev = VFS_I(args->dp)->i_sb->s_dev;2145		__entry->ino = args->dp->i_ino;2146		__entry->op_flags = args->op_flags;2147		__entry->src_idx = src_idx;2148		__entry->dst_idx = dst_idx;2149		__entry->count = count;2150	),2151	TP_printk("dev %d:%d ino 0x%llx op_flags %s "2152		  "src_idx %d dst_idx %d count %d",2153		  MAJOR(__entry->dev), MINOR(__entry->dev),2154		  __entry->ino,2155		  __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS),2156		  __entry->src_idx,2157		  __entry->dst_idx,2158		  __entry->count)2159);2160 2161#define XFS_SWAPEXT_INODES \2162	{ 0,	"target" }, \2163	{ 1,	"temp" }2164 2165TRACE_DEFINE_ENUM(XFS_DINODE_FMT_DEV);2166TRACE_DEFINE_ENUM(XFS_DINODE_FMT_LOCAL);2167TRACE_DEFINE_ENUM(XFS_DINODE_FMT_EXTENTS);2168TRACE_DEFINE_ENUM(XFS_DINODE_FMT_BTREE);2169TRACE_DEFINE_ENUM(XFS_DINODE_FMT_UUID);2170 2171DECLARE_EVENT_CLASS(xfs_swap_extent_class,2172	TP_PROTO(struct xfs_inode *ip, int which),2173	TP_ARGS(ip, which),2174	TP_STRUCT__entry(2175		__field(dev_t, dev)2176		__field(int, which)2177		__field(xfs_ino_t, ino)2178		__field(int, format)2179		__field(xfs_extnum_t, nex)2180		__field(int, broot_size)2181		__field(int, fork_off)2182	),2183	TP_fast_assign(2184		__entry->dev = VFS_I(ip)->i_sb->s_dev;2185		__entry->which = which;2186		__entry->ino = ip->i_ino;2187		__entry->format = ip->i_df.if_format;2188		__entry->nex = ip->i_df.if_nextents;2189		__entry->broot_size = ip->i_df.if_broot_bytes;2190		__entry->fork_off = xfs_inode_fork_boff(ip);2191	),2192	TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %llu, "2193		  "broot size %d, forkoff 0x%x",2194		  MAJOR(__entry->dev), MINOR(__entry->dev),2195		  __entry->ino,2196		  __print_symbolic(__entry->which, XFS_SWAPEXT_INODES),2197		  __print_symbolic(__entry->format, XFS_INODE_FORMAT_STR),2198		  __entry->nex,2199		  __entry->broot_size,2200		  __entry->fork_off)2201)2202 2203#define DEFINE_SWAPEXT_EVENT(name) \2204DEFINE_EVENT(xfs_swap_extent_class, name, \2205	TP_PROTO(struct xfs_inode *ip, int which), \2206	TP_ARGS(ip, which))2207 2208DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before);2209DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after);2210 2211TRACE_EVENT(xfs_log_recover,2212	TP_PROTO(struct xlog *log, xfs_daddr_t headblk, xfs_daddr_t tailblk),2213	TP_ARGS(log, headblk, tailblk),2214	TP_STRUCT__entry(2215		__field(dev_t, dev)2216		__field(xfs_daddr_t, headblk)2217		__field(xfs_daddr_t, tailblk)2218	),2219	TP_fast_assign(2220		__entry->dev = log->l_mp->m_super->s_dev;2221		__entry->headblk = headblk;2222		__entry->tailblk = tailblk;2223	),2224	TP_printk("dev %d:%d headblk 0x%llx tailblk 0x%llx",2225		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->headblk,2226		  __entry->tailblk)2227)2228 2229TRACE_EVENT(xfs_log_recover_record,2230	TP_PROTO(struct xlog *log, struct xlog_rec_header *rhead, int pass),2231	TP_ARGS(log, rhead, pass),2232	TP_STRUCT__entry(2233		__field(dev_t, dev)2234		__field(xfs_lsn_t, lsn)2235		__field(int, len)2236		__field(int, num_logops)2237		__field(int, pass)2238	),2239	TP_fast_assign(2240		__entry->dev = log->l_mp->m_super->s_dev;2241		__entry->lsn = be64_to_cpu(rhead->h_lsn);2242		__entry->len = be32_to_cpu(rhead->h_len);2243		__entry->num_logops = be32_to_cpu(rhead->h_num_logops);2244		__entry->pass = pass;2245	),2246	TP_printk("dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d",2247		  MAJOR(__entry->dev), MINOR(__entry->dev),2248		  __entry->lsn, __entry->len, __entry->num_logops,2249		   __entry->pass)2250)2251 2252DECLARE_EVENT_CLASS(xfs_log_recover_item_class,2253	TP_PROTO(struct xlog *log, struct xlog_recover *trans,2254		struct xlog_recover_item *item, int pass),2255	TP_ARGS(log, trans, item, pass),2256	TP_STRUCT__entry(2257		__field(dev_t, dev)2258		__field(unsigned long, item)2259		__field(xlog_tid_t, tid)2260		__field(xfs_lsn_t, lsn)2261		__field(int, type)2262		__field(int, pass)2263		__field(int, count)2264		__field(int, total)2265	),2266	TP_fast_assign(2267		__entry->dev = log->l_mp->m_super->s_dev;2268		__entry->item = (unsigned long)item;2269		__entry->tid = trans->r_log_tid;2270		__entry->lsn = trans->r_lsn;2271		__entry->type = ITEM_TYPE(item);2272		__entry->pass = pass;2273		__entry->count = item->ri_cnt;2274		__entry->total = item->ri_total;2275	),2276	TP_printk("dev %d:%d tid 0x%x lsn 0x%llx, pass %d, item %p, "2277		  "item type %s item region count/total %d/%d",2278		  MAJOR(__entry->dev), MINOR(__entry->dev),2279		  __entry->tid,2280		  __entry->lsn,2281		  __entry->pass,2282		  (void *)__entry->item,2283		  __print_symbolic(__entry->type, XFS_LI_TYPE_DESC),2284		  __entry->count,2285		  __entry->total)2286)2287 2288#define DEFINE_LOG_RECOVER_ITEM(name) \2289DEFINE_EVENT(xfs_log_recover_item_class, name, \2290	TP_PROTO(struct xlog *log, struct xlog_recover *trans, \2291		struct xlog_recover_item *item, int pass), \2292	TP_ARGS(log, trans, item, pass))2293 2294DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add);2295DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont);2296DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head);2297DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail);2298DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover);2299 2300DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class,2301	TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f),2302	TP_ARGS(log, buf_f),2303	TP_STRUCT__entry(2304		__field(dev_t, dev)2305		__field(int64_t, blkno)2306		__field(unsigned short, len)2307		__field(unsigned short, flags)2308		__field(unsigned short, size)2309		__field(unsigned int, map_size)2310	),2311	TP_fast_assign(2312		__entry->dev = log->l_mp->m_super->s_dev;2313		__entry->blkno = buf_f->blf_blkno;2314		__entry->len = buf_f->blf_len;2315		__entry->flags = buf_f->blf_flags;2316		__entry->size = buf_f->blf_size;2317		__entry->map_size = buf_f->blf_map_size;2318	),2319	TP_printk("dev %d:%d daddr 0x%llx, bbcount 0x%x, flags 0x%x, size %d, "2320			"map_size %d",2321		  MAJOR(__entry->dev), MINOR(__entry->dev),2322		  __entry->blkno,2323		  __entry->len,2324		  __entry->flags,2325		  __entry->size,2326		  __entry->map_size)2327)2328 2329#define DEFINE_LOG_RECOVER_BUF_ITEM(name) \2330DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \2331	TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), \2332	TP_ARGS(log, buf_f))2333 2334DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel);2335DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel);2336DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add);2337DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc);2338DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover);2339DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_skip);2340DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf);2341DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf);2342DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf);2343 2344DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class,2345	TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f),2346	TP_ARGS(log, in_f),2347	TP_STRUCT__entry(2348		__field(dev_t, dev)2349		__field(xfs_ino_t, ino)2350		__field(unsigned short, size)2351		__field(int, fields)2352		__field(unsigned short, asize)2353		__field(unsigned short, dsize)2354		__field(int64_t, blkno)2355		__field(int, len)2356		__field(int, boffset)2357	),2358	TP_fast_assign(2359		__entry->dev = log->l_mp->m_super->s_dev;2360		__entry->ino = in_f->ilf_ino;2361		__entry->size = in_f->ilf_size;2362		__entry->fields = in_f->ilf_fields;2363		__entry->asize = in_f->ilf_asize;2364		__entry->dsize = in_f->ilf_dsize;2365		__entry->blkno = in_f->ilf_blkno;2366		__entry->len = in_f->ilf_len;2367		__entry->boffset = in_f->ilf_boffset;2368	),2369	TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, "2370			"dsize %d, daddr 0x%llx, bbcount 0x%x, boffset %d",2371		  MAJOR(__entry->dev), MINOR(__entry->dev),2372		  __entry->ino,2373		  __entry->size,2374		  __entry->fields,2375		  __entry->asize,2376		  __entry->dsize,2377		  __entry->blkno,2378		  __entry->len,2379		  __entry->boffset)2380)2381#define DEFINE_LOG_RECOVER_INO_ITEM(name) \2382DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \2383	TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), \2384	TP_ARGS(log, in_f))2385 2386DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover);2387DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel);2388DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip);2389 2390DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class,2391	TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f),2392	TP_ARGS(log, in_f),2393	TP_STRUCT__entry(2394		__field(dev_t, dev)2395		__field(xfs_agnumber_t, agno)2396		__field(xfs_agblock_t, agbno)2397		__field(unsigned int, count)2398		__field(unsigned int, isize)2399		__field(xfs_agblock_t, length)2400		__field(unsigned int, gen)2401	),2402	TP_fast_assign(2403		__entry->dev = log->l_mp->m_super->s_dev;2404		__entry->agno = be32_to_cpu(in_f->icl_ag);2405		__entry->agbno = be32_to_cpu(in_f->icl_agbno);2406		__entry->count = be32_to_cpu(in_f->icl_count);2407		__entry->isize = be32_to_cpu(in_f->icl_isize);2408		__entry->length = be32_to_cpu(in_f->icl_length);2409		__entry->gen = be32_to_cpu(in_f->icl_gen);2410	),2411	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x ireccount %u isize %u gen 0x%x",2412		  MAJOR(__entry->dev), MINOR(__entry->dev),2413		  __entry->agno,2414		  __entry->agbno,2415		  __entry->length,2416		  __entry->count,2417		  __entry->isize,2418		  __entry->gen)2419)2420#define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \2421DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \2422	TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), \2423	TP_ARGS(log, in_f))2424 2425DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_cancel);2426DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_recover);2427 2428DECLARE_EVENT_CLASS(xfs_discard_class,2429	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,2430		 xfs_agblock_t agbno, xfs_extlen_t len),2431	TP_ARGS(mp, agno, agbno, len),2432	TP_STRUCT__entry(2433		__field(dev_t, dev)2434		__field(xfs_agnumber_t, agno)2435		__field(xfs_agblock_t, agbno)2436		__field(xfs_extlen_t, len)2437	),2438	TP_fast_assign(2439		__entry->dev = mp->m_super->s_dev;2440		__entry->agno = agno;2441		__entry->agbno = agbno;2442		__entry->len = len;2443	),2444	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",2445		  MAJOR(__entry->dev), MINOR(__entry->dev),2446		  __entry->agno,2447		  __entry->agbno,2448		  __entry->len)2449)2450 2451#define DEFINE_DISCARD_EVENT(name) \2452DEFINE_EVENT(xfs_discard_class, name, \2453	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \2454		 xfs_agblock_t agbno, xfs_extlen_t len), \2455	TP_ARGS(mp, agno, agbno, len))2456DEFINE_DISCARD_EVENT(xfs_discard_extent);2457DEFINE_DISCARD_EVENT(xfs_discard_toosmall);2458DEFINE_DISCARD_EVENT(xfs_discard_exclude);2459DEFINE_DISCARD_EVENT(xfs_discard_busy);2460 2461DECLARE_EVENT_CLASS(xfs_rtdiscard_class,2462	TP_PROTO(struct xfs_mount *mp,2463		 xfs_rtblock_t rtbno, xfs_rtblock_t len),2464	TP_ARGS(mp, rtbno, len),2465	TP_STRUCT__entry(2466		__field(dev_t, dev)2467		__field(xfs_rtblock_t, rtbno)2468		__field(xfs_rtblock_t, len)2469	),2470	TP_fast_assign(2471		__entry->dev = mp->m_rtdev_targp->bt_dev;2472		__entry->rtbno = rtbno;2473		__entry->len = len;2474	),2475	TP_printk("dev %d:%d rtbno 0x%llx rtbcount 0x%llx",2476		  MAJOR(__entry->dev), MINOR(__entry->dev),2477		  __entry->rtbno,2478		  __entry->len)2479)2480 2481#define DEFINE_RTDISCARD_EVENT(name) \2482DEFINE_EVENT(xfs_rtdiscard_class, name, \2483	TP_PROTO(struct xfs_mount *mp, \2484		 xfs_rtblock_t rtbno, xfs_rtblock_t len), \2485	TP_ARGS(mp, rtbno, len))2486DEFINE_RTDISCARD_EVENT(xfs_discard_rtextent);2487DEFINE_RTDISCARD_EVENT(xfs_discard_rttoosmall);2488DEFINE_RTDISCARD_EVENT(xfs_discard_rtrelax);2489 2490DECLARE_EVENT_CLASS(xfs_btree_cur_class,2491	TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp),2492	TP_ARGS(cur, level, bp),2493	TP_STRUCT__entry(2494		__field(dev_t, dev)2495		__string(name, cur->bc_ops->name)2496		__field(int, level)2497		__field(int, nlevels)2498		__field(int, ptr)2499		__field(xfs_daddr_t, daddr)2500	),2501	TP_fast_assign(2502		__entry->dev = cur->bc_mp->m_super->s_dev;2503		__assign_str(name);2504		__entry->level = level;2505		__entry->nlevels = cur->bc_nlevels;2506		__entry->ptr = cur->bc_levels[level].ptr;2507		__entry->daddr = bp ? xfs_buf_daddr(bp) : -1;2508	),2509	TP_printk("dev %d:%d %sbt level %d/%d ptr %d daddr 0x%llx",2510		  MAJOR(__entry->dev), MINOR(__entry->dev),2511		  __get_str(name),2512		  __entry->level,2513		  __entry->nlevels,2514		  __entry->ptr,2515		  (unsigned long long)__entry->daddr)2516)2517 2518#define DEFINE_BTREE_CUR_EVENT(name) \2519DEFINE_EVENT(xfs_btree_cur_class, name, \2520	TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \2521	TP_ARGS(cur, level, bp))2522DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys);2523DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range);2524 2525TRACE_EVENT(xfs_btree_alloc_block,2526	TP_PROTO(struct xfs_btree_cur *cur, union xfs_btree_ptr *ptr, int stat,2527		 int error),2528	TP_ARGS(cur, ptr, stat, error),2529	TP_STRUCT__entry(2530		__field(dev_t, dev)2531		__field(xfs_agnumber_t, agno)2532		__field(xfs_ino_t, ino)2533		__string(name, cur->bc_ops->name)2534		__field(int, error)2535		__field(xfs_agblock_t, agbno)2536	),2537	TP_fast_assign(2538		__entry->dev = cur->bc_mp->m_super->s_dev;2539		switch (cur->bc_ops->type) {2540		case XFS_BTREE_TYPE_INODE:2541			__entry->agno = 0;2542			__entry->ino = cur->bc_ino.ip->i_ino;2543			break;2544		case XFS_BTREE_TYPE_AG:2545			__entry->agno = cur->bc_ag.pag->pag_agno;2546			__entry->ino = 0;2547			break;2548		case XFS_BTREE_TYPE_MEM:2549			__entry->agno = 0;2550			__entry->ino = 0;2551			break;2552		}2553		__assign_str(name);2554		__entry->error = error;2555		if (!error && stat) {2556			if (cur->bc_ops->ptr_len == XFS_BTREE_LONG_PTR_LEN) {2557				xfs_fsblock_t	fsb = be64_to_cpu(ptr->l);2558 2559				__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp,2560								fsb);2561				__entry->agbno = XFS_FSB_TO_AGBNO(cur->bc_mp,2562								fsb);2563			} else {2564				__entry->agbno = be32_to_cpu(ptr->s);2565			}2566		} else {2567			__entry->agbno = NULLAGBLOCK;2568		}2569	),2570	TP_printk("dev %d:%d %sbt agno 0x%x ino 0x%llx agbno 0x%x error %d",2571		  MAJOR(__entry->dev), MINOR(__entry->dev),2572		  __get_str(name),2573		  __entry->agno,2574		  __entry->ino,2575		  __entry->agbno,2576		  __entry->error)2577);2578 2579TRACE_EVENT(xfs_btree_free_block,2580	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_buf *bp),2581	TP_ARGS(cur, bp),2582	TP_STRUCT__entry(2583		__field(dev_t, dev)2584		__field(xfs_agnumber_t, agno)2585		__field(xfs_ino_t, ino)2586		__string(name, cur->bc_ops->name)2587		__field(xfs_agblock_t, agbno)2588	),2589	TP_fast_assign(2590		__entry->dev = cur->bc_mp->m_super->s_dev;2591		__entry->agno = xfs_daddr_to_agno(cur->bc_mp,2592							xfs_buf_daddr(bp));2593		if (cur->bc_ops->type == XFS_BTREE_TYPE_INODE)2594			__entry->ino = cur->bc_ino.ip->i_ino;2595		else2596			__entry->ino = 0;2597		__assign_str(name);2598		__entry->agbno = xfs_daddr_to_agbno(cur->bc_mp,2599							xfs_buf_daddr(bp));2600	),2601	TP_printk("dev %d:%d %sbt agno 0x%x ino 0x%llx agbno 0x%x",2602		  MAJOR(__entry->dev), MINOR(__entry->dev),2603		  __get_str(name),2604		  __entry->agno,2605		  __entry->ino,2606		  __entry->agbno)2607);2608 2609/* deferred ops */2610struct xfs_defer_pending;2611 2612DECLARE_EVENT_CLASS(xfs_defer_class,2613	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip),2614	TP_ARGS(tp, caller_ip),2615	TP_STRUCT__entry(2616		__field(dev_t, dev)2617		__field(struct xfs_trans *, tp)2618		__field(char, committed)2619		__field(unsigned long, caller_ip)2620	),2621	TP_fast_assign(2622		__entry->dev = tp->t_mountp->m_super->s_dev;2623		__entry->tp = tp;2624		__entry->caller_ip = caller_ip;2625	),2626	TP_printk("dev %d:%d tp %p caller %pS",2627		  MAJOR(__entry->dev), MINOR(__entry->dev),2628		  __entry->tp,2629		  (char *)__entry->caller_ip)2630)2631#define DEFINE_DEFER_EVENT(name) \2632DEFINE_EVENT(xfs_defer_class, name, \2633	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \2634	TP_ARGS(tp, caller_ip))2635 2636DECLARE_EVENT_CLASS(xfs_defer_error_class,2637	TP_PROTO(struct xfs_trans *tp, int error),2638	TP_ARGS(tp, error),2639	TP_STRUCT__entry(2640		__field(dev_t, dev)2641		__field(struct xfs_trans *, tp)2642		__field(char, committed)2643		__field(int, error)2644	),2645	TP_fast_assign(2646		__entry->dev = tp->t_mountp->m_super->s_dev;2647		__entry->tp = tp;2648		__entry->error = error;2649	),2650	TP_printk("dev %d:%d tp %p err %d",2651		  MAJOR(__entry->dev), MINOR(__entry->dev),2652		  __entry->tp,2653		  __entry->error)2654)2655#define DEFINE_DEFER_ERROR_EVENT(name) \2656DEFINE_EVENT(xfs_defer_error_class, name, \2657	TP_PROTO(struct xfs_trans *tp, int error), \2658	TP_ARGS(tp, error))2659 2660DECLARE_EVENT_CLASS(xfs_defer_pending_class,2661	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp),2662	TP_ARGS(mp, dfp),2663	TP_STRUCT__entry(2664		__field(dev_t, dev)2665		__string(name, dfp->dfp_ops->name)2666		__field(void *, intent)2667		__field(unsigned int, flags)2668		__field(char, committed)2669		__field(int, nr)2670	),2671	TP_fast_assign(2672		__entry->dev = mp ? mp->m_super->s_dev : 0;2673		__assign_str(name);2674		__entry->intent = dfp->dfp_intent;2675		__entry->flags = dfp->dfp_flags;2676		__entry->committed = dfp->dfp_done != NULL;2677		__entry->nr = dfp->dfp_count;2678	),2679	TP_printk("dev %d:%d optype %s intent %p flags %s committed %d nr %d",2680		  MAJOR(__entry->dev), MINOR(__entry->dev),2681		  __get_str(name),2682		  __entry->intent,2683		  __print_flags(__entry->flags, "|", XFS_DEFER_PENDING_STRINGS),2684		  __entry->committed,2685		  __entry->nr)2686)2687#define DEFINE_DEFER_PENDING_EVENT(name) \2688DEFINE_EVENT(xfs_defer_pending_class, name, \2689	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), \2690	TP_ARGS(mp, dfp))2691 2692DEFINE_DEFER_EVENT(xfs_defer_cancel);2693DEFINE_DEFER_EVENT(xfs_defer_trans_roll);2694DEFINE_DEFER_EVENT(xfs_defer_trans_abort);2695DEFINE_DEFER_EVENT(xfs_defer_finish);2696DEFINE_DEFER_EVENT(xfs_defer_finish_done);2697 2698DEFINE_DEFER_ERROR_EVENT(xfs_defer_trans_roll_error);2699DEFINE_DEFER_ERROR_EVENT(xfs_defer_finish_error);2700 2701DEFINE_DEFER_PENDING_EVENT(xfs_defer_create_intent);2702DEFINE_DEFER_PENDING_EVENT(xfs_defer_cancel_list);2703DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish);2704DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort);2705DEFINE_DEFER_PENDING_EVENT(xfs_defer_relog_intent);2706DEFINE_DEFER_PENDING_EVENT(xfs_defer_isolate_paused);2707DEFINE_DEFER_PENDING_EVENT(xfs_defer_item_pause);2708DEFINE_DEFER_PENDING_EVENT(xfs_defer_item_unpause);2709 2710DECLARE_EVENT_CLASS(xfs_free_extent_deferred_class,2711	TP_PROTO(struct xfs_mount *mp, struct xfs_extent_free_item *free),2712	TP_ARGS(mp, free),2713	TP_STRUCT__entry(2714		__field(dev_t, dev)2715		__field(xfs_agnumber_t, agno)2716		__field(xfs_agblock_t, agbno)2717		__field(xfs_extlen_t, len)2718		__field(unsigned int, flags)2719	),2720	TP_fast_assign(2721		__entry->dev = mp->m_super->s_dev;2722		__entry->agno = XFS_FSB_TO_AGNO(mp, free->xefi_startblock);2723		__entry->agbno = XFS_FSB_TO_AGBNO(mp, free->xefi_startblock);2724		__entry->len = free->xefi_blockcount;2725		__entry->flags = free->xefi_flags;2726	),2727	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x flags 0x%x",2728		  MAJOR(__entry->dev), MINOR(__entry->dev),2729		  __entry->agno,2730		  __entry->agbno,2731		  __entry->len,2732		  __entry->flags)2733);2734#define DEFINE_FREE_EXTENT_DEFERRED_EVENT(name) \2735DEFINE_EVENT(xfs_free_extent_deferred_class, name, \2736	TP_PROTO(struct xfs_mount *mp, struct xfs_extent_free_item *free), \2737	TP_ARGS(mp, free))2738DEFINE_FREE_EXTENT_DEFERRED_EVENT(xfs_agfl_free_defer);2739DEFINE_FREE_EXTENT_DEFERRED_EVENT(xfs_agfl_free_deferred);2740DEFINE_FREE_EXTENT_DEFERRED_EVENT(xfs_extent_free_defer);2741DEFINE_FREE_EXTENT_DEFERRED_EVENT(xfs_extent_free_deferred);2742 2743DECLARE_EVENT_CLASS(xfs_defer_pending_item_class,2744	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp,2745		 void *item),2746	TP_ARGS(mp, dfp, item),2747	TP_STRUCT__entry(2748		__field(dev_t, dev)2749		__string(name, dfp->dfp_ops->name)2750		__field(void *, intent)2751		__field(void *, item)2752		__field(char, committed)2753		__field(unsigned int, flags)2754		__field(int, nr)2755	),2756	TP_fast_assign(2757		__entry->dev = mp ? mp->m_super->s_dev : 0;2758		__assign_str(name);2759		__entry->intent = dfp->dfp_intent;2760		__entry->item = item;2761		__entry->committed = dfp->dfp_done != NULL;2762		__entry->flags = dfp->dfp_flags;2763		__entry->nr = dfp->dfp_count;2764	),2765	TP_printk("dev %d:%d optype %s intent %p item %p flags %s committed %d nr %d",2766		  MAJOR(__entry->dev), MINOR(__entry->dev),2767		  __get_str(name),2768		  __entry->intent,2769		  __entry->item,2770		  __print_flags(__entry->flags, "|", XFS_DEFER_PENDING_STRINGS),2771		  __entry->committed,2772		  __entry->nr)2773)2774#define DEFINE_DEFER_PENDING_ITEM_EVENT(name) \2775DEFINE_EVENT(xfs_defer_pending_item_class, name, \2776	TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp, \2777		 void *item), \2778	TP_ARGS(mp, dfp, item))2779 2780DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_add_item);2781DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_cancel_item);2782DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_finish_item);2783 2784/* rmap tracepoints */2785DECLARE_EVENT_CLASS(xfs_rmap_class,2786	TP_PROTO(struct xfs_btree_cur *cur,2787		 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten,2788		 const struct xfs_owner_info *oinfo),2789	TP_ARGS(cur, agbno, len, unwritten, oinfo),2790	TP_STRUCT__entry(2791		__field(dev_t, dev)2792		__field(xfs_agnumber_t, agno)2793		__field(xfs_agblock_t, agbno)2794		__field(xfs_extlen_t, len)2795		__field(uint64_t, owner)2796		__field(uint64_t, offset)2797		__field(unsigned long, flags)2798	),2799	TP_fast_assign(2800		__entry->dev = cur->bc_mp->m_super->s_dev;2801		__entry->agno = cur->bc_ag.pag->pag_agno;2802		__entry->agbno = agbno;2803		__entry->len = len;2804		__entry->owner = oinfo->oi_owner;2805		__entry->offset = oinfo->oi_offset;2806		__entry->flags = oinfo->oi_flags;2807		if (unwritten)2808			__entry->flags |= XFS_RMAP_UNWRITTEN;2809	),2810	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%lx",2811		  MAJOR(__entry->dev), MINOR(__entry->dev),2812		  __entry->agno,2813		  __entry->agbno,2814		  __entry->len,2815		  __entry->owner,2816		  __entry->offset,2817		  __entry->flags)2818);2819#define DEFINE_RMAP_EVENT(name) \2820DEFINE_EVENT(xfs_rmap_class, name, \2821	TP_PROTO(struct xfs_btree_cur *cur, \2822		 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \2823		 const struct xfs_owner_info *oinfo), \2824	TP_ARGS(cur, agbno, len, unwritten, oinfo))2825 2826/* btree cursor error/%ip tracepoint class */2827DECLARE_EVENT_CLASS(xfs_btree_error_class,2828	TP_PROTO(struct xfs_btree_cur *cur, int error,2829		 unsigned long caller_ip),2830	TP_ARGS(cur, error, caller_ip),2831	TP_STRUCT__entry(2832		__field(dev_t, dev)2833		__field(xfs_agnumber_t, agno)2834		__field(xfs_ino_t, ino)2835		__field(int, error)2836		__field(unsigned long, caller_ip)2837	),2838	TP_fast_assign(2839		__entry->dev = cur->bc_mp->m_super->s_dev;2840		switch (cur->bc_ops->type) {2841		case XFS_BTREE_TYPE_INODE:2842			__entry->agno = 0;2843			__entry->ino = cur->bc_ino.ip->i_ino;2844			break;2845		case XFS_BTREE_TYPE_AG:2846			__entry->agno = cur->bc_ag.pag->pag_agno;2847			__entry->ino = 0;2848			break;2849		case XFS_BTREE_TYPE_MEM:2850			__entry->agno = 0;2851			__entry->ino = 0;2852			break;2853		}2854		__entry->error = error;2855		__entry->caller_ip = caller_ip;2856	),2857	TP_printk("dev %d:%d agno 0x%x ino 0x%llx error %d caller %pS",2858		  MAJOR(__entry->dev), MINOR(__entry->dev),2859		  __entry->agno,2860		  __entry->ino,2861		  __entry->error,2862		  (char *)__entry->caller_ip)2863);2864 2865#define DEFINE_BTREE_ERROR_EVENT(name) \2866DEFINE_EVENT(xfs_btree_error_class, name, \2867	TP_PROTO(struct xfs_btree_cur *cur, int error, \2868		 unsigned long caller_ip), \2869	TP_ARGS(cur, error, caller_ip))2870 2871DEFINE_RMAP_EVENT(xfs_rmap_unmap);2872DEFINE_RMAP_EVENT(xfs_rmap_unmap_done);2873DEFINE_BTREE_ERROR_EVENT(xfs_rmap_unmap_error);2874DEFINE_RMAP_EVENT(xfs_rmap_map);2875DEFINE_RMAP_EVENT(xfs_rmap_map_done);2876DEFINE_BTREE_ERROR_EVENT(xfs_rmap_map_error);2877DEFINE_RMAP_EVENT(xfs_rmap_convert);2878DEFINE_RMAP_EVENT(xfs_rmap_convert_done);2879DEFINE_BTREE_ERROR_EVENT(xfs_rmap_convert_error);2880 2881TRACE_EVENT(xfs_rmap_convert_state,2882	TP_PROTO(struct xfs_btree_cur *cur, int state,2883		 unsigned long caller_ip),2884	TP_ARGS(cur, state, caller_ip),2885	TP_STRUCT__entry(2886		__field(dev_t, dev)2887		__field(xfs_agnumber_t, agno)2888		__field(xfs_ino_t, ino)2889		__field(int, state)2890		__field(unsigned long, caller_ip)2891	),2892	TP_fast_assign(2893		__entry->dev = cur->bc_mp->m_super->s_dev;2894		switch (cur->bc_ops->type) {2895		case XFS_BTREE_TYPE_INODE:2896			__entry->agno = 0;2897			__entry->ino = cur->bc_ino.ip->i_ino;2898			break;2899		case XFS_BTREE_TYPE_AG:2900			__entry->agno = cur->bc_ag.pag->pag_agno;2901			__entry->ino = 0;2902			break;2903		case XFS_BTREE_TYPE_MEM:2904			__entry->agno = 0;2905			__entry->ino = 0;2906			break;2907		}2908		__entry->state = state;2909		__entry->caller_ip = caller_ip;2910	),2911	TP_printk("dev %d:%d agno 0x%x ino 0x%llx state %d caller %pS",2912		  MAJOR(__entry->dev), MINOR(__entry->dev),2913		  __entry->agno,2914		  __entry->ino,2915		  __entry->state,2916		  (char *)__entry->caller_ip)2917);2918 2919DECLARE_EVENT_CLASS(xfs_rmapbt_class,2920	TP_PROTO(struct xfs_btree_cur *cur,2921		 xfs_agblock_t agbno, xfs_extlen_t len,2922		 uint64_t owner, uint64_t offset, unsigned int flags),2923	TP_ARGS(cur, agbno, len, owner, offset, flags),2924	TP_STRUCT__entry(2925		__field(dev_t, dev)2926		__field(xfs_agnumber_t, agno)2927		__field(xfs_agblock_t, agbno)2928		__field(xfs_extlen_t, len)2929		__field(uint64_t, owner)2930		__field(uint64_t, offset)2931		__field(unsigned int, flags)2932	),2933	TP_fast_assign(2934		__entry->dev = cur->bc_mp->m_super->s_dev;2935		__entry->agno = cur->bc_ag.pag->pag_agno;2936		__entry->agbno = agbno;2937		__entry->len = len;2938		__entry->owner = owner;2939		__entry->offset = offset;2940		__entry->flags = flags;2941	),2942	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",2943		  MAJOR(__entry->dev), MINOR(__entry->dev),2944		  __entry->agno,2945		  __entry->agbno,2946		  __entry->len,2947		  __entry->owner,2948		  __entry->offset,2949		  __entry->flags)2950);2951#define DEFINE_RMAPBT_EVENT(name) \2952DEFINE_EVENT(xfs_rmapbt_class, name, \2953	TP_PROTO(struct xfs_btree_cur *cur, \2954		 xfs_agblock_t agbno, xfs_extlen_t len, \2955		 uint64_t owner, uint64_t offset, unsigned int flags), \2956	TP_ARGS(cur, agbno, len, owner, offset, flags))2957 2958TRACE_DEFINE_ENUM(XFS_RMAP_MAP);2959TRACE_DEFINE_ENUM(XFS_RMAP_MAP_SHARED);2960TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP);2961TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP_SHARED);2962TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT);2963TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT_SHARED);2964TRACE_DEFINE_ENUM(XFS_RMAP_ALLOC);2965TRACE_DEFINE_ENUM(XFS_RMAP_FREE);2966 2967DECLARE_EVENT_CLASS(xfs_rmap_deferred_class,2968	TP_PROTO(struct xfs_mount *mp, struct xfs_rmap_intent *ri),2969	TP_ARGS(mp, ri),2970	TP_STRUCT__entry(2971		__field(dev_t, dev)2972		__field(unsigned long long, owner)2973		__field(xfs_agnumber_t, agno)2974		__field(xfs_agblock_t, agbno)2975		__field(int, whichfork)2976		__field(xfs_fileoff_t, l_loff)2977		__field(xfs_filblks_t, l_len)2978		__field(xfs_exntst_t, l_state)2979		__field(int, op)2980	),2981	TP_fast_assign(2982		__entry->dev = mp->m_super->s_dev;2983		__entry->agno = XFS_FSB_TO_AGNO(mp, ri->ri_bmap.br_startblock);2984		__entry->agbno = XFS_FSB_TO_AGBNO(mp,2985					ri->ri_bmap.br_startblock);2986		__entry->owner = ri->ri_owner;2987		__entry->whichfork = ri->ri_whichfork;2988		__entry->l_loff = ri->ri_bmap.br_startoff;2989		__entry->l_len = ri->ri_bmap.br_blockcount;2990		__entry->l_state = ri->ri_bmap.br_state;2991		__entry->op = ri->ri_type;2992	),2993	TP_printk("dev %d:%d op %s agno 0x%x agbno 0x%x owner 0x%llx %s fileoff 0x%llx fsbcount 0x%llx state %d",2994		  MAJOR(__entry->dev), MINOR(__entry->dev),2995		  __print_symbolic(__entry->op, XFS_RMAP_INTENT_STRINGS),2996		  __entry->agno,2997		  __entry->agbno,2998		  __entry->owner,2999		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),3000		  __entry->l_loff,3001		  __entry->l_len,3002		  __entry->l_state)3003);3004#define DEFINE_RMAP_DEFERRED_EVENT(name) \3005DEFINE_EVENT(xfs_rmap_deferred_class, name, \3006	TP_PROTO(struct xfs_mount *mp, struct xfs_rmap_intent *ri), \3007	TP_ARGS(mp, ri))3008DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer);3009DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred);3010 3011DEFINE_RMAPBT_EVENT(xfs_rmap_update);3012DEFINE_RMAPBT_EVENT(xfs_rmap_insert);3013DEFINE_RMAPBT_EVENT(xfs_rmap_delete);3014DEFINE_BTREE_ERROR_EVENT(xfs_rmap_insert_error);3015DEFINE_BTREE_ERROR_EVENT(xfs_rmap_delete_error);3016DEFINE_BTREE_ERROR_EVENT(xfs_rmap_update_error);3017 3018DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_candidate);3019DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_query);3020DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_candidate);3021DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range);3022DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_result);3023DEFINE_RMAPBT_EVENT(xfs_rmap_find_right_neighbor_result);3024DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_result);3025 3026/* deferred bmbt updates */3027TRACE_DEFINE_ENUM(XFS_BMAP_MAP);3028TRACE_DEFINE_ENUM(XFS_BMAP_UNMAP);3029 3030DECLARE_EVENT_CLASS(xfs_bmap_deferred_class,3031	TP_PROTO(struct xfs_bmap_intent *bi),3032	TP_ARGS(bi),3033	TP_STRUCT__entry(3034		__field(dev_t, dev)3035		__field(dev_t, opdev)3036		__field(xfs_agnumber_t, agno)3037		__field(xfs_ino_t, ino)3038		__field(xfs_agblock_t, agbno)3039		__field(xfs_fsblock_t, rtbno)3040		__field(int, whichfork)3041		__field(xfs_fileoff_t, l_loff)3042		__field(xfs_filblks_t, l_len)3043		__field(xfs_exntst_t, l_state)3044		__field(int, op)3045	),3046	TP_fast_assign(3047		struct xfs_inode	*ip = bi->bi_owner;3048 3049		__entry->dev = ip->i_mount->m_super->s_dev;3050		if (xfs_ifork_is_realtime(ip, bi->bi_whichfork)) {3051			__entry->agno = 0;3052			__entry->agbno = 0;3053			__entry->rtbno = bi->bi_bmap.br_startblock;3054			__entry->opdev = ip->i_mount->m_rtdev_targp->bt_dev;3055		} else {3056			__entry->agno = XFS_FSB_TO_AGNO(ip->i_mount,3057						bi->bi_bmap.br_startblock);3058			__entry->agbno = XFS_FSB_TO_AGBNO(ip->i_mount,3059						bi->bi_bmap.br_startblock);3060			__entry->rtbno = 0;3061			__entry->opdev = __entry->dev;3062		}3063		__entry->ino = ip->i_ino;3064		__entry->whichfork = bi->bi_whichfork;3065		__entry->l_loff = bi->bi_bmap.br_startoff;3066		__entry->l_len = bi->bi_bmap.br_blockcount;3067		__entry->l_state = bi->bi_bmap.br_state;3068		__entry->op = bi->bi_type;3069	),3070	TP_printk("dev %d:%d op %s opdev %d:%d ino 0x%llx agno 0x%x agbno 0x%x rtbno 0x%llx %s fileoff 0x%llx fsbcount 0x%llx state %d",3071		  MAJOR(__entry->dev), MINOR(__entry->dev),3072		  __print_symbolic(__entry->op, XFS_BMAP_INTENT_STRINGS),3073		  MAJOR(__entry->opdev), MINOR(__entry->opdev),3074		  __entry->ino,3075		  __entry->agno,3076		  __entry->agbno,3077		  __entry->rtbno,3078		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),3079		  __entry->l_loff,3080		  __entry->l_len,3081		  __entry->l_state)3082);3083#define DEFINE_BMAP_DEFERRED_EVENT(name) \3084DEFINE_EVENT(xfs_bmap_deferred_class, name, \3085	TP_PROTO(struct xfs_bmap_intent *bi), \3086	TP_ARGS(bi))3087DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_defer);3088DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred);3089 3090/* per-AG reservation */3091DECLARE_EVENT_CLASS(xfs_ag_resv_class,3092	TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type resv,3093		 xfs_extlen_t len),3094	TP_ARGS(pag, resv, len),3095	TP_STRUCT__entry(3096		__field(dev_t, dev)3097		__field(xfs_agnumber_t, agno)3098		__field(int, resv)3099		__field(xfs_extlen_t, freeblks)3100		__field(xfs_extlen_t, flcount)3101		__field(xfs_extlen_t, reserved)3102		__field(xfs_extlen_t, asked)3103		__field(xfs_extlen_t, len)3104	),3105	TP_fast_assign(3106		struct xfs_ag_resv	*r = xfs_perag_resv(pag, resv);3107 3108		__entry->dev = pag->pag_mount->m_super->s_dev;3109		__entry->agno = pag->pag_agno;3110		__entry->resv = resv;3111		__entry->freeblks = pag->pagf_freeblks;3112		__entry->flcount = pag->pagf_flcount;3113		__entry->reserved = r ? r->ar_reserved : 0;3114		__entry->asked = r ? r->ar_asked : 0;3115		__entry->len = len;3116	),3117	TP_printk("dev %d:%d agno 0x%x resv %d freeblks %u flcount %u "3118		  "resv %u ask %u len %u",3119		  MAJOR(__entry->dev), MINOR(__entry->dev),3120		  __entry->agno,3121		  __entry->resv,3122		  __entry->freeblks,3123		  __entry->flcount,3124		  __entry->reserved,3125		  __entry->asked,3126		  __entry->len)3127)3128#define DEFINE_AG_RESV_EVENT(name) \3129DEFINE_EVENT(xfs_ag_resv_class, name, \3130	TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \3131		 xfs_extlen_t len), \3132	TP_ARGS(pag, type, len))3133 3134/* per-AG reservation tracepoints */3135DEFINE_AG_RESV_EVENT(xfs_ag_resv_init);3136DEFINE_AG_RESV_EVENT(xfs_ag_resv_free);3137DEFINE_AG_RESV_EVENT(xfs_ag_resv_alloc_extent);3138DEFINE_AG_RESV_EVENT(xfs_ag_resv_free_extent);3139DEFINE_AG_RESV_EVENT(xfs_ag_resv_critical);3140DEFINE_AG_RESV_EVENT(xfs_ag_resv_needed);3141 3142/* simple AG-based error/%ip tracepoint class */3143DECLARE_EVENT_CLASS(xfs_ag_error_class,3144	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error,3145		 unsigned long caller_ip),3146	TP_ARGS(mp, agno, error, caller_ip),3147	TP_STRUCT__entry(3148		__field(dev_t, dev)3149		__field(xfs_agnumber_t, agno)3150		__field(int, error)3151		__field(unsigned long, caller_ip)3152	),3153	TP_fast_assign(3154		__entry->dev = mp->m_super->s_dev;3155		__entry->agno = agno;3156		__entry->error = error;3157		__entry->caller_ip = caller_ip;3158	),3159	TP_printk("dev %d:%d agno 0x%x error %d caller %pS",3160		  MAJOR(__entry->dev), MINOR(__entry->dev),3161		  __entry->agno,3162		  __entry->error,3163		  (char *)__entry->caller_ip)3164);3165 3166#define DEFINE_AG_ERROR_EVENT(name) \3167DEFINE_EVENT(xfs_ag_error_class, name, \3168	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \3169		 unsigned long caller_ip), \3170	TP_ARGS(mp, agno, error, caller_ip))3171DEFINE_AG_ERROR_EVENT(xfs_ag_resv_init_error);3172 3173/* refcount tracepoint classes */3174 3175DECLARE_EVENT_CLASS(xfs_refcount_class,3176	TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t agbno,3177		xfs_extlen_t len),3178	TP_ARGS(cur, agbno, len),3179	TP_STRUCT__entry(3180		__field(dev_t, dev)3181		__field(xfs_agnumber_t, agno)3182		__field(xfs_agblock_t, agbno)3183		__field(xfs_extlen_t, len)3184	),3185	TP_fast_assign(3186		__entry->dev = cur->bc_mp->m_super->s_dev;3187		__entry->agno = cur->bc_ag.pag->pag_agno;3188		__entry->agbno = agbno;3189		__entry->len = len;3190	),3191	TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",3192		  MAJOR(__entry->dev), MINOR(__entry->dev),3193		  __entry->agno,3194		  __entry->agbno,3195		  __entry->len)3196);3197#define DEFINE_REFCOUNT_EVENT(name) \3198DEFINE_EVENT(xfs_refcount_class, name, \3199	TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t agbno, \3200		xfs_extlen_t len), \3201	TP_ARGS(cur, agbno, len))3202 3203TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi);3204TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi);3205TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi);3206TRACE_EVENT(xfs_refcount_lookup,3207	TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t agbno,3208		xfs_lookup_t dir),3209	TP_ARGS(cur, agbno, dir),3210	TP_STRUCT__entry(3211		__field(dev_t, dev)3212		__field(xfs_agnumber_t, agno)3213		__field(xfs_agblock_t, agbno)3214		__field(xfs_lookup_t, dir)3215	),3216	TP_fast_assign(3217		__entry->dev = cur->bc_mp->m_super->s_dev;3218		__entry->agno = cur->bc_ag.pag->pag_agno;3219		__entry->agbno = agbno;3220		__entry->dir = dir;3221	),3222	TP_printk("dev %d:%d agno 0x%x agbno 0x%x cmp %s(%d)",3223		  MAJOR(__entry->dev), MINOR(__entry->dev),3224		  __entry->agno,3225		  __entry->agbno,3226		  __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR),3227		  __entry->dir)3228)3229 3230/* single-rcext tracepoint class */3231DECLARE_EVENT_CLASS(xfs_refcount_extent_class,3232	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec),3233	TP_ARGS(cur, irec),3234	TP_STRUCT__entry(3235		__field(dev_t, dev)3236		__field(xfs_agnumber_t, agno)3237		__field(enum xfs_refc_domain, domain)3238		__field(xfs_agblock_t, startblock)3239		__field(xfs_extlen_t, blockcount)3240		__field(xfs_nlink_t, refcount)3241	),3242	TP_fast_assign(3243		__entry->dev = cur->bc_mp->m_super->s_dev;3244		__entry->agno = cur->bc_ag.pag->pag_agno;3245		__entry->domain = irec->rc_domain;3246		__entry->startblock = irec->rc_startblock;3247		__entry->blockcount = irec->rc_blockcount;3248		__entry->refcount = irec->rc_refcount;3249	),3250	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u",3251		  MAJOR(__entry->dev), MINOR(__entry->dev),3252		  __entry->agno,3253		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),3254		  __entry->startblock,3255		  __entry->blockcount,3256		  __entry->refcount)3257)3258 3259#define DEFINE_REFCOUNT_EXTENT_EVENT(name) \3260DEFINE_EVENT(xfs_refcount_extent_class, name, \3261	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec), \3262	TP_ARGS(cur, irec))3263 3264/* single-rcext and an agbno tracepoint class */3265DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class,3266	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec,3267		 xfs_agblock_t agbno),3268	TP_ARGS(cur, irec, agbno),3269	TP_STRUCT__entry(3270		__field(dev_t, dev)3271		__field(xfs_agnumber_t, agno)3272		__field(enum xfs_refc_domain, domain)3273		__field(xfs_agblock_t, startblock)3274		__field(xfs_extlen_t, blockcount)3275		__field(xfs_nlink_t, refcount)3276		__field(xfs_agblock_t, agbno)3277	),3278	TP_fast_assign(3279		__entry->dev = cur->bc_mp->m_super->s_dev;3280		__entry->agno = cur->bc_ag.pag->pag_agno;3281		__entry->domain = irec->rc_domain;3282		__entry->startblock = irec->rc_startblock;3283		__entry->blockcount = irec->rc_blockcount;3284		__entry->refcount = irec->rc_refcount;3285		__entry->agbno = agbno;3286	),3287	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",3288		  MAJOR(__entry->dev), MINOR(__entry->dev),3289		  __entry->agno,3290		  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),3291		  __entry->startblock,3292		  __entry->blockcount,3293		  __entry->refcount,3294		  __entry->agbno)3295)3296 3297#define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \3298DEFINE_EVENT(xfs_refcount_extent_at_class, name, \3299	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec, \3300		 xfs_agblock_t agbno), \3301	TP_ARGS(cur, irec, agbno))3302 3303/* double-rcext tracepoint class */3304DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,3305	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1,3306		struct xfs_refcount_irec *i2),3307	TP_ARGS(cur, i1, i2),3308	TP_STRUCT__entry(3309		__field(dev_t, dev)3310		__field(xfs_agnumber_t, agno)3311		__field(enum xfs_refc_domain, i1_domain)3312		__field(xfs_agblock_t, i1_startblock)3313		__field(xfs_extlen_t, i1_blockcount)3314		__field(xfs_nlink_t, i1_refcount)3315		__field(enum xfs_refc_domain, i2_domain)3316		__field(xfs_agblock_t, i2_startblock)3317		__field(xfs_extlen_t, i2_blockcount)3318		__field(xfs_nlink_t, i2_refcount)3319	),3320	TP_fast_assign(3321		__entry->dev = cur->bc_mp->m_super->s_dev;3322		__entry->agno = cur->bc_ag.pag->pag_agno;3323		__entry->i1_domain = i1->rc_domain;3324		__entry->i1_startblock = i1->rc_startblock;3325		__entry->i1_blockcount = i1->rc_blockcount;3326		__entry->i1_refcount = i1->rc_refcount;3327		__entry->i2_domain = i2->rc_domain;3328		__entry->i2_startblock = i2->rc_startblock;3329		__entry->i2_blockcount = i2->rc_blockcount;3330		__entry->i2_refcount = i2->rc_refcount;3331	),3332	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "3333		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u",3334		  MAJOR(__entry->dev), MINOR(__entry->dev),3335		  __entry->agno,3336		  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),3337		  __entry->i1_startblock,3338		  __entry->i1_blockcount,3339		  __entry->i1_refcount,3340		  __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS),3341		  __entry->i2_startblock,3342		  __entry->i2_blockcount,3343		  __entry->i2_refcount)3344)3345 3346#define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \3347DEFINE_EVENT(xfs_refcount_double_extent_class, name, \3348	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1, \3349		 struct xfs_refcount_irec *i2), \3350	TP_ARGS(cur, i1, i2))3351 3352/* double-rcext and an agbno tracepoint class */3353DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,3354	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1,3355		 struct xfs_refcount_irec *i2, xfs_agblock_t agbno),3356	TP_ARGS(cur, i1, i2, agbno),3357	TP_STRUCT__entry(3358		__field(dev_t, dev)3359		__field(xfs_agnumber_t, agno)3360		__field(enum xfs_refc_domain, i1_domain)3361		__field(xfs_agblock_t, i1_startblock)3362		__field(xfs_extlen_t, i1_blockcount)3363		__field(xfs_nlink_t, i1_refcount)3364		__field(enum xfs_refc_domain, i2_domain)3365		__field(xfs_agblock_t, i2_startblock)3366		__field(xfs_extlen_t, i2_blockcount)3367		__field(xfs_nlink_t, i2_refcount)3368		__field(xfs_agblock_t, agbno)3369	),3370	TP_fast_assign(3371		__entry->dev = cur->bc_mp->m_super->s_dev;3372		__entry->agno = cur->bc_ag.pag->pag_agno;3373		__entry->i1_domain = i1->rc_domain;3374		__entry->i1_startblock = i1->rc_startblock;3375		__entry->i1_blockcount = i1->rc_blockcount;3376		__entry->i1_refcount = i1->rc_refcount;3377		__entry->i2_domain = i2->rc_domain;3378		__entry->i2_startblock = i2->rc_startblock;3379		__entry->i2_blockcount = i2->rc_blockcount;3380		__entry->i2_refcount = i2->rc_refcount;3381		__entry->agbno = agbno;3382	),3383	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "3384		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",3385		  MAJOR(__entry->dev), MINOR(__entry->dev),3386		  __entry->agno,3387		  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),3388		  __entry->i1_startblock,3389		  __entry->i1_blockcount,3390		  __entry->i1_refcount,3391		  __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS),3392		  __entry->i2_startblock,3393		  __entry->i2_blockcount,3394		  __entry->i2_refcount,3395		  __entry->agbno)3396)3397 3398#define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \3399DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \3400	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1, \3401		struct xfs_refcount_irec *i2, xfs_agblock_t agbno), \3402	TP_ARGS(cur, i1, i2, agbno))3403 3404/* triple-rcext tracepoint class */3405DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,3406	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1,3407		struct xfs_refcount_irec *i2, struct xfs_refcount_irec *i3),3408	TP_ARGS(cur, i1, i2, i3),3409	TP_STRUCT__entry(3410		__field(dev_t, dev)3411		__field(xfs_agnumber_t, agno)3412		__field(enum xfs_refc_domain, i1_domain)3413		__field(xfs_agblock_t, i1_startblock)3414		__field(xfs_extlen_t, i1_blockcount)3415		__field(xfs_nlink_t, i1_refcount)3416		__field(enum xfs_refc_domain, i2_domain)3417		__field(xfs_agblock_t, i2_startblock)3418		__field(xfs_extlen_t, i2_blockcount)3419		__field(xfs_nlink_t, i2_refcount)3420		__field(enum xfs_refc_domain, i3_domain)3421		__field(xfs_agblock_t, i3_startblock)3422		__field(xfs_extlen_t, i3_blockcount)3423		__field(xfs_nlink_t, i3_refcount)3424	),3425	TP_fast_assign(3426		__entry->dev = cur->bc_mp->m_super->s_dev;3427		__entry->agno = cur->bc_ag.pag->pag_agno;3428		__entry->i1_domain = i1->rc_domain;3429		__entry->i1_startblock = i1->rc_startblock;3430		__entry->i1_blockcount = i1->rc_blockcount;3431		__entry->i1_refcount = i1->rc_refcount;3432		__entry->i2_domain = i2->rc_domain;3433		__entry->i2_startblock = i2->rc_startblock;3434		__entry->i2_blockcount = i2->rc_blockcount;3435		__entry->i2_refcount = i2->rc_refcount;3436		__entry->i3_domain = i3->rc_domain;3437		__entry->i3_startblock = i3->rc_startblock;3438		__entry->i3_blockcount = i3->rc_blockcount;3439		__entry->i3_refcount = i3->rc_refcount;3440	),3441	TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "3442		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "3443		  "dom %s agbno 0x%x fsbcount 0x%x refcount %u",3444		  MAJOR(__entry->dev), MINOR(__entry->dev),3445		  __entry->agno,3446		  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),3447		  __entry->i1_startblock,3448		  __entry->i1_blockcount,3449		  __entry->i1_refcount,3450		  __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS),3451		  __entry->i2_startblock,3452		  __entry->i2_blockcount,3453		  __entry->i2_refcount,3454		  __print_symbolic(__entry->i3_domain, XFS_REFC_DOMAIN_STRINGS),3455		  __entry->i3_startblock,3456		  __entry->i3_blockcount,3457		  __entry->i3_refcount)3458);3459 3460#define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \3461DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \3462	TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1, \3463		struct xfs_refcount_irec *i2, struct xfs_refcount_irec *i3), \3464	TP_ARGS(cur, i1, i2, i3))3465 3466/* refcount btree tracepoints */3467DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get);3468DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update);3469DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_insert);3470DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_delete);3471DEFINE_BTREE_ERROR_EVENT(xfs_refcount_insert_error);3472DEFINE_BTREE_ERROR_EVENT(xfs_refcount_delete_error);3473DEFINE_BTREE_ERROR_EVENT(xfs_refcount_update_error);3474 3475/* refcount adjustment tracepoints */3476DEFINE_REFCOUNT_EVENT(xfs_refcount_increase);3477DEFINE_REFCOUNT_EVENT(xfs_refcount_decrease);3478DEFINE_REFCOUNT_EVENT(xfs_refcount_cow_increase);3479DEFINE_REFCOUNT_EVENT(xfs_refcount_cow_decrease);3480DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents);3481DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent);3482DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_extent);3483DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent);3484DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent);3485DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent);3486DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent);3487DEFINE_BTREE_ERROR_EVENT(xfs_refcount_adjust_error);3488DEFINE_BTREE_ERROR_EVENT(xfs_refcount_adjust_cow_error);3489DEFINE_BTREE_ERROR_EVENT(xfs_refcount_merge_center_extents_error);3490DEFINE_BTREE_ERROR_EVENT(xfs_refcount_modify_extent_error);3491DEFINE_BTREE_ERROR_EVENT(xfs_refcount_split_extent_error);3492DEFINE_BTREE_ERROR_EVENT(xfs_refcount_merge_left_extent_error);3493DEFINE_BTREE_ERROR_EVENT(xfs_refcount_merge_right_extent_error);3494DEFINE_BTREE_ERROR_EVENT(xfs_refcount_find_left_extent_error);3495DEFINE_BTREE_ERROR_EVENT(xfs_refcount_find_right_extent_error);3496 3497/* reflink helpers */3498DEFINE_REFCOUNT_EVENT(xfs_refcount_find_shared);3499DEFINE_REFCOUNT_EVENT(xfs_refcount_find_shared_result);3500DEFINE_BTREE_ERROR_EVENT(xfs_refcount_find_shared_error);3501 3502TRACE_DEFINE_ENUM(XFS_REFCOUNT_INCREASE);3503TRACE_DEFINE_ENUM(XFS_REFCOUNT_DECREASE);3504TRACE_DEFINE_ENUM(XFS_REFCOUNT_ALLOC_COW);3505TRACE_DEFINE_ENUM(XFS_REFCOUNT_FREE_COW);3506 3507DECLARE_EVENT_CLASS(xfs_refcount_deferred_class,3508	TP_PROTO(struct xfs_mount *mp, struct xfs_refcount_intent *refc),3509	TP_ARGS(mp, refc),3510	TP_STRUCT__entry(3511		__field(dev_t, dev)3512		__field(xfs_agnumber_t, agno)3513		__field(int, op)3514		__field(xfs_agblock_t, agbno)3515		__field(xfs_extlen_t, len)3516	),3517	TP_fast_assign(3518		__entry->dev = mp->m_super->s_dev;3519		__entry->agno = XFS_FSB_TO_AGNO(mp, refc->ri_startblock);3520		__entry->op = refc->ri_type;3521		__entry->agbno = XFS_FSB_TO_AGBNO(mp, refc->ri_startblock);3522		__entry->len = refc->ri_blockcount;3523	),3524	TP_printk("dev %d:%d op %s agno 0x%x agbno 0x%x fsbcount 0x%x",3525		  MAJOR(__entry->dev), MINOR(__entry->dev),3526		  __print_symbolic(__entry->op, XFS_REFCOUNT_INTENT_STRINGS),3527		  __entry->agno,3528		  __entry->agbno,3529		  __entry->len)3530);3531#define DEFINE_REFCOUNT_DEFERRED_EVENT(name) \3532DEFINE_EVENT(xfs_refcount_deferred_class, name, \3533	TP_PROTO(struct xfs_mount *mp, struct xfs_refcount_intent *refc), \3534	TP_ARGS(mp, refc))3535DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_defer);3536DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_deferred);3537DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_finish_one_leftover);3538 3539/* simple inode-based error/%ip tracepoint class */3540DECLARE_EVENT_CLASS(xfs_inode_error_class,3541	TP_PROTO(struct xfs_inode *ip, int error, unsigned long caller_ip),3542	TP_ARGS(ip, error, caller_ip),3543	TP_STRUCT__entry(3544		__field(dev_t, dev)3545		__field(xfs_ino_t, ino)3546		__field(int, error)3547		__field(unsigned long, caller_ip)3548	),3549	TP_fast_assign(3550		__entry->dev = VFS_I(ip)->i_sb->s_dev;3551		__entry->ino = ip->i_ino;3552		__entry->error = error;3553		__entry->caller_ip = caller_ip;3554	),3555	TP_printk("dev %d:%d ino 0x%llx error %d caller %pS",3556		  MAJOR(__entry->dev), MINOR(__entry->dev),3557		  __entry->ino,3558		  __entry->error,3559		  (char *)__entry->caller_ip)3560);3561 3562#define DEFINE_INODE_ERROR_EVENT(name) \3563DEFINE_EVENT(xfs_inode_error_class, name, \3564	TP_PROTO(struct xfs_inode *ip, int error, \3565		 unsigned long caller_ip), \3566	TP_ARGS(ip, error, caller_ip))3567 3568/* reflink tracepoint classes */3569 3570/* two-file io tracepoint class */3571DECLARE_EVENT_CLASS(xfs_double_io_class,3572	TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len,3573		 struct xfs_inode *dest, xfs_off_t doffset),3574	TP_ARGS(src, soffset, len, dest, doffset),3575	TP_STRUCT__entry(3576		__field(dev_t, dev)3577		__field(xfs_ino_t, src_ino)3578		__field(loff_t, src_isize)3579		__field(loff_t, src_disize)3580		__field(loff_t, src_offset)3581		__field(long long, len)3582		__field(xfs_ino_t, dest_ino)3583		__field(loff_t, dest_isize)3584		__field(loff_t, dest_disize)3585		__field(loff_t, dest_offset)3586	),3587	TP_fast_assign(3588		__entry->dev = VFS_I(src)->i_sb->s_dev;3589		__entry->src_ino = src->i_ino;3590		__entry->src_isize = VFS_I(src)->i_size;3591		__entry->src_disize = src->i_disk_size;3592		__entry->src_offset = soffset;3593		__entry->len = len;3594		__entry->dest_ino = dest->i_ino;3595		__entry->dest_isize = VFS_I(dest)->i_size;3596		__entry->dest_disize = dest->i_disk_size;3597		__entry->dest_offset = doffset;3598	),3599	TP_printk("dev %d:%d bytecount 0x%llx "3600		  "ino 0x%llx isize 0x%llx disize 0x%llx pos 0x%llx -> "3601		  "ino 0x%llx isize 0x%llx disize 0x%llx pos 0x%llx",3602		  MAJOR(__entry->dev), MINOR(__entry->dev),3603		  __entry->len,3604		  __entry->src_ino,3605		  __entry->src_isize,3606		  __entry->src_disize,3607		  __entry->src_offset,3608		  __entry->dest_ino,3609		  __entry->dest_isize,3610		  __entry->dest_disize,3611		  __entry->dest_offset)3612)3613 3614#define DEFINE_DOUBLE_IO_EVENT(name)	\3615DEFINE_EVENT(xfs_double_io_class, name,	\3616	TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \3617		 struct xfs_inode *dest, xfs_off_t doffset), \3618	TP_ARGS(src, soffset, len, dest, doffset))3619 3620/* inode/irec events */3621DECLARE_EVENT_CLASS(xfs_inode_irec_class,3622	TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec),3623	TP_ARGS(ip, irec),3624	TP_STRUCT__entry(3625		__field(dev_t, dev)3626		__field(xfs_ino_t, ino)3627		__field(xfs_fileoff_t, lblk)3628		__field(xfs_extlen_t, len)3629		__field(xfs_fsblock_t, pblk)3630		__field(int, state)3631	),3632	TP_fast_assign(3633		__entry->dev = VFS_I(ip)->i_sb->s_dev;3634		__entry->ino = ip->i_ino;3635		__entry->lblk = irec->br_startoff;3636		__entry->len = irec->br_blockcount;3637		__entry->pblk = irec->br_startblock;3638		__entry->state = irec->br_state;3639	),3640	TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx fsbcount 0x%x startblock 0x%llx st %d",3641		  MAJOR(__entry->dev), MINOR(__entry->dev),3642		  __entry->ino,3643		  __entry->lblk,3644		  __entry->len,3645		  __entry->pblk,3646		  __entry->state)3647);3648#define DEFINE_INODE_IREC_EVENT(name) \3649DEFINE_EVENT(xfs_inode_irec_class, name, \3650	TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), \3651	TP_ARGS(ip, irec))3652 3653/* inode iomap invalidation events */3654DECLARE_EVENT_CLASS(xfs_wb_invalid_class,3655	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap, unsigned int wpcseq, int whichfork),3656	TP_ARGS(ip, iomap, wpcseq, whichfork),3657	TP_STRUCT__entry(3658		__field(dev_t, dev)3659		__field(xfs_ino_t, ino)3660		__field(u64, addr)3661		__field(loff_t, pos)3662		__field(u64, len)3663		__field(u16, type)3664		__field(u16, flags)3665		__field(u32, wpcseq)3666		__field(u32, forkseq)3667	),3668	TP_fast_assign(3669		__entry->dev = VFS_I(ip)->i_sb->s_dev;3670		__entry->ino = ip->i_ino;3671		__entry->addr = iomap->addr;3672		__entry->pos = iomap->offset;3673		__entry->len = iomap->length;3674		__entry->type = iomap->type;3675		__entry->flags = iomap->flags;3676		__entry->wpcseq = wpcseq;3677		__entry->forkseq = READ_ONCE(xfs_ifork_ptr(ip, whichfork)->if_seq);3678	),3679	TP_printk("dev %d:%d ino 0x%llx pos 0x%llx addr 0x%llx bytecount 0x%llx type 0x%x flags 0x%x wpcseq 0x%x forkseq 0x%x",3680		  MAJOR(__entry->dev), MINOR(__entry->dev),3681		  __entry->ino,3682		  __entry->pos,3683		  __entry->addr,3684		  __entry->len,3685		  __entry->type,3686		  __entry->flags,3687		  __entry->wpcseq,3688		  __entry->forkseq)3689);3690#define DEFINE_WB_INVALID_EVENT(name) \3691DEFINE_EVENT(xfs_wb_invalid_class, name, \3692	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap, unsigned int wpcseq, int whichfork), \3693	TP_ARGS(ip, iomap, wpcseq, whichfork))3694DEFINE_WB_INVALID_EVENT(xfs_wb_cow_iomap_invalid);3695DEFINE_WB_INVALID_EVENT(xfs_wb_data_iomap_invalid);3696 3697DECLARE_EVENT_CLASS(xfs_iomap_invalid_class,3698	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap),3699	TP_ARGS(ip, iomap),3700	TP_STRUCT__entry(3701		__field(dev_t, dev)3702		__field(xfs_ino_t, ino)3703		__field(u64, addr)3704		__field(loff_t, pos)3705		__field(u64, len)3706		__field(u64, validity_cookie)3707		__field(u64, inodeseq)3708		__field(u16, type)3709		__field(u16, flags)3710	),3711	TP_fast_assign(3712		__entry->dev = VFS_I(ip)->i_sb->s_dev;3713		__entry->ino = ip->i_ino;3714		__entry->addr = iomap->addr;3715		__entry->pos = iomap->offset;3716		__entry->len = iomap->length;3717		__entry->validity_cookie = iomap->validity_cookie;3718		__entry->type = iomap->type;3719		__entry->flags = iomap->flags;3720		__entry->inodeseq = xfs_iomap_inode_sequence(ip, iomap->flags);3721	),3722	TP_printk("dev %d:%d ino 0x%llx pos 0x%llx addr 0x%llx bytecount 0x%llx type 0x%x flags 0x%x validity_cookie 0x%llx inodeseq 0x%llx",3723		  MAJOR(__entry->dev), MINOR(__entry->dev),3724		  __entry->ino,3725		  __entry->pos,3726		  __entry->addr,3727		  __entry->len,3728		  __entry->type,3729		  __entry->flags,3730		  __entry->validity_cookie,3731		  __entry->inodeseq)3732);3733#define DEFINE_IOMAP_INVALID_EVENT(name) \3734DEFINE_EVENT(xfs_iomap_invalid_class, name, \3735	TP_PROTO(struct xfs_inode *ip, const struct iomap *iomap), \3736	TP_ARGS(ip, iomap))3737DEFINE_IOMAP_INVALID_EVENT(xfs_iomap_invalid);3738 3739/* refcount/reflink tracepoint definitions */3740 3741/* reflink tracepoints */3742DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag);3743DEFINE_INODE_EVENT(xfs_reflink_unset_inode_flag);3744DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size);3745TRACE_EVENT(xfs_reflink_remap_blocks,3746	TP_PROTO(struct xfs_inode *src, xfs_fileoff_t soffset,3747		 xfs_filblks_t len, struct xfs_inode *dest,3748		 xfs_fileoff_t doffset),3749	TP_ARGS(src, soffset, len, dest, doffset),3750	TP_STRUCT__entry(3751		__field(dev_t, dev)3752		__field(xfs_ino_t, src_ino)3753		__field(xfs_fileoff_t, src_lblk)3754		__field(xfs_filblks_t, len)3755		__field(xfs_ino_t, dest_ino)3756		__field(xfs_fileoff_t, dest_lblk)3757	),3758	TP_fast_assign(3759		__entry->dev = VFS_I(src)->i_sb->s_dev;3760		__entry->src_ino = src->i_ino;3761		__entry->src_lblk = soffset;3762		__entry->len = len;3763		__entry->dest_ino = dest->i_ino;3764		__entry->dest_lblk = doffset;3765	),3766	TP_printk("dev %d:%d fsbcount 0x%llx "3767		  "ino 0x%llx fileoff 0x%llx -> ino 0x%llx fileoff 0x%llx",3768		  MAJOR(__entry->dev), MINOR(__entry->dev),3769		  __entry->len,3770		  __entry->src_ino,3771		  __entry->src_lblk,3772		  __entry->dest_ino,3773		  __entry->dest_lblk)3774);3775DEFINE_DOUBLE_IO_EVENT(xfs_reflink_remap_range);3776DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error);3777DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error);3778DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error);3779DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_blocks_error);3780DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_extent_error);3781DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_src);3782DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_dest);3783 3784/* dedupe tracepoints */3785DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents);3786DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error);3787 3788/* ioctl tracepoints */3789TRACE_EVENT(xfs_ioctl_clone,3790	TP_PROTO(struct inode *src, struct inode *dest),3791	TP_ARGS(src, dest),3792	TP_STRUCT__entry(3793		__field(dev_t, dev)3794		__field(unsigned long, src_ino)3795		__field(loff_t, src_isize)3796		__field(unsigned long, dest_ino)3797		__field(loff_t, dest_isize)3798	),3799	TP_fast_assign(3800		__entry->dev = src->i_sb->s_dev;3801		__entry->src_ino = src->i_ino;3802		__entry->src_isize = i_size_read(src);3803		__entry->dest_ino = dest->i_ino;3804		__entry->dest_isize = i_size_read(dest);3805	),3806	TP_printk("dev %d:%d ino 0x%lx isize 0x%llx -> ino 0x%lx isize 0x%llx",3807		  MAJOR(__entry->dev), MINOR(__entry->dev),3808		  __entry->src_ino,3809		  __entry->src_isize,3810		  __entry->dest_ino,3811		  __entry->dest_isize)3812);3813 3814/* unshare tracepoints */3815DEFINE_SIMPLE_IO_EVENT(xfs_reflink_unshare);3816DEFINE_INODE_ERROR_EVENT(xfs_reflink_unshare_error);3817 3818/* copy on write */3819DEFINE_INODE_IREC_EVENT(xfs_reflink_trim_around_shared);3820DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_found);3821DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc);3822DEFINE_INODE_IREC_EVENT(xfs_reflink_convert_cow);3823 3824DEFINE_SIMPLE_IO_EVENT(xfs_reflink_cancel_cow_range);3825DEFINE_SIMPLE_IO_EVENT(xfs_reflink_end_cow);3826DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap_from);3827DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap_to);3828 3829DEFINE_INODE_ERROR_EVENT(xfs_reflink_cancel_cow_range_error);3830DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_cow_error);3831 3832 3833DEFINE_INODE_IREC_EVENT(xfs_reflink_cancel_cow);3834 3835/* rmap swapext tracepoints */3836DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap);3837DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap_piece);3838DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error);3839 3840/* fsmap traces */3841DECLARE_EVENT_CLASS(xfs_fsmap_class,3842	TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno,3843		 const struct xfs_rmap_irec *rmap),3844	TP_ARGS(mp, keydev, agno, rmap),3845	TP_STRUCT__entry(3846		__field(dev_t, dev)3847		__field(dev_t, keydev)3848		__field(xfs_agnumber_t, agno)3849		__field(xfs_fsblock_t, bno)3850		__field(xfs_filblks_t, len)3851		__field(uint64_t, owner)3852		__field(uint64_t, offset)3853		__field(unsigned int, flags)3854	),3855	TP_fast_assign(3856		__entry->dev = mp->m_super->s_dev;3857		__entry->keydev = new_decode_dev(keydev);3858		__entry->agno = agno;3859		__entry->bno = rmap->rm_startblock;3860		__entry->len = rmap->rm_blockcount;3861		__entry->owner = rmap->rm_owner;3862		__entry->offset = rmap->rm_offset;3863		__entry->flags = rmap->rm_flags;3864	),3865	TP_printk("dev %d:%d keydev %d:%d agno 0x%x startblock 0x%llx fsbcount 0x%llx owner 0x%llx fileoff 0x%llx flags 0x%x",3866		  MAJOR(__entry->dev), MINOR(__entry->dev),3867		  MAJOR(__entry->keydev), MINOR(__entry->keydev),3868		  __entry->agno,3869		  __entry->bno,3870		  __entry->len,3871		  __entry->owner,3872		  __entry->offset,3873		  __entry->flags)3874)3875#define DEFINE_FSMAP_EVENT(name) \3876DEFINE_EVENT(xfs_fsmap_class, name, \3877	TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \3878		 const struct xfs_rmap_irec *rmap), \3879	TP_ARGS(mp, keydev, agno, rmap))3880DEFINE_FSMAP_EVENT(xfs_fsmap_low_key);3881DEFINE_FSMAP_EVENT(xfs_fsmap_high_key);3882DEFINE_FSMAP_EVENT(xfs_fsmap_mapping);3883 3884DECLARE_EVENT_CLASS(xfs_fsmap_linear_class,3885	TP_PROTO(struct xfs_mount *mp, u32 keydev, uint64_t bno),3886	TP_ARGS(mp, keydev, bno),3887	TP_STRUCT__entry(3888		__field(dev_t, dev)3889		__field(dev_t, keydev)3890		__field(xfs_fsblock_t, bno)3891	),3892	TP_fast_assign(3893		__entry->dev = mp->m_super->s_dev;3894		__entry->keydev = new_decode_dev(keydev);3895		__entry->bno = bno;3896	),3897	TP_printk("dev %d:%d keydev %d:%d bno 0x%llx",3898		  MAJOR(__entry->dev), MINOR(__entry->dev),3899		  MAJOR(__entry->keydev), MINOR(__entry->keydev),3900		  __entry->bno)3901)3902#define DEFINE_FSMAP_LINEAR_EVENT(name) \3903DEFINE_EVENT(xfs_fsmap_linear_class, name, \3904	TP_PROTO(struct xfs_mount *mp, u32 keydev, uint64_t bno), \3905	TP_ARGS(mp, keydev, bno))3906DEFINE_FSMAP_LINEAR_EVENT(xfs_fsmap_low_key_linear);3907DEFINE_FSMAP_LINEAR_EVENT(xfs_fsmap_high_key_linear);3908 3909DECLARE_EVENT_CLASS(xfs_getfsmap_class,3910	TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap),3911	TP_ARGS(mp, fsmap),3912	TP_STRUCT__entry(3913		__field(dev_t, dev)3914		__field(dev_t, keydev)3915		__field(xfs_daddr_t, block)3916		__field(xfs_daddr_t, len)3917		__field(uint64_t, owner)3918		__field(uint64_t, offset)3919		__field(uint64_t, flags)3920	),3921	TP_fast_assign(3922		__entry->dev = mp->m_super->s_dev;3923		__entry->keydev = new_decode_dev(fsmap->fmr_device);3924		__entry->block = fsmap->fmr_physical;3925		__entry->len = fsmap->fmr_length;3926		__entry->owner = fsmap->fmr_owner;3927		__entry->offset = fsmap->fmr_offset;3928		__entry->flags = fsmap->fmr_flags;3929	),3930	TP_printk("dev %d:%d keydev %d:%d daddr 0x%llx bbcount 0x%llx owner 0x%llx fileoff_daddr 0x%llx flags 0x%llx",3931		  MAJOR(__entry->dev), MINOR(__entry->dev),3932		  MAJOR(__entry->keydev), MINOR(__entry->keydev),3933		  __entry->block,3934		  __entry->len,3935		  __entry->owner,3936		  __entry->offset,3937		  __entry->flags)3938)3939#define DEFINE_GETFSMAP_EVENT(name) \3940DEFINE_EVENT(xfs_getfsmap_class, name, \3941	TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), \3942	TP_ARGS(mp, fsmap))3943DEFINE_GETFSMAP_EVENT(xfs_getfsmap_low_key);3944DEFINE_GETFSMAP_EVENT(xfs_getfsmap_high_key);3945DEFINE_GETFSMAP_EVENT(xfs_getfsmap_mapping);3946 3947DECLARE_EVENT_CLASS(xfs_trans_resv_class,3948	TP_PROTO(struct xfs_mount *mp, unsigned int type,3949		 struct xfs_trans_res *res),3950	TP_ARGS(mp, type, res),3951	TP_STRUCT__entry(3952		__field(dev_t, dev)3953		__field(int, type)3954		__field(uint, logres)3955		__field(int, logcount)3956		__field(int, logflags)3957	),3958	TP_fast_assign(3959		__entry->dev = mp->m_super->s_dev;3960		__entry->type = type;3961		__entry->logres = res->tr_logres;3962		__entry->logcount = res->tr_logcount;3963		__entry->logflags = res->tr_logflags;3964	),3965	TP_printk("dev %d:%d type %d logres %u logcount %d flags 0x%x",3966		  MAJOR(__entry->dev), MINOR(__entry->dev),3967		  __entry->type,3968		  __entry->logres,3969		  __entry->logcount,3970		  __entry->logflags)3971)3972 3973#define DEFINE_TRANS_RESV_EVENT(name) \3974DEFINE_EVENT(xfs_trans_resv_class, name, \3975	TP_PROTO(struct xfs_mount *mp, unsigned int type, \3976		 struct xfs_trans_res *res), \3977	TP_ARGS(mp, type, res))3978DEFINE_TRANS_RESV_EVENT(xfs_trans_resv_calc);3979DEFINE_TRANS_RESV_EVENT(xfs_trans_resv_calc_minlogsize);3980 3981TRACE_EVENT(xfs_log_get_max_trans_res,3982	TP_PROTO(struct xfs_mount *mp, const struct xfs_trans_res *res),3983	TP_ARGS(mp, res),3984	TP_STRUCT__entry(3985		__field(dev_t, dev)3986		__field(uint, logres)3987		__field(int, logcount)3988	),3989	TP_fast_assign(3990		__entry->dev = mp->m_super->s_dev;3991		__entry->logres = res->tr_logres;3992		__entry->logcount = res->tr_logcount;3993	),3994	TP_printk("dev %d:%d logres %u logcount %d",3995		  MAJOR(__entry->dev), MINOR(__entry->dev),3996		  __entry->logres,3997		  __entry->logcount)3998);3999 4000DECLARE_EVENT_CLASS(xfs_trans_class,4001	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip),4002	TP_ARGS(tp, caller_ip),4003	TP_STRUCT__entry(4004		__field(dev_t, dev)4005		__field(uint32_t, tid)4006		__field(uint32_t, flags)4007		__field(unsigned long, caller_ip)4008	),4009	TP_fast_assign(4010		__entry->dev = tp->t_mountp->m_super->s_dev;4011		__entry->tid = 0;4012		if (tp->t_ticket)4013			__entry->tid = tp->t_ticket->t_tid;4014		__entry->flags = tp->t_flags;4015		__entry->caller_ip = caller_ip;4016	),4017	TP_printk("dev %d:%d trans %x flags 0x%x caller %pS",4018		  MAJOR(__entry->dev), MINOR(__entry->dev),4019		  __entry->tid,4020		  __entry->flags,4021		  (char *)__entry->caller_ip)4022)4023 4024#define DEFINE_TRANS_EVENT(name) \4025DEFINE_EVENT(xfs_trans_class, name, \4026	TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \4027	TP_ARGS(tp, caller_ip))4028DEFINE_TRANS_EVENT(xfs_trans_alloc);4029DEFINE_TRANS_EVENT(xfs_trans_cancel);4030DEFINE_TRANS_EVENT(xfs_trans_commit);4031DEFINE_TRANS_EVENT(xfs_trans_dup);4032DEFINE_TRANS_EVENT(xfs_trans_free);4033DEFINE_TRANS_EVENT(xfs_trans_roll);4034DEFINE_TRANS_EVENT(xfs_trans_add_item);4035DEFINE_TRANS_EVENT(xfs_trans_commit_items);4036DEFINE_TRANS_EVENT(xfs_trans_free_items);4037 4038TRACE_EVENT(xfs_iunlink_update_bucket,4039	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int bucket,4040		 xfs_agino_t old_ptr, xfs_agino_t new_ptr),4041	TP_ARGS(mp, agno, bucket, old_ptr, new_ptr),4042	TP_STRUCT__entry(4043		__field(dev_t, dev)4044		__field(xfs_agnumber_t, agno)4045		__field(unsigned int, bucket)4046		__field(xfs_agino_t, old_ptr)4047		__field(xfs_agino_t, new_ptr)4048	),4049	TP_fast_assign(4050		__entry->dev = mp->m_super->s_dev;4051		__entry->agno = agno;4052		__entry->bucket = bucket;4053		__entry->old_ptr = old_ptr;4054		__entry->new_ptr = new_ptr;4055	),4056	TP_printk("dev %d:%d agno 0x%x bucket %u old 0x%x new 0x%x",4057		  MAJOR(__entry->dev), MINOR(__entry->dev),4058		  __entry->agno,4059		  __entry->bucket,4060		  __entry->old_ptr,4061		  __entry->new_ptr)4062);4063 4064TRACE_EVENT(xfs_iunlink_update_dinode,4065	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino,4066		 xfs_agino_t old_ptr, xfs_agino_t new_ptr),4067	TP_ARGS(mp, agno, agino, old_ptr, new_ptr),4068	TP_STRUCT__entry(4069		__field(dev_t, dev)4070		__field(xfs_agnumber_t, agno)4071		__field(xfs_agino_t, agino)4072		__field(xfs_agino_t, old_ptr)4073		__field(xfs_agino_t, new_ptr)4074	),4075	TP_fast_assign(4076		__entry->dev = mp->m_super->s_dev;4077		__entry->agno = agno;4078		__entry->agino = agino;4079		__entry->old_ptr = old_ptr;4080		__entry->new_ptr = new_ptr;4081	),4082	TP_printk("dev %d:%d agno 0x%x agino 0x%x old 0x%x new 0x%x",4083		  MAJOR(__entry->dev), MINOR(__entry->dev),4084		  __entry->agno,4085		  __entry->agino,4086		  __entry->old_ptr,4087		  __entry->new_ptr)4088);4089 4090TRACE_EVENT(xfs_iunlink_reload_next,4091	TP_PROTO(struct xfs_inode *ip),4092	TP_ARGS(ip),4093	TP_STRUCT__entry(4094		__field(dev_t, dev)4095		__field(xfs_agnumber_t, agno)4096		__field(xfs_agino_t, agino)4097		__field(xfs_agino_t, prev_agino)4098		__field(xfs_agino_t, next_agino)4099	),4100	TP_fast_assign(4101		__entry->dev = ip->i_mount->m_super->s_dev;4102		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);4103		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);4104		__entry->prev_agino = ip->i_prev_unlinked;4105		__entry->next_agino = ip->i_next_unlinked;4106	),4107	TP_printk("dev %d:%d agno 0x%x agino 0x%x prev_unlinked 0x%x next_unlinked 0x%x",4108		  MAJOR(__entry->dev), MINOR(__entry->dev),4109		  __entry->agno,4110		  __entry->agino,4111		  __entry->prev_agino,4112		  __entry->next_agino)4113);4114 4115TRACE_EVENT(xfs_inode_reload_unlinked_bucket,4116	TP_PROTO(struct xfs_inode *ip),4117	TP_ARGS(ip),4118	TP_STRUCT__entry(4119		__field(dev_t, dev)4120		__field(xfs_agnumber_t, agno)4121		__field(xfs_agino_t, agino)4122	),4123	TP_fast_assign(4124		__entry->dev = ip->i_mount->m_super->s_dev;4125		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);4126		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);4127	),4128	TP_printk("dev %d:%d agno 0x%x agino 0x%x bucket %u",4129		  MAJOR(__entry->dev), MINOR(__entry->dev),4130		  __entry->agno,4131		  __entry->agino,4132		  __entry->agino % XFS_AGI_UNLINKED_BUCKETS)4133);4134 4135DECLARE_EVENT_CLASS(xfs_ag_inode_class,4136	TP_PROTO(struct xfs_inode *ip),4137	TP_ARGS(ip),4138	TP_STRUCT__entry(4139		__field(dev_t, dev)4140		__field(xfs_agnumber_t, agno)4141		__field(xfs_agino_t, agino)4142	),4143	TP_fast_assign(4144		__entry->dev = VFS_I(ip)->i_sb->s_dev;4145		__entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);4146		__entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);4147	),4148	TP_printk("dev %d:%d agno 0x%x agino 0x%x",4149		  MAJOR(__entry->dev), MINOR(__entry->dev),4150		  __entry->agno, __entry->agino)4151)4152 4153#define DEFINE_AGINODE_EVENT(name) \4154DEFINE_EVENT(xfs_ag_inode_class, name, \4155	TP_PROTO(struct xfs_inode *ip), \4156	TP_ARGS(ip))4157DEFINE_AGINODE_EVENT(xfs_iunlink);4158DEFINE_AGINODE_EVENT(xfs_iunlink_remove);4159 4160DECLARE_EVENT_CLASS(xfs_fs_corrupt_class,4161	TP_PROTO(struct xfs_mount *mp, unsigned int flags),4162	TP_ARGS(mp, flags),4163	TP_STRUCT__entry(4164		__field(dev_t, dev)4165		__field(unsigned int, flags)4166	),4167	TP_fast_assign(4168		__entry->dev = mp->m_super->s_dev;4169		__entry->flags = flags;4170	),4171	TP_printk("dev %d:%d flags 0x%x",4172		  MAJOR(__entry->dev), MINOR(__entry->dev),4173		  __entry->flags)4174);4175#define DEFINE_FS_CORRUPT_EVENT(name)	\4176DEFINE_EVENT(xfs_fs_corrupt_class, name,	\4177	TP_PROTO(struct xfs_mount *mp, unsigned int flags), \4178	TP_ARGS(mp, flags))4179DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_sick);4180DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_corrupt);4181DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_healthy);4182DEFINE_FS_CORRUPT_EVENT(xfs_fs_unfixed_corruption);4183DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_sick);4184DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_corrupt);4185DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_healthy);4186DEFINE_FS_CORRUPT_EVENT(xfs_rt_unfixed_corruption);4187 4188DECLARE_EVENT_CLASS(xfs_ag_corrupt_class,4189	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int flags),4190	TP_ARGS(mp, agno, flags),4191	TP_STRUCT__entry(4192		__field(dev_t, dev)4193		__field(xfs_agnumber_t, agno)4194		__field(unsigned int, flags)4195	),4196	TP_fast_assign(4197		__entry->dev = mp->m_super->s_dev;4198		__entry->agno = agno;4199		__entry->flags = flags;4200	),4201	TP_printk("dev %d:%d agno 0x%x flags 0x%x",4202		  MAJOR(__entry->dev), MINOR(__entry->dev),4203		  __entry->agno, __entry->flags)4204);4205#define DEFINE_AG_CORRUPT_EVENT(name)	\4206DEFINE_EVENT(xfs_ag_corrupt_class, name,	\4207	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \4208		 unsigned int flags), \4209	TP_ARGS(mp, agno, flags))4210DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_sick);4211DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_corrupt);4212DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_healthy);4213DEFINE_AG_CORRUPT_EVENT(xfs_ag_unfixed_corruption);4214 4215DECLARE_EVENT_CLASS(xfs_inode_corrupt_class,4216	TP_PROTO(struct xfs_inode *ip, unsigned int flags),4217	TP_ARGS(ip, flags),4218	TP_STRUCT__entry(4219		__field(dev_t, dev)4220		__field(xfs_ino_t, ino)4221		__field(unsigned int, flags)4222	),4223	TP_fast_assign(4224		__entry->dev = ip->i_mount->m_super->s_dev;4225		__entry->ino = ip->i_ino;4226		__entry->flags = flags;4227	),4228	TP_printk("dev %d:%d ino 0x%llx flags 0x%x",4229		  MAJOR(__entry->dev), MINOR(__entry->dev),4230		  __entry->ino, __entry->flags)4231);4232#define DEFINE_INODE_CORRUPT_EVENT(name)	\4233DEFINE_EVENT(xfs_inode_corrupt_class, name,	\4234	TP_PROTO(struct xfs_inode *ip, unsigned int flags), \4235	TP_ARGS(ip, flags))4236DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_sick);4237DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_corrupt);4238DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_healthy);4239DEFINE_INODE_CORRUPT_EVENT(xfs_inode_unfixed_corruption);4240 4241TRACE_EVENT(xfs_iwalk_ag,4242	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,4243		 xfs_agino_t startino),4244	TP_ARGS(mp, agno, startino),4245	TP_STRUCT__entry(4246		__field(dev_t, dev)4247		__field(xfs_agnumber_t, agno)4248		__field(xfs_agino_t, startino)4249	),4250	TP_fast_assign(4251		__entry->dev = mp->m_super->s_dev;4252		__entry->agno = agno;4253		__entry->startino = startino;4254	),4255	TP_printk("dev %d:%d agno 0x%x startino 0x%x",4256		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,4257		  __entry->startino)4258)4259 4260TRACE_EVENT(xfs_iwalk_ag_rec,4261	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,4262		 struct xfs_inobt_rec_incore *irec),4263	TP_ARGS(mp, agno, irec),4264	TP_STRUCT__entry(4265		__field(dev_t, dev)4266		__field(xfs_agnumber_t, agno)4267		__field(xfs_agino_t, startino)4268		__field(uint64_t, freemask)4269	),4270	TP_fast_assign(4271		__entry->dev = mp->m_super->s_dev;4272		__entry->agno = agno;4273		__entry->startino = irec->ir_startino;4274		__entry->freemask = irec->ir_free;4275	),4276	TP_printk("dev %d:%d agno 0x%x startino 0x%x freemask 0x%llx",4277		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno,4278		  __entry->startino, __entry->freemask)4279)4280 4281TRACE_EVENT(xfs_pwork_init,4282	TP_PROTO(struct xfs_mount *mp, unsigned int nr_threads, pid_t pid),4283	TP_ARGS(mp, nr_threads, pid),4284	TP_STRUCT__entry(4285		__field(dev_t, dev)4286		__field(unsigned int, nr_threads)4287		__field(pid_t, pid)4288	),4289	TP_fast_assign(4290		__entry->dev = mp->m_super->s_dev;4291		__entry->nr_threads = nr_threads;4292		__entry->pid = pid;4293	),4294	TP_printk("dev %d:%d nr_threads %u pid %u",4295		  MAJOR(__entry->dev), MINOR(__entry->dev),4296		  __entry->nr_threads, __entry->pid)4297)4298 4299TRACE_EVENT(xfs_check_new_dalign,4300	TP_PROTO(struct xfs_mount *mp, int new_dalign, xfs_ino_t calc_rootino),4301	TP_ARGS(mp, new_dalign, calc_rootino),4302	TP_STRUCT__entry(4303		__field(dev_t, dev)4304		__field(int, new_dalign)4305		__field(xfs_ino_t, sb_rootino)4306		__field(xfs_ino_t, calc_rootino)4307	),4308	TP_fast_assign(4309		__entry->dev = mp->m_super->s_dev;4310		__entry->new_dalign = new_dalign;4311		__entry->sb_rootino = mp->m_sb.sb_rootino;4312		__entry->calc_rootino = calc_rootino;4313	),4314	TP_printk("dev %d:%d new_dalign %d sb_rootino 0x%llx calc_rootino 0x%llx",4315		  MAJOR(__entry->dev), MINOR(__entry->dev),4316		  __entry->new_dalign, __entry->sb_rootino,4317		  __entry->calc_rootino)4318)4319 4320TRACE_EVENT(xfs_btree_commit_afakeroot,4321	TP_PROTO(struct xfs_btree_cur *cur),4322	TP_ARGS(cur),4323	TP_STRUCT__entry(4324		__field(dev_t, dev)4325		__string(name, cur->bc_ops->name)4326		__field(xfs_agnumber_t, agno)4327		__field(xfs_agblock_t, agbno)4328		__field(unsigned int, levels)4329		__field(unsigned int, blocks)4330	),4331	TP_fast_assign(4332		__entry->dev = cur->bc_mp->m_super->s_dev;4333		__assign_str(name);4334		__entry->agno = cur->bc_ag.pag->pag_agno;4335		__entry->agbno = cur->bc_ag.afake->af_root;4336		__entry->levels = cur->bc_ag.afake->af_levels;4337		__entry->blocks = cur->bc_ag.afake->af_blocks;4338	),4339	TP_printk("dev %d:%d %sbt agno 0x%x levels %u blocks %u root %u",4340		  MAJOR(__entry->dev), MINOR(__entry->dev),4341		  __get_str(name),4342		  __entry->agno,4343		  __entry->levels,4344		  __entry->blocks,4345		  __entry->agbno)4346)4347 4348TRACE_EVENT(xfs_btree_commit_ifakeroot,4349	TP_PROTO(struct xfs_btree_cur *cur),4350	TP_ARGS(cur),4351	TP_STRUCT__entry(4352		__field(dev_t, dev)4353		__string(name, cur->bc_ops->name)4354		__field(xfs_agnumber_t, agno)4355		__field(xfs_agino_t, agino)4356		__field(unsigned int, levels)4357		__field(unsigned int, blocks)4358		__field(int, whichfork)4359	),4360	TP_fast_assign(4361		__entry->dev = cur->bc_mp->m_super->s_dev;4362		__assign_str(name);4363		__entry->agno = XFS_INO_TO_AGNO(cur->bc_mp,4364					cur->bc_ino.ip->i_ino);4365		__entry->agino = XFS_INO_TO_AGINO(cur->bc_mp,4366					cur->bc_ino.ip->i_ino);4367		__entry->levels = cur->bc_ino.ifake->if_levels;4368		__entry->blocks = cur->bc_ino.ifake->if_blocks;4369		__entry->whichfork = cur->bc_ino.whichfork;4370	),4371	TP_printk("dev %d:%d %sbt agno 0x%x agino 0x%x whichfork %s levels %u blocks %u",4372		  MAJOR(__entry->dev), MINOR(__entry->dev),4373		  __get_str(name),4374		  __entry->agno,4375		  __entry->agino,4376		  __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),4377		  __entry->levels,4378		  __entry->blocks)4379)4380 4381TRACE_EVENT(xfs_btree_bload_level_geometry,4382	TP_PROTO(struct xfs_btree_cur *cur, unsigned int level,4383		 uint64_t nr_this_level, unsigned int nr_per_block,4384		 unsigned int desired_npb, uint64_t blocks,4385		 uint64_t blocks_with_extra),4386	TP_ARGS(cur, level, nr_this_level, nr_per_block, desired_npb, blocks,4387		blocks_with_extra),4388	TP_STRUCT__entry(4389		__field(dev_t, dev)4390		__string(name, cur->bc_ops->name)4391		__field(unsigned int, level)4392		__field(unsigned int, nlevels)4393		__field(uint64_t, nr_this_level)4394		__field(unsigned int, nr_per_block)4395		__field(unsigned int, desired_npb)4396		__field(unsigned long long, blocks)4397		__field(unsigned long long, blocks_with_extra)4398	),4399	TP_fast_assign(4400		__entry->dev = cur->bc_mp->m_super->s_dev;4401		__assign_str(name);4402		__entry->level = level;4403		__entry->nlevels = cur->bc_nlevels;4404		__entry->nr_this_level = nr_this_level;4405		__entry->nr_per_block = nr_per_block;4406		__entry->desired_npb = desired_npb;4407		__entry->blocks = blocks;4408		__entry->blocks_with_extra = blocks_with_extra;4409	),4410	TP_printk("dev %d:%d %sbt level %u/%u nr_this_level %llu nr_per_block %u desired_npb %u blocks %llu blocks_with_extra %llu",4411		  MAJOR(__entry->dev), MINOR(__entry->dev),4412		  __get_str(name),4413		  __entry->level,4414		  __entry->nlevels,4415		  __entry->nr_this_level,4416		  __entry->nr_per_block,4417		  __entry->desired_npb,4418		  __entry->blocks,4419		  __entry->blocks_with_extra)4420)4421 4422TRACE_EVENT(xfs_btree_bload_block,4423	TP_PROTO(struct xfs_btree_cur *cur, unsigned int level,4424		 uint64_t block_idx, uint64_t nr_blocks,4425		 union xfs_btree_ptr *ptr, unsigned int nr_records),4426	TP_ARGS(cur, level, block_idx, nr_blocks, ptr, nr_records),4427	TP_STRUCT__entry(4428		__field(dev_t, dev)4429		__string(name, cur->bc_ops->name)4430		__field(unsigned int, level)4431		__field(unsigned long long, block_idx)4432		__field(unsigned long long, nr_blocks)4433		__field(xfs_agnumber_t, agno)4434		__field(xfs_agblock_t, agbno)4435		__field(unsigned int, nr_records)4436	),4437	TP_fast_assign(4438		__entry->dev = cur->bc_mp->m_super->s_dev;4439		__assign_str(name);4440		__entry->level = level;4441		__entry->block_idx = block_idx;4442		__entry->nr_blocks = nr_blocks;4443		if (cur->bc_ops->ptr_len == XFS_BTREE_LONG_PTR_LEN) {4444			xfs_fsblock_t	fsb = be64_to_cpu(ptr->l);4445 4446			__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsb);4447			__entry->agbno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsb);4448		} else {4449			__entry->agno = cur->bc_ag.pag->pag_agno;4450			__entry->agbno = be32_to_cpu(ptr->s);4451		}4452		__entry->nr_records = nr_records;4453	),4454	TP_printk("dev %d:%d %sbt level %u block %llu/%llu agno 0x%x agbno 0x%x recs %u",4455		  MAJOR(__entry->dev), MINOR(__entry->dev),4456		  __get_str(name),4457		  __entry->level,4458		  __entry->block_idx,4459		  __entry->nr_blocks,4460		  __entry->agno,4461		  __entry->agbno,4462		  __entry->nr_records)4463)4464 4465DECLARE_EVENT_CLASS(xfs_timestamp_range_class,4466	TP_PROTO(struct xfs_mount *mp, time64_t min, time64_t max),4467	TP_ARGS(mp, min, max),4468	TP_STRUCT__entry(4469		__field(dev_t, dev)4470		__field(long long, min)4471		__field(long long, max)4472	),4473	TP_fast_assign(4474		__entry->dev = mp->m_super->s_dev;4475		__entry->min = min;4476		__entry->max = max;4477	),4478	TP_printk("dev %d:%d min %lld max %lld",4479		  MAJOR(__entry->dev), MINOR(__entry->dev),4480		  __entry->min,4481		  __entry->max)4482)4483 4484#define DEFINE_TIMESTAMP_RANGE_EVENT(name) \4485DEFINE_EVENT(xfs_timestamp_range_class, name, \4486	TP_PROTO(struct xfs_mount *mp, long long min, long long max), \4487	TP_ARGS(mp, min, max))4488DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range);4489DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range);4490 4491DECLARE_EVENT_CLASS(xfs_icwalk_class,4492	TP_PROTO(struct xfs_mount *mp, struct xfs_icwalk *icw,4493		 unsigned long caller_ip),4494	TP_ARGS(mp, icw, caller_ip),4495	TP_STRUCT__entry(4496		__field(dev_t, dev)4497		__field(__u32, flags)4498		__field(uint32_t, uid)4499		__field(uint32_t, gid)4500		__field(prid_t, prid)4501		__field(__u64, min_file_size)4502		__field(long, scan_limit)4503		__field(unsigned long, caller_ip)4504	),4505	TP_fast_assign(4506		__entry->dev = mp->m_super->s_dev;4507		__entry->flags = icw ? icw->icw_flags : 0;4508		__entry->uid = icw ? from_kuid(mp->m_super->s_user_ns,4509						icw->icw_uid) : 0;4510		__entry->gid = icw ? from_kgid(mp->m_super->s_user_ns,4511						icw->icw_gid) : 0;4512		__entry->prid = icw ? icw->icw_prid : 0;4513		__entry->min_file_size = icw ? icw->icw_min_file_size : 0;4514		__entry->scan_limit = icw ? icw->icw_scan_limit : 0;4515		__entry->caller_ip = caller_ip;4516	),4517	TP_printk("dev %d:%d flags 0x%x uid %u gid %u prid %u minsize %llu scan_limit %ld caller %pS",4518		  MAJOR(__entry->dev), MINOR(__entry->dev),4519		  __entry->flags,4520		  __entry->uid,4521		  __entry->gid,4522		  __entry->prid,4523		  __entry->min_file_size,4524		  __entry->scan_limit,4525		  (char *)__entry->caller_ip)4526);4527#define DEFINE_ICWALK_EVENT(name)	\4528DEFINE_EVENT(xfs_icwalk_class, name,	\4529	TP_PROTO(struct xfs_mount *mp, struct xfs_icwalk *icw, \4530		 unsigned long caller_ip), \4531	TP_ARGS(mp, icw, caller_ip))4532DEFINE_ICWALK_EVENT(xfs_ioc_free_eofblocks);4533DEFINE_ICWALK_EVENT(xfs_blockgc_free_space);4534 4535TRACE_DEFINE_ENUM(XLOG_STATE_ACTIVE);4536TRACE_DEFINE_ENUM(XLOG_STATE_WANT_SYNC);4537TRACE_DEFINE_ENUM(XLOG_STATE_SYNCING);4538TRACE_DEFINE_ENUM(XLOG_STATE_DONE_SYNC);4539TRACE_DEFINE_ENUM(XLOG_STATE_CALLBACK);4540TRACE_DEFINE_ENUM(XLOG_STATE_DIRTY);4541 4542DECLARE_EVENT_CLASS(xlog_iclog_class,4543	TP_PROTO(struct xlog_in_core *iclog, unsigned long caller_ip),4544	TP_ARGS(iclog, caller_ip),4545	TP_STRUCT__entry(4546		__field(dev_t, dev)4547		__field(uint32_t, state)4548		__field(int32_t, refcount)4549		__field(uint32_t, offset)4550		__field(uint32_t, flags)4551		__field(unsigned long long, lsn)4552		__field(unsigned long, caller_ip)4553	),4554	TP_fast_assign(4555		__entry->dev = iclog->ic_log->l_mp->m_super->s_dev;4556		__entry->state = iclog->ic_state;4557		__entry->refcount = atomic_read(&iclog->ic_refcnt);4558		__entry->offset = iclog->ic_offset;4559		__entry->flags = iclog->ic_flags;4560		__entry->lsn = be64_to_cpu(iclog->ic_header.h_lsn);4561		__entry->caller_ip = caller_ip;4562	),4563	TP_printk("dev %d:%d state %s refcnt %d offset %u lsn 0x%llx flags %s caller %pS",4564		  MAJOR(__entry->dev), MINOR(__entry->dev),4565		  __print_symbolic(__entry->state, XLOG_STATE_STRINGS),4566		  __entry->refcount,4567		  __entry->offset,4568		  __entry->lsn,4569		  __print_flags(__entry->flags, "|", XLOG_ICL_STRINGS),4570		  (char *)__entry->caller_ip)4571 4572);4573 4574#define DEFINE_ICLOG_EVENT(name)	\4575DEFINE_EVENT(xlog_iclog_class, name,	\4576	TP_PROTO(struct xlog_in_core *iclog, unsigned long caller_ip), \4577	TP_ARGS(iclog, caller_ip))4578 4579DEFINE_ICLOG_EVENT(xlog_iclog_activate);4580DEFINE_ICLOG_EVENT(xlog_iclog_clean);4581DEFINE_ICLOG_EVENT(xlog_iclog_callback);4582DEFINE_ICLOG_EVENT(xlog_iclog_callbacks_start);4583DEFINE_ICLOG_EVENT(xlog_iclog_callbacks_done);4584DEFINE_ICLOG_EVENT(xlog_iclog_force);4585DEFINE_ICLOG_EVENT(xlog_iclog_force_lsn);4586DEFINE_ICLOG_EVENT(xlog_iclog_get_space);4587DEFINE_ICLOG_EVENT(xlog_iclog_release);4588DEFINE_ICLOG_EVENT(xlog_iclog_switch);4589DEFINE_ICLOG_EVENT(xlog_iclog_sync);4590DEFINE_ICLOG_EVENT(xlog_iclog_syncing);4591DEFINE_ICLOG_EVENT(xlog_iclog_sync_done);4592DEFINE_ICLOG_EVENT(xlog_iclog_want_sync);4593DEFINE_ICLOG_EVENT(xlog_iclog_wait_on);4594DEFINE_ICLOG_EVENT(xlog_iclog_write);4595 4596TRACE_DEFINE_ENUM(XFS_DAS_UNINIT);4597TRACE_DEFINE_ENUM(XFS_DAS_SF_ADD);4598TRACE_DEFINE_ENUM(XFS_DAS_SF_REMOVE);4599TRACE_DEFINE_ENUM(XFS_DAS_LEAF_ADD);4600TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE);4601TRACE_DEFINE_ENUM(XFS_DAS_NODE_ADD);4602TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE);4603TRACE_DEFINE_ENUM(XFS_DAS_LEAF_SET_RMT);4604TRACE_DEFINE_ENUM(XFS_DAS_LEAF_ALLOC_RMT);4605TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REPLACE);4606TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE_OLD);4607TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE_RMT);4608TRACE_DEFINE_ENUM(XFS_DAS_LEAF_REMOVE_ATTR);4609TRACE_DEFINE_ENUM(XFS_DAS_NODE_SET_RMT);4610TRACE_DEFINE_ENUM(XFS_DAS_NODE_ALLOC_RMT);4611TRACE_DEFINE_ENUM(XFS_DAS_NODE_REPLACE);4612TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE_OLD);4613TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE_RMT);4614TRACE_DEFINE_ENUM(XFS_DAS_NODE_REMOVE_ATTR);4615TRACE_DEFINE_ENUM(XFS_DAS_DONE);4616 4617DECLARE_EVENT_CLASS(xfs_das_state_class,4618	TP_PROTO(int das, struct xfs_inode *ip),4619	TP_ARGS(das, ip),4620	TP_STRUCT__entry(4621		__field(int, das)4622		__field(xfs_ino_t, ino)4623	),4624	TP_fast_assign(4625		__entry->das = das;4626		__entry->ino = ip->i_ino;4627	),4628	TP_printk("state change %s ino 0x%llx",4629		  __print_symbolic(__entry->das, XFS_DAS_STRINGS),4630		  __entry->ino)4631)4632 4633#define DEFINE_DAS_STATE_EVENT(name) \4634DEFINE_EVENT(xfs_das_state_class, name, \4635	TP_PROTO(int das, struct xfs_inode *ip), \4636	TP_ARGS(das, ip))4637DEFINE_DAS_STATE_EVENT(xfs_attr_sf_addname_return);4638DEFINE_DAS_STATE_EVENT(xfs_attr_set_iter_return);4639DEFINE_DAS_STATE_EVENT(xfs_attr_leaf_addname_return);4640DEFINE_DAS_STATE_EVENT(xfs_attr_node_addname_return);4641DEFINE_DAS_STATE_EVENT(xfs_attr_remove_iter_return);4642DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_alloc);4643DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_remove_return);4644DEFINE_DAS_STATE_EVENT(xfs_attr_defer_add);4645 4646 4647TRACE_EVENT(xfs_force_shutdown,4648	TP_PROTO(struct xfs_mount *mp, int ptag, int flags, const char *fname,4649		 int line_num),4650	TP_ARGS(mp, ptag, flags, fname, line_num),4651	TP_STRUCT__entry(4652		__field(dev_t, dev)4653		__field(int, ptag)4654		__field(int, flags)4655		__string(fname, fname)4656		__field(int, line_num)4657	),4658	TP_fast_assign(4659		__entry->dev = mp->m_super->s_dev;4660		__entry->ptag = ptag;4661		__entry->flags = flags;4662		__assign_str(fname);4663		__entry->line_num = line_num;4664	),4665	TP_printk("dev %d:%d tag %s flags %s file %s line_num %d",4666		  MAJOR(__entry->dev), MINOR(__entry->dev),4667		__print_flags(__entry->ptag, "|", XFS_PTAG_STRINGS),4668		__print_flags(__entry->flags, "|", XFS_SHUTDOWN_STRINGS),4669		__get_str(fname),4670		__entry->line_num)4671);4672 4673#ifdef CONFIG_XFS_DRAIN_INTENTS4674DECLARE_EVENT_CLASS(xfs_perag_intents_class,4675	TP_PROTO(struct xfs_perag *pag, void *caller_ip),4676	TP_ARGS(pag, caller_ip),4677	TP_STRUCT__entry(4678		__field(dev_t, dev)4679		__field(xfs_agnumber_t, agno)4680		__field(long, nr_intents)4681		__field(void *, caller_ip)4682	),4683	TP_fast_assign(4684		__entry->dev = pag->pag_mount->m_super->s_dev;4685		__entry->agno = pag->pag_agno;4686		__entry->nr_intents = atomic_read(&pag->pag_intents_drain.dr_count);4687		__entry->caller_ip = caller_ip;4688	),4689	TP_printk("dev %d:%d agno 0x%x intents %ld caller %pS",4690		  MAJOR(__entry->dev), MINOR(__entry->dev),4691		  __entry->agno,4692		  __entry->nr_intents,4693		  __entry->caller_ip)4694);4695 4696#define DEFINE_PERAG_INTENTS_EVENT(name)	\4697DEFINE_EVENT(xfs_perag_intents_class, name,					\4698	TP_PROTO(struct xfs_perag *pag, void *caller_ip), \4699	TP_ARGS(pag, caller_ip))4700DEFINE_PERAG_INTENTS_EVENT(xfs_perag_intent_hold);4701DEFINE_PERAG_INTENTS_EVENT(xfs_perag_intent_rele);4702DEFINE_PERAG_INTENTS_EVENT(xfs_perag_wait_intents);4703 4704#endif /* CONFIG_XFS_DRAIN_INTENTS */4705 4706#ifdef CONFIG_XFS_MEMORY_BUFS4707TRACE_EVENT(xmbuf_create,4708	TP_PROTO(struct xfs_buftarg *btp),4709	TP_ARGS(btp),4710	TP_STRUCT__entry(4711		__field(dev_t, dev)4712		__field(unsigned long, ino)4713		__array(char, pathname, MAXNAMELEN)4714	),4715	TP_fast_assign(4716		char		*path;4717		struct file	*file = btp->bt_file;4718 4719		__entry->dev = btp->bt_mount->m_super->s_dev;4720		__entry->ino = file_inode(file)->i_ino;4721		path = file_path(file, __entry->pathname, MAXNAMELEN);4722		if (IS_ERR(path))4723			strncpy(__entry->pathname, "(unknown)",4724					sizeof(__entry->pathname));4725	),4726	TP_printk("dev %d:%d xmino 0x%lx path '%s'",4727		  MAJOR(__entry->dev), MINOR(__entry->dev),4728		  __entry->ino,4729		  __entry->pathname)4730);4731 4732TRACE_EVENT(xmbuf_free,4733	TP_PROTO(struct xfs_buftarg *btp),4734	TP_ARGS(btp),4735	TP_STRUCT__entry(4736		__field(dev_t, dev)4737		__field(unsigned long, ino)4738		__field(unsigned long long, bytes)4739		__field(loff_t, size)4740	),4741	TP_fast_assign(4742		struct file	*file = btp->bt_file;4743		struct inode	*inode = file_inode(file);4744 4745		__entry->dev = btp->bt_mount->m_super->s_dev;4746		__entry->size = i_size_read(inode);4747		__entry->bytes = (inode->i_blocks << SECTOR_SHIFT) + inode->i_bytes;4748		__entry->ino = inode->i_ino;4749	),4750	TP_printk("dev %d:%d xmino 0x%lx mem_bytes 0x%llx isize 0x%llx",4751		  MAJOR(__entry->dev), MINOR(__entry->dev),4752		  __entry->ino,4753		  __entry->bytes,4754		  __entry->size)4755);4756#endif /* CONFIG_XFS_MEMORY_BUFS */4757 4758#ifdef CONFIG_XFS_BTREE_IN_MEM4759TRACE_EVENT(xfbtree_init,4760	TP_PROTO(struct xfs_mount *mp, struct xfbtree *xfbt,4761		 const struct xfs_btree_ops *ops),4762	TP_ARGS(mp, xfbt, ops),4763	TP_STRUCT__entry(4764		__field(const void *, btree_ops)4765		__field(unsigned long, xfino)4766		__field(unsigned int, leaf_mxr)4767		__field(unsigned int, leaf_mnr)4768		__field(unsigned int, node_mxr)4769		__field(unsigned int, node_mnr)4770		__field(unsigned long long, owner)4771	),4772	TP_fast_assign(4773		__entry->btree_ops = ops;4774		__entry->xfino = file_inode(xfbt->target->bt_file)->i_ino;4775		__entry->leaf_mxr = xfbt->maxrecs[0];4776		__entry->node_mxr = xfbt->maxrecs[1];4777		__entry->leaf_mnr = xfbt->minrecs[0];4778		__entry->node_mnr = xfbt->minrecs[1];4779		__entry->owner = xfbt->owner;4780	),4781	TP_printk("xfino 0x%lx btree_ops %pS owner 0x%llx leaf_mxr %u leaf_mnr %u node_mxr %u node_mnr %u",4782		  __entry->xfino,4783		  __entry->btree_ops,4784		  __entry->owner,4785		  __entry->leaf_mxr,4786		  __entry->leaf_mnr,4787		  __entry->node_mxr,4788		  __entry->node_mnr)4789);4790 4791DECLARE_EVENT_CLASS(xfbtree_buf_class,4792	TP_PROTO(struct xfbtree *xfbt, struct xfs_buf *bp),4793	TP_ARGS(xfbt, bp),4794	TP_STRUCT__entry(4795		__field(unsigned long, xfino)4796		__field(xfs_daddr_t, bno)4797		__field(int, nblks)4798		__field(int, hold)4799		__field(int, pincount)4800		__field(unsigned int, lockval)4801		__field(unsigned int, flags)4802	),4803	TP_fast_assign(4804		__entry->xfino = file_inode(xfbt->target->bt_file)->i_ino;4805		__entry->bno = xfs_buf_daddr(bp);4806		__entry->nblks = bp->b_length;4807		__entry->hold = atomic_read(&bp->b_hold);4808		__entry->pincount = atomic_read(&bp->b_pin_count);4809		__entry->lockval = bp->b_sema.count;4810		__entry->flags = bp->b_flags;4811	),4812	TP_printk("xfino 0x%lx daddr 0x%llx bbcount 0x%x hold %d pincount %d lock %d flags %s",4813		  __entry->xfino,4814		  (unsigned long long)__entry->bno,4815		  __entry->nblks,4816		  __entry->hold,4817		  __entry->pincount,4818		  __entry->lockval,4819		  __print_flags(__entry->flags, "|", XFS_BUF_FLAGS))4820)4821 4822#define DEFINE_XFBTREE_BUF_EVENT(name) \4823DEFINE_EVENT(xfbtree_buf_class, name, \4824	TP_PROTO(struct xfbtree *xfbt, struct xfs_buf *bp), \4825	TP_ARGS(xfbt, bp))4826DEFINE_XFBTREE_BUF_EVENT(xfbtree_create_root_buf);4827DEFINE_XFBTREE_BUF_EVENT(xfbtree_trans_commit_buf);4828DEFINE_XFBTREE_BUF_EVENT(xfbtree_trans_cancel_buf);4829 4830DECLARE_EVENT_CLASS(xfbtree_freesp_class,4831	TP_PROTO(struct xfbtree *xfbt, struct xfs_btree_cur *cur,4832		 xfs_fileoff_t fileoff),4833	TP_ARGS(xfbt, cur, fileoff),4834	TP_STRUCT__entry(4835		__field(unsigned long, xfino)4836		__string(btname, cur->bc_ops->name)4837		__field(int, nlevels)4838		__field(xfs_fileoff_t, fileoff)4839	),4840	TP_fast_assign(4841		__entry->xfino = file_inode(xfbt->target->bt_file)->i_ino;4842		__assign_str(btname);4843		__entry->nlevels = cur->bc_nlevels;4844		__entry->fileoff = fileoff;4845	),4846	TP_printk("xfino 0x%lx %sbt nlevels %d fileoff 0x%llx",4847		  __entry->xfino,4848		  __get_str(btname),4849		  __entry->nlevels,4850		  (unsigned long long)__entry->fileoff)4851)4852 4853#define DEFINE_XFBTREE_FREESP_EVENT(name) \4854DEFINE_EVENT(xfbtree_freesp_class, name, \4855	TP_PROTO(struct xfbtree *xfbt, struct xfs_btree_cur *cur, \4856		 xfs_fileoff_t fileoff), \4857	TP_ARGS(xfbt, cur, fileoff))4858DEFINE_XFBTREE_FREESP_EVENT(xfbtree_alloc_block);4859DEFINE_XFBTREE_FREESP_EVENT(xfbtree_free_block);4860#endif /* CONFIG_XFS_BTREE_IN_MEM */4861 4862/* exchmaps tracepoints */4863#define XFS_EXCHMAPS_STRINGS \4864	{ XFS_EXCHMAPS_ATTR_FORK,		"ATTRFORK" }, \4865	{ XFS_EXCHMAPS_SET_SIZES,		"SETSIZES" }, \4866	{ XFS_EXCHMAPS_INO1_WRITTEN,		"INO1_WRITTEN" }, \4867	{ XFS_EXCHMAPS_CLEAR_INO1_REFLINK,	"CLEAR_INO1_REFLINK" }, \4868	{ XFS_EXCHMAPS_CLEAR_INO2_REFLINK,	"CLEAR_INO2_REFLINK" }, \4869	{ __XFS_EXCHMAPS_INO2_SHORTFORM,	"INO2_SF" }4870 4871DEFINE_INODE_IREC_EVENT(xfs_exchmaps_mapping1_skip);4872DEFINE_INODE_IREC_EVENT(xfs_exchmaps_mapping1);4873DEFINE_INODE_IREC_EVENT(xfs_exchmaps_mapping2);4874DEFINE_ITRUNC_EVENT(xfs_exchmaps_update_inode_size);4875 4876#define XFS_EXCHRANGE_INODES \4877	{ 1,	"file1" }, \4878	{ 2,	"file2" }4879 4880DECLARE_EVENT_CLASS(xfs_exchrange_inode_class,4881	TP_PROTO(struct xfs_inode *ip, int whichfile),4882	TP_ARGS(ip, whichfile),4883	TP_STRUCT__entry(4884		__field(dev_t, dev)4885		__field(int, whichfile)4886		__field(xfs_ino_t, ino)4887		__field(int, format)4888		__field(xfs_extnum_t, nex)4889		__field(int, broot_size)4890		__field(int, fork_off)4891	),4892	TP_fast_assign(4893		__entry->dev = VFS_I(ip)->i_sb->s_dev;4894		__entry->whichfile = whichfile;4895		__entry->ino = ip->i_ino;4896		__entry->format = ip->i_df.if_format;4897		__entry->nex = ip->i_df.if_nextents;4898		__entry->fork_off = xfs_inode_fork_boff(ip);4899	),4900	TP_printk("dev %d:%d ino 0x%llx whichfile %s format %s num_extents %llu forkoff 0x%x",4901		  MAJOR(__entry->dev), MINOR(__entry->dev),4902		  __entry->ino,4903		  __print_symbolic(__entry->whichfile, XFS_EXCHRANGE_INODES),4904		  __print_symbolic(__entry->format, XFS_INODE_FORMAT_STR),4905		  __entry->nex,4906		  __entry->fork_off)4907)4908 4909#define DEFINE_EXCHRANGE_INODE_EVENT(name) \4910DEFINE_EVENT(xfs_exchrange_inode_class, name, \4911	TP_PROTO(struct xfs_inode *ip, int whichfile), \4912	TP_ARGS(ip, whichfile))4913 4914DEFINE_EXCHRANGE_INODE_EVENT(xfs_exchrange_before);4915DEFINE_EXCHRANGE_INODE_EVENT(xfs_exchrange_after);4916DEFINE_INODE_ERROR_EVENT(xfs_exchrange_error);4917 4918#define XFS_EXCHANGE_RANGE_FLAGS_STRS \4919	{ XFS_EXCHANGE_RANGE_TO_EOF,		"TO_EOF" }, \4920	{ XFS_EXCHANGE_RANGE_DSYNC	,	"DSYNC" }, \4921	{ XFS_EXCHANGE_RANGE_DRY_RUN,		"DRY_RUN" }, \4922	{ XFS_EXCHANGE_RANGE_FILE1_WRITTEN,	"F1_WRITTEN" }, \4923	{ __XFS_EXCHANGE_RANGE_UPD_CMTIME1,	"CMTIME1" }, \4924	{ __XFS_EXCHANGE_RANGE_UPD_CMTIME2,	"CMTIME2" }, \4925	{ __XFS_EXCHANGE_RANGE_CHECK_FRESH2,	"FRESH2" }4926 4927/* file exchange-range tracepoint class */4928DECLARE_EVENT_CLASS(xfs_exchrange_class,4929	TP_PROTO(const struct xfs_exchrange *fxr, struct xfs_inode *ip1,4930		 struct xfs_inode *ip2),4931	TP_ARGS(fxr, ip1, ip2),4932	TP_STRUCT__entry(4933		__field(dev_t, dev)4934		__field(xfs_ino_t, ip1_ino)4935		__field(loff_t, ip1_isize)4936		__field(loff_t, ip1_disize)4937		__field(xfs_ino_t, ip2_ino)4938		__field(loff_t, ip2_isize)4939		__field(loff_t, ip2_disize)4940 4941		__field(loff_t, file1_offset)4942		__field(loff_t, file2_offset)4943		__field(unsigned long long, length)4944		__field(unsigned long long, flags)4945	),4946	TP_fast_assign(4947		__entry->dev = VFS_I(ip1)->i_sb->s_dev;4948		__entry->ip1_ino = ip1->i_ino;4949		__entry->ip1_isize = VFS_I(ip1)->i_size;4950		__entry->ip1_disize = ip1->i_disk_size;4951		__entry->ip2_ino = ip2->i_ino;4952		__entry->ip2_isize = VFS_I(ip2)->i_size;4953		__entry->ip2_disize = ip2->i_disk_size;4954 4955		__entry->file1_offset = fxr->file1_offset;4956		__entry->file2_offset = fxr->file2_offset;4957		__entry->length = fxr->length;4958		__entry->flags = fxr->flags;4959	),4960	TP_printk("dev %d:%d flags %s bytecount 0x%llx "4961		  "ino1 0x%llx isize 0x%llx disize 0x%llx pos 0x%llx -> "4962		  "ino2 0x%llx isize 0x%llx disize 0x%llx pos 0x%llx",4963		  MAJOR(__entry->dev), MINOR(__entry->dev),4964		   __print_flags_u64(__entry->flags, "|", XFS_EXCHANGE_RANGE_FLAGS_STRS),4965		  __entry->length,4966		  __entry->ip1_ino,4967		  __entry->ip1_isize,4968		  __entry->ip1_disize,4969		  __entry->file1_offset,4970		  __entry->ip2_ino,4971		  __entry->ip2_isize,4972		  __entry->ip2_disize,4973		  __entry->file2_offset)4974)4975 4976#define DEFINE_EXCHRANGE_EVENT(name)	\4977DEFINE_EVENT(xfs_exchrange_class, name,	\4978	TP_PROTO(const struct xfs_exchrange *fxr, struct xfs_inode *ip1, \4979		 struct xfs_inode *ip2), \4980	TP_ARGS(fxr, ip1, ip2))4981DEFINE_EXCHRANGE_EVENT(xfs_exchrange_prep);4982DEFINE_EXCHRANGE_EVENT(xfs_exchrange_flush);4983DEFINE_EXCHRANGE_EVENT(xfs_exchrange_mappings);4984 4985TRACE_EVENT(xfs_exchrange_freshness,4986	TP_PROTO(const struct xfs_exchrange *fxr, struct xfs_inode *ip2),4987	TP_ARGS(fxr, ip2),4988	TP_STRUCT__entry(4989		__field(dev_t, dev)4990		__field(xfs_ino_t, ip2_ino)4991		__field(long long, ip2_mtime)4992		__field(long long, ip2_ctime)4993		__field(int, ip2_mtime_nsec)4994		__field(int, ip2_ctime_nsec)4995 4996		__field(xfs_ino_t, file2_ino)4997		__field(long long, file2_mtime)4998		__field(long long, file2_ctime)4999		__field(int, file2_mtime_nsec)5000		__field(int, file2_ctime_nsec)5001	),5002	TP_fast_assign(5003		struct timespec64	ts64;5004		struct inode		*inode2 = VFS_I(ip2);5005 5006		__entry->dev = inode2->i_sb->s_dev;5007		__entry->ip2_ino = ip2->i_ino;5008 5009		ts64 = inode_get_ctime(inode2);5010		__entry->ip2_ctime = ts64.tv_sec;5011		__entry->ip2_ctime_nsec = ts64.tv_nsec;5012 5013		ts64 = inode_get_mtime(inode2);5014		__entry->ip2_mtime = ts64.tv_sec;5015		__entry->ip2_mtime_nsec = ts64.tv_nsec;5016 5017		__entry->file2_ino = fxr->file2_ino;5018		__entry->file2_mtime = fxr->file2_mtime.tv_sec;5019		__entry->file2_ctime = fxr->file2_ctime.tv_sec;5020		__entry->file2_mtime_nsec = fxr->file2_mtime.tv_nsec;5021		__entry->file2_ctime_nsec = fxr->file2_ctime.tv_nsec;5022	),5023	TP_printk("dev %d:%d "5024		  "ino 0x%llx mtime %lld:%d ctime %lld:%d -> "5025		  "file 0x%llx mtime %lld:%d ctime %lld:%d",5026		  MAJOR(__entry->dev), MINOR(__entry->dev),5027		  __entry->ip2_ino,5028		  __entry->ip2_mtime,5029		  __entry->ip2_mtime_nsec,5030		  __entry->ip2_ctime,5031		  __entry->ip2_ctime_nsec,5032		  __entry->file2_ino,5033		  __entry->file2_mtime,5034		  __entry->file2_mtime_nsec,5035		  __entry->file2_ctime,5036		  __entry->file2_ctime_nsec)5037);5038 5039TRACE_EVENT(xfs_exchmaps_overhead,5040	TP_PROTO(struct xfs_mount *mp, unsigned long long bmbt_blocks,5041		 unsigned long long rmapbt_blocks),5042	TP_ARGS(mp, bmbt_blocks, rmapbt_blocks),5043	TP_STRUCT__entry(5044		__field(dev_t, dev)5045		__field(unsigned long long, bmbt_blocks)5046		__field(unsigned long long, rmapbt_blocks)5047	),5048	TP_fast_assign(5049		__entry->dev = mp->m_super->s_dev;5050		__entry->bmbt_blocks = bmbt_blocks;5051		__entry->rmapbt_blocks = rmapbt_blocks;5052	),5053	TP_printk("dev %d:%d bmbt_blocks 0x%llx rmapbt_blocks 0x%llx",5054		  MAJOR(__entry->dev), MINOR(__entry->dev),5055		  __entry->bmbt_blocks,5056		  __entry->rmapbt_blocks)5057);5058 5059DECLARE_EVENT_CLASS(xfs_exchmaps_estimate_class,5060	TP_PROTO(const struct xfs_exchmaps_req *req),5061	TP_ARGS(req),5062	TP_STRUCT__entry(5063		__field(dev_t, dev)5064		__field(xfs_ino_t, ino1)5065		__field(xfs_ino_t, ino2)5066		__field(xfs_fileoff_t, startoff1)5067		__field(xfs_fileoff_t, startoff2)5068		__field(xfs_filblks_t, blockcount)5069		__field(uint64_t, flags)5070		__field(xfs_filblks_t, ip1_bcount)5071		__field(xfs_filblks_t, ip2_bcount)5072		__field(xfs_filblks_t, ip1_rtbcount)5073		__field(xfs_filblks_t, ip2_rtbcount)5074		__field(unsigned long long, resblks)5075		__field(unsigned long long, nr_exchanges)5076	),5077	TP_fast_assign(5078		__entry->dev = req->ip1->i_mount->m_super->s_dev;5079		__entry->ino1 = req->ip1->i_ino;5080		__entry->ino2 = req->ip2->i_ino;5081		__entry->startoff1 = req->startoff1;5082		__entry->startoff2 = req->startoff2;5083		__entry->blockcount = req->blockcount;5084		__entry->flags = req->flags;5085		__entry->ip1_bcount = req->ip1_bcount;5086		__entry->ip2_bcount = req->ip2_bcount;5087		__entry->ip1_rtbcount = req->ip1_rtbcount;5088		__entry->ip2_rtbcount = req->ip2_rtbcount;5089		__entry->resblks = req->resblks;5090		__entry->nr_exchanges = req->nr_exchanges;5091	),5092	TP_printk("dev %d:%d ino1 0x%llx fileoff1 0x%llx ino2 0x%llx fileoff2 0x%llx fsbcount 0x%llx flags (%s) bcount1 0x%llx rtbcount1 0x%llx bcount2 0x%llx rtbcount2 0x%llx resblks 0x%llx nr_exchanges %llu",5093		  MAJOR(__entry->dev), MINOR(__entry->dev),5094		  __entry->ino1, __entry->startoff1,5095		  __entry->ino2, __entry->startoff2,5096		  __entry->blockcount,5097		  __print_flags_u64(__entry->flags, "|", XFS_EXCHMAPS_STRINGS),5098		  __entry->ip1_bcount,5099		  __entry->ip1_rtbcount,5100		  __entry->ip2_bcount,5101		  __entry->ip2_rtbcount,5102		  __entry->resblks,5103		  __entry->nr_exchanges)5104);5105 5106#define DEFINE_EXCHMAPS_ESTIMATE_EVENT(name)	\5107DEFINE_EVENT(xfs_exchmaps_estimate_class, name,	\5108	TP_PROTO(const struct xfs_exchmaps_req *req), \5109	TP_ARGS(req))5110DEFINE_EXCHMAPS_ESTIMATE_EVENT(xfs_exchmaps_initial_estimate);5111DEFINE_EXCHMAPS_ESTIMATE_EVENT(xfs_exchmaps_final_estimate);5112 5113DECLARE_EVENT_CLASS(xfs_exchmaps_intent_class,5114	TP_PROTO(struct xfs_mount *mp, const struct xfs_exchmaps_intent *xmi),5115	TP_ARGS(mp, xmi),5116	TP_STRUCT__entry(5117		__field(dev_t, dev)5118		__field(xfs_ino_t, ino1)5119		__field(xfs_ino_t, ino2)5120		__field(uint64_t, flags)5121		__field(xfs_fileoff_t, startoff1)5122		__field(xfs_fileoff_t, startoff2)5123		__field(xfs_filblks_t, blockcount)5124		__field(xfs_fsize_t, isize1)5125		__field(xfs_fsize_t, isize2)5126		__field(xfs_fsize_t, new_isize1)5127		__field(xfs_fsize_t, new_isize2)5128	),5129	TP_fast_assign(5130		__entry->dev = mp->m_super->s_dev;5131		__entry->ino1 = xmi->xmi_ip1->i_ino;5132		__entry->ino2 = xmi->xmi_ip2->i_ino;5133		__entry->flags = xmi->xmi_flags;5134		__entry->startoff1 = xmi->xmi_startoff1;5135		__entry->startoff2 = xmi->xmi_startoff2;5136		__entry->blockcount = xmi->xmi_blockcount;5137		__entry->isize1 = xmi->xmi_ip1->i_disk_size;5138		__entry->isize2 = xmi->xmi_ip2->i_disk_size;5139		__entry->new_isize1 = xmi->xmi_isize1;5140		__entry->new_isize2 = xmi->xmi_isize2;5141	),5142	TP_printk("dev %d:%d ino1 0x%llx fileoff1 0x%llx ino2 0x%llx fileoff2 0x%llx fsbcount 0x%llx flags (%s) isize1 0x%llx newisize1 0x%llx isize2 0x%llx newisize2 0x%llx",5143		  MAJOR(__entry->dev), MINOR(__entry->dev),5144		  __entry->ino1, __entry->startoff1,5145		  __entry->ino2, __entry->startoff2,5146		  __entry->blockcount,5147		  __print_flags_u64(__entry->flags, "|", XFS_EXCHMAPS_STRINGS),5148		  __entry->isize1, __entry->new_isize1,5149		  __entry->isize2, __entry->new_isize2)5150);5151 5152#define DEFINE_EXCHMAPS_INTENT_EVENT(name)	\5153DEFINE_EVENT(xfs_exchmaps_intent_class, name,	\5154	TP_PROTO(struct xfs_mount *mp, const struct xfs_exchmaps_intent *xmi), \5155	TP_ARGS(mp, xmi))5156DEFINE_EXCHMAPS_INTENT_EVENT(xfs_exchmaps_defer);5157DEFINE_EXCHMAPS_INTENT_EVENT(xfs_exchmaps_recover);5158 5159TRACE_EVENT(xfs_exchmaps_delta_nextents_step,5160	TP_PROTO(struct xfs_mount *mp,5161		 const struct xfs_bmbt_irec *left,5162		 const struct xfs_bmbt_irec *curr,5163		 const struct xfs_bmbt_irec *new,5164		 const struct xfs_bmbt_irec *right,5165		 int delta, unsigned int state),5166	TP_ARGS(mp, left, curr, new, right, delta, state),5167	TP_STRUCT__entry(5168		__field(dev_t, dev)5169		__field(xfs_fileoff_t, loff)5170		__field(xfs_fsblock_t, lstart)5171		__field(xfs_filblks_t, lcount)5172		__field(xfs_fileoff_t, coff)5173		__field(xfs_fsblock_t, cstart)5174		__field(xfs_filblks_t, ccount)5175		__field(xfs_fileoff_t, noff)5176		__field(xfs_fsblock_t, nstart)5177		__field(xfs_filblks_t, ncount)5178		__field(xfs_fileoff_t, roff)5179		__field(xfs_fsblock_t, rstart)5180		__field(xfs_filblks_t, rcount)5181		__field(int, delta)5182		__field(unsigned int, state)5183	),5184	TP_fast_assign(5185		__entry->dev = mp->m_super->s_dev;5186		__entry->loff = left->br_startoff;5187		__entry->lstart = left->br_startblock;5188		__entry->lcount = left->br_blockcount;5189		__entry->coff = curr->br_startoff;5190		__entry->cstart = curr->br_startblock;5191		__entry->ccount = curr->br_blockcount;5192		__entry->noff = new->br_startoff;5193		__entry->nstart = new->br_startblock;5194		__entry->ncount = new->br_blockcount;5195		__entry->roff = right->br_startoff;5196		__entry->rstart = right->br_startblock;5197		__entry->rcount = right->br_blockcount;5198		__entry->delta = delta;5199		__entry->state = state;5200	),5201	TP_printk("dev %d:%d left 0x%llx:0x%llx:0x%llx; curr 0x%llx:0x%llx:0x%llx <- new 0x%llx:0x%llx:0x%llx; right 0x%llx:0x%llx:0x%llx delta %d state 0x%x",5202		  MAJOR(__entry->dev), MINOR(__entry->dev),5203		__entry->loff, __entry->lstart, __entry->lcount,5204		__entry->coff, __entry->cstart, __entry->ccount,5205		__entry->noff, __entry->nstart, __entry->ncount,5206		__entry->roff, __entry->rstart, __entry->rcount,5207		__entry->delta, __entry->state)5208);5209 5210TRACE_EVENT(xfs_exchmaps_delta_nextents,5211	TP_PROTO(const struct xfs_exchmaps_req *req, int64_t d_nexts1,5212		 int64_t d_nexts2),5213	TP_ARGS(req, d_nexts1, d_nexts2),5214	TP_STRUCT__entry(5215		__field(dev_t, dev)5216		__field(xfs_ino_t, ino1)5217		__field(xfs_ino_t, ino2)5218		__field(xfs_extnum_t, nexts1)5219		__field(xfs_extnum_t, nexts2)5220		__field(int64_t, d_nexts1)5221		__field(int64_t, d_nexts2)5222	),5223	TP_fast_assign(5224		int whichfork = xfs_exchmaps_reqfork(req);5225 5226		__entry->dev = req->ip1->i_mount->m_super->s_dev;5227		__entry->ino1 = req->ip1->i_ino;5228		__entry->ino2 = req->ip2->i_ino;5229		__entry->nexts1 = xfs_ifork_ptr(req->ip1, whichfork)->if_nextents;5230		__entry->nexts2 = xfs_ifork_ptr(req->ip2, whichfork)->if_nextents;5231		__entry->d_nexts1 = d_nexts1;5232		__entry->d_nexts2 = d_nexts2;5233	),5234	TP_printk("dev %d:%d ino1 0x%llx nexts %llu ino2 0x%llx nexts %llu delta1 %lld delta2 %lld",5235		  MAJOR(__entry->dev), MINOR(__entry->dev),5236		  __entry->ino1, __entry->nexts1,5237		  __entry->ino2, __entry->nexts2,5238		  __entry->d_nexts1, __entry->d_nexts2)5239);5240 5241DECLARE_EVENT_CLASS(xfs_getparents_rec_class,5242	TP_PROTO(struct xfs_inode *ip, const struct xfs_getparents *ppi,5243		 const struct xfs_attr_list_context *context,5244	         const struct xfs_getparents_rec *pptr),5245	TP_ARGS(ip, ppi, context, pptr),5246	TP_STRUCT__entry(5247		__field(dev_t, dev)5248		__field(xfs_ino_t, ino)5249		__field(unsigned int, firstu)5250		__field(unsigned short, reclen)5251		__field(unsigned int, bufsize)5252		__field(xfs_ino_t, parent_ino)5253		__field(unsigned int, parent_gen)5254		__string(name, pptr->gpr_name)5255	),5256	TP_fast_assign(5257		__entry->dev = ip->i_mount->m_super->s_dev;5258		__entry->ino = ip->i_ino;5259		__entry->firstu = context->firstu;5260		__entry->reclen = pptr->gpr_reclen;5261		__entry->bufsize = ppi->gp_bufsize;5262		__entry->parent_ino = pptr->gpr_parent.ha_fid.fid_ino;5263		__entry->parent_gen = pptr->gpr_parent.ha_fid.fid_gen;5264		__assign_str(name);5265	),5266	TP_printk("dev %d:%d ino 0x%llx firstu %u reclen %u bufsize %u parent_ino 0x%llx parent_gen 0x%x name '%s'",5267		  MAJOR(__entry->dev), MINOR(__entry->dev),5268		  __entry->ino,5269		  __entry->firstu,5270		  __entry->reclen,5271		  __entry->bufsize,5272		  __entry->parent_ino,5273		  __entry->parent_gen,5274		  __get_str(name))5275)5276#define DEFINE_XFS_GETPARENTS_REC_EVENT(name) \5277DEFINE_EVENT(xfs_getparents_rec_class, name, \5278	TP_PROTO(struct xfs_inode *ip, const struct xfs_getparents *ppi, \5279		 const struct xfs_attr_list_context *context, \5280	         const struct xfs_getparents_rec *pptr), \5281	TP_ARGS(ip, ppi, context, pptr))5282DEFINE_XFS_GETPARENTS_REC_EVENT(xfs_getparents_put_listent);5283DEFINE_XFS_GETPARENTS_REC_EVENT(xfs_getparents_expand_lastrec);5284 5285DECLARE_EVENT_CLASS(xfs_getparents_class,5286	TP_PROTO(struct xfs_inode *ip, const struct xfs_getparents *ppi,5287		 const struct xfs_attrlist_cursor_kern *cur),5288	TP_ARGS(ip, ppi, cur),5289	TP_STRUCT__entry(5290		__field(dev_t, dev)5291		__field(xfs_ino_t, ino)5292		__field(unsigned short, iflags)5293		__field(unsigned short, oflags)5294		__field(unsigned int, bufsize)5295		__field(unsigned int, hashval)5296		__field(unsigned int, blkno)5297		__field(unsigned int, offset)5298		__field(int, initted)5299	),5300	TP_fast_assign(5301		__entry->dev = ip->i_mount->m_super->s_dev;5302		__entry->ino = ip->i_ino;5303		__entry->iflags = ppi->gp_iflags;5304		__entry->oflags = ppi->gp_oflags;5305		__entry->bufsize = ppi->gp_bufsize;5306		__entry->hashval = cur->hashval;5307		__entry->blkno = cur->blkno;5308		__entry->offset = cur->offset;5309		__entry->initted = cur->initted;5310	),5311	TP_printk("dev %d:%d ino 0x%llx iflags 0x%x oflags 0x%x bufsize %u cur_init? %d hashval 0x%x blkno %u offset %u",5312		  MAJOR(__entry->dev), MINOR(__entry->dev),5313		  __entry->ino,5314		  __entry->iflags,5315		  __entry->oflags,5316		  __entry->bufsize,5317		  __entry->initted,5318		  __entry->hashval,5319		  __entry->blkno,5320		  __entry->offset)5321)5322#define DEFINE_XFS_GETPARENTS_EVENT(name) \5323DEFINE_EVENT(xfs_getparents_class, name, \5324	TP_PROTO(struct xfs_inode *ip, const struct xfs_getparents *ppi, \5325		 const struct xfs_attrlist_cursor_kern *cur), \5326	TP_ARGS(ip, ppi, cur))5327DEFINE_XFS_GETPARENTS_EVENT(xfs_getparents_begin);5328DEFINE_XFS_GETPARENTS_EVENT(xfs_getparents_end);5329 5330#endif /* _TRACE_XFS_H */5331 5332#undef TRACE_INCLUDE_PATH5333#define TRACE_INCLUDE_PATH .5334#define TRACE_INCLUDE_FILE xfs_trace5335#include <trace/define_trace.h>5336