1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2009, Christoph Hellwig 4*4882a593Smuzhiyun * All Rights Reserved. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #undef TRACE_SYSTEM 7*4882a593Smuzhiyun #define TRACE_SYSTEM xfs 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ) 10*4882a593Smuzhiyun #define _TRACE_XFS_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/tracepoint.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun struct xfs_agf; 15*4882a593Smuzhiyun struct xfs_alloc_arg; 16*4882a593Smuzhiyun struct xfs_attr_list_context; 17*4882a593Smuzhiyun struct xfs_buf_log_item; 18*4882a593Smuzhiyun struct xfs_da_args; 19*4882a593Smuzhiyun struct xfs_da_node_entry; 20*4882a593Smuzhiyun struct xfs_dquot; 21*4882a593Smuzhiyun struct xfs_log_item; 22*4882a593Smuzhiyun struct xlog; 23*4882a593Smuzhiyun struct xlog_ticket; 24*4882a593Smuzhiyun struct xlog_recover; 25*4882a593Smuzhiyun struct xlog_recover_item; 26*4882a593Smuzhiyun struct xlog_rec_header; 27*4882a593Smuzhiyun struct xfs_buf_log_format; 28*4882a593Smuzhiyun struct xfs_inode_log_format; 29*4882a593Smuzhiyun struct xfs_bmbt_irec; 30*4882a593Smuzhiyun struct xfs_btree_cur; 31*4882a593Smuzhiyun struct xfs_refcount_irec; 32*4882a593Smuzhiyun struct xfs_fsmap; 33*4882a593Smuzhiyun struct xfs_rmap_irec; 34*4882a593Smuzhiyun struct xfs_icreate_log; 35*4882a593Smuzhiyun struct xfs_owner_info; 36*4882a593Smuzhiyun struct xfs_trans_res; 37*4882a593Smuzhiyun struct xfs_inobt_rec_incore; 38*4882a593Smuzhiyun union xfs_btree_ptr; 39*4882a593Smuzhiyun struct xfs_dqtrx; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define XFS_ATTR_FILTER_FLAGS \ 42*4882a593Smuzhiyun { XFS_ATTR_ROOT, "ROOT" }, \ 43*4882a593Smuzhiyun { XFS_ATTR_SECURE, "SECURE" }, \ 44*4882a593Smuzhiyun { XFS_ATTR_INCOMPLETE, "INCOMPLETE" } 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_attr_list_class, 47*4882a593Smuzhiyun TP_PROTO(struct xfs_attr_list_context *ctx), 48*4882a593Smuzhiyun TP_ARGS(ctx), 49*4882a593Smuzhiyun TP_STRUCT__entry( 50*4882a593Smuzhiyun __field(dev_t, dev) 51*4882a593Smuzhiyun __field(xfs_ino_t, ino) 52*4882a593Smuzhiyun __field(u32, hashval) 53*4882a593Smuzhiyun __field(u32, blkno) 54*4882a593Smuzhiyun __field(u32, offset) 55*4882a593Smuzhiyun __field(void *, buffer) 56*4882a593Smuzhiyun __field(int, bufsize) 57*4882a593Smuzhiyun __field(int, count) 58*4882a593Smuzhiyun __field(int, firstu) 59*4882a593Smuzhiyun __field(int, dupcnt) 60*4882a593Smuzhiyun __field(unsigned int, attr_filter) 61*4882a593Smuzhiyun ), 62*4882a593Smuzhiyun TP_fast_assign( 63*4882a593Smuzhiyun __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; 64*4882a593Smuzhiyun __entry->ino = ctx->dp->i_ino; 65*4882a593Smuzhiyun __entry->hashval = ctx->cursor.hashval; 66*4882a593Smuzhiyun __entry->blkno = ctx->cursor.blkno; 67*4882a593Smuzhiyun __entry->offset = ctx->cursor.offset; 68*4882a593Smuzhiyun __entry->buffer = ctx->buffer; 69*4882a593Smuzhiyun __entry->bufsize = ctx->bufsize; 70*4882a593Smuzhiyun __entry->count = ctx->count; 71*4882a593Smuzhiyun __entry->firstu = ctx->firstu; 72*4882a593Smuzhiyun __entry->attr_filter = ctx->attr_filter; 73*4882a593Smuzhiyun ), 74*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u " 75*4882a593Smuzhiyun "buffer %p size %u count %u firstu %u filter %s", 76*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 77*4882a593Smuzhiyun __entry->ino, 78*4882a593Smuzhiyun __entry->hashval, 79*4882a593Smuzhiyun __entry->blkno, 80*4882a593Smuzhiyun __entry->offset, 81*4882a593Smuzhiyun __entry->dupcnt, 82*4882a593Smuzhiyun __entry->buffer, 83*4882a593Smuzhiyun __entry->bufsize, 84*4882a593Smuzhiyun __entry->count, 85*4882a593Smuzhiyun __entry->firstu, 86*4882a593Smuzhiyun __print_flags(__entry->attr_filter, "|", 87*4882a593Smuzhiyun XFS_ATTR_FILTER_FLAGS) 88*4882a593Smuzhiyun ) 89*4882a593Smuzhiyun ) 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #define DEFINE_ATTR_LIST_EVENT(name) \ 92*4882a593Smuzhiyun DEFINE_EVENT(xfs_attr_list_class, name, \ 93*4882a593Smuzhiyun TP_PROTO(struct xfs_attr_list_context *ctx), \ 94*4882a593Smuzhiyun TP_ARGS(ctx)) 95*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf); 96*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all); 97*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf); 98*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end); 99*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full); 100*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add); 101*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk); 102*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound); 103*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list); 104*4882a593Smuzhiyun DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list); 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_perag_class, 107*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount, 108*4882a593Smuzhiyun unsigned long caller_ip), 109*4882a593Smuzhiyun TP_ARGS(mp, agno, refcount, caller_ip), 110*4882a593Smuzhiyun TP_STRUCT__entry( 111*4882a593Smuzhiyun __field(dev_t, dev) 112*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 113*4882a593Smuzhiyun __field(int, refcount) 114*4882a593Smuzhiyun __field(unsigned long, caller_ip) 115*4882a593Smuzhiyun ), 116*4882a593Smuzhiyun TP_fast_assign( 117*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 118*4882a593Smuzhiyun __entry->agno = agno; 119*4882a593Smuzhiyun __entry->refcount = refcount; 120*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 121*4882a593Smuzhiyun ), 122*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u refcount %d caller %pS", 123*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 124*4882a593Smuzhiyun __entry->agno, 125*4882a593Smuzhiyun __entry->refcount, 126*4882a593Smuzhiyun (char *)__entry->caller_ip) 127*4882a593Smuzhiyun ); 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #define DEFINE_PERAG_REF_EVENT(name) \ 130*4882a593Smuzhiyun DEFINE_EVENT(xfs_perag_class, name, \ 131*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount, \ 132*4882a593Smuzhiyun unsigned long caller_ip), \ 133*4882a593Smuzhiyun TP_ARGS(mp, agno, refcount, caller_ip)) 134*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_get); 135*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_get_tag); 136*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_put); 137*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_set_reclaim); 138*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_clear_reclaim); 139*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_set_eofblocks); 140*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_clear_eofblocks); 141*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_set_cowblocks); 142*4882a593Smuzhiyun DEFINE_PERAG_REF_EVENT(xfs_perag_clear_cowblocks); 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_class, 145*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno), 146*4882a593Smuzhiyun TP_ARGS(mp, agno), 147*4882a593Smuzhiyun TP_STRUCT__entry( 148*4882a593Smuzhiyun __field(dev_t, dev) 149*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 150*4882a593Smuzhiyun ), 151*4882a593Smuzhiyun TP_fast_assign( 152*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 153*4882a593Smuzhiyun __entry->agno = agno; 154*4882a593Smuzhiyun ), 155*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u", 156*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 157*4882a593Smuzhiyun __entry->agno) 158*4882a593Smuzhiyun ); 159*4882a593Smuzhiyun #define DEFINE_AG_EVENT(name) \ 160*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_class, name, \ 161*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno), \ 162*4882a593Smuzhiyun TP_ARGS(mp, agno)) 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_read_agf); 165*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_alloc_read_agf); 166*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_read_agi); 167*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_ialloc_read_agi); 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun TRACE_EVENT(xfs_attr_list_node_descend, 170*4882a593Smuzhiyun TP_PROTO(struct xfs_attr_list_context *ctx, 171*4882a593Smuzhiyun struct xfs_da_node_entry *btree), 172*4882a593Smuzhiyun TP_ARGS(ctx, btree), 173*4882a593Smuzhiyun TP_STRUCT__entry( 174*4882a593Smuzhiyun __field(dev_t, dev) 175*4882a593Smuzhiyun __field(xfs_ino_t, ino) 176*4882a593Smuzhiyun __field(u32, hashval) 177*4882a593Smuzhiyun __field(u32, blkno) 178*4882a593Smuzhiyun __field(u32, offset) 179*4882a593Smuzhiyun __field(void *, buffer) 180*4882a593Smuzhiyun __field(int, bufsize) 181*4882a593Smuzhiyun __field(int, count) 182*4882a593Smuzhiyun __field(int, firstu) 183*4882a593Smuzhiyun __field(int, dupcnt) 184*4882a593Smuzhiyun __field(unsigned int, attr_filter) 185*4882a593Smuzhiyun __field(u32, bt_hashval) 186*4882a593Smuzhiyun __field(u32, bt_before) 187*4882a593Smuzhiyun ), 188*4882a593Smuzhiyun TP_fast_assign( 189*4882a593Smuzhiyun __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; 190*4882a593Smuzhiyun __entry->ino = ctx->dp->i_ino; 191*4882a593Smuzhiyun __entry->hashval = ctx->cursor.hashval; 192*4882a593Smuzhiyun __entry->blkno = ctx->cursor.blkno; 193*4882a593Smuzhiyun __entry->offset = ctx->cursor.offset; 194*4882a593Smuzhiyun __entry->buffer = ctx->buffer; 195*4882a593Smuzhiyun __entry->bufsize = ctx->bufsize; 196*4882a593Smuzhiyun __entry->count = ctx->count; 197*4882a593Smuzhiyun __entry->firstu = ctx->firstu; 198*4882a593Smuzhiyun __entry->attr_filter = ctx->attr_filter; 199*4882a593Smuzhiyun __entry->bt_hashval = be32_to_cpu(btree->hashval); 200*4882a593Smuzhiyun __entry->bt_before = be32_to_cpu(btree->before); 201*4882a593Smuzhiyun ), 202*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u " 203*4882a593Smuzhiyun "buffer %p size %u count %u firstu %u filter %s " 204*4882a593Smuzhiyun "node hashval %u, node before %u", 205*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 206*4882a593Smuzhiyun __entry->ino, 207*4882a593Smuzhiyun __entry->hashval, 208*4882a593Smuzhiyun __entry->blkno, 209*4882a593Smuzhiyun __entry->offset, 210*4882a593Smuzhiyun __entry->dupcnt, 211*4882a593Smuzhiyun __entry->buffer, 212*4882a593Smuzhiyun __entry->bufsize, 213*4882a593Smuzhiyun __entry->count, 214*4882a593Smuzhiyun __entry->firstu, 215*4882a593Smuzhiyun __print_flags(__entry->attr_filter, "|", 216*4882a593Smuzhiyun XFS_ATTR_FILTER_FLAGS), 217*4882a593Smuzhiyun __entry->bt_hashval, 218*4882a593Smuzhiyun __entry->bt_before) 219*4882a593Smuzhiyun ); 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_bmap_class, 222*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, 223*4882a593Smuzhiyun unsigned long caller_ip), 224*4882a593Smuzhiyun TP_ARGS(ip, cur, state, caller_ip), 225*4882a593Smuzhiyun TP_STRUCT__entry( 226*4882a593Smuzhiyun __field(dev_t, dev) 227*4882a593Smuzhiyun __field(xfs_ino_t, ino) 228*4882a593Smuzhiyun __field(void *, leaf) 229*4882a593Smuzhiyun __field(int, pos) 230*4882a593Smuzhiyun __field(xfs_fileoff_t, startoff) 231*4882a593Smuzhiyun __field(xfs_fsblock_t, startblock) 232*4882a593Smuzhiyun __field(xfs_filblks_t, blockcount) 233*4882a593Smuzhiyun __field(xfs_exntst_t, state) 234*4882a593Smuzhiyun __field(int, bmap_state) 235*4882a593Smuzhiyun __field(unsigned long, caller_ip) 236*4882a593Smuzhiyun ), 237*4882a593Smuzhiyun TP_fast_assign( 238*4882a593Smuzhiyun struct xfs_ifork *ifp; 239*4882a593Smuzhiyun struct xfs_bmbt_irec r; 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun ifp = xfs_iext_state_to_fork(ip, state); 242*4882a593Smuzhiyun xfs_iext_get_extent(ifp, cur, &r); 243*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 244*4882a593Smuzhiyun __entry->ino = ip->i_ino; 245*4882a593Smuzhiyun __entry->leaf = cur->leaf; 246*4882a593Smuzhiyun __entry->pos = cur->pos; 247*4882a593Smuzhiyun __entry->startoff = r.br_startoff; 248*4882a593Smuzhiyun __entry->startblock = r.br_startblock; 249*4882a593Smuzhiyun __entry->blockcount = r.br_blockcount; 250*4882a593Smuzhiyun __entry->state = r.br_state; 251*4882a593Smuzhiyun __entry->bmap_state = state; 252*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 253*4882a593Smuzhiyun ), 254*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d " 255*4882a593Smuzhiyun "offset %lld block %lld count %lld flag %d caller %pS", 256*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 257*4882a593Smuzhiyun __entry->ino, 258*4882a593Smuzhiyun __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS), 259*4882a593Smuzhiyun __entry->leaf, 260*4882a593Smuzhiyun __entry->pos, 261*4882a593Smuzhiyun __entry->startoff, 262*4882a593Smuzhiyun (int64_t)__entry->startblock, 263*4882a593Smuzhiyun __entry->blockcount, 264*4882a593Smuzhiyun __entry->state, 265*4882a593Smuzhiyun (char *)__entry->caller_ip) 266*4882a593Smuzhiyun ) 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun #define DEFINE_BMAP_EVENT(name) \ 269*4882a593Smuzhiyun DEFINE_EVENT(xfs_bmap_class, name, \ 270*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \ 271*4882a593Smuzhiyun unsigned long caller_ip), \ 272*4882a593Smuzhiyun TP_ARGS(ip, cur, state, caller_ip)) 273*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_iext_insert); 274*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_iext_remove); 275*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_bmap_pre_update); 276*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_bmap_post_update); 277*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_read_extent); 278*4882a593Smuzhiyun DEFINE_BMAP_EVENT(xfs_write_extent); 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_buf_class, 281*4882a593Smuzhiyun TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), 282*4882a593Smuzhiyun TP_ARGS(bp, caller_ip), 283*4882a593Smuzhiyun TP_STRUCT__entry( 284*4882a593Smuzhiyun __field(dev_t, dev) 285*4882a593Smuzhiyun __field(xfs_daddr_t, bno) 286*4882a593Smuzhiyun __field(int, nblks) 287*4882a593Smuzhiyun __field(int, hold) 288*4882a593Smuzhiyun __field(int, pincount) 289*4882a593Smuzhiyun __field(unsigned, lockval) 290*4882a593Smuzhiyun __field(unsigned, flags) 291*4882a593Smuzhiyun __field(unsigned long, caller_ip) 292*4882a593Smuzhiyun ), 293*4882a593Smuzhiyun TP_fast_assign( 294*4882a593Smuzhiyun __entry->dev = bp->b_target->bt_dev; 295*4882a593Smuzhiyun if (bp->b_bn == XFS_BUF_DADDR_NULL) 296*4882a593Smuzhiyun __entry->bno = bp->b_maps[0].bm_bn; 297*4882a593Smuzhiyun else 298*4882a593Smuzhiyun __entry->bno = bp->b_bn; 299*4882a593Smuzhiyun __entry->nblks = bp->b_length; 300*4882a593Smuzhiyun __entry->hold = atomic_read(&bp->b_hold); 301*4882a593Smuzhiyun __entry->pincount = atomic_read(&bp->b_pin_count); 302*4882a593Smuzhiyun __entry->lockval = bp->b_sema.count; 303*4882a593Smuzhiyun __entry->flags = bp->b_flags; 304*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 305*4882a593Smuzhiyun ), 306*4882a593Smuzhiyun TP_printk("dev %d:%d bno 0x%llx nblks 0x%x hold %d pincount %d " 307*4882a593Smuzhiyun "lock %d flags %s caller %pS", 308*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 309*4882a593Smuzhiyun (unsigned long long)__entry->bno, 310*4882a593Smuzhiyun __entry->nblks, 311*4882a593Smuzhiyun __entry->hold, 312*4882a593Smuzhiyun __entry->pincount, 313*4882a593Smuzhiyun __entry->lockval, 314*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), 315*4882a593Smuzhiyun (void *)__entry->caller_ip) 316*4882a593Smuzhiyun ) 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun #define DEFINE_BUF_EVENT(name) \ 319*4882a593Smuzhiyun DEFINE_EVENT(xfs_buf_class, name, \ 320*4882a593Smuzhiyun TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \ 321*4882a593Smuzhiyun TP_ARGS(bp, caller_ip)) 322*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_init); 323*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_free); 324*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_hold); 325*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_rele); 326*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iodone); 327*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_submit); 328*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_lock); 329*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_lock_done); 330*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_trylock_fail); 331*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_trylock); 332*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_unlock); 333*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iowait); 334*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iowait_done); 335*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_queue); 336*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_queued); 337*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_split); 338*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_delwri_pushbuf); 339*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_get_uncached); 340*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_item_relse); 341*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_iodone_async); 342*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_error_relse); 343*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_buf_wait_buftarg); 344*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_trans_read_buf_shut); 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun /* not really buffer traces, but the buf provides useful information */ 347*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_btree_corrupt); 348*4882a593Smuzhiyun DEFINE_BUF_EVENT(xfs_reset_dqcounts); 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun /* pass flags explicitly */ 351*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_buf_flags_class, 352*4882a593Smuzhiyun TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), 353*4882a593Smuzhiyun TP_ARGS(bp, flags, caller_ip), 354*4882a593Smuzhiyun TP_STRUCT__entry( 355*4882a593Smuzhiyun __field(dev_t, dev) 356*4882a593Smuzhiyun __field(xfs_daddr_t, bno) 357*4882a593Smuzhiyun __field(size_t, buffer_length) 358*4882a593Smuzhiyun __field(int, hold) 359*4882a593Smuzhiyun __field(int, pincount) 360*4882a593Smuzhiyun __field(unsigned, lockval) 361*4882a593Smuzhiyun __field(unsigned, flags) 362*4882a593Smuzhiyun __field(unsigned long, caller_ip) 363*4882a593Smuzhiyun ), 364*4882a593Smuzhiyun TP_fast_assign( 365*4882a593Smuzhiyun __entry->dev = bp->b_target->bt_dev; 366*4882a593Smuzhiyun __entry->bno = bp->b_bn; 367*4882a593Smuzhiyun __entry->buffer_length = BBTOB(bp->b_length); 368*4882a593Smuzhiyun __entry->flags = flags; 369*4882a593Smuzhiyun __entry->hold = atomic_read(&bp->b_hold); 370*4882a593Smuzhiyun __entry->pincount = atomic_read(&bp->b_pin_count); 371*4882a593Smuzhiyun __entry->lockval = bp->b_sema.count; 372*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 373*4882a593Smuzhiyun ), 374*4882a593Smuzhiyun TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d " 375*4882a593Smuzhiyun "lock %d flags %s caller %pS", 376*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 377*4882a593Smuzhiyun (unsigned long long)__entry->bno, 378*4882a593Smuzhiyun __entry->buffer_length, 379*4882a593Smuzhiyun __entry->hold, 380*4882a593Smuzhiyun __entry->pincount, 381*4882a593Smuzhiyun __entry->lockval, 382*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), 383*4882a593Smuzhiyun (void *)__entry->caller_ip) 384*4882a593Smuzhiyun ) 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun #define DEFINE_BUF_FLAGS_EVENT(name) \ 387*4882a593Smuzhiyun DEFINE_EVENT(xfs_buf_flags_class, name, \ 388*4882a593Smuzhiyun TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \ 389*4882a593Smuzhiyun TP_ARGS(bp, flags, caller_ip)) 390*4882a593Smuzhiyun DEFINE_BUF_FLAGS_EVENT(xfs_buf_find); 391*4882a593Smuzhiyun DEFINE_BUF_FLAGS_EVENT(xfs_buf_get); 392*4882a593Smuzhiyun DEFINE_BUF_FLAGS_EVENT(xfs_buf_read); 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun TRACE_EVENT(xfs_buf_ioerror, 395*4882a593Smuzhiyun TP_PROTO(struct xfs_buf *bp, int error, xfs_failaddr_t caller_ip), 396*4882a593Smuzhiyun TP_ARGS(bp, error, caller_ip), 397*4882a593Smuzhiyun TP_STRUCT__entry( 398*4882a593Smuzhiyun __field(dev_t, dev) 399*4882a593Smuzhiyun __field(xfs_daddr_t, bno) 400*4882a593Smuzhiyun __field(size_t, buffer_length) 401*4882a593Smuzhiyun __field(unsigned, flags) 402*4882a593Smuzhiyun __field(int, hold) 403*4882a593Smuzhiyun __field(int, pincount) 404*4882a593Smuzhiyun __field(unsigned, lockval) 405*4882a593Smuzhiyun __field(int, error) 406*4882a593Smuzhiyun __field(xfs_failaddr_t, caller_ip) 407*4882a593Smuzhiyun ), 408*4882a593Smuzhiyun TP_fast_assign( 409*4882a593Smuzhiyun __entry->dev = bp->b_target->bt_dev; 410*4882a593Smuzhiyun __entry->bno = bp->b_bn; 411*4882a593Smuzhiyun __entry->buffer_length = BBTOB(bp->b_length); 412*4882a593Smuzhiyun __entry->hold = atomic_read(&bp->b_hold); 413*4882a593Smuzhiyun __entry->pincount = atomic_read(&bp->b_pin_count); 414*4882a593Smuzhiyun __entry->lockval = bp->b_sema.count; 415*4882a593Smuzhiyun __entry->error = error; 416*4882a593Smuzhiyun __entry->flags = bp->b_flags; 417*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 418*4882a593Smuzhiyun ), 419*4882a593Smuzhiyun TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d " 420*4882a593Smuzhiyun "lock %d error %d flags %s caller %pS", 421*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 422*4882a593Smuzhiyun (unsigned long long)__entry->bno, 423*4882a593Smuzhiyun __entry->buffer_length, 424*4882a593Smuzhiyun __entry->hold, 425*4882a593Smuzhiyun __entry->pincount, 426*4882a593Smuzhiyun __entry->lockval, 427*4882a593Smuzhiyun __entry->error, 428*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), 429*4882a593Smuzhiyun (void *)__entry->caller_ip) 430*4882a593Smuzhiyun ); 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_buf_item_class, 433*4882a593Smuzhiyun TP_PROTO(struct xfs_buf_log_item *bip), 434*4882a593Smuzhiyun TP_ARGS(bip), 435*4882a593Smuzhiyun TP_STRUCT__entry( 436*4882a593Smuzhiyun __field(dev_t, dev) 437*4882a593Smuzhiyun __field(xfs_daddr_t, buf_bno) 438*4882a593Smuzhiyun __field(size_t, buf_len) 439*4882a593Smuzhiyun __field(int, buf_hold) 440*4882a593Smuzhiyun __field(int, buf_pincount) 441*4882a593Smuzhiyun __field(int, buf_lockval) 442*4882a593Smuzhiyun __field(unsigned, buf_flags) 443*4882a593Smuzhiyun __field(unsigned, bli_recur) 444*4882a593Smuzhiyun __field(int, bli_refcount) 445*4882a593Smuzhiyun __field(unsigned, bli_flags) 446*4882a593Smuzhiyun __field(unsigned long, li_flags) 447*4882a593Smuzhiyun ), 448*4882a593Smuzhiyun TP_fast_assign( 449*4882a593Smuzhiyun __entry->dev = bip->bli_buf->b_target->bt_dev; 450*4882a593Smuzhiyun __entry->bli_flags = bip->bli_flags; 451*4882a593Smuzhiyun __entry->bli_recur = bip->bli_recur; 452*4882a593Smuzhiyun __entry->bli_refcount = atomic_read(&bip->bli_refcount); 453*4882a593Smuzhiyun __entry->buf_bno = bip->bli_buf->b_bn; 454*4882a593Smuzhiyun __entry->buf_len = BBTOB(bip->bli_buf->b_length); 455*4882a593Smuzhiyun __entry->buf_flags = bip->bli_buf->b_flags; 456*4882a593Smuzhiyun __entry->buf_hold = atomic_read(&bip->bli_buf->b_hold); 457*4882a593Smuzhiyun __entry->buf_pincount = atomic_read(&bip->bli_buf->b_pin_count); 458*4882a593Smuzhiyun __entry->buf_lockval = bip->bli_buf->b_sema.count; 459*4882a593Smuzhiyun __entry->li_flags = bip->bli_item.li_flags; 460*4882a593Smuzhiyun ), 461*4882a593Smuzhiyun TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d " 462*4882a593Smuzhiyun "lock %d flags %s recur %d refcount %d bliflags %s " 463*4882a593Smuzhiyun "liflags %s", 464*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 465*4882a593Smuzhiyun (unsigned long long)__entry->buf_bno, 466*4882a593Smuzhiyun __entry->buf_len, 467*4882a593Smuzhiyun __entry->buf_hold, 468*4882a593Smuzhiyun __entry->buf_pincount, 469*4882a593Smuzhiyun __entry->buf_lockval, 470*4882a593Smuzhiyun __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS), 471*4882a593Smuzhiyun __entry->bli_recur, 472*4882a593Smuzhiyun __entry->bli_refcount, 473*4882a593Smuzhiyun __print_flags(__entry->bli_flags, "|", XFS_BLI_FLAGS), 474*4882a593Smuzhiyun __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS)) 475*4882a593Smuzhiyun ) 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun #define DEFINE_BUF_ITEM_EVENT(name) \ 478*4882a593Smuzhiyun DEFINE_EVENT(xfs_buf_item_class, name, \ 479*4882a593Smuzhiyun TP_PROTO(struct xfs_buf_log_item *bip), \ 480*4882a593Smuzhiyun TP_ARGS(bip)) 481*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size); 482*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered); 483*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale); 484*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format); 485*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale); 486*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered); 487*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin); 488*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin); 489*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale); 490*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release); 491*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed); 492*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push); 493*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf); 494*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur); 495*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb); 496*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur); 497*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf); 498*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur); 499*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf); 500*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse); 501*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin); 502*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold); 503*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release); 504*4882a593Smuzhiyun DEFINE_BUF_ITEM_EVENT(xfs_trans_binval); 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_filestream_class, 507*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno), 508*4882a593Smuzhiyun TP_ARGS(mp, ino, agno), 509*4882a593Smuzhiyun TP_STRUCT__entry( 510*4882a593Smuzhiyun __field(dev_t, dev) 511*4882a593Smuzhiyun __field(xfs_ino_t, ino) 512*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 513*4882a593Smuzhiyun __field(int, streams) 514*4882a593Smuzhiyun ), 515*4882a593Smuzhiyun TP_fast_assign( 516*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 517*4882a593Smuzhiyun __entry->ino = ino; 518*4882a593Smuzhiyun __entry->agno = agno; 519*4882a593Smuzhiyun __entry->streams = xfs_filestream_peek_ag(mp, agno); 520*4882a593Smuzhiyun ), 521*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx agno %u streams %d", 522*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 523*4882a593Smuzhiyun __entry->ino, 524*4882a593Smuzhiyun __entry->agno, 525*4882a593Smuzhiyun __entry->streams) 526*4882a593Smuzhiyun ) 527*4882a593Smuzhiyun #define DEFINE_FILESTREAM_EVENT(name) \ 528*4882a593Smuzhiyun DEFINE_EVENT(xfs_filestream_class, name, \ 529*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno), \ 530*4882a593Smuzhiyun TP_ARGS(mp, ino, agno)) 531*4882a593Smuzhiyun DEFINE_FILESTREAM_EVENT(xfs_filestream_free); 532*4882a593Smuzhiyun DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup); 533*4882a593Smuzhiyun DEFINE_FILESTREAM_EVENT(xfs_filestream_scan); 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun TRACE_EVENT(xfs_filestream_pick, 536*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_agnumber_t agno, 537*4882a593Smuzhiyun xfs_extlen_t free, int nscan), 538*4882a593Smuzhiyun TP_ARGS(ip, agno, free, nscan), 539*4882a593Smuzhiyun TP_STRUCT__entry( 540*4882a593Smuzhiyun __field(dev_t, dev) 541*4882a593Smuzhiyun __field(xfs_ino_t, ino) 542*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 543*4882a593Smuzhiyun __field(int, streams) 544*4882a593Smuzhiyun __field(xfs_extlen_t, free) 545*4882a593Smuzhiyun __field(int, nscan) 546*4882a593Smuzhiyun ), 547*4882a593Smuzhiyun TP_fast_assign( 548*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 549*4882a593Smuzhiyun __entry->ino = ip->i_ino; 550*4882a593Smuzhiyun __entry->agno = agno; 551*4882a593Smuzhiyun __entry->streams = xfs_filestream_peek_ag(ip->i_mount, agno); 552*4882a593Smuzhiyun __entry->free = free; 553*4882a593Smuzhiyun __entry->nscan = nscan; 554*4882a593Smuzhiyun ), 555*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx agno %u streams %d free %d nscan %d", 556*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 557*4882a593Smuzhiyun __entry->ino, 558*4882a593Smuzhiyun __entry->agno, 559*4882a593Smuzhiyun __entry->streams, 560*4882a593Smuzhiyun __entry->free, 561*4882a593Smuzhiyun __entry->nscan) 562*4882a593Smuzhiyun ); 563*4882a593Smuzhiyun 564*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_lock_class, 565*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, 566*4882a593Smuzhiyun unsigned long caller_ip), 567*4882a593Smuzhiyun TP_ARGS(ip, lock_flags, caller_ip), 568*4882a593Smuzhiyun TP_STRUCT__entry( 569*4882a593Smuzhiyun __field(dev_t, dev) 570*4882a593Smuzhiyun __field(xfs_ino_t, ino) 571*4882a593Smuzhiyun __field(int, lock_flags) 572*4882a593Smuzhiyun __field(unsigned long, caller_ip) 573*4882a593Smuzhiyun ), 574*4882a593Smuzhiyun TP_fast_assign( 575*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 576*4882a593Smuzhiyun __entry->ino = ip->i_ino; 577*4882a593Smuzhiyun __entry->lock_flags = lock_flags; 578*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 579*4882a593Smuzhiyun ), 580*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS", 581*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 582*4882a593Smuzhiyun __entry->ino, 583*4882a593Smuzhiyun __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS), 584*4882a593Smuzhiyun (void *)__entry->caller_ip) 585*4882a593Smuzhiyun ) 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun #define DEFINE_LOCK_EVENT(name) \ 588*4882a593Smuzhiyun DEFINE_EVENT(xfs_lock_class, name, \ 589*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \ 590*4882a593Smuzhiyun unsigned long caller_ip), \ 591*4882a593Smuzhiyun TP_ARGS(ip, lock_flags, caller_ip)) 592*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_ilock); 593*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_ilock_nowait); 594*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_ilock_demote); 595*4882a593Smuzhiyun DEFINE_LOCK_EVENT(xfs_iunlock); 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_class, 598*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip), 599*4882a593Smuzhiyun TP_ARGS(ip), 600*4882a593Smuzhiyun TP_STRUCT__entry( 601*4882a593Smuzhiyun __field(dev_t, dev) 602*4882a593Smuzhiyun __field(xfs_ino_t, ino) 603*4882a593Smuzhiyun ), 604*4882a593Smuzhiyun TP_fast_assign( 605*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 606*4882a593Smuzhiyun __entry->ino = ip->i_ino; 607*4882a593Smuzhiyun ), 608*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx", 609*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 610*4882a593Smuzhiyun __entry->ino) 611*4882a593Smuzhiyun ) 612*4882a593Smuzhiyun 613*4882a593Smuzhiyun #define DEFINE_INODE_EVENT(name) \ 614*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_class, name, \ 615*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip), \ 616*4882a593Smuzhiyun TP_ARGS(ip)) 617*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_skip); 618*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_reclaim); 619*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_reclaim_fail); 620*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_hit); 621*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_iget_miss); 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_getattr); 624*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_setattr); 625*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_readlink); 626*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inactive_symlink); 627*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_alloc_file_space); 628*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_free_file_space); 629*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_zero_file_space); 630*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_collapse_file_space); 631*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_insert_file_space); 632*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_readdir); 633*4882a593Smuzhiyun #ifdef CONFIG_XFS_POSIX_ACL 634*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_get_acl); 635*4882a593Smuzhiyun #endif 636*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_vm_bmap); 637*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_file_ioctl); 638*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_file_compat_ioctl); 639*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_ioctl_setattr); 640*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_dir_fsync); 641*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_file_fsync); 642*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_destroy_inode); 643*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_update_time); 644*4882a593Smuzhiyun 645*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_dquot_dqalloc); 646*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_dquot_dqdetach); 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_set_eofblocks_tag); 649*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_clear_eofblocks_tag); 650*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_free_eofblocks_invalid); 651*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_set_cowblocks_tag); 652*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_clear_cowblocks_tag); 653*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_inode_free_cowblocks_invalid); 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun /* 656*4882a593Smuzhiyun * ftrace's __print_symbolic requires that all enum values be wrapped in the 657*4882a593Smuzhiyun * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace 658*4882a593Smuzhiyun * ring buffer. Somehow this was only worth mentioning in the ftrace sample 659*4882a593Smuzhiyun * code. 660*4882a593Smuzhiyun */ 661*4882a593Smuzhiyun TRACE_DEFINE_ENUM(PE_SIZE_PTE); 662*4882a593Smuzhiyun TRACE_DEFINE_ENUM(PE_SIZE_PMD); 663*4882a593Smuzhiyun TRACE_DEFINE_ENUM(PE_SIZE_PUD); 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun TRACE_EVENT(xfs_filemap_fault, 666*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, enum page_entry_size pe_size, 667*4882a593Smuzhiyun bool write_fault), 668*4882a593Smuzhiyun TP_ARGS(ip, pe_size, write_fault), 669*4882a593Smuzhiyun TP_STRUCT__entry( 670*4882a593Smuzhiyun __field(dev_t, dev) 671*4882a593Smuzhiyun __field(xfs_ino_t, ino) 672*4882a593Smuzhiyun __field(enum page_entry_size, pe_size) 673*4882a593Smuzhiyun __field(bool, write_fault) 674*4882a593Smuzhiyun ), 675*4882a593Smuzhiyun TP_fast_assign( 676*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 677*4882a593Smuzhiyun __entry->ino = ip->i_ino; 678*4882a593Smuzhiyun __entry->pe_size = pe_size; 679*4882a593Smuzhiyun __entry->write_fault = write_fault; 680*4882a593Smuzhiyun ), 681*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx %s write_fault %d", 682*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 683*4882a593Smuzhiyun __entry->ino, 684*4882a593Smuzhiyun __print_symbolic(__entry->pe_size, 685*4882a593Smuzhiyun { PE_SIZE_PTE, "PTE" }, 686*4882a593Smuzhiyun { PE_SIZE_PMD, "PMD" }, 687*4882a593Smuzhiyun { PE_SIZE_PUD, "PUD" }), 688*4882a593Smuzhiyun __entry->write_fault) 689*4882a593Smuzhiyun ) 690*4882a593Smuzhiyun 691*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_iref_class, 692*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), 693*4882a593Smuzhiyun TP_ARGS(ip, caller_ip), 694*4882a593Smuzhiyun TP_STRUCT__entry( 695*4882a593Smuzhiyun __field(dev_t, dev) 696*4882a593Smuzhiyun __field(xfs_ino_t, ino) 697*4882a593Smuzhiyun __field(int, count) 698*4882a593Smuzhiyun __field(int, pincount) 699*4882a593Smuzhiyun __field(unsigned long, caller_ip) 700*4882a593Smuzhiyun ), 701*4882a593Smuzhiyun TP_fast_assign( 702*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 703*4882a593Smuzhiyun __entry->ino = ip->i_ino; 704*4882a593Smuzhiyun __entry->count = atomic_read(&VFS_I(ip)->i_count); 705*4882a593Smuzhiyun __entry->pincount = atomic_read(&ip->i_pincount); 706*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 707*4882a593Smuzhiyun ), 708*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pS", 709*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 710*4882a593Smuzhiyun __entry->ino, 711*4882a593Smuzhiyun __entry->count, 712*4882a593Smuzhiyun __entry->pincount, 713*4882a593Smuzhiyun (char *)__entry->caller_ip) 714*4882a593Smuzhiyun ) 715*4882a593Smuzhiyun 716*4882a593Smuzhiyun TRACE_EVENT(xfs_iomap_prealloc_size, 717*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t blocks, int shift, 718*4882a593Smuzhiyun unsigned int writeio_blocks), 719*4882a593Smuzhiyun TP_ARGS(ip, blocks, shift, writeio_blocks), 720*4882a593Smuzhiyun TP_STRUCT__entry( 721*4882a593Smuzhiyun __field(dev_t, dev) 722*4882a593Smuzhiyun __field(xfs_ino_t, ino) 723*4882a593Smuzhiyun __field(xfs_fsblock_t, blocks) 724*4882a593Smuzhiyun __field(int, shift) 725*4882a593Smuzhiyun __field(unsigned int, writeio_blocks) 726*4882a593Smuzhiyun ), 727*4882a593Smuzhiyun TP_fast_assign( 728*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 729*4882a593Smuzhiyun __entry->ino = ip->i_ino; 730*4882a593Smuzhiyun __entry->blocks = blocks; 731*4882a593Smuzhiyun __entry->shift = shift; 732*4882a593Smuzhiyun __entry->writeio_blocks = writeio_blocks; 733*4882a593Smuzhiyun ), 734*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx prealloc blocks %llu shift %d " 735*4882a593Smuzhiyun "m_allocsize_blocks %u", 736*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, 737*4882a593Smuzhiyun __entry->blocks, __entry->shift, __entry->writeio_blocks) 738*4882a593Smuzhiyun ) 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun TRACE_EVENT(xfs_irec_merge_pre, 741*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino, 742*4882a593Smuzhiyun uint16_t holemask, xfs_agino_t nagino, uint16_t nholemask), 743*4882a593Smuzhiyun TP_ARGS(mp, agno, agino, holemask, nagino, nholemask), 744*4882a593Smuzhiyun TP_STRUCT__entry( 745*4882a593Smuzhiyun __field(dev_t, dev) 746*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 747*4882a593Smuzhiyun __field(xfs_agino_t, agino) 748*4882a593Smuzhiyun __field(uint16_t, holemask) 749*4882a593Smuzhiyun __field(xfs_agino_t, nagino) 750*4882a593Smuzhiyun __field(uint16_t, nholemask) 751*4882a593Smuzhiyun ), 752*4882a593Smuzhiyun TP_fast_assign( 753*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 754*4882a593Smuzhiyun __entry->agno = agno; 755*4882a593Smuzhiyun __entry->agino = agino; 756*4882a593Smuzhiyun __entry->holemask = holemask; 757*4882a593Smuzhiyun __entry->nagino = nagino; 758*4882a593Smuzhiyun __entry->nholemask = holemask; 759*4882a593Smuzhiyun ), 760*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d inobt (%u:0x%x) new (%u:0x%x)", 761*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, 762*4882a593Smuzhiyun __entry->agino, __entry->holemask, __entry->nagino, 763*4882a593Smuzhiyun __entry->nholemask) 764*4882a593Smuzhiyun ) 765*4882a593Smuzhiyun 766*4882a593Smuzhiyun TRACE_EVENT(xfs_irec_merge_post, 767*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino, 768*4882a593Smuzhiyun uint16_t holemask), 769*4882a593Smuzhiyun TP_ARGS(mp, agno, agino, holemask), 770*4882a593Smuzhiyun TP_STRUCT__entry( 771*4882a593Smuzhiyun __field(dev_t, dev) 772*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 773*4882a593Smuzhiyun __field(xfs_agino_t, agino) 774*4882a593Smuzhiyun __field(uint16_t, holemask) 775*4882a593Smuzhiyun ), 776*4882a593Smuzhiyun TP_fast_assign( 777*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 778*4882a593Smuzhiyun __entry->agno = agno; 779*4882a593Smuzhiyun __entry->agino = agino; 780*4882a593Smuzhiyun __entry->holemask = holemask; 781*4882a593Smuzhiyun ), 782*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d inobt (%u:0x%x)", MAJOR(__entry->dev), 783*4882a593Smuzhiyun MINOR(__entry->dev), __entry->agno, __entry->agino, 784*4882a593Smuzhiyun __entry->holemask) 785*4882a593Smuzhiyun ) 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun #define DEFINE_IREF_EVENT(name) \ 788*4882a593Smuzhiyun DEFINE_EVENT(xfs_iref_class, name, \ 789*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), \ 790*4882a593Smuzhiyun TP_ARGS(ip, caller_ip)) 791*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_irele); 792*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_inode_pin); 793*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_inode_unpin); 794*4882a593Smuzhiyun DEFINE_IREF_EVENT(xfs_inode_unpin_nowait); 795*4882a593Smuzhiyun 796*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_namespace_class, 797*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *dp, struct xfs_name *name), 798*4882a593Smuzhiyun TP_ARGS(dp, name), 799*4882a593Smuzhiyun TP_STRUCT__entry( 800*4882a593Smuzhiyun __field(dev_t, dev) 801*4882a593Smuzhiyun __field(xfs_ino_t, dp_ino) 802*4882a593Smuzhiyun __field(int, namelen) 803*4882a593Smuzhiyun __dynamic_array(char, name, name->len) 804*4882a593Smuzhiyun ), 805*4882a593Smuzhiyun TP_fast_assign( 806*4882a593Smuzhiyun __entry->dev = VFS_I(dp)->i_sb->s_dev; 807*4882a593Smuzhiyun __entry->dp_ino = dp->i_ino; 808*4882a593Smuzhiyun __entry->namelen = name->len; 809*4882a593Smuzhiyun memcpy(__get_str(name), name->name, name->len); 810*4882a593Smuzhiyun ), 811*4882a593Smuzhiyun TP_printk("dev %d:%d dp ino 0x%llx name %.*s", 812*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 813*4882a593Smuzhiyun __entry->dp_ino, 814*4882a593Smuzhiyun __entry->namelen, 815*4882a593Smuzhiyun __get_str(name)) 816*4882a593Smuzhiyun ) 817*4882a593Smuzhiyun 818*4882a593Smuzhiyun #define DEFINE_NAMESPACE_EVENT(name) \ 819*4882a593Smuzhiyun DEFINE_EVENT(xfs_namespace_class, name, \ 820*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *dp, struct xfs_name *name), \ 821*4882a593Smuzhiyun TP_ARGS(dp, name)) 822*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_remove); 823*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_link); 824*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_lookup); 825*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_create); 826*4882a593Smuzhiyun DEFINE_NAMESPACE_EVENT(xfs_symlink); 827*4882a593Smuzhiyun 828*4882a593Smuzhiyun TRACE_EVENT(xfs_rename, 829*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *src_dp, struct xfs_inode *target_dp, 830*4882a593Smuzhiyun struct xfs_name *src_name, struct xfs_name *target_name), 831*4882a593Smuzhiyun TP_ARGS(src_dp, target_dp, src_name, target_name), 832*4882a593Smuzhiyun TP_STRUCT__entry( 833*4882a593Smuzhiyun __field(dev_t, dev) 834*4882a593Smuzhiyun __field(xfs_ino_t, src_dp_ino) 835*4882a593Smuzhiyun __field(xfs_ino_t, target_dp_ino) 836*4882a593Smuzhiyun __field(int, src_namelen) 837*4882a593Smuzhiyun __field(int, target_namelen) 838*4882a593Smuzhiyun __dynamic_array(char, src_name, src_name->len) 839*4882a593Smuzhiyun __dynamic_array(char, target_name, target_name->len) 840*4882a593Smuzhiyun ), 841*4882a593Smuzhiyun TP_fast_assign( 842*4882a593Smuzhiyun __entry->dev = VFS_I(src_dp)->i_sb->s_dev; 843*4882a593Smuzhiyun __entry->src_dp_ino = src_dp->i_ino; 844*4882a593Smuzhiyun __entry->target_dp_ino = target_dp->i_ino; 845*4882a593Smuzhiyun __entry->src_namelen = src_name->len; 846*4882a593Smuzhiyun __entry->target_namelen = target_name->len; 847*4882a593Smuzhiyun memcpy(__get_str(src_name), src_name->name, src_name->len); 848*4882a593Smuzhiyun memcpy(__get_str(target_name), target_name->name, 849*4882a593Smuzhiyun target_name->len); 850*4882a593Smuzhiyun ), 851*4882a593Smuzhiyun TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx" 852*4882a593Smuzhiyun " src name %.*s target name %.*s", 853*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 854*4882a593Smuzhiyun __entry->src_dp_ino, 855*4882a593Smuzhiyun __entry->target_dp_ino, 856*4882a593Smuzhiyun __entry->src_namelen, 857*4882a593Smuzhiyun __get_str(src_name), 858*4882a593Smuzhiyun __entry->target_namelen, 859*4882a593Smuzhiyun __get_str(target_name)) 860*4882a593Smuzhiyun ) 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_dquot_class, 863*4882a593Smuzhiyun TP_PROTO(struct xfs_dquot *dqp), 864*4882a593Smuzhiyun TP_ARGS(dqp), 865*4882a593Smuzhiyun TP_STRUCT__entry( 866*4882a593Smuzhiyun __field(dev_t, dev) 867*4882a593Smuzhiyun __field(u32, id) 868*4882a593Smuzhiyun __field(xfs_dqtype_t, type) 869*4882a593Smuzhiyun __field(unsigned, flags) 870*4882a593Smuzhiyun __field(unsigned, nrefs) 871*4882a593Smuzhiyun __field(unsigned long long, res_bcount) 872*4882a593Smuzhiyun __field(unsigned long long, res_rtbcount) 873*4882a593Smuzhiyun __field(unsigned long long, res_icount) 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun __field(unsigned long long, bcount) 876*4882a593Smuzhiyun __field(unsigned long long, rtbcount) 877*4882a593Smuzhiyun __field(unsigned long long, icount) 878*4882a593Smuzhiyun 879*4882a593Smuzhiyun __field(unsigned long long, blk_hardlimit) 880*4882a593Smuzhiyun __field(unsigned long long, blk_softlimit) 881*4882a593Smuzhiyun __field(unsigned long long, rtb_hardlimit) 882*4882a593Smuzhiyun __field(unsigned long long, rtb_softlimit) 883*4882a593Smuzhiyun __field(unsigned long long, ino_hardlimit) 884*4882a593Smuzhiyun __field(unsigned long long, ino_softlimit) 885*4882a593Smuzhiyun ), 886*4882a593Smuzhiyun TP_fast_assign( 887*4882a593Smuzhiyun __entry->dev = dqp->q_mount->m_super->s_dev; 888*4882a593Smuzhiyun __entry->id = dqp->q_id; 889*4882a593Smuzhiyun __entry->type = dqp->q_type; 890*4882a593Smuzhiyun __entry->flags = dqp->q_flags; 891*4882a593Smuzhiyun __entry->nrefs = dqp->q_nrefs; 892*4882a593Smuzhiyun 893*4882a593Smuzhiyun __entry->res_bcount = dqp->q_blk.reserved; 894*4882a593Smuzhiyun __entry->res_rtbcount = dqp->q_rtb.reserved; 895*4882a593Smuzhiyun __entry->res_icount = dqp->q_ino.reserved; 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun __entry->bcount = dqp->q_blk.count; 898*4882a593Smuzhiyun __entry->rtbcount = dqp->q_rtb.count; 899*4882a593Smuzhiyun __entry->icount = dqp->q_ino.count; 900*4882a593Smuzhiyun 901*4882a593Smuzhiyun __entry->blk_hardlimit = dqp->q_blk.hardlimit; 902*4882a593Smuzhiyun __entry->blk_softlimit = dqp->q_blk.softlimit; 903*4882a593Smuzhiyun __entry->rtb_hardlimit = dqp->q_rtb.hardlimit; 904*4882a593Smuzhiyun __entry->rtb_softlimit = dqp->q_rtb.softlimit; 905*4882a593Smuzhiyun __entry->ino_hardlimit = dqp->q_ino.hardlimit; 906*4882a593Smuzhiyun __entry->ino_softlimit = dqp->q_ino.softlimit; 907*4882a593Smuzhiyun ), 908*4882a593Smuzhiyun TP_printk("dev %d:%d id 0x%x type %s flags %s nrefs %u " 909*4882a593Smuzhiyun "res_bc 0x%llx res_rtbc 0x%llx res_ic 0x%llx " 910*4882a593Smuzhiyun "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx " 911*4882a593Smuzhiyun "rtbcnt 0x%llx rtbhardlimit 0x%llx rtbsoftlimit 0x%llx " 912*4882a593Smuzhiyun "icnt 0x%llx ihardlimit 0x%llx isoftlimit 0x%llx]", 913*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 914*4882a593Smuzhiyun __entry->id, 915*4882a593Smuzhiyun __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 916*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS), 917*4882a593Smuzhiyun __entry->nrefs, 918*4882a593Smuzhiyun __entry->res_bcount, 919*4882a593Smuzhiyun __entry->res_rtbcount, 920*4882a593Smuzhiyun __entry->res_icount, 921*4882a593Smuzhiyun __entry->bcount, 922*4882a593Smuzhiyun __entry->blk_hardlimit, 923*4882a593Smuzhiyun __entry->blk_softlimit, 924*4882a593Smuzhiyun __entry->rtbcount, 925*4882a593Smuzhiyun __entry->rtb_hardlimit, 926*4882a593Smuzhiyun __entry->rtb_softlimit, 927*4882a593Smuzhiyun __entry->icount, 928*4882a593Smuzhiyun __entry->ino_hardlimit, 929*4882a593Smuzhiyun __entry->ino_softlimit) 930*4882a593Smuzhiyun ) 931*4882a593Smuzhiyun 932*4882a593Smuzhiyun #define DEFINE_DQUOT_EVENT(name) \ 933*4882a593Smuzhiyun DEFINE_EVENT(xfs_dquot_class, name, \ 934*4882a593Smuzhiyun TP_PROTO(struct xfs_dquot *dqp), \ 935*4882a593Smuzhiyun TP_ARGS(dqp)) 936*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqadjust); 937*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_want); 938*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty); 939*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy); 940*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqreclaim_done); 941*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqattach_found); 942*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqattach_get); 943*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqalloc); 944*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqtobp_read); 945*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqread); 946*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqread_fail); 947*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_hit); 948*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_miss); 949*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_freeing); 950*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqget_dup); 951*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqput); 952*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqput_free); 953*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqrele); 954*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqflush); 955*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqflush_force); 956*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_dqflush_done); 957*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_before); 958*4882a593Smuzhiyun DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_after); 959*4882a593Smuzhiyun 960*4882a593Smuzhiyun #define XFS_QMOPT_FLAGS \ 961*4882a593Smuzhiyun { XFS_QMOPT_UQUOTA, "UQUOTA" }, \ 962*4882a593Smuzhiyun { XFS_QMOPT_PQUOTA, "PQUOTA" }, \ 963*4882a593Smuzhiyun { XFS_QMOPT_FORCE_RES, "FORCE_RES" }, \ 964*4882a593Smuzhiyun { XFS_QMOPT_SBVERSION, "SBVERSION" }, \ 965*4882a593Smuzhiyun { XFS_QMOPT_GQUOTA, "GQUOTA" }, \ 966*4882a593Smuzhiyun { XFS_QMOPT_INHERIT, "INHERIT" }, \ 967*4882a593Smuzhiyun { XFS_QMOPT_RES_REGBLKS, "RES_REGBLKS" }, \ 968*4882a593Smuzhiyun { XFS_QMOPT_RES_RTBLKS, "RES_RTBLKS" }, \ 969*4882a593Smuzhiyun { XFS_QMOPT_BCOUNT, "BCOUNT" }, \ 970*4882a593Smuzhiyun { XFS_QMOPT_ICOUNT, "ICOUNT" }, \ 971*4882a593Smuzhiyun { XFS_QMOPT_RTBCOUNT, "RTBCOUNT" }, \ 972*4882a593Smuzhiyun { XFS_QMOPT_DELBCOUNT, "DELBCOUNT" }, \ 973*4882a593Smuzhiyun { XFS_QMOPT_DELRTBCOUNT, "DELRTBCOUNT" }, \ 974*4882a593Smuzhiyun { XFS_QMOPT_RES_INOS, "RES_INOS" } 975*4882a593Smuzhiyun 976*4882a593Smuzhiyun TRACE_EVENT(xfs_trans_mod_dquot, 977*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, struct xfs_dquot *dqp, 978*4882a593Smuzhiyun unsigned int field, int64_t delta), 979*4882a593Smuzhiyun TP_ARGS(tp, dqp, field, delta), 980*4882a593Smuzhiyun TP_STRUCT__entry( 981*4882a593Smuzhiyun __field(dev_t, dev) 982*4882a593Smuzhiyun __field(xfs_dqtype_t, type) 983*4882a593Smuzhiyun __field(unsigned int, flags) 984*4882a593Smuzhiyun __field(unsigned int, dqid) 985*4882a593Smuzhiyun __field(unsigned int, field) 986*4882a593Smuzhiyun __field(int64_t, delta) 987*4882a593Smuzhiyun ), 988*4882a593Smuzhiyun TP_fast_assign( 989*4882a593Smuzhiyun __entry->dev = tp->t_mountp->m_super->s_dev; 990*4882a593Smuzhiyun __entry->type = dqp->q_type; 991*4882a593Smuzhiyun __entry->flags = dqp->q_flags; 992*4882a593Smuzhiyun __entry->dqid = dqp->q_id; 993*4882a593Smuzhiyun __entry->field = field; 994*4882a593Smuzhiyun __entry->delta = delta; 995*4882a593Smuzhiyun ), 996*4882a593Smuzhiyun TP_printk("dev %d:%d dquot id 0x%x type %s flags %s field %s delta %lld", 997*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 998*4882a593Smuzhiyun __entry->dqid, 999*4882a593Smuzhiyun __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 1000*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS), 1001*4882a593Smuzhiyun __print_flags(__entry->field, "|", XFS_QMOPT_FLAGS), 1002*4882a593Smuzhiyun __entry->delta) 1003*4882a593Smuzhiyun ); 1004*4882a593Smuzhiyun 1005*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_dqtrx_class, 1006*4882a593Smuzhiyun TP_PROTO(struct xfs_dqtrx *qtrx), 1007*4882a593Smuzhiyun TP_ARGS(qtrx), 1008*4882a593Smuzhiyun TP_STRUCT__entry( 1009*4882a593Smuzhiyun __field(dev_t, dev) 1010*4882a593Smuzhiyun __field(xfs_dqtype_t, type) 1011*4882a593Smuzhiyun __field(unsigned int, flags) 1012*4882a593Smuzhiyun __field(u32, dqid) 1013*4882a593Smuzhiyun 1014*4882a593Smuzhiyun __field(uint64_t, blk_res) 1015*4882a593Smuzhiyun __field(int64_t, bcount_delta) 1016*4882a593Smuzhiyun __field(int64_t, delbcnt_delta) 1017*4882a593Smuzhiyun 1018*4882a593Smuzhiyun __field(uint64_t, rtblk_res) 1019*4882a593Smuzhiyun __field(uint64_t, rtblk_res_used) 1020*4882a593Smuzhiyun __field(int64_t, rtbcount_delta) 1021*4882a593Smuzhiyun __field(int64_t, delrtb_delta) 1022*4882a593Smuzhiyun 1023*4882a593Smuzhiyun __field(uint64_t, ino_res) 1024*4882a593Smuzhiyun __field(uint64_t, ino_res_used) 1025*4882a593Smuzhiyun __field(int64_t, icount_delta) 1026*4882a593Smuzhiyun ), 1027*4882a593Smuzhiyun TP_fast_assign( 1028*4882a593Smuzhiyun __entry->dev = qtrx->qt_dquot->q_mount->m_super->s_dev; 1029*4882a593Smuzhiyun __entry->type = qtrx->qt_dquot->q_type; 1030*4882a593Smuzhiyun __entry->flags = qtrx->qt_dquot->q_flags; 1031*4882a593Smuzhiyun __entry->dqid = qtrx->qt_dquot->q_id; 1032*4882a593Smuzhiyun 1033*4882a593Smuzhiyun __entry->blk_res = qtrx->qt_blk_res; 1034*4882a593Smuzhiyun __entry->bcount_delta = qtrx->qt_bcount_delta; 1035*4882a593Smuzhiyun __entry->delbcnt_delta = qtrx->qt_delbcnt_delta; 1036*4882a593Smuzhiyun 1037*4882a593Smuzhiyun __entry->rtblk_res = qtrx->qt_rtblk_res; 1038*4882a593Smuzhiyun __entry->rtblk_res_used = qtrx->qt_rtblk_res_used; 1039*4882a593Smuzhiyun __entry->rtbcount_delta = qtrx->qt_rtbcount_delta; 1040*4882a593Smuzhiyun __entry->delrtb_delta = qtrx->qt_delrtb_delta; 1041*4882a593Smuzhiyun 1042*4882a593Smuzhiyun __entry->ino_res = qtrx->qt_ino_res; 1043*4882a593Smuzhiyun __entry->ino_res_used = qtrx->qt_ino_res_used; 1044*4882a593Smuzhiyun __entry->icount_delta = qtrx->qt_icount_delta; 1045*4882a593Smuzhiyun ), 1046*4882a593Smuzhiyun TP_printk("dev %d:%d dquot id 0x%x type %s flags %s" 1047*4882a593Smuzhiyun "blk_res %llu bcount_delta %lld delbcnt_delta %lld " 1048*4882a593Smuzhiyun "rtblk_res %llu rtblk_res_used %llu rtbcount_delta %lld delrtb_delta %lld " 1049*4882a593Smuzhiyun "ino_res %llu ino_res_used %llu icount_delta %lld", 1050*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1051*4882a593Smuzhiyun __entry->dqid, 1052*4882a593Smuzhiyun __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 1053*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS), 1054*4882a593Smuzhiyun 1055*4882a593Smuzhiyun __entry->blk_res, 1056*4882a593Smuzhiyun __entry->bcount_delta, 1057*4882a593Smuzhiyun __entry->delbcnt_delta, 1058*4882a593Smuzhiyun 1059*4882a593Smuzhiyun __entry->rtblk_res, 1060*4882a593Smuzhiyun __entry->rtblk_res_used, 1061*4882a593Smuzhiyun __entry->rtbcount_delta, 1062*4882a593Smuzhiyun __entry->delrtb_delta, 1063*4882a593Smuzhiyun 1064*4882a593Smuzhiyun __entry->ino_res, 1065*4882a593Smuzhiyun __entry->ino_res_used, 1066*4882a593Smuzhiyun __entry->icount_delta) 1067*4882a593Smuzhiyun ) 1068*4882a593Smuzhiyun 1069*4882a593Smuzhiyun #define DEFINE_DQTRX_EVENT(name) \ 1070*4882a593Smuzhiyun DEFINE_EVENT(xfs_dqtrx_class, name, \ 1071*4882a593Smuzhiyun TP_PROTO(struct xfs_dqtrx *qtrx), \ 1072*4882a593Smuzhiyun TP_ARGS(qtrx)) 1073*4882a593Smuzhiyun DEFINE_DQTRX_EVENT(xfs_trans_apply_dquot_deltas); 1074*4882a593Smuzhiyun DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_before); 1075*4882a593Smuzhiyun DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_after); 1076*4882a593Smuzhiyun 1077*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_loggrant_class, 1078*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xlog_ticket *tic), 1079*4882a593Smuzhiyun TP_ARGS(log, tic), 1080*4882a593Smuzhiyun TP_STRUCT__entry( 1081*4882a593Smuzhiyun __field(dev_t, dev) 1082*4882a593Smuzhiyun __field(char, ocnt) 1083*4882a593Smuzhiyun __field(char, cnt) 1084*4882a593Smuzhiyun __field(int, curr_res) 1085*4882a593Smuzhiyun __field(int, unit_res) 1086*4882a593Smuzhiyun __field(unsigned int, flags) 1087*4882a593Smuzhiyun __field(int, reserveq) 1088*4882a593Smuzhiyun __field(int, writeq) 1089*4882a593Smuzhiyun __field(int, grant_reserve_cycle) 1090*4882a593Smuzhiyun __field(int, grant_reserve_bytes) 1091*4882a593Smuzhiyun __field(int, grant_write_cycle) 1092*4882a593Smuzhiyun __field(int, grant_write_bytes) 1093*4882a593Smuzhiyun __field(int, curr_cycle) 1094*4882a593Smuzhiyun __field(int, curr_block) 1095*4882a593Smuzhiyun __field(xfs_lsn_t, tail_lsn) 1096*4882a593Smuzhiyun ), 1097*4882a593Smuzhiyun TP_fast_assign( 1098*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 1099*4882a593Smuzhiyun __entry->ocnt = tic->t_ocnt; 1100*4882a593Smuzhiyun __entry->cnt = tic->t_cnt; 1101*4882a593Smuzhiyun __entry->curr_res = tic->t_curr_res; 1102*4882a593Smuzhiyun __entry->unit_res = tic->t_unit_res; 1103*4882a593Smuzhiyun __entry->flags = tic->t_flags; 1104*4882a593Smuzhiyun __entry->reserveq = list_empty(&log->l_reserve_head.waiters); 1105*4882a593Smuzhiyun __entry->writeq = list_empty(&log->l_write_head.waiters); 1106*4882a593Smuzhiyun xlog_crack_grant_head(&log->l_reserve_head.grant, 1107*4882a593Smuzhiyun &__entry->grant_reserve_cycle, 1108*4882a593Smuzhiyun &__entry->grant_reserve_bytes); 1109*4882a593Smuzhiyun xlog_crack_grant_head(&log->l_write_head.grant, 1110*4882a593Smuzhiyun &__entry->grant_write_cycle, 1111*4882a593Smuzhiyun &__entry->grant_write_bytes); 1112*4882a593Smuzhiyun __entry->curr_cycle = log->l_curr_cycle; 1113*4882a593Smuzhiyun __entry->curr_block = log->l_curr_block; 1114*4882a593Smuzhiyun __entry->tail_lsn = atomic64_read(&log->l_tail_lsn); 1115*4882a593Smuzhiyun ), 1116*4882a593Smuzhiyun TP_printk("dev %d:%d t_ocnt %u t_cnt %u t_curr_res %u " 1117*4882a593Smuzhiyun "t_unit_res %u t_flags %s reserveq %s " 1118*4882a593Smuzhiyun "writeq %s grant_reserve_cycle %d " 1119*4882a593Smuzhiyun "grant_reserve_bytes %d grant_write_cycle %d " 1120*4882a593Smuzhiyun "grant_write_bytes %d curr_cycle %d curr_block %d " 1121*4882a593Smuzhiyun "tail_cycle %d tail_block %d", 1122*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1123*4882a593Smuzhiyun __entry->ocnt, 1124*4882a593Smuzhiyun __entry->cnt, 1125*4882a593Smuzhiyun __entry->curr_res, 1126*4882a593Smuzhiyun __entry->unit_res, 1127*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XLOG_TIC_FLAGS), 1128*4882a593Smuzhiyun __entry->reserveq ? "empty" : "active", 1129*4882a593Smuzhiyun __entry->writeq ? "empty" : "active", 1130*4882a593Smuzhiyun __entry->grant_reserve_cycle, 1131*4882a593Smuzhiyun __entry->grant_reserve_bytes, 1132*4882a593Smuzhiyun __entry->grant_write_cycle, 1133*4882a593Smuzhiyun __entry->grant_write_bytes, 1134*4882a593Smuzhiyun __entry->curr_cycle, 1135*4882a593Smuzhiyun __entry->curr_block, 1136*4882a593Smuzhiyun CYCLE_LSN(__entry->tail_lsn), 1137*4882a593Smuzhiyun BLOCK_LSN(__entry->tail_lsn) 1138*4882a593Smuzhiyun ) 1139*4882a593Smuzhiyun ) 1140*4882a593Smuzhiyun 1141*4882a593Smuzhiyun #define DEFINE_LOGGRANT_EVENT(name) \ 1142*4882a593Smuzhiyun DEFINE_EVENT(xfs_loggrant_class, name, \ 1143*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \ 1144*4882a593Smuzhiyun TP_ARGS(log, tic)) 1145*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_umount_write); 1146*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep); 1147*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake); 1148*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up); 1149*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_reserve); 1150*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit); 1151*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_regrant); 1152*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit); 1153*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant); 1154*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit); 1155*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub); 1156*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant); 1157*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub); 1158*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit); 1159*4882a593Smuzhiyun DEFINE_LOGGRANT_EVENT(xfs_log_cil_wait); 1160*4882a593Smuzhiyun 1161*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_item_class, 1162*4882a593Smuzhiyun TP_PROTO(struct xfs_log_item *lip), 1163*4882a593Smuzhiyun TP_ARGS(lip), 1164*4882a593Smuzhiyun TP_STRUCT__entry( 1165*4882a593Smuzhiyun __field(dev_t, dev) 1166*4882a593Smuzhiyun __field(void *, lip) 1167*4882a593Smuzhiyun __field(uint, type) 1168*4882a593Smuzhiyun __field(unsigned long, flags) 1169*4882a593Smuzhiyun __field(xfs_lsn_t, lsn) 1170*4882a593Smuzhiyun ), 1171*4882a593Smuzhiyun TP_fast_assign( 1172*4882a593Smuzhiyun __entry->dev = lip->li_mountp->m_super->s_dev; 1173*4882a593Smuzhiyun __entry->lip = lip; 1174*4882a593Smuzhiyun __entry->type = lip->li_type; 1175*4882a593Smuzhiyun __entry->flags = lip->li_flags; 1176*4882a593Smuzhiyun __entry->lsn = lip->li_lsn; 1177*4882a593Smuzhiyun ), 1178*4882a593Smuzhiyun TP_printk("dev %d:%d lip %p lsn %d/%d type %s flags %s", 1179*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1180*4882a593Smuzhiyun __entry->lip, 1181*4882a593Smuzhiyun CYCLE_LSN(__entry->lsn), BLOCK_LSN(__entry->lsn), 1182*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_LI_TYPE_DESC), 1183*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_LI_FLAGS)) 1184*4882a593Smuzhiyun ) 1185*4882a593Smuzhiyun 1186*4882a593Smuzhiyun TRACE_EVENT(xfs_log_force, 1187*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_lsn_t lsn, unsigned long caller_ip), 1188*4882a593Smuzhiyun TP_ARGS(mp, lsn, caller_ip), 1189*4882a593Smuzhiyun TP_STRUCT__entry( 1190*4882a593Smuzhiyun __field(dev_t, dev) 1191*4882a593Smuzhiyun __field(xfs_lsn_t, lsn) 1192*4882a593Smuzhiyun __field(unsigned long, caller_ip) 1193*4882a593Smuzhiyun ), 1194*4882a593Smuzhiyun TP_fast_assign( 1195*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 1196*4882a593Smuzhiyun __entry->lsn = lsn; 1197*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 1198*4882a593Smuzhiyun ), 1199*4882a593Smuzhiyun TP_printk("dev %d:%d lsn 0x%llx caller %pS", 1200*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1201*4882a593Smuzhiyun __entry->lsn, (void *)__entry->caller_ip) 1202*4882a593Smuzhiyun ) 1203*4882a593Smuzhiyun 1204*4882a593Smuzhiyun #define DEFINE_LOG_ITEM_EVENT(name) \ 1205*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_item_class, name, \ 1206*4882a593Smuzhiyun TP_PROTO(struct xfs_log_item *lip), \ 1207*4882a593Smuzhiyun TP_ARGS(lip)) 1208*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_push); 1209*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned); 1210*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_locked); 1211*4882a593Smuzhiyun DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing); 1212*4882a593Smuzhiyun 1213*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ail_class, 1214*4882a593Smuzhiyun TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), 1215*4882a593Smuzhiyun TP_ARGS(lip, old_lsn, new_lsn), 1216*4882a593Smuzhiyun TP_STRUCT__entry( 1217*4882a593Smuzhiyun __field(dev_t, dev) 1218*4882a593Smuzhiyun __field(void *, lip) 1219*4882a593Smuzhiyun __field(uint, type) 1220*4882a593Smuzhiyun __field(unsigned long, flags) 1221*4882a593Smuzhiyun __field(xfs_lsn_t, old_lsn) 1222*4882a593Smuzhiyun __field(xfs_lsn_t, new_lsn) 1223*4882a593Smuzhiyun ), 1224*4882a593Smuzhiyun TP_fast_assign( 1225*4882a593Smuzhiyun __entry->dev = lip->li_mountp->m_super->s_dev; 1226*4882a593Smuzhiyun __entry->lip = lip; 1227*4882a593Smuzhiyun __entry->type = lip->li_type; 1228*4882a593Smuzhiyun __entry->flags = lip->li_flags; 1229*4882a593Smuzhiyun __entry->old_lsn = old_lsn; 1230*4882a593Smuzhiyun __entry->new_lsn = new_lsn; 1231*4882a593Smuzhiyun ), 1232*4882a593Smuzhiyun TP_printk("dev %d:%d lip %p old lsn %d/%d new lsn %d/%d type %s flags %s", 1233*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1234*4882a593Smuzhiyun __entry->lip, 1235*4882a593Smuzhiyun CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn), 1236*4882a593Smuzhiyun CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn), 1237*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_LI_TYPE_DESC), 1238*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_LI_FLAGS)) 1239*4882a593Smuzhiyun ) 1240*4882a593Smuzhiyun 1241*4882a593Smuzhiyun #define DEFINE_AIL_EVENT(name) \ 1242*4882a593Smuzhiyun DEFINE_EVENT(xfs_ail_class, name, \ 1243*4882a593Smuzhiyun TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), \ 1244*4882a593Smuzhiyun TP_ARGS(lip, old_lsn, new_lsn)) 1245*4882a593Smuzhiyun DEFINE_AIL_EVENT(xfs_ail_insert); 1246*4882a593Smuzhiyun DEFINE_AIL_EVENT(xfs_ail_move); 1247*4882a593Smuzhiyun DEFINE_AIL_EVENT(xfs_ail_delete); 1248*4882a593Smuzhiyun 1249*4882a593Smuzhiyun TRACE_EVENT(xfs_log_assign_tail_lsn, 1250*4882a593Smuzhiyun TP_PROTO(struct xlog *log, xfs_lsn_t new_lsn), 1251*4882a593Smuzhiyun TP_ARGS(log, new_lsn), 1252*4882a593Smuzhiyun TP_STRUCT__entry( 1253*4882a593Smuzhiyun __field(dev_t, dev) 1254*4882a593Smuzhiyun __field(xfs_lsn_t, new_lsn) 1255*4882a593Smuzhiyun __field(xfs_lsn_t, old_lsn) 1256*4882a593Smuzhiyun __field(xfs_lsn_t, last_sync_lsn) 1257*4882a593Smuzhiyun ), 1258*4882a593Smuzhiyun TP_fast_assign( 1259*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 1260*4882a593Smuzhiyun __entry->new_lsn = new_lsn; 1261*4882a593Smuzhiyun __entry->old_lsn = atomic64_read(&log->l_tail_lsn); 1262*4882a593Smuzhiyun __entry->last_sync_lsn = atomic64_read(&log->l_last_sync_lsn); 1263*4882a593Smuzhiyun ), 1264*4882a593Smuzhiyun TP_printk("dev %d:%d new tail lsn %d/%d, old lsn %d/%d, last sync %d/%d", 1265*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1266*4882a593Smuzhiyun CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn), 1267*4882a593Smuzhiyun CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn), 1268*4882a593Smuzhiyun CYCLE_LSN(__entry->last_sync_lsn), BLOCK_LSN(__entry->last_sync_lsn)) 1269*4882a593Smuzhiyun ) 1270*4882a593Smuzhiyun 1271*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_file_class, 1272*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset), 1273*4882a593Smuzhiyun TP_ARGS(ip, count, offset), 1274*4882a593Smuzhiyun TP_STRUCT__entry( 1275*4882a593Smuzhiyun __field(dev_t, dev) 1276*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1277*4882a593Smuzhiyun __field(xfs_fsize_t, size) 1278*4882a593Smuzhiyun __field(loff_t, offset) 1279*4882a593Smuzhiyun __field(size_t, count) 1280*4882a593Smuzhiyun ), 1281*4882a593Smuzhiyun TP_fast_assign( 1282*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 1283*4882a593Smuzhiyun __entry->ino = ip->i_ino; 1284*4882a593Smuzhiyun __entry->size = ip->i_d.di_size; 1285*4882a593Smuzhiyun __entry->offset = offset; 1286*4882a593Smuzhiyun __entry->count = count; 1287*4882a593Smuzhiyun ), 1288*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count 0x%zx", 1289*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1290*4882a593Smuzhiyun __entry->ino, 1291*4882a593Smuzhiyun __entry->size, 1292*4882a593Smuzhiyun __entry->offset, 1293*4882a593Smuzhiyun __entry->count) 1294*4882a593Smuzhiyun ) 1295*4882a593Smuzhiyun 1296*4882a593Smuzhiyun #define DEFINE_RW_EVENT(name) \ 1297*4882a593Smuzhiyun DEFINE_EVENT(xfs_file_class, name, \ 1298*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, size_t count, loff_t offset), \ 1299*4882a593Smuzhiyun TP_ARGS(ip, count, offset)) 1300*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_buffered_read); 1301*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_direct_read); 1302*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_dax_read); 1303*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_buffered_write); 1304*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_direct_write); 1305*4882a593Smuzhiyun DEFINE_RW_EVENT(xfs_file_dax_write); 1306*4882a593Smuzhiyun 1307*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_imap_class, 1308*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, 1309*4882a593Smuzhiyun int whichfork, struct xfs_bmbt_irec *irec), 1310*4882a593Smuzhiyun TP_ARGS(ip, offset, count, whichfork, irec), 1311*4882a593Smuzhiyun TP_STRUCT__entry( 1312*4882a593Smuzhiyun __field(dev_t, dev) 1313*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1314*4882a593Smuzhiyun __field(loff_t, size) 1315*4882a593Smuzhiyun __field(loff_t, offset) 1316*4882a593Smuzhiyun __field(size_t, count) 1317*4882a593Smuzhiyun __field(int, whichfork) 1318*4882a593Smuzhiyun __field(xfs_fileoff_t, startoff) 1319*4882a593Smuzhiyun __field(xfs_fsblock_t, startblock) 1320*4882a593Smuzhiyun __field(xfs_filblks_t, blockcount) 1321*4882a593Smuzhiyun ), 1322*4882a593Smuzhiyun TP_fast_assign( 1323*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 1324*4882a593Smuzhiyun __entry->ino = ip->i_ino; 1325*4882a593Smuzhiyun __entry->size = ip->i_d.di_size; 1326*4882a593Smuzhiyun __entry->offset = offset; 1327*4882a593Smuzhiyun __entry->count = count; 1328*4882a593Smuzhiyun __entry->whichfork = whichfork; 1329*4882a593Smuzhiyun __entry->startoff = irec ? irec->br_startoff : 0; 1330*4882a593Smuzhiyun __entry->startblock = irec ? irec->br_startblock : 0; 1331*4882a593Smuzhiyun __entry->blockcount = irec ? irec->br_blockcount : 0; 1332*4882a593Smuzhiyun ), 1333*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count %zd " 1334*4882a593Smuzhiyun "fork %s startoff 0x%llx startblock %lld blockcount 0x%llx", 1335*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1336*4882a593Smuzhiyun __entry->ino, 1337*4882a593Smuzhiyun __entry->size, 1338*4882a593Smuzhiyun __entry->offset, 1339*4882a593Smuzhiyun __entry->count, 1340*4882a593Smuzhiyun __entry->whichfork == XFS_COW_FORK ? "cow" : "data", 1341*4882a593Smuzhiyun __entry->startoff, 1342*4882a593Smuzhiyun (int64_t)__entry->startblock, 1343*4882a593Smuzhiyun __entry->blockcount) 1344*4882a593Smuzhiyun ) 1345*4882a593Smuzhiyun 1346*4882a593Smuzhiyun #define DEFINE_IMAP_EVENT(name) \ 1347*4882a593Smuzhiyun DEFINE_EVENT(xfs_imap_class, name, \ 1348*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, \ 1349*4882a593Smuzhiyun int whichfork, struct xfs_bmbt_irec *irec), \ 1350*4882a593Smuzhiyun TP_ARGS(ip, offset, count, whichfork, irec)) 1351*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_map_blocks_found); 1352*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_map_blocks_alloc); 1353*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_iomap_alloc); 1354*4882a593Smuzhiyun DEFINE_IMAP_EVENT(xfs_iomap_found); 1355*4882a593Smuzhiyun 1356*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_simple_io_class, 1357*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count), 1358*4882a593Smuzhiyun TP_ARGS(ip, offset, count), 1359*4882a593Smuzhiyun TP_STRUCT__entry( 1360*4882a593Smuzhiyun __field(dev_t, dev) 1361*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1362*4882a593Smuzhiyun __field(loff_t, isize) 1363*4882a593Smuzhiyun __field(loff_t, disize) 1364*4882a593Smuzhiyun __field(loff_t, offset) 1365*4882a593Smuzhiyun __field(size_t, count) 1366*4882a593Smuzhiyun ), 1367*4882a593Smuzhiyun TP_fast_assign( 1368*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 1369*4882a593Smuzhiyun __entry->ino = ip->i_ino; 1370*4882a593Smuzhiyun __entry->isize = VFS_I(ip)->i_size; 1371*4882a593Smuzhiyun __entry->disize = ip->i_d.di_size; 1372*4882a593Smuzhiyun __entry->offset = offset; 1373*4882a593Smuzhiyun __entry->count = count; 1374*4882a593Smuzhiyun ), 1375*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx " 1376*4882a593Smuzhiyun "offset 0x%llx count %zd", 1377*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1378*4882a593Smuzhiyun __entry->ino, 1379*4882a593Smuzhiyun __entry->isize, 1380*4882a593Smuzhiyun __entry->disize, 1381*4882a593Smuzhiyun __entry->offset, 1382*4882a593Smuzhiyun __entry->count) 1383*4882a593Smuzhiyun ); 1384*4882a593Smuzhiyun 1385*4882a593Smuzhiyun #define DEFINE_SIMPLE_IO_EVENT(name) \ 1386*4882a593Smuzhiyun DEFINE_EVENT(xfs_simple_io_class, name, \ 1387*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count), \ 1388*4882a593Smuzhiyun TP_ARGS(ip, offset, count)) 1389*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_delalloc_enospc); 1390*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_unwritten_convert); 1391*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_setfilesize); 1392*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_zero_eof); 1393*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write); 1394*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_unwritten); 1395*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_append); 1396*4882a593Smuzhiyun 1397*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_itrunc_class, 1398*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), 1399*4882a593Smuzhiyun TP_ARGS(ip, new_size), 1400*4882a593Smuzhiyun TP_STRUCT__entry( 1401*4882a593Smuzhiyun __field(dev_t, dev) 1402*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1403*4882a593Smuzhiyun __field(xfs_fsize_t, size) 1404*4882a593Smuzhiyun __field(xfs_fsize_t, new_size) 1405*4882a593Smuzhiyun ), 1406*4882a593Smuzhiyun TP_fast_assign( 1407*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 1408*4882a593Smuzhiyun __entry->ino = ip->i_ino; 1409*4882a593Smuzhiyun __entry->size = ip->i_d.di_size; 1410*4882a593Smuzhiyun __entry->new_size = new_size; 1411*4882a593Smuzhiyun ), 1412*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx", 1413*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1414*4882a593Smuzhiyun __entry->ino, 1415*4882a593Smuzhiyun __entry->size, 1416*4882a593Smuzhiyun __entry->new_size) 1417*4882a593Smuzhiyun ) 1418*4882a593Smuzhiyun 1419*4882a593Smuzhiyun #define DEFINE_ITRUNC_EVENT(name) \ 1420*4882a593Smuzhiyun DEFINE_EVENT(xfs_itrunc_class, name, \ 1421*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \ 1422*4882a593Smuzhiyun TP_ARGS(ip, new_size)) 1423*4882a593Smuzhiyun DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start); 1424*4882a593Smuzhiyun DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end); 1425*4882a593Smuzhiyun 1426*4882a593Smuzhiyun TRACE_EVENT(xfs_pagecache_inval, 1427*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish), 1428*4882a593Smuzhiyun TP_ARGS(ip, start, finish), 1429*4882a593Smuzhiyun TP_STRUCT__entry( 1430*4882a593Smuzhiyun __field(dev_t, dev) 1431*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1432*4882a593Smuzhiyun __field(xfs_fsize_t, size) 1433*4882a593Smuzhiyun __field(xfs_off_t, start) 1434*4882a593Smuzhiyun __field(xfs_off_t, finish) 1435*4882a593Smuzhiyun ), 1436*4882a593Smuzhiyun TP_fast_assign( 1437*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 1438*4882a593Smuzhiyun __entry->ino = ip->i_ino; 1439*4882a593Smuzhiyun __entry->size = ip->i_d.di_size; 1440*4882a593Smuzhiyun __entry->start = start; 1441*4882a593Smuzhiyun __entry->finish = finish; 1442*4882a593Smuzhiyun ), 1443*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx size 0x%llx start 0x%llx finish 0x%llx", 1444*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1445*4882a593Smuzhiyun __entry->ino, 1446*4882a593Smuzhiyun __entry->size, 1447*4882a593Smuzhiyun __entry->start, 1448*4882a593Smuzhiyun __entry->finish) 1449*4882a593Smuzhiyun ); 1450*4882a593Smuzhiyun 1451*4882a593Smuzhiyun TRACE_EVENT(xfs_bunmap, 1452*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t bno, xfs_filblks_t len, 1453*4882a593Smuzhiyun int flags, unsigned long caller_ip), 1454*4882a593Smuzhiyun TP_ARGS(ip, bno, len, flags, caller_ip), 1455*4882a593Smuzhiyun TP_STRUCT__entry( 1456*4882a593Smuzhiyun __field(dev_t, dev) 1457*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1458*4882a593Smuzhiyun __field(xfs_fsize_t, size) 1459*4882a593Smuzhiyun __field(xfs_fileoff_t, bno) 1460*4882a593Smuzhiyun __field(xfs_filblks_t, len) 1461*4882a593Smuzhiyun __field(unsigned long, caller_ip) 1462*4882a593Smuzhiyun __field(int, flags) 1463*4882a593Smuzhiyun ), 1464*4882a593Smuzhiyun TP_fast_assign( 1465*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 1466*4882a593Smuzhiyun __entry->ino = ip->i_ino; 1467*4882a593Smuzhiyun __entry->size = ip->i_d.di_size; 1468*4882a593Smuzhiyun __entry->bno = bno; 1469*4882a593Smuzhiyun __entry->len = len; 1470*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 1471*4882a593Smuzhiyun __entry->flags = flags; 1472*4882a593Smuzhiyun ), 1473*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx size 0x%llx bno 0x%llx len 0x%llx" 1474*4882a593Smuzhiyun "flags %s caller %pS", 1475*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1476*4882a593Smuzhiyun __entry->ino, 1477*4882a593Smuzhiyun __entry->size, 1478*4882a593Smuzhiyun __entry->bno, 1479*4882a593Smuzhiyun __entry->len, 1480*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS), 1481*4882a593Smuzhiyun (void *)__entry->caller_ip) 1482*4882a593Smuzhiyun 1483*4882a593Smuzhiyun ); 1484*4882a593Smuzhiyun 1485*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_extent_busy_class, 1486*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1487*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len), 1488*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len), 1489*4882a593Smuzhiyun TP_STRUCT__entry( 1490*4882a593Smuzhiyun __field(dev_t, dev) 1491*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 1492*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 1493*4882a593Smuzhiyun __field(xfs_extlen_t, len) 1494*4882a593Smuzhiyun ), 1495*4882a593Smuzhiyun TP_fast_assign( 1496*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 1497*4882a593Smuzhiyun __entry->agno = agno; 1498*4882a593Smuzhiyun __entry->agbno = agbno; 1499*4882a593Smuzhiyun __entry->len = len; 1500*4882a593Smuzhiyun ), 1501*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u", 1502*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1503*4882a593Smuzhiyun __entry->agno, 1504*4882a593Smuzhiyun __entry->agbno, 1505*4882a593Smuzhiyun __entry->len) 1506*4882a593Smuzhiyun ); 1507*4882a593Smuzhiyun #define DEFINE_BUSY_EVENT(name) \ 1508*4882a593Smuzhiyun DEFINE_EVENT(xfs_extent_busy_class, name, \ 1509*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 1510*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len), \ 1511*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len)) 1512*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy); 1513*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_enomem); 1514*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_force); 1515*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_reuse); 1516*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_extent_busy_clear); 1517*4882a593Smuzhiyun 1518*4882a593Smuzhiyun TRACE_EVENT(xfs_extent_busy_trim, 1519*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1520*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, 1521*4882a593Smuzhiyun xfs_agblock_t tbno, xfs_extlen_t tlen), 1522*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, tbno, tlen), 1523*4882a593Smuzhiyun TP_STRUCT__entry( 1524*4882a593Smuzhiyun __field(dev_t, dev) 1525*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 1526*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 1527*4882a593Smuzhiyun __field(xfs_extlen_t, len) 1528*4882a593Smuzhiyun __field(xfs_agblock_t, tbno) 1529*4882a593Smuzhiyun __field(xfs_extlen_t, tlen) 1530*4882a593Smuzhiyun ), 1531*4882a593Smuzhiyun TP_fast_assign( 1532*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 1533*4882a593Smuzhiyun __entry->agno = agno; 1534*4882a593Smuzhiyun __entry->agbno = agbno; 1535*4882a593Smuzhiyun __entry->len = len; 1536*4882a593Smuzhiyun __entry->tbno = tbno; 1537*4882a593Smuzhiyun __entry->tlen = tlen; 1538*4882a593Smuzhiyun ), 1539*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u tbno %u tlen %u", 1540*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1541*4882a593Smuzhiyun __entry->agno, 1542*4882a593Smuzhiyun __entry->agbno, 1543*4882a593Smuzhiyun __entry->len, 1544*4882a593Smuzhiyun __entry->tbno, 1545*4882a593Smuzhiyun __entry->tlen) 1546*4882a593Smuzhiyun ); 1547*4882a593Smuzhiyun 1548*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_agf_class, 1549*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, 1550*4882a593Smuzhiyun unsigned long caller_ip), 1551*4882a593Smuzhiyun TP_ARGS(mp, agf, flags, caller_ip), 1552*4882a593Smuzhiyun TP_STRUCT__entry( 1553*4882a593Smuzhiyun __field(dev_t, dev) 1554*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 1555*4882a593Smuzhiyun __field(int, flags) 1556*4882a593Smuzhiyun __field(__u32, length) 1557*4882a593Smuzhiyun __field(__u32, bno_root) 1558*4882a593Smuzhiyun __field(__u32, cnt_root) 1559*4882a593Smuzhiyun __field(__u32, bno_level) 1560*4882a593Smuzhiyun __field(__u32, cnt_level) 1561*4882a593Smuzhiyun __field(__u32, flfirst) 1562*4882a593Smuzhiyun __field(__u32, fllast) 1563*4882a593Smuzhiyun __field(__u32, flcount) 1564*4882a593Smuzhiyun __field(__u32, freeblks) 1565*4882a593Smuzhiyun __field(__u32, longest) 1566*4882a593Smuzhiyun __field(unsigned long, caller_ip) 1567*4882a593Smuzhiyun ), 1568*4882a593Smuzhiyun TP_fast_assign( 1569*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 1570*4882a593Smuzhiyun __entry->agno = be32_to_cpu(agf->agf_seqno), 1571*4882a593Smuzhiyun __entry->flags = flags; 1572*4882a593Smuzhiyun __entry->length = be32_to_cpu(agf->agf_length), 1573*4882a593Smuzhiyun __entry->bno_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), 1574*4882a593Smuzhiyun __entry->cnt_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), 1575*4882a593Smuzhiyun __entry->bno_level = 1576*4882a593Smuzhiyun be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), 1577*4882a593Smuzhiyun __entry->cnt_level = 1578*4882a593Smuzhiyun be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), 1579*4882a593Smuzhiyun __entry->flfirst = be32_to_cpu(agf->agf_flfirst), 1580*4882a593Smuzhiyun __entry->fllast = be32_to_cpu(agf->agf_fllast), 1581*4882a593Smuzhiyun __entry->flcount = be32_to_cpu(agf->agf_flcount), 1582*4882a593Smuzhiyun __entry->freeblks = be32_to_cpu(agf->agf_freeblks), 1583*4882a593Smuzhiyun __entry->longest = be32_to_cpu(agf->agf_longest); 1584*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 1585*4882a593Smuzhiyun ), 1586*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u flags %s length %u roots b %u c %u " 1587*4882a593Smuzhiyun "levels b %u c %u flfirst %u fllast %u flcount %u " 1588*4882a593Smuzhiyun "freeblks %u longest %u caller %pS", 1589*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1590*4882a593Smuzhiyun __entry->agno, 1591*4882a593Smuzhiyun __print_flags(__entry->flags, "|", XFS_AGF_FLAGS), 1592*4882a593Smuzhiyun __entry->length, 1593*4882a593Smuzhiyun __entry->bno_root, 1594*4882a593Smuzhiyun __entry->cnt_root, 1595*4882a593Smuzhiyun __entry->bno_level, 1596*4882a593Smuzhiyun __entry->cnt_level, 1597*4882a593Smuzhiyun __entry->flfirst, 1598*4882a593Smuzhiyun __entry->fllast, 1599*4882a593Smuzhiyun __entry->flcount, 1600*4882a593Smuzhiyun __entry->freeblks, 1601*4882a593Smuzhiyun __entry->longest, 1602*4882a593Smuzhiyun (void *)__entry->caller_ip) 1603*4882a593Smuzhiyun ); 1604*4882a593Smuzhiyun #define DEFINE_AGF_EVENT(name) \ 1605*4882a593Smuzhiyun DEFINE_EVENT(xfs_agf_class, name, \ 1606*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, \ 1607*4882a593Smuzhiyun unsigned long caller_ip), \ 1608*4882a593Smuzhiyun TP_ARGS(mp, agf, flags, caller_ip)) 1609*4882a593Smuzhiyun DEFINE_AGF_EVENT(xfs_agf); 1610*4882a593Smuzhiyun DEFINE_AGF_EVENT(xfs_agfl_reset); 1611*4882a593Smuzhiyun 1612*4882a593Smuzhiyun TRACE_EVENT(xfs_free_extent, 1613*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 1614*4882a593Smuzhiyun xfs_extlen_t len, enum xfs_ag_resv_type resv, int haveleft, 1615*4882a593Smuzhiyun int haveright), 1616*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, resv, haveleft, haveright), 1617*4882a593Smuzhiyun TP_STRUCT__entry( 1618*4882a593Smuzhiyun __field(dev_t, dev) 1619*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 1620*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 1621*4882a593Smuzhiyun __field(xfs_extlen_t, len) 1622*4882a593Smuzhiyun __field(int, resv) 1623*4882a593Smuzhiyun __field(int, haveleft) 1624*4882a593Smuzhiyun __field(int, haveright) 1625*4882a593Smuzhiyun ), 1626*4882a593Smuzhiyun TP_fast_assign( 1627*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 1628*4882a593Smuzhiyun __entry->agno = agno; 1629*4882a593Smuzhiyun __entry->agbno = agbno; 1630*4882a593Smuzhiyun __entry->len = len; 1631*4882a593Smuzhiyun __entry->resv = resv; 1632*4882a593Smuzhiyun __entry->haveleft = haveleft; 1633*4882a593Smuzhiyun __entry->haveright = haveright; 1634*4882a593Smuzhiyun ), 1635*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u resv %d %s", 1636*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1637*4882a593Smuzhiyun __entry->agno, 1638*4882a593Smuzhiyun __entry->agbno, 1639*4882a593Smuzhiyun __entry->len, 1640*4882a593Smuzhiyun __entry->resv, 1641*4882a593Smuzhiyun __entry->haveleft ? 1642*4882a593Smuzhiyun (__entry->haveright ? "both" : "left") : 1643*4882a593Smuzhiyun (__entry->haveright ? "right" : "none")) 1644*4882a593Smuzhiyun 1645*4882a593Smuzhiyun ); 1646*4882a593Smuzhiyun 1647*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_alloc_class, 1648*4882a593Smuzhiyun TP_PROTO(struct xfs_alloc_arg *args), 1649*4882a593Smuzhiyun TP_ARGS(args), 1650*4882a593Smuzhiyun TP_STRUCT__entry( 1651*4882a593Smuzhiyun __field(dev_t, dev) 1652*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 1653*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 1654*4882a593Smuzhiyun __field(xfs_extlen_t, minlen) 1655*4882a593Smuzhiyun __field(xfs_extlen_t, maxlen) 1656*4882a593Smuzhiyun __field(xfs_extlen_t, mod) 1657*4882a593Smuzhiyun __field(xfs_extlen_t, prod) 1658*4882a593Smuzhiyun __field(xfs_extlen_t, minleft) 1659*4882a593Smuzhiyun __field(xfs_extlen_t, total) 1660*4882a593Smuzhiyun __field(xfs_extlen_t, alignment) 1661*4882a593Smuzhiyun __field(xfs_extlen_t, minalignslop) 1662*4882a593Smuzhiyun __field(xfs_extlen_t, len) 1663*4882a593Smuzhiyun __field(short, type) 1664*4882a593Smuzhiyun __field(short, otype) 1665*4882a593Smuzhiyun __field(char, wasdel) 1666*4882a593Smuzhiyun __field(char, wasfromfl) 1667*4882a593Smuzhiyun __field(int, resv) 1668*4882a593Smuzhiyun __field(int, datatype) 1669*4882a593Smuzhiyun __field(xfs_fsblock_t, firstblock) 1670*4882a593Smuzhiyun ), 1671*4882a593Smuzhiyun TP_fast_assign( 1672*4882a593Smuzhiyun __entry->dev = args->mp->m_super->s_dev; 1673*4882a593Smuzhiyun __entry->agno = args->agno; 1674*4882a593Smuzhiyun __entry->agbno = args->agbno; 1675*4882a593Smuzhiyun __entry->minlen = args->minlen; 1676*4882a593Smuzhiyun __entry->maxlen = args->maxlen; 1677*4882a593Smuzhiyun __entry->mod = args->mod; 1678*4882a593Smuzhiyun __entry->prod = args->prod; 1679*4882a593Smuzhiyun __entry->minleft = args->minleft; 1680*4882a593Smuzhiyun __entry->total = args->total; 1681*4882a593Smuzhiyun __entry->alignment = args->alignment; 1682*4882a593Smuzhiyun __entry->minalignslop = args->minalignslop; 1683*4882a593Smuzhiyun __entry->len = args->len; 1684*4882a593Smuzhiyun __entry->type = args->type; 1685*4882a593Smuzhiyun __entry->otype = args->otype; 1686*4882a593Smuzhiyun __entry->wasdel = args->wasdel; 1687*4882a593Smuzhiyun __entry->wasfromfl = args->wasfromfl; 1688*4882a593Smuzhiyun __entry->resv = args->resv; 1689*4882a593Smuzhiyun __entry->datatype = args->datatype; 1690*4882a593Smuzhiyun __entry->firstblock = args->tp->t_firstblock; 1691*4882a593Smuzhiyun ), 1692*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u minlen %u maxlen %u mod %u " 1693*4882a593Smuzhiyun "prod %u minleft %u total %u alignment %u minalignslop %u " 1694*4882a593Smuzhiyun "len %u type %s otype %s wasdel %d wasfromfl %d resv %d " 1695*4882a593Smuzhiyun "datatype 0x%x firstblock 0x%llx", 1696*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1697*4882a593Smuzhiyun __entry->agno, 1698*4882a593Smuzhiyun __entry->agbno, 1699*4882a593Smuzhiyun __entry->minlen, 1700*4882a593Smuzhiyun __entry->maxlen, 1701*4882a593Smuzhiyun __entry->mod, 1702*4882a593Smuzhiyun __entry->prod, 1703*4882a593Smuzhiyun __entry->minleft, 1704*4882a593Smuzhiyun __entry->total, 1705*4882a593Smuzhiyun __entry->alignment, 1706*4882a593Smuzhiyun __entry->minalignslop, 1707*4882a593Smuzhiyun __entry->len, 1708*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_ALLOC_TYPES), 1709*4882a593Smuzhiyun __print_symbolic(__entry->otype, XFS_ALLOC_TYPES), 1710*4882a593Smuzhiyun __entry->wasdel, 1711*4882a593Smuzhiyun __entry->wasfromfl, 1712*4882a593Smuzhiyun __entry->resv, 1713*4882a593Smuzhiyun __entry->datatype, 1714*4882a593Smuzhiyun (unsigned long long)__entry->firstblock) 1715*4882a593Smuzhiyun ) 1716*4882a593Smuzhiyun 1717*4882a593Smuzhiyun #define DEFINE_ALLOC_EVENT(name) \ 1718*4882a593Smuzhiyun DEFINE_EVENT(xfs_alloc_class, name, \ 1719*4882a593Smuzhiyun TP_PROTO(struct xfs_alloc_arg *args), \ 1720*4882a593Smuzhiyun TP_ARGS(args)) 1721*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_exact_done); 1722*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_exact_notfound); 1723*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_exact_error); 1724*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_nominleft); 1725*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_first); 1726*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur); 1727*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_right); 1728*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_left); 1729*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup); 1730*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup_done); 1731*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_error); 1732*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_noentry); 1733*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_near_busy); 1734*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_neither); 1735*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_noentry); 1736*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_nominleft); 1737*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_done); 1738*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_error); 1739*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_size_busy); 1740*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_freelist); 1741*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_notenough); 1742*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_done); 1743*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_small_error); 1744*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_badargs); 1745*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_nofix); 1746*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_noagbp); 1747*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_loopfailed); 1748*4882a593Smuzhiyun DEFINE_ALLOC_EVENT(xfs_alloc_vextent_allfailed); 1749*4882a593Smuzhiyun 1750*4882a593Smuzhiyun TRACE_EVENT(xfs_alloc_cur_check, 1751*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_btnum_t btnum, xfs_agblock_t bno, 1752*4882a593Smuzhiyun xfs_extlen_t len, xfs_extlen_t diff, bool new), 1753*4882a593Smuzhiyun TP_ARGS(mp, btnum, bno, len, diff, new), 1754*4882a593Smuzhiyun TP_STRUCT__entry( 1755*4882a593Smuzhiyun __field(dev_t, dev) 1756*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 1757*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 1758*4882a593Smuzhiyun __field(xfs_extlen_t, len) 1759*4882a593Smuzhiyun __field(xfs_extlen_t, diff) 1760*4882a593Smuzhiyun __field(bool, new) 1761*4882a593Smuzhiyun ), 1762*4882a593Smuzhiyun TP_fast_assign( 1763*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 1764*4882a593Smuzhiyun __entry->btnum = btnum; 1765*4882a593Smuzhiyun __entry->bno = bno; 1766*4882a593Smuzhiyun __entry->len = len; 1767*4882a593Smuzhiyun __entry->diff = diff; 1768*4882a593Smuzhiyun __entry->new = new; 1769*4882a593Smuzhiyun ), 1770*4882a593Smuzhiyun TP_printk("dev %d:%d btree %s bno 0x%x len 0x%x diff 0x%x new %d", 1771*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1772*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 1773*4882a593Smuzhiyun __entry->bno, __entry->len, __entry->diff, __entry->new) 1774*4882a593Smuzhiyun ) 1775*4882a593Smuzhiyun 1776*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_da_class, 1777*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args), 1778*4882a593Smuzhiyun TP_ARGS(args), 1779*4882a593Smuzhiyun TP_STRUCT__entry( 1780*4882a593Smuzhiyun __field(dev_t, dev) 1781*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1782*4882a593Smuzhiyun __dynamic_array(char, name, args->namelen) 1783*4882a593Smuzhiyun __field(int, namelen) 1784*4882a593Smuzhiyun __field(xfs_dahash_t, hashval) 1785*4882a593Smuzhiyun __field(xfs_ino_t, inumber) 1786*4882a593Smuzhiyun __field(int, op_flags) 1787*4882a593Smuzhiyun ), 1788*4882a593Smuzhiyun TP_fast_assign( 1789*4882a593Smuzhiyun __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1790*4882a593Smuzhiyun __entry->ino = args->dp->i_ino; 1791*4882a593Smuzhiyun if (args->namelen) 1792*4882a593Smuzhiyun memcpy(__get_str(name), args->name, args->namelen); 1793*4882a593Smuzhiyun __entry->namelen = args->namelen; 1794*4882a593Smuzhiyun __entry->hashval = args->hashval; 1795*4882a593Smuzhiyun __entry->inumber = args->inumber; 1796*4882a593Smuzhiyun __entry->op_flags = args->op_flags; 1797*4882a593Smuzhiyun ), 1798*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d hashval 0x%x " 1799*4882a593Smuzhiyun "inumber 0x%llx op_flags %s", 1800*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1801*4882a593Smuzhiyun __entry->ino, 1802*4882a593Smuzhiyun __entry->namelen, 1803*4882a593Smuzhiyun __entry->namelen ? __get_str(name) : NULL, 1804*4882a593Smuzhiyun __entry->namelen, 1805*4882a593Smuzhiyun __entry->hashval, 1806*4882a593Smuzhiyun __entry->inumber, 1807*4882a593Smuzhiyun __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS)) 1808*4882a593Smuzhiyun ) 1809*4882a593Smuzhiyun 1810*4882a593Smuzhiyun #define DEFINE_DIR2_EVENT(name) \ 1811*4882a593Smuzhiyun DEFINE_EVENT(xfs_da_class, name, \ 1812*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args), \ 1813*4882a593Smuzhiyun TP_ARGS(args)) 1814*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_addname); 1815*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_create); 1816*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_lookup); 1817*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_replace); 1818*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_removename); 1819*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_toino4); 1820*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_toino8); 1821*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_sf_to_block); 1822*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_addname); 1823*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_lookup); 1824*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_replace); 1825*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_removename); 1826*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_to_sf); 1827*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_block_to_leaf); 1828*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_addname); 1829*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_lookup); 1830*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_replace); 1831*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_removename); 1832*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_block); 1833*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_node); 1834*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_addname); 1835*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_lookup); 1836*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_replace); 1837*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_removename); 1838*4882a593Smuzhiyun DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf); 1839*4882a593Smuzhiyun 1840*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_attr_class, 1841*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args), 1842*4882a593Smuzhiyun TP_ARGS(args), 1843*4882a593Smuzhiyun TP_STRUCT__entry( 1844*4882a593Smuzhiyun __field(dev_t, dev) 1845*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1846*4882a593Smuzhiyun __dynamic_array(char, name, args->namelen) 1847*4882a593Smuzhiyun __field(int, namelen) 1848*4882a593Smuzhiyun __field(int, valuelen) 1849*4882a593Smuzhiyun __field(xfs_dahash_t, hashval) 1850*4882a593Smuzhiyun __field(unsigned int, attr_filter) 1851*4882a593Smuzhiyun __field(unsigned int, attr_flags) 1852*4882a593Smuzhiyun __field(int, op_flags) 1853*4882a593Smuzhiyun ), 1854*4882a593Smuzhiyun TP_fast_assign( 1855*4882a593Smuzhiyun __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1856*4882a593Smuzhiyun __entry->ino = args->dp->i_ino; 1857*4882a593Smuzhiyun if (args->namelen) 1858*4882a593Smuzhiyun memcpy(__get_str(name), args->name, args->namelen); 1859*4882a593Smuzhiyun __entry->namelen = args->namelen; 1860*4882a593Smuzhiyun __entry->valuelen = args->valuelen; 1861*4882a593Smuzhiyun __entry->hashval = args->hashval; 1862*4882a593Smuzhiyun __entry->attr_filter = args->attr_filter; 1863*4882a593Smuzhiyun __entry->attr_flags = args->attr_flags; 1864*4882a593Smuzhiyun __entry->op_flags = args->op_flags; 1865*4882a593Smuzhiyun ), 1866*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d " 1867*4882a593Smuzhiyun "hashval 0x%x filter %s flags %s op_flags %s", 1868*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1869*4882a593Smuzhiyun __entry->ino, 1870*4882a593Smuzhiyun __entry->namelen, 1871*4882a593Smuzhiyun __entry->namelen ? __get_str(name) : NULL, 1872*4882a593Smuzhiyun __entry->namelen, 1873*4882a593Smuzhiyun __entry->valuelen, 1874*4882a593Smuzhiyun __entry->hashval, 1875*4882a593Smuzhiyun __print_flags(__entry->attr_filter, "|", 1876*4882a593Smuzhiyun XFS_ATTR_FILTER_FLAGS), 1877*4882a593Smuzhiyun __print_flags(__entry->attr_flags, "|", 1878*4882a593Smuzhiyun { XATTR_CREATE, "CREATE" }, 1879*4882a593Smuzhiyun { XATTR_REPLACE, "REPLACE" }), 1880*4882a593Smuzhiyun __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS)) 1881*4882a593Smuzhiyun ) 1882*4882a593Smuzhiyun 1883*4882a593Smuzhiyun #define DEFINE_ATTR_EVENT(name) \ 1884*4882a593Smuzhiyun DEFINE_EVENT(xfs_attr_class, name, \ 1885*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args), \ 1886*4882a593Smuzhiyun TP_ARGS(args)) 1887*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_add); 1888*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_addname); 1889*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_create); 1890*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_lookup); 1891*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_remove); 1892*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf); 1893*4882a593Smuzhiyun 1894*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add); 1895*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old); 1896*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new); 1897*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work); 1898*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_addname); 1899*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_create); 1900*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_compact); 1901*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_get); 1902*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup); 1903*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_replace); 1904*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_remove); 1905*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_removename); 1906*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_split); 1907*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before); 1908*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_split_after); 1909*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_clearflag); 1910*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_setflag); 1911*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_flipflags); 1912*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf); 1913*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node); 1914*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance); 1915*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance); 1916*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall); 1917*4882a593Smuzhiyun 1918*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_addname); 1919*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_get); 1920*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_replace); 1921*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_node_removename); 1922*4882a593Smuzhiyun 1923*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_fillstate); 1924*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_refillstate); 1925*4882a593Smuzhiyun 1926*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_rmtval_get); 1927*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_rmtval_set); 1928*4882a593Smuzhiyun DEFINE_ATTR_EVENT(xfs_attr_rmtval_remove); 1929*4882a593Smuzhiyun 1930*4882a593Smuzhiyun #define DEFINE_DA_EVENT(name) \ 1931*4882a593Smuzhiyun DEFINE_EVENT(xfs_da_class, name, \ 1932*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args), \ 1933*4882a593Smuzhiyun TP_ARGS(args)) 1934*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_split); 1935*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_join); 1936*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_link_before); 1937*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_link_after); 1938*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_unlink_back); 1939*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_unlink_forward); 1940*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_root_split); 1941*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_root_join); 1942*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_add); 1943*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_create); 1944*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_split); 1945*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_remove); 1946*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_rebalance); 1947*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_unbalance); 1948*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_node_toosmall); 1949*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_swap_lastblock); 1950*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_grow_inode); 1951*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_shrink_inode); 1952*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_fixhashpath); 1953*4882a593Smuzhiyun DEFINE_DA_EVENT(xfs_da_path_shift); 1954*4882a593Smuzhiyun 1955*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_dir2_space_class, 1956*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args, int idx), 1957*4882a593Smuzhiyun TP_ARGS(args, idx), 1958*4882a593Smuzhiyun TP_STRUCT__entry( 1959*4882a593Smuzhiyun __field(dev_t, dev) 1960*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1961*4882a593Smuzhiyun __field(int, op_flags) 1962*4882a593Smuzhiyun __field(int, idx) 1963*4882a593Smuzhiyun ), 1964*4882a593Smuzhiyun TP_fast_assign( 1965*4882a593Smuzhiyun __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1966*4882a593Smuzhiyun __entry->ino = args->dp->i_ino; 1967*4882a593Smuzhiyun __entry->op_flags = args->op_flags; 1968*4882a593Smuzhiyun __entry->idx = idx; 1969*4882a593Smuzhiyun ), 1970*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx op_flags %s index %d", 1971*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1972*4882a593Smuzhiyun __entry->ino, 1973*4882a593Smuzhiyun __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS), 1974*4882a593Smuzhiyun __entry->idx) 1975*4882a593Smuzhiyun ) 1976*4882a593Smuzhiyun 1977*4882a593Smuzhiyun #define DEFINE_DIR2_SPACE_EVENT(name) \ 1978*4882a593Smuzhiyun DEFINE_EVENT(xfs_dir2_space_class, name, \ 1979*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args, int idx), \ 1980*4882a593Smuzhiyun TP_ARGS(args, idx)) 1981*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_add); 1982*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_remove); 1983*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_grow_inode); 1984*4882a593Smuzhiyun DEFINE_DIR2_SPACE_EVENT(xfs_dir2_shrink_inode); 1985*4882a593Smuzhiyun 1986*4882a593Smuzhiyun TRACE_EVENT(xfs_dir2_leafn_moveents, 1987*4882a593Smuzhiyun TP_PROTO(struct xfs_da_args *args, int src_idx, int dst_idx, int count), 1988*4882a593Smuzhiyun TP_ARGS(args, src_idx, dst_idx, count), 1989*4882a593Smuzhiyun TP_STRUCT__entry( 1990*4882a593Smuzhiyun __field(dev_t, dev) 1991*4882a593Smuzhiyun __field(xfs_ino_t, ino) 1992*4882a593Smuzhiyun __field(int, op_flags) 1993*4882a593Smuzhiyun __field(int, src_idx) 1994*4882a593Smuzhiyun __field(int, dst_idx) 1995*4882a593Smuzhiyun __field(int, count) 1996*4882a593Smuzhiyun ), 1997*4882a593Smuzhiyun TP_fast_assign( 1998*4882a593Smuzhiyun __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1999*4882a593Smuzhiyun __entry->ino = args->dp->i_ino; 2000*4882a593Smuzhiyun __entry->op_flags = args->op_flags; 2001*4882a593Smuzhiyun __entry->src_idx = src_idx; 2002*4882a593Smuzhiyun __entry->dst_idx = dst_idx; 2003*4882a593Smuzhiyun __entry->count = count; 2004*4882a593Smuzhiyun ), 2005*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx op_flags %s " 2006*4882a593Smuzhiyun "src_idx %d dst_idx %d count %d", 2007*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2008*4882a593Smuzhiyun __entry->ino, 2009*4882a593Smuzhiyun __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS), 2010*4882a593Smuzhiyun __entry->src_idx, 2011*4882a593Smuzhiyun __entry->dst_idx, 2012*4882a593Smuzhiyun __entry->count) 2013*4882a593Smuzhiyun ); 2014*4882a593Smuzhiyun 2015*4882a593Smuzhiyun #define XFS_SWAPEXT_INODES \ 2016*4882a593Smuzhiyun { 0, "target" }, \ 2017*4882a593Smuzhiyun { 1, "temp" } 2018*4882a593Smuzhiyun 2019*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_DEV); 2020*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_LOCAL); 2021*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_EXTENTS); 2022*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_BTREE); 2023*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_DINODE_FMT_UUID); 2024*4882a593Smuzhiyun 2025*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_swap_extent_class, 2026*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, int which), 2027*4882a593Smuzhiyun TP_ARGS(ip, which), 2028*4882a593Smuzhiyun TP_STRUCT__entry( 2029*4882a593Smuzhiyun __field(dev_t, dev) 2030*4882a593Smuzhiyun __field(int, which) 2031*4882a593Smuzhiyun __field(xfs_ino_t, ino) 2032*4882a593Smuzhiyun __field(int, format) 2033*4882a593Smuzhiyun __field(int, nex) 2034*4882a593Smuzhiyun __field(int, broot_size) 2035*4882a593Smuzhiyun __field(int, fork_off) 2036*4882a593Smuzhiyun ), 2037*4882a593Smuzhiyun TP_fast_assign( 2038*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 2039*4882a593Smuzhiyun __entry->which = which; 2040*4882a593Smuzhiyun __entry->ino = ip->i_ino; 2041*4882a593Smuzhiyun __entry->format = ip->i_df.if_format; 2042*4882a593Smuzhiyun __entry->nex = ip->i_df.if_nextents; 2043*4882a593Smuzhiyun __entry->broot_size = ip->i_df.if_broot_bytes; 2044*4882a593Smuzhiyun __entry->fork_off = XFS_IFORK_BOFF(ip); 2045*4882a593Smuzhiyun ), 2046*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %d, " 2047*4882a593Smuzhiyun "broot size %d, fork offset %d", 2048*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2049*4882a593Smuzhiyun __entry->ino, 2050*4882a593Smuzhiyun __print_symbolic(__entry->which, XFS_SWAPEXT_INODES), 2051*4882a593Smuzhiyun __print_symbolic(__entry->format, XFS_INODE_FORMAT_STR), 2052*4882a593Smuzhiyun __entry->nex, 2053*4882a593Smuzhiyun __entry->broot_size, 2054*4882a593Smuzhiyun __entry->fork_off) 2055*4882a593Smuzhiyun ) 2056*4882a593Smuzhiyun 2057*4882a593Smuzhiyun #define DEFINE_SWAPEXT_EVENT(name) \ 2058*4882a593Smuzhiyun DEFINE_EVENT(xfs_swap_extent_class, name, \ 2059*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, int which), \ 2060*4882a593Smuzhiyun TP_ARGS(ip, which)) 2061*4882a593Smuzhiyun 2062*4882a593Smuzhiyun DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before); 2063*4882a593Smuzhiyun DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after); 2064*4882a593Smuzhiyun 2065*4882a593Smuzhiyun TRACE_EVENT(xfs_log_recover, 2066*4882a593Smuzhiyun TP_PROTO(struct xlog *log, xfs_daddr_t headblk, xfs_daddr_t tailblk), 2067*4882a593Smuzhiyun TP_ARGS(log, headblk, tailblk), 2068*4882a593Smuzhiyun TP_STRUCT__entry( 2069*4882a593Smuzhiyun __field(dev_t, dev) 2070*4882a593Smuzhiyun __field(xfs_daddr_t, headblk) 2071*4882a593Smuzhiyun __field(xfs_daddr_t, tailblk) 2072*4882a593Smuzhiyun ), 2073*4882a593Smuzhiyun TP_fast_assign( 2074*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 2075*4882a593Smuzhiyun __entry->headblk = headblk; 2076*4882a593Smuzhiyun __entry->tailblk = tailblk; 2077*4882a593Smuzhiyun ), 2078*4882a593Smuzhiyun TP_printk("dev %d:%d headblk 0x%llx tailblk 0x%llx", 2079*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->headblk, 2080*4882a593Smuzhiyun __entry->tailblk) 2081*4882a593Smuzhiyun ) 2082*4882a593Smuzhiyun 2083*4882a593Smuzhiyun TRACE_EVENT(xfs_log_recover_record, 2084*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xlog_rec_header *rhead, int pass), 2085*4882a593Smuzhiyun TP_ARGS(log, rhead, pass), 2086*4882a593Smuzhiyun TP_STRUCT__entry( 2087*4882a593Smuzhiyun __field(dev_t, dev) 2088*4882a593Smuzhiyun __field(xfs_lsn_t, lsn) 2089*4882a593Smuzhiyun __field(int, len) 2090*4882a593Smuzhiyun __field(int, num_logops) 2091*4882a593Smuzhiyun __field(int, pass) 2092*4882a593Smuzhiyun ), 2093*4882a593Smuzhiyun TP_fast_assign( 2094*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 2095*4882a593Smuzhiyun __entry->lsn = be64_to_cpu(rhead->h_lsn); 2096*4882a593Smuzhiyun __entry->len = be32_to_cpu(rhead->h_len); 2097*4882a593Smuzhiyun __entry->num_logops = be32_to_cpu(rhead->h_num_logops); 2098*4882a593Smuzhiyun __entry->pass = pass; 2099*4882a593Smuzhiyun ), 2100*4882a593Smuzhiyun TP_printk("dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d", 2101*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2102*4882a593Smuzhiyun __entry->lsn, __entry->len, __entry->num_logops, 2103*4882a593Smuzhiyun __entry->pass) 2104*4882a593Smuzhiyun ) 2105*4882a593Smuzhiyun 2106*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_item_class, 2107*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xlog_recover *trans, 2108*4882a593Smuzhiyun struct xlog_recover_item *item, int pass), 2109*4882a593Smuzhiyun TP_ARGS(log, trans, item, pass), 2110*4882a593Smuzhiyun TP_STRUCT__entry( 2111*4882a593Smuzhiyun __field(dev_t, dev) 2112*4882a593Smuzhiyun __field(unsigned long, item) 2113*4882a593Smuzhiyun __field(xlog_tid_t, tid) 2114*4882a593Smuzhiyun __field(xfs_lsn_t, lsn) 2115*4882a593Smuzhiyun __field(int, type) 2116*4882a593Smuzhiyun __field(int, pass) 2117*4882a593Smuzhiyun __field(int, count) 2118*4882a593Smuzhiyun __field(int, total) 2119*4882a593Smuzhiyun ), 2120*4882a593Smuzhiyun TP_fast_assign( 2121*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 2122*4882a593Smuzhiyun __entry->item = (unsigned long)item; 2123*4882a593Smuzhiyun __entry->tid = trans->r_log_tid; 2124*4882a593Smuzhiyun __entry->lsn = trans->r_lsn; 2125*4882a593Smuzhiyun __entry->type = ITEM_TYPE(item); 2126*4882a593Smuzhiyun __entry->pass = pass; 2127*4882a593Smuzhiyun __entry->count = item->ri_cnt; 2128*4882a593Smuzhiyun __entry->total = item->ri_total; 2129*4882a593Smuzhiyun ), 2130*4882a593Smuzhiyun TP_printk("dev %d:%d tid 0x%x lsn 0x%llx, pass %d, item %p, " 2131*4882a593Smuzhiyun "item type %s item region count/total %d/%d", 2132*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2133*4882a593Smuzhiyun __entry->tid, 2134*4882a593Smuzhiyun __entry->lsn, 2135*4882a593Smuzhiyun __entry->pass, 2136*4882a593Smuzhiyun (void *)__entry->item, 2137*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_LI_TYPE_DESC), 2138*4882a593Smuzhiyun __entry->count, 2139*4882a593Smuzhiyun __entry->total) 2140*4882a593Smuzhiyun ) 2141*4882a593Smuzhiyun 2142*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_ITEM(name) \ 2143*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_item_class, name, \ 2144*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xlog_recover *trans, \ 2145*4882a593Smuzhiyun struct xlog_recover_item *item, int pass), \ 2146*4882a593Smuzhiyun TP_ARGS(log, trans, item, pass)) 2147*4882a593Smuzhiyun 2148*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add); 2149*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont); 2150*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head); 2151*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail); 2152*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover); 2153*4882a593Smuzhiyun 2154*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class, 2155*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), 2156*4882a593Smuzhiyun TP_ARGS(log, buf_f), 2157*4882a593Smuzhiyun TP_STRUCT__entry( 2158*4882a593Smuzhiyun __field(dev_t, dev) 2159*4882a593Smuzhiyun __field(int64_t, blkno) 2160*4882a593Smuzhiyun __field(unsigned short, len) 2161*4882a593Smuzhiyun __field(unsigned short, flags) 2162*4882a593Smuzhiyun __field(unsigned short, size) 2163*4882a593Smuzhiyun __field(unsigned int, map_size) 2164*4882a593Smuzhiyun ), 2165*4882a593Smuzhiyun TP_fast_assign( 2166*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 2167*4882a593Smuzhiyun __entry->blkno = buf_f->blf_blkno; 2168*4882a593Smuzhiyun __entry->len = buf_f->blf_len; 2169*4882a593Smuzhiyun __entry->flags = buf_f->blf_flags; 2170*4882a593Smuzhiyun __entry->size = buf_f->blf_size; 2171*4882a593Smuzhiyun __entry->map_size = buf_f->blf_map_size; 2172*4882a593Smuzhiyun ), 2173*4882a593Smuzhiyun TP_printk("dev %d:%d blkno 0x%llx, len %u, flags 0x%x, size %d, " 2174*4882a593Smuzhiyun "map_size %d", 2175*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2176*4882a593Smuzhiyun __entry->blkno, 2177*4882a593Smuzhiyun __entry->len, 2178*4882a593Smuzhiyun __entry->flags, 2179*4882a593Smuzhiyun __entry->size, 2180*4882a593Smuzhiyun __entry->map_size) 2181*4882a593Smuzhiyun ) 2182*4882a593Smuzhiyun 2183*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_BUF_ITEM(name) \ 2184*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \ 2185*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), \ 2186*4882a593Smuzhiyun TP_ARGS(log, buf_f)) 2187*4882a593Smuzhiyun 2188*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel); 2189*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel); 2190*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add); 2191*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc); 2192*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover); 2193*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_skip); 2194*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf); 2195*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf); 2196*4882a593Smuzhiyun DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf); 2197*4882a593Smuzhiyun 2198*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class, 2199*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), 2200*4882a593Smuzhiyun TP_ARGS(log, in_f), 2201*4882a593Smuzhiyun TP_STRUCT__entry( 2202*4882a593Smuzhiyun __field(dev_t, dev) 2203*4882a593Smuzhiyun __field(xfs_ino_t, ino) 2204*4882a593Smuzhiyun __field(unsigned short, size) 2205*4882a593Smuzhiyun __field(int, fields) 2206*4882a593Smuzhiyun __field(unsigned short, asize) 2207*4882a593Smuzhiyun __field(unsigned short, dsize) 2208*4882a593Smuzhiyun __field(int64_t, blkno) 2209*4882a593Smuzhiyun __field(int, len) 2210*4882a593Smuzhiyun __field(int, boffset) 2211*4882a593Smuzhiyun ), 2212*4882a593Smuzhiyun TP_fast_assign( 2213*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 2214*4882a593Smuzhiyun __entry->ino = in_f->ilf_ino; 2215*4882a593Smuzhiyun __entry->size = in_f->ilf_size; 2216*4882a593Smuzhiyun __entry->fields = in_f->ilf_fields; 2217*4882a593Smuzhiyun __entry->asize = in_f->ilf_asize; 2218*4882a593Smuzhiyun __entry->dsize = in_f->ilf_dsize; 2219*4882a593Smuzhiyun __entry->blkno = in_f->ilf_blkno; 2220*4882a593Smuzhiyun __entry->len = in_f->ilf_len; 2221*4882a593Smuzhiyun __entry->boffset = in_f->ilf_boffset; 2222*4882a593Smuzhiyun ), 2223*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, " 2224*4882a593Smuzhiyun "dsize %d, blkno 0x%llx, len %d, boffset %d", 2225*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2226*4882a593Smuzhiyun __entry->ino, 2227*4882a593Smuzhiyun __entry->size, 2228*4882a593Smuzhiyun __entry->fields, 2229*4882a593Smuzhiyun __entry->asize, 2230*4882a593Smuzhiyun __entry->dsize, 2231*4882a593Smuzhiyun __entry->blkno, 2232*4882a593Smuzhiyun __entry->len, 2233*4882a593Smuzhiyun __entry->boffset) 2234*4882a593Smuzhiyun ) 2235*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_INO_ITEM(name) \ 2236*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \ 2237*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), \ 2238*4882a593Smuzhiyun TP_ARGS(log, in_f)) 2239*4882a593Smuzhiyun 2240*4882a593Smuzhiyun DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover); 2241*4882a593Smuzhiyun DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel); 2242*4882a593Smuzhiyun DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip); 2243*4882a593Smuzhiyun 2244*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class, 2245*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), 2246*4882a593Smuzhiyun TP_ARGS(log, in_f), 2247*4882a593Smuzhiyun TP_STRUCT__entry( 2248*4882a593Smuzhiyun __field(dev_t, dev) 2249*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2250*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2251*4882a593Smuzhiyun __field(unsigned int, count) 2252*4882a593Smuzhiyun __field(unsigned int, isize) 2253*4882a593Smuzhiyun __field(xfs_agblock_t, length) 2254*4882a593Smuzhiyun __field(unsigned int, gen) 2255*4882a593Smuzhiyun ), 2256*4882a593Smuzhiyun TP_fast_assign( 2257*4882a593Smuzhiyun __entry->dev = log->l_mp->m_super->s_dev; 2258*4882a593Smuzhiyun __entry->agno = be32_to_cpu(in_f->icl_ag); 2259*4882a593Smuzhiyun __entry->agbno = be32_to_cpu(in_f->icl_agbno); 2260*4882a593Smuzhiyun __entry->count = be32_to_cpu(in_f->icl_count); 2261*4882a593Smuzhiyun __entry->isize = be32_to_cpu(in_f->icl_isize); 2262*4882a593Smuzhiyun __entry->length = be32_to_cpu(in_f->icl_length); 2263*4882a593Smuzhiyun __entry->gen = be32_to_cpu(in_f->icl_gen); 2264*4882a593Smuzhiyun ), 2265*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u count %u isize %u length %u " 2266*4882a593Smuzhiyun "gen %u", MAJOR(__entry->dev), MINOR(__entry->dev), 2267*4882a593Smuzhiyun __entry->agno, __entry->agbno, __entry->count, __entry->isize, 2268*4882a593Smuzhiyun __entry->length, __entry->gen) 2269*4882a593Smuzhiyun ) 2270*4882a593Smuzhiyun #define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \ 2271*4882a593Smuzhiyun DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \ 2272*4882a593Smuzhiyun TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), \ 2273*4882a593Smuzhiyun TP_ARGS(log, in_f)) 2274*4882a593Smuzhiyun 2275*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_cancel); 2276*4882a593Smuzhiyun DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_recover); 2277*4882a593Smuzhiyun 2278*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_discard_class, 2279*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2280*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len), 2281*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len), 2282*4882a593Smuzhiyun TP_STRUCT__entry( 2283*4882a593Smuzhiyun __field(dev_t, dev) 2284*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2285*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2286*4882a593Smuzhiyun __field(xfs_extlen_t, len) 2287*4882a593Smuzhiyun ), 2288*4882a593Smuzhiyun TP_fast_assign( 2289*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2290*4882a593Smuzhiyun __entry->agno = agno; 2291*4882a593Smuzhiyun __entry->agbno = agbno; 2292*4882a593Smuzhiyun __entry->len = len; 2293*4882a593Smuzhiyun ), 2294*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u", 2295*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2296*4882a593Smuzhiyun __entry->agno, 2297*4882a593Smuzhiyun __entry->agbno, 2298*4882a593Smuzhiyun __entry->len) 2299*4882a593Smuzhiyun ) 2300*4882a593Smuzhiyun 2301*4882a593Smuzhiyun #define DEFINE_DISCARD_EVENT(name) \ 2302*4882a593Smuzhiyun DEFINE_EVENT(xfs_discard_class, name, \ 2303*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2304*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len), \ 2305*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len)) 2306*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_extent); 2307*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_toosmall); 2308*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_exclude); 2309*4882a593Smuzhiyun DEFINE_DISCARD_EVENT(xfs_discard_busy); 2310*4882a593Smuzhiyun 2311*4882a593Smuzhiyun /* btree cursor events */ 2312*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi); 2313*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi); 2314*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi); 2315*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_INOi); 2316*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi); 2317*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi); 2318*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi); 2319*4882a593Smuzhiyun 2320*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_btree_cur_class, 2321*4882a593Smuzhiyun TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), 2322*4882a593Smuzhiyun TP_ARGS(cur, level, bp), 2323*4882a593Smuzhiyun TP_STRUCT__entry( 2324*4882a593Smuzhiyun __field(dev_t, dev) 2325*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 2326*4882a593Smuzhiyun __field(int, level) 2327*4882a593Smuzhiyun __field(int, nlevels) 2328*4882a593Smuzhiyun __field(int, ptr) 2329*4882a593Smuzhiyun __field(xfs_daddr_t, daddr) 2330*4882a593Smuzhiyun ), 2331*4882a593Smuzhiyun TP_fast_assign( 2332*4882a593Smuzhiyun __entry->dev = cur->bc_mp->m_super->s_dev; 2333*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 2334*4882a593Smuzhiyun __entry->level = level; 2335*4882a593Smuzhiyun __entry->nlevels = cur->bc_nlevels; 2336*4882a593Smuzhiyun __entry->ptr = cur->bc_ptrs[level]; 2337*4882a593Smuzhiyun __entry->daddr = bp ? bp->b_bn : -1; 2338*4882a593Smuzhiyun ), 2339*4882a593Smuzhiyun TP_printk("dev %d:%d btree %s level %d/%d ptr %d daddr 0x%llx", 2340*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2341*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 2342*4882a593Smuzhiyun __entry->level, 2343*4882a593Smuzhiyun __entry->nlevels, 2344*4882a593Smuzhiyun __entry->ptr, 2345*4882a593Smuzhiyun (unsigned long long)__entry->daddr) 2346*4882a593Smuzhiyun ) 2347*4882a593Smuzhiyun 2348*4882a593Smuzhiyun #define DEFINE_BTREE_CUR_EVENT(name) \ 2349*4882a593Smuzhiyun DEFINE_EVENT(xfs_btree_cur_class, name, \ 2350*4882a593Smuzhiyun TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \ 2351*4882a593Smuzhiyun TP_ARGS(cur, level, bp)) 2352*4882a593Smuzhiyun DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys); 2353*4882a593Smuzhiyun DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range); 2354*4882a593Smuzhiyun 2355*4882a593Smuzhiyun /* deferred ops */ 2356*4882a593Smuzhiyun struct xfs_defer_pending; 2357*4882a593Smuzhiyun 2358*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_defer_class, 2359*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), 2360*4882a593Smuzhiyun TP_ARGS(tp, caller_ip), 2361*4882a593Smuzhiyun TP_STRUCT__entry( 2362*4882a593Smuzhiyun __field(dev_t, dev) 2363*4882a593Smuzhiyun __field(struct xfs_trans *, tp) 2364*4882a593Smuzhiyun __field(char, committed) 2365*4882a593Smuzhiyun __field(unsigned long, caller_ip) 2366*4882a593Smuzhiyun ), 2367*4882a593Smuzhiyun TP_fast_assign( 2368*4882a593Smuzhiyun __entry->dev = tp->t_mountp->m_super->s_dev; 2369*4882a593Smuzhiyun __entry->tp = tp; 2370*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 2371*4882a593Smuzhiyun ), 2372*4882a593Smuzhiyun TP_printk("dev %d:%d tp %p caller %pS", 2373*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2374*4882a593Smuzhiyun __entry->tp, 2375*4882a593Smuzhiyun (char *)__entry->caller_ip) 2376*4882a593Smuzhiyun ) 2377*4882a593Smuzhiyun #define DEFINE_DEFER_EVENT(name) \ 2378*4882a593Smuzhiyun DEFINE_EVENT(xfs_defer_class, name, \ 2379*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \ 2380*4882a593Smuzhiyun TP_ARGS(tp, caller_ip)) 2381*4882a593Smuzhiyun 2382*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_defer_error_class, 2383*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, int error), 2384*4882a593Smuzhiyun TP_ARGS(tp, error), 2385*4882a593Smuzhiyun TP_STRUCT__entry( 2386*4882a593Smuzhiyun __field(dev_t, dev) 2387*4882a593Smuzhiyun __field(struct xfs_trans *, tp) 2388*4882a593Smuzhiyun __field(char, committed) 2389*4882a593Smuzhiyun __field(int, error) 2390*4882a593Smuzhiyun ), 2391*4882a593Smuzhiyun TP_fast_assign( 2392*4882a593Smuzhiyun __entry->dev = tp->t_mountp->m_super->s_dev; 2393*4882a593Smuzhiyun __entry->tp = tp; 2394*4882a593Smuzhiyun __entry->error = error; 2395*4882a593Smuzhiyun ), 2396*4882a593Smuzhiyun TP_printk("dev %d:%d tp %p err %d", 2397*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2398*4882a593Smuzhiyun __entry->tp, 2399*4882a593Smuzhiyun __entry->error) 2400*4882a593Smuzhiyun ) 2401*4882a593Smuzhiyun #define DEFINE_DEFER_ERROR_EVENT(name) \ 2402*4882a593Smuzhiyun DEFINE_EVENT(xfs_defer_error_class, name, \ 2403*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, int error), \ 2404*4882a593Smuzhiyun TP_ARGS(tp, error)) 2405*4882a593Smuzhiyun 2406*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_defer_pending_class, 2407*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), 2408*4882a593Smuzhiyun TP_ARGS(mp, dfp), 2409*4882a593Smuzhiyun TP_STRUCT__entry( 2410*4882a593Smuzhiyun __field(dev_t, dev) 2411*4882a593Smuzhiyun __field(int, type) 2412*4882a593Smuzhiyun __field(void *, intent) 2413*4882a593Smuzhiyun __field(char, committed) 2414*4882a593Smuzhiyun __field(int, nr) 2415*4882a593Smuzhiyun ), 2416*4882a593Smuzhiyun TP_fast_assign( 2417*4882a593Smuzhiyun __entry->dev = mp ? mp->m_super->s_dev : 0; 2418*4882a593Smuzhiyun __entry->type = dfp->dfp_type; 2419*4882a593Smuzhiyun __entry->intent = dfp->dfp_intent; 2420*4882a593Smuzhiyun __entry->committed = dfp->dfp_done != NULL; 2421*4882a593Smuzhiyun __entry->nr = dfp->dfp_count; 2422*4882a593Smuzhiyun ), 2423*4882a593Smuzhiyun TP_printk("dev %d:%d optype %d intent %p committed %d nr %d", 2424*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2425*4882a593Smuzhiyun __entry->type, 2426*4882a593Smuzhiyun __entry->intent, 2427*4882a593Smuzhiyun __entry->committed, 2428*4882a593Smuzhiyun __entry->nr) 2429*4882a593Smuzhiyun ) 2430*4882a593Smuzhiyun #define DEFINE_DEFER_PENDING_EVENT(name) \ 2431*4882a593Smuzhiyun DEFINE_EVENT(xfs_defer_pending_class, name, \ 2432*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), \ 2433*4882a593Smuzhiyun TP_ARGS(mp, dfp)) 2434*4882a593Smuzhiyun 2435*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_phys_extent_deferred_class, 2436*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2437*4882a593Smuzhiyun int type, xfs_agblock_t agbno, xfs_extlen_t len), 2438*4882a593Smuzhiyun TP_ARGS(mp, agno, type, agbno, len), 2439*4882a593Smuzhiyun TP_STRUCT__entry( 2440*4882a593Smuzhiyun __field(dev_t, dev) 2441*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2442*4882a593Smuzhiyun __field(int, type) 2443*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2444*4882a593Smuzhiyun __field(xfs_extlen_t, len) 2445*4882a593Smuzhiyun ), 2446*4882a593Smuzhiyun TP_fast_assign( 2447*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2448*4882a593Smuzhiyun __entry->agno = agno; 2449*4882a593Smuzhiyun __entry->type = type; 2450*4882a593Smuzhiyun __entry->agbno = agbno; 2451*4882a593Smuzhiyun __entry->len = len; 2452*4882a593Smuzhiyun ), 2453*4882a593Smuzhiyun TP_printk("dev %d:%d op %d agno %u agbno %u len %u", 2454*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2455*4882a593Smuzhiyun __entry->type, 2456*4882a593Smuzhiyun __entry->agno, 2457*4882a593Smuzhiyun __entry->agbno, 2458*4882a593Smuzhiyun __entry->len) 2459*4882a593Smuzhiyun ); 2460*4882a593Smuzhiyun #define DEFINE_PHYS_EXTENT_DEFERRED_EVENT(name) \ 2461*4882a593Smuzhiyun DEFINE_EVENT(xfs_phys_extent_deferred_class, name, \ 2462*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2463*4882a593Smuzhiyun int type, \ 2464*4882a593Smuzhiyun xfs_agblock_t bno, \ 2465*4882a593Smuzhiyun xfs_extlen_t len), \ 2466*4882a593Smuzhiyun TP_ARGS(mp, agno, type, bno, len)) 2467*4882a593Smuzhiyun 2468*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_map_extent_deferred_class, 2469*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2470*4882a593Smuzhiyun int op, 2471*4882a593Smuzhiyun xfs_agblock_t agbno, 2472*4882a593Smuzhiyun xfs_ino_t ino, 2473*4882a593Smuzhiyun int whichfork, 2474*4882a593Smuzhiyun xfs_fileoff_t offset, 2475*4882a593Smuzhiyun xfs_filblks_t len, 2476*4882a593Smuzhiyun xfs_exntst_t state), 2477*4882a593Smuzhiyun TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state), 2478*4882a593Smuzhiyun TP_STRUCT__entry( 2479*4882a593Smuzhiyun __field(dev_t, dev) 2480*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2481*4882a593Smuzhiyun __field(xfs_ino_t, ino) 2482*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2483*4882a593Smuzhiyun __field(int, whichfork) 2484*4882a593Smuzhiyun __field(xfs_fileoff_t, l_loff) 2485*4882a593Smuzhiyun __field(xfs_filblks_t, l_len) 2486*4882a593Smuzhiyun __field(xfs_exntst_t, l_state) 2487*4882a593Smuzhiyun __field(int, op) 2488*4882a593Smuzhiyun ), 2489*4882a593Smuzhiyun TP_fast_assign( 2490*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2491*4882a593Smuzhiyun __entry->agno = agno; 2492*4882a593Smuzhiyun __entry->ino = ino; 2493*4882a593Smuzhiyun __entry->agbno = agbno; 2494*4882a593Smuzhiyun __entry->whichfork = whichfork; 2495*4882a593Smuzhiyun __entry->l_loff = offset; 2496*4882a593Smuzhiyun __entry->l_len = len; 2497*4882a593Smuzhiyun __entry->l_state = state; 2498*4882a593Smuzhiyun __entry->op = op; 2499*4882a593Smuzhiyun ), 2500*4882a593Smuzhiyun TP_printk("dev %d:%d op %d agno %u agbno %u owner %lld %s offset %llu len %llu state %d", 2501*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2502*4882a593Smuzhiyun __entry->op, 2503*4882a593Smuzhiyun __entry->agno, 2504*4882a593Smuzhiyun __entry->agbno, 2505*4882a593Smuzhiyun __entry->ino, 2506*4882a593Smuzhiyun __entry->whichfork == XFS_ATTR_FORK ? "attr" : "data", 2507*4882a593Smuzhiyun __entry->l_loff, 2508*4882a593Smuzhiyun __entry->l_len, 2509*4882a593Smuzhiyun __entry->l_state) 2510*4882a593Smuzhiyun ); 2511*4882a593Smuzhiyun #define DEFINE_MAP_EXTENT_DEFERRED_EVENT(name) \ 2512*4882a593Smuzhiyun DEFINE_EVENT(xfs_map_extent_deferred_class, name, \ 2513*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2514*4882a593Smuzhiyun int op, \ 2515*4882a593Smuzhiyun xfs_agblock_t agbno, \ 2516*4882a593Smuzhiyun xfs_ino_t ino, \ 2517*4882a593Smuzhiyun int whichfork, \ 2518*4882a593Smuzhiyun xfs_fileoff_t offset, \ 2519*4882a593Smuzhiyun xfs_filblks_t len, \ 2520*4882a593Smuzhiyun xfs_exntst_t state), \ 2521*4882a593Smuzhiyun TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state)) 2522*4882a593Smuzhiyun 2523*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_cancel); 2524*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_trans_roll); 2525*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_trans_abort); 2526*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_finish); 2527*4882a593Smuzhiyun DEFINE_DEFER_EVENT(xfs_defer_finish_done); 2528*4882a593Smuzhiyun 2529*4882a593Smuzhiyun DEFINE_DEFER_ERROR_EVENT(xfs_defer_trans_roll_error); 2530*4882a593Smuzhiyun DEFINE_DEFER_ERROR_EVENT(xfs_defer_finish_error); 2531*4882a593Smuzhiyun 2532*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_create_intent); 2533*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_cancel_list); 2534*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish); 2535*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort); 2536*4882a593Smuzhiyun DEFINE_DEFER_PENDING_EVENT(xfs_defer_relog_intent); 2537*4882a593Smuzhiyun 2538*4882a593Smuzhiyun #define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT 2539*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer); 2540*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred); 2541*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_defer); 2542*4882a593Smuzhiyun DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_deferred); 2543*4882a593Smuzhiyun 2544*4882a593Smuzhiyun /* rmap tracepoints */ 2545*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_rmap_class, 2546*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2547*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, 2548*4882a593Smuzhiyun const struct xfs_owner_info *oinfo), 2549*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, unwritten, oinfo), 2550*4882a593Smuzhiyun TP_STRUCT__entry( 2551*4882a593Smuzhiyun __field(dev_t, dev) 2552*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2553*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2554*4882a593Smuzhiyun __field(xfs_extlen_t, len) 2555*4882a593Smuzhiyun __field(uint64_t, owner) 2556*4882a593Smuzhiyun __field(uint64_t, offset) 2557*4882a593Smuzhiyun __field(unsigned long, flags) 2558*4882a593Smuzhiyun ), 2559*4882a593Smuzhiyun TP_fast_assign( 2560*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2561*4882a593Smuzhiyun __entry->agno = agno; 2562*4882a593Smuzhiyun __entry->agbno = agbno; 2563*4882a593Smuzhiyun __entry->len = len; 2564*4882a593Smuzhiyun __entry->owner = oinfo->oi_owner; 2565*4882a593Smuzhiyun __entry->offset = oinfo->oi_offset; 2566*4882a593Smuzhiyun __entry->flags = oinfo->oi_flags; 2567*4882a593Smuzhiyun if (unwritten) 2568*4882a593Smuzhiyun __entry->flags |= XFS_RMAP_UNWRITTEN; 2569*4882a593Smuzhiyun ), 2570*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%lx", 2571*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2572*4882a593Smuzhiyun __entry->agno, 2573*4882a593Smuzhiyun __entry->agbno, 2574*4882a593Smuzhiyun __entry->len, 2575*4882a593Smuzhiyun __entry->owner, 2576*4882a593Smuzhiyun __entry->offset, 2577*4882a593Smuzhiyun __entry->flags) 2578*4882a593Smuzhiyun ); 2579*4882a593Smuzhiyun #define DEFINE_RMAP_EVENT(name) \ 2580*4882a593Smuzhiyun DEFINE_EVENT(xfs_rmap_class, name, \ 2581*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2582*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \ 2583*4882a593Smuzhiyun const struct xfs_owner_info *oinfo), \ 2584*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, unwritten, oinfo)) 2585*4882a593Smuzhiyun 2586*4882a593Smuzhiyun /* simple AG-based error/%ip tracepoint class */ 2587*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_error_class, 2588*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, 2589*4882a593Smuzhiyun unsigned long caller_ip), 2590*4882a593Smuzhiyun TP_ARGS(mp, agno, error, caller_ip), 2591*4882a593Smuzhiyun TP_STRUCT__entry( 2592*4882a593Smuzhiyun __field(dev_t, dev) 2593*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2594*4882a593Smuzhiyun __field(int, error) 2595*4882a593Smuzhiyun __field(unsigned long, caller_ip) 2596*4882a593Smuzhiyun ), 2597*4882a593Smuzhiyun TP_fast_assign( 2598*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2599*4882a593Smuzhiyun __entry->agno = agno; 2600*4882a593Smuzhiyun __entry->error = error; 2601*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 2602*4882a593Smuzhiyun ), 2603*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u error %d caller %pS", 2604*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2605*4882a593Smuzhiyun __entry->agno, 2606*4882a593Smuzhiyun __entry->error, 2607*4882a593Smuzhiyun (char *)__entry->caller_ip) 2608*4882a593Smuzhiyun ); 2609*4882a593Smuzhiyun 2610*4882a593Smuzhiyun #define DEFINE_AG_ERROR_EVENT(name) \ 2611*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_error_class, name, \ 2612*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \ 2613*4882a593Smuzhiyun unsigned long caller_ip), \ 2614*4882a593Smuzhiyun TP_ARGS(mp, agno, error, caller_ip)) 2615*4882a593Smuzhiyun 2616*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_unmap); 2617*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_unmap_done); 2618*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_unmap_error); 2619*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_map); 2620*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_map_done); 2621*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_map_error); 2622*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_convert); 2623*4882a593Smuzhiyun DEFINE_RMAP_EVENT(xfs_rmap_convert_done); 2624*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_error); 2625*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_state); 2626*4882a593Smuzhiyun 2627*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_rmapbt_class, 2628*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2629*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, 2630*4882a593Smuzhiyun uint64_t owner, uint64_t offset, unsigned int flags), 2631*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, owner, offset, flags), 2632*4882a593Smuzhiyun TP_STRUCT__entry( 2633*4882a593Smuzhiyun __field(dev_t, dev) 2634*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2635*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2636*4882a593Smuzhiyun __field(xfs_extlen_t, len) 2637*4882a593Smuzhiyun __field(uint64_t, owner) 2638*4882a593Smuzhiyun __field(uint64_t, offset) 2639*4882a593Smuzhiyun __field(unsigned int, flags) 2640*4882a593Smuzhiyun ), 2641*4882a593Smuzhiyun TP_fast_assign( 2642*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2643*4882a593Smuzhiyun __entry->agno = agno; 2644*4882a593Smuzhiyun __entry->agbno = agbno; 2645*4882a593Smuzhiyun __entry->len = len; 2646*4882a593Smuzhiyun __entry->owner = owner; 2647*4882a593Smuzhiyun __entry->offset = offset; 2648*4882a593Smuzhiyun __entry->flags = flags; 2649*4882a593Smuzhiyun ), 2650*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x", 2651*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2652*4882a593Smuzhiyun __entry->agno, 2653*4882a593Smuzhiyun __entry->agbno, 2654*4882a593Smuzhiyun __entry->len, 2655*4882a593Smuzhiyun __entry->owner, 2656*4882a593Smuzhiyun __entry->offset, 2657*4882a593Smuzhiyun __entry->flags) 2658*4882a593Smuzhiyun ); 2659*4882a593Smuzhiyun #define DEFINE_RMAPBT_EVENT(name) \ 2660*4882a593Smuzhiyun DEFINE_EVENT(xfs_rmapbt_class, name, \ 2661*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2662*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, \ 2663*4882a593Smuzhiyun uint64_t owner, uint64_t offset, unsigned int flags), \ 2664*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, owner, offset, flags)) 2665*4882a593Smuzhiyun 2666*4882a593Smuzhiyun #define DEFINE_RMAP_DEFERRED_EVENT DEFINE_MAP_EXTENT_DEFERRED_EVENT 2667*4882a593Smuzhiyun DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer); 2668*4882a593Smuzhiyun DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred); 2669*4882a593Smuzhiyun 2670*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_rmapbt_alloc_block); 2671*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_rmapbt_free_block); 2672*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_update); 2673*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_insert); 2674*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_delete); 2675*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_insert_error); 2676*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_delete_error); 2677*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_rmap_update_error); 2678*4882a593Smuzhiyun 2679*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_candidate); 2680*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_query); 2681*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_candidate); 2682*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range); 2683*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_result); 2684*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_right_neighbor_result); 2685*4882a593Smuzhiyun DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_result); 2686*4882a593Smuzhiyun 2687*4882a593Smuzhiyun /* deferred bmbt updates */ 2688*4882a593Smuzhiyun #define DEFINE_BMAP_DEFERRED_EVENT DEFINE_RMAP_DEFERRED_EVENT 2689*4882a593Smuzhiyun DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_defer); 2690*4882a593Smuzhiyun DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred); 2691*4882a593Smuzhiyun 2692*4882a593Smuzhiyun /* per-AG reservation */ 2693*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_resv_class, 2694*4882a593Smuzhiyun TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type resv, 2695*4882a593Smuzhiyun xfs_extlen_t len), 2696*4882a593Smuzhiyun TP_ARGS(pag, resv, len), 2697*4882a593Smuzhiyun TP_STRUCT__entry( 2698*4882a593Smuzhiyun __field(dev_t, dev) 2699*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2700*4882a593Smuzhiyun __field(int, resv) 2701*4882a593Smuzhiyun __field(xfs_extlen_t, freeblks) 2702*4882a593Smuzhiyun __field(xfs_extlen_t, flcount) 2703*4882a593Smuzhiyun __field(xfs_extlen_t, reserved) 2704*4882a593Smuzhiyun __field(xfs_extlen_t, asked) 2705*4882a593Smuzhiyun __field(xfs_extlen_t, len) 2706*4882a593Smuzhiyun ), 2707*4882a593Smuzhiyun TP_fast_assign( 2708*4882a593Smuzhiyun struct xfs_ag_resv *r = xfs_perag_resv(pag, resv); 2709*4882a593Smuzhiyun 2710*4882a593Smuzhiyun __entry->dev = pag->pag_mount->m_super->s_dev; 2711*4882a593Smuzhiyun __entry->agno = pag->pag_agno; 2712*4882a593Smuzhiyun __entry->resv = resv; 2713*4882a593Smuzhiyun __entry->freeblks = pag->pagf_freeblks; 2714*4882a593Smuzhiyun __entry->flcount = pag->pagf_flcount; 2715*4882a593Smuzhiyun __entry->reserved = r ? r->ar_reserved : 0; 2716*4882a593Smuzhiyun __entry->asked = r ? r->ar_asked : 0; 2717*4882a593Smuzhiyun __entry->len = len; 2718*4882a593Smuzhiyun ), 2719*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u resv %d freeblks %u flcount %u " 2720*4882a593Smuzhiyun "resv %u ask %u len %u", 2721*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2722*4882a593Smuzhiyun __entry->agno, 2723*4882a593Smuzhiyun __entry->resv, 2724*4882a593Smuzhiyun __entry->freeblks, 2725*4882a593Smuzhiyun __entry->flcount, 2726*4882a593Smuzhiyun __entry->reserved, 2727*4882a593Smuzhiyun __entry->asked, 2728*4882a593Smuzhiyun __entry->len) 2729*4882a593Smuzhiyun ) 2730*4882a593Smuzhiyun #define DEFINE_AG_RESV_EVENT(name) \ 2731*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_resv_class, name, \ 2732*4882a593Smuzhiyun TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \ 2733*4882a593Smuzhiyun xfs_extlen_t len), \ 2734*4882a593Smuzhiyun TP_ARGS(pag, type, len)) 2735*4882a593Smuzhiyun 2736*4882a593Smuzhiyun /* per-AG reservation tracepoints */ 2737*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_init); 2738*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_free); 2739*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_alloc_extent); 2740*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_free_extent); 2741*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_critical); 2742*4882a593Smuzhiyun DEFINE_AG_RESV_EVENT(xfs_ag_resv_needed); 2743*4882a593Smuzhiyun 2744*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_ag_resv_free_error); 2745*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_ag_resv_init_error); 2746*4882a593Smuzhiyun 2747*4882a593Smuzhiyun /* refcount tracepoint classes */ 2748*4882a593Smuzhiyun 2749*4882a593Smuzhiyun /* reuse the discard trace class for agbno/aglen-based traces */ 2750*4882a593Smuzhiyun #define DEFINE_AG_EXTENT_EVENT(name) DEFINE_DISCARD_EVENT(name) 2751*4882a593Smuzhiyun 2752*4882a593Smuzhiyun /* ag btree lookup tracepoint class */ 2753*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi); 2754*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi); 2755*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi); 2756*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_btree_lookup_class, 2757*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2758*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_lookup_t dir), 2759*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, dir), 2760*4882a593Smuzhiyun TP_STRUCT__entry( 2761*4882a593Smuzhiyun __field(dev_t, dev) 2762*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2763*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2764*4882a593Smuzhiyun __field(xfs_lookup_t, dir) 2765*4882a593Smuzhiyun ), 2766*4882a593Smuzhiyun TP_fast_assign( 2767*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2768*4882a593Smuzhiyun __entry->agno = agno; 2769*4882a593Smuzhiyun __entry->agbno = agbno; 2770*4882a593Smuzhiyun __entry->dir = dir; 2771*4882a593Smuzhiyun ), 2772*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u cmp %s(%d)", 2773*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2774*4882a593Smuzhiyun __entry->agno, 2775*4882a593Smuzhiyun __entry->agbno, 2776*4882a593Smuzhiyun __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR), 2777*4882a593Smuzhiyun __entry->dir) 2778*4882a593Smuzhiyun ) 2779*4882a593Smuzhiyun 2780*4882a593Smuzhiyun #define DEFINE_AG_BTREE_LOOKUP_EVENT(name) \ 2781*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_btree_lookup_class, name, \ 2782*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2783*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_lookup_t dir), \ 2784*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, dir)) 2785*4882a593Smuzhiyun 2786*4882a593Smuzhiyun /* single-rcext tracepoint class */ 2787*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_extent_class, 2788*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2789*4882a593Smuzhiyun struct xfs_refcount_irec *irec), 2790*4882a593Smuzhiyun TP_ARGS(mp, agno, irec), 2791*4882a593Smuzhiyun TP_STRUCT__entry( 2792*4882a593Smuzhiyun __field(dev_t, dev) 2793*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2794*4882a593Smuzhiyun __field(xfs_agblock_t, startblock) 2795*4882a593Smuzhiyun __field(xfs_extlen_t, blockcount) 2796*4882a593Smuzhiyun __field(xfs_nlink_t, refcount) 2797*4882a593Smuzhiyun ), 2798*4882a593Smuzhiyun TP_fast_assign( 2799*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2800*4882a593Smuzhiyun __entry->agno = agno; 2801*4882a593Smuzhiyun __entry->startblock = irec->rc_startblock; 2802*4882a593Smuzhiyun __entry->blockcount = irec->rc_blockcount; 2803*4882a593Smuzhiyun __entry->refcount = irec->rc_refcount; 2804*4882a593Smuzhiyun ), 2805*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u", 2806*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2807*4882a593Smuzhiyun __entry->agno, 2808*4882a593Smuzhiyun __entry->startblock, 2809*4882a593Smuzhiyun __entry->blockcount, 2810*4882a593Smuzhiyun __entry->refcount) 2811*4882a593Smuzhiyun ) 2812*4882a593Smuzhiyun 2813*4882a593Smuzhiyun #define DEFINE_REFCOUNT_EXTENT_EVENT(name) \ 2814*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_extent_class, name, \ 2815*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2816*4882a593Smuzhiyun struct xfs_refcount_irec *irec), \ 2817*4882a593Smuzhiyun TP_ARGS(mp, agno, irec)) 2818*4882a593Smuzhiyun 2819*4882a593Smuzhiyun /* single-rcext and an agbno tracepoint class */ 2820*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class, 2821*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2822*4882a593Smuzhiyun struct xfs_refcount_irec *irec, xfs_agblock_t agbno), 2823*4882a593Smuzhiyun TP_ARGS(mp, agno, irec, agbno), 2824*4882a593Smuzhiyun TP_STRUCT__entry( 2825*4882a593Smuzhiyun __field(dev_t, dev) 2826*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2827*4882a593Smuzhiyun __field(xfs_agblock_t, startblock) 2828*4882a593Smuzhiyun __field(xfs_extlen_t, blockcount) 2829*4882a593Smuzhiyun __field(xfs_nlink_t, refcount) 2830*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2831*4882a593Smuzhiyun ), 2832*4882a593Smuzhiyun TP_fast_assign( 2833*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2834*4882a593Smuzhiyun __entry->agno = agno; 2835*4882a593Smuzhiyun __entry->startblock = irec->rc_startblock; 2836*4882a593Smuzhiyun __entry->blockcount = irec->rc_blockcount; 2837*4882a593Smuzhiyun __entry->refcount = irec->rc_refcount; 2838*4882a593Smuzhiyun __entry->agbno = agbno; 2839*4882a593Smuzhiyun ), 2840*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u @ agbno %u", 2841*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2842*4882a593Smuzhiyun __entry->agno, 2843*4882a593Smuzhiyun __entry->startblock, 2844*4882a593Smuzhiyun __entry->blockcount, 2845*4882a593Smuzhiyun __entry->refcount, 2846*4882a593Smuzhiyun __entry->agbno) 2847*4882a593Smuzhiyun ) 2848*4882a593Smuzhiyun 2849*4882a593Smuzhiyun #define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \ 2850*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_extent_at_class, name, \ 2851*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2852*4882a593Smuzhiyun struct xfs_refcount_irec *irec, xfs_agblock_t agbno), \ 2853*4882a593Smuzhiyun TP_ARGS(mp, agno, irec, agbno)) 2854*4882a593Smuzhiyun 2855*4882a593Smuzhiyun /* double-rcext tracepoint class */ 2856*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class, 2857*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2858*4882a593Smuzhiyun struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), 2859*4882a593Smuzhiyun TP_ARGS(mp, agno, i1, i2), 2860*4882a593Smuzhiyun TP_STRUCT__entry( 2861*4882a593Smuzhiyun __field(dev_t, dev) 2862*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2863*4882a593Smuzhiyun __field(xfs_agblock_t, i1_startblock) 2864*4882a593Smuzhiyun __field(xfs_extlen_t, i1_blockcount) 2865*4882a593Smuzhiyun __field(xfs_nlink_t, i1_refcount) 2866*4882a593Smuzhiyun __field(xfs_agblock_t, i2_startblock) 2867*4882a593Smuzhiyun __field(xfs_extlen_t, i2_blockcount) 2868*4882a593Smuzhiyun __field(xfs_nlink_t, i2_refcount) 2869*4882a593Smuzhiyun ), 2870*4882a593Smuzhiyun TP_fast_assign( 2871*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2872*4882a593Smuzhiyun __entry->agno = agno; 2873*4882a593Smuzhiyun __entry->i1_startblock = i1->rc_startblock; 2874*4882a593Smuzhiyun __entry->i1_blockcount = i1->rc_blockcount; 2875*4882a593Smuzhiyun __entry->i1_refcount = i1->rc_refcount; 2876*4882a593Smuzhiyun __entry->i2_startblock = i2->rc_startblock; 2877*4882a593Smuzhiyun __entry->i2_blockcount = i2->rc_blockcount; 2878*4882a593Smuzhiyun __entry->i2_refcount = i2->rc_refcount; 2879*4882a593Smuzhiyun ), 2880*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " 2881*4882a593Smuzhiyun "agbno %u len %u refcount %u", 2882*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2883*4882a593Smuzhiyun __entry->agno, 2884*4882a593Smuzhiyun __entry->i1_startblock, 2885*4882a593Smuzhiyun __entry->i1_blockcount, 2886*4882a593Smuzhiyun __entry->i1_refcount, 2887*4882a593Smuzhiyun __entry->i2_startblock, 2888*4882a593Smuzhiyun __entry->i2_blockcount, 2889*4882a593Smuzhiyun __entry->i2_refcount) 2890*4882a593Smuzhiyun ) 2891*4882a593Smuzhiyun 2892*4882a593Smuzhiyun #define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \ 2893*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_double_extent_class, name, \ 2894*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2895*4882a593Smuzhiyun struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), \ 2896*4882a593Smuzhiyun TP_ARGS(mp, agno, i1, i2)) 2897*4882a593Smuzhiyun 2898*4882a593Smuzhiyun /* double-rcext and an agbno tracepoint class */ 2899*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class, 2900*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2901*4882a593Smuzhiyun struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, 2902*4882a593Smuzhiyun xfs_agblock_t agbno), 2903*4882a593Smuzhiyun TP_ARGS(mp, agno, i1, i2, agbno), 2904*4882a593Smuzhiyun TP_STRUCT__entry( 2905*4882a593Smuzhiyun __field(dev_t, dev) 2906*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2907*4882a593Smuzhiyun __field(xfs_agblock_t, i1_startblock) 2908*4882a593Smuzhiyun __field(xfs_extlen_t, i1_blockcount) 2909*4882a593Smuzhiyun __field(xfs_nlink_t, i1_refcount) 2910*4882a593Smuzhiyun __field(xfs_agblock_t, i2_startblock) 2911*4882a593Smuzhiyun __field(xfs_extlen_t, i2_blockcount) 2912*4882a593Smuzhiyun __field(xfs_nlink_t, i2_refcount) 2913*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 2914*4882a593Smuzhiyun ), 2915*4882a593Smuzhiyun TP_fast_assign( 2916*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2917*4882a593Smuzhiyun __entry->agno = agno; 2918*4882a593Smuzhiyun __entry->i1_startblock = i1->rc_startblock; 2919*4882a593Smuzhiyun __entry->i1_blockcount = i1->rc_blockcount; 2920*4882a593Smuzhiyun __entry->i1_refcount = i1->rc_refcount; 2921*4882a593Smuzhiyun __entry->i2_startblock = i2->rc_startblock; 2922*4882a593Smuzhiyun __entry->i2_blockcount = i2->rc_blockcount; 2923*4882a593Smuzhiyun __entry->i2_refcount = i2->rc_refcount; 2924*4882a593Smuzhiyun __entry->agbno = agbno; 2925*4882a593Smuzhiyun ), 2926*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " 2927*4882a593Smuzhiyun "agbno %u len %u refcount %u @ agbno %u", 2928*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2929*4882a593Smuzhiyun __entry->agno, 2930*4882a593Smuzhiyun __entry->i1_startblock, 2931*4882a593Smuzhiyun __entry->i1_blockcount, 2932*4882a593Smuzhiyun __entry->i1_refcount, 2933*4882a593Smuzhiyun __entry->i2_startblock, 2934*4882a593Smuzhiyun __entry->i2_blockcount, 2935*4882a593Smuzhiyun __entry->i2_refcount, 2936*4882a593Smuzhiyun __entry->agbno) 2937*4882a593Smuzhiyun ) 2938*4882a593Smuzhiyun 2939*4882a593Smuzhiyun #define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \ 2940*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \ 2941*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2942*4882a593Smuzhiyun struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \ 2943*4882a593Smuzhiyun xfs_agblock_t agbno), \ 2944*4882a593Smuzhiyun TP_ARGS(mp, agno, i1, i2, agbno)) 2945*4882a593Smuzhiyun 2946*4882a593Smuzhiyun /* triple-rcext tracepoint class */ 2947*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class, 2948*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2949*4882a593Smuzhiyun struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, 2950*4882a593Smuzhiyun struct xfs_refcount_irec *i3), 2951*4882a593Smuzhiyun TP_ARGS(mp, agno, i1, i2, i3), 2952*4882a593Smuzhiyun TP_STRUCT__entry( 2953*4882a593Smuzhiyun __field(dev_t, dev) 2954*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 2955*4882a593Smuzhiyun __field(xfs_agblock_t, i1_startblock) 2956*4882a593Smuzhiyun __field(xfs_extlen_t, i1_blockcount) 2957*4882a593Smuzhiyun __field(xfs_nlink_t, i1_refcount) 2958*4882a593Smuzhiyun __field(xfs_agblock_t, i2_startblock) 2959*4882a593Smuzhiyun __field(xfs_extlen_t, i2_blockcount) 2960*4882a593Smuzhiyun __field(xfs_nlink_t, i2_refcount) 2961*4882a593Smuzhiyun __field(xfs_agblock_t, i3_startblock) 2962*4882a593Smuzhiyun __field(xfs_extlen_t, i3_blockcount) 2963*4882a593Smuzhiyun __field(xfs_nlink_t, i3_refcount) 2964*4882a593Smuzhiyun ), 2965*4882a593Smuzhiyun TP_fast_assign( 2966*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 2967*4882a593Smuzhiyun __entry->agno = agno; 2968*4882a593Smuzhiyun __entry->i1_startblock = i1->rc_startblock; 2969*4882a593Smuzhiyun __entry->i1_blockcount = i1->rc_blockcount; 2970*4882a593Smuzhiyun __entry->i1_refcount = i1->rc_refcount; 2971*4882a593Smuzhiyun __entry->i2_startblock = i2->rc_startblock; 2972*4882a593Smuzhiyun __entry->i2_blockcount = i2->rc_blockcount; 2973*4882a593Smuzhiyun __entry->i2_refcount = i2->rc_refcount; 2974*4882a593Smuzhiyun __entry->i3_startblock = i3->rc_startblock; 2975*4882a593Smuzhiyun __entry->i3_blockcount = i3->rc_blockcount; 2976*4882a593Smuzhiyun __entry->i3_refcount = i3->rc_refcount; 2977*4882a593Smuzhiyun ), 2978*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " 2979*4882a593Smuzhiyun "agbno %u len %u refcount %u -- " 2980*4882a593Smuzhiyun "agbno %u len %u refcount %u", 2981*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 2982*4882a593Smuzhiyun __entry->agno, 2983*4882a593Smuzhiyun __entry->i1_startblock, 2984*4882a593Smuzhiyun __entry->i1_blockcount, 2985*4882a593Smuzhiyun __entry->i1_refcount, 2986*4882a593Smuzhiyun __entry->i2_startblock, 2987*4882a593Smuzhiyun __entry->i2_blockcount, 2988*4882a593Smuzhiyun __entry->i2_refcount, 2989*4882a593Smuzhiyun __entry->i3_startblock, 2990*4882a593Smuzhiyun __entry->i3_blockcount, 2991*4882a593Smuzhiyun __entry->i3_refcount) 2992*4882a593Smuzhiyun ); 2993*4882a593Smuzhiyun 2994*4882a593Smuzhiyun #define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \ 2995*4882a593Smuzhiyun DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \ 2996*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2997*4882a593Smuzhiyun struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \ 2998*4882a593Smuzhiyun struct xfs_refcount_irec *i3), \ 2999*4882a593Smuzhiyun TP_ARGS(mp, agno, i1, i2, i3)) 3000*4882a593Smuzhiyun 3001*4882a593Smuzhiyun /* refcount btree tracepoints */ 3002*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_refcountbt_alloc_block); 3003*4882a593Smuzhiyun DEFINE_BUSY_EVENT(xfs_refcountbt_free_block); 3004*4882a593Smuzhiyun DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcount_lookup); 3005*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get); 3006*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update); 3007*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_insert); 3008*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_delete); 3009*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_insert_error); 3010*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_delete_error); 3011*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_update_error); 3012*4882a593Smuzhiyun 3013*4882a593Smuzhiyun /* refcount adjustment tracepoints */ 3014*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_increase); 3015*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_decrease); 3016*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_increase); 3017*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_decrease); 3018*4882a593Smuzhiyun DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents); 3019*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent); 3020*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_recover_extent); 3021*4882a593Smuzhiyun DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_extent); 3022*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent); 3023*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent); 3024*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent); 3025*4882a593Smuzhiyun DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent); 3026*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_error); 3027*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_cow_error); 3028*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_center_extents_error); 3029*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_modify_extent_error); 3030*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_split_extent_error); 3031*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_left_extent_error); 3032*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_right_extent_error); 3033*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_find_left_extent_error); 3034*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_find_right_extent_error); 3035*4882a593Smuzhiyun 3036*4882a593Smuzhiyun /* reflink helpers */ 3037*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared); 3038*4882a593Smuzhiyun DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared_result); 3039*4882a593Smuzhiyun DEFINE_AG_ERROR_EVENT(xfs_refcount_find_shared_error); 3040*4882a593Smuzhiyun #define DEFINE_REFCOUNT_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT 3041*4882a593Smuzhiyun DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_defer); 3042*4882a593Smuzhiyun DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_deferred); 3043*4882a593Smuzhiyun 3044*4882a593Smuzhiyun TRACE_EVENT(xfs_refcount_finish_one_leftover, 3045*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 3046*4882a593Smuzhiyun int type, xfs_agblock_t agbno, xfs_extlen_t len, 3047*4882a593Smuzhiyun xfs_agblock_t new_agbno, xfs_extlen_t new_len), 3048*4882a593Smuzhiyun TP_ARGS(mp, agno, type, agbno, len, new_agbno, new_len), 3049*4882a593Smuzhiyun TP_STRUCT__entry( 3050*4882a593Smuzhiyun __field(dev_t, dev) 3051*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3052*4882a593Smuzhiyun __field(int, type) 3053*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 3054*4882a593Smuzhiyun __field(xfs_extlen_t, len) 3055*4882a593Smuzhiyun __field(xfs_agblock_t, new_agbno) 3056*4882a593Smuzhiyun __field(xfs_extlen_t, new_len) 3057*4882a593Smuzhiyun ), 3058*4882a593Smuzhiyun TP_fast_assign( 3059*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3060*4882a593Smuzhiyun __entry->agno = agno; 3061*4882a593Smuzhiyun __entry->type = type; 3062*4882a593Smuzhiyun __entry->agbno = agbno; 3063*4882a593Smuzhiyun __entry->len = len; 3064*4882a593Smuzhiyun __entry->new_agbno = new_agbno; 3065*4882a593Smuzhiyun __entry->new_len = new_len; 3066*4882a593Smuzhiyun ), 3067*4882a593Smuzhiyun TP_printk("dev %d:%d type %d agno %u agbno %u len %u new_agbno %u new_len %u", 3068*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3069*4882a593Smuzhiyun __entry->type, 3070*4882a593Smuzhiyun __entry->agno, 3071*4882a593Smuzhiyun __entry->agbno, 3072*4882a593Smuzhiyun __entry->len, 3073*4882a593Smuzhiyun __entry->new_agbno, 3074*4882a593Smuzhiyun __entry->new_len) 3075*4882a593Smuzhiyun ); 3076*4882a593Smuzhiyun 3077*4882a593Smuzhiyun /* simple inode-based error/%ip tracepoint class */ 3078*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_error_class, 3079*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, int error, unsigned long caller_ip), 3080*4882a593Smuzhiyun TP_ARGS(ip, error, caller_ip), 3081*4882a593Smuzhiyun TP_STRUCT__entry( 3082*4882a593Smuzhiyun __field(dev_t, dev) 3083*4882a593Smuzhiyun __field(xfs_ino_t, ino) 3084*4882a593Smuzhiyun __field(int, error) 3085*4882a593Smuzhiyun __field(unsigned long, caller_ip) 3086*4882a593Smuzhiyun ), 3087*4882a593Smuzhiyun TP_fast_assign( 3088*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 3089*4882a593Smuzhiyun __entry->ino = ip->i_ino; 3090*4882a593Smuzhiyun __entry->error = error; 3091*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 3092*4882a593Smuzhiyun ), 3093*4882a593Smuzhiyun TP_printk("dev %d:%d ino %llx error %d caller %pS", 3094*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3095*4882a593Smuzhiyun __entry->ino, 3096*4882a593Smuzhiyun __entry->error, 3097*4882a593Smuzhiyun (char *)__entry->caller_ip) 3098*4882a593Smuzhiyun ); 3099*4882a593Smuzhiyun 3100*4882a593Smuzhiyun #define DEFINE_INODE_ERROR_EVENT(name) \ 3101*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_error_class, name, \ 3102*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, int error, \ 3103*4882a593Smuzhiyun unsigned long caller_ip), \ 3104*4882a593Smuzhiyun TP_ARGS(ip, error, caller_ip)) 3105*4882a593Smuzhiyun 3106*4882a593Smuzhiyun /* reflink tracepoint classes */ 3107*4882a593Smuzhiyun 3108*4882a593Smuzhiyun /* two-file io tracepoint class */ 3109*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_double_io_class, 3110*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, 3111*4882a593Smuzhiyun struct xfs_inode *dest, xfs_off_t doffset), 3112*4882a593Smuzhiyun TP_ARGS(src, soffset, len, dest, doffset), 3113*4882a593Smuzhiyun TP_STRUCT__entry( 3114*4882a593Smuzhiyun __field(dev_t, dev) 3115*4882a593Smuzhiyun __field(xfs_ino_t, src_ino) 3116*4882a593Smuzhiyun __field(loff_t, src_isize) 3117*4882a593Smuzhiyun __field(loff_t, src_disize) 3118*4882a593Smuzhiyun __field(loff_t, src_offset) 3119*4882a593Smuzhiyun __field(size_t, len) 3120*4882a593Smuzhiyun __field(xfs_ino_t, dest_ino) 3121*4882a593Smuzhiyun __field(loff_t, dest_isize) 3122*4882a593Smuzhiyun __field(loff_t, dest_disize) 3123*4882a593Smuzhiyun __field(loff_t, dest_offset) 3124*4882a593Smuzhiyun ), 3125*4882a593Smuzhiyun TP_fast_assign( 3126*4882a593Smuzhiyun __entry->dev = VFS_I(src)->i_sb->s_dev; 3127*4882a593Smuzhiyun __entry->src_ino = src->i_ino; 3128*4882a593Smuzhiyun __entry->src_isize = VFS_I(src)->i_size; 3129*4882a593Smuzhiyun __entry->src_disize = src->i_d.di_size; 3130*4882a593Smuzhiyun __entry->src_offset = soffset; 3131*4882a593Smuzhiyun __entry->len = len; 3132*4882a593Smuzhiyun __entry->dest_ino = dest->i_ino; 3133*4882a593Smuzhiyun __entry->dest_isize = VFS_I(dest)->i_size; 3134*4882a593Smuzhiyun __entry->dest_disize = dest->i_d.di_size; 3135*4882a593Smuzhiyun __entry->dest_offset = doffset; 3136*4882a593Smuzhiyun ), 3137*4882a593Smuzhiyun TP_printk("dev %d:%d count %zd " 3138*4882a593Smuzhiyun "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx -> " 3139*4882a593Smuzhiyun "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx", 3140*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3141*4882a593Smuzhiyun __entry->len, 3142*4882a593Smuzhiyun __entry->src_ino, 3143*4882a593Smuzhiyun __entry->src_isize, 3144*4882a593Smuzhiyun __entry->src_disize, 3145*4882a593Smuzhiyun __entry->src_offset, 3146*4882a593Smuzhiyun __entry->dest_ino, 3147*4882a593Smuzhiyun __entry->dest_isize, 3148*4882a593Smuzhiyun __entry->dest_disize, 3149*4882a593Smuzhiyun __entry->dest_offset) 3150*4882a593Smuzhiyun ) 3151*4882a593Smuzhiyun 3152*4882a593Smuzhiyun #define DEFINE_DOUBLE_IO_EVENT(name) \ 3153*4882a593Smuzhiyun DEFINE_EVENT(xfs_double_io_class, name, \ 3154*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \ 3155*4882a593Smuzhiyun struct xfs_inode *dest, xfs_off_t doffset), \ 3156*4882a593Smuzhiyun TP_ARGS(src, soffset, len, dest, doffset)) 3157*4882a593Smuzhiyun 3158*4882a593Smuzhiyun /* inode/irec events */ 3159*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_irec_class, 3160*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), 3161*4882a593Smuzhiyun TP_ARGS(ip, irec), 3162*4882a593Smuzhiyun TP_STRUCT__entry( 3163*4882a593Smuzhiyun __field(dev_t, dev) 3164*4882a593Smuzhiyun __field(xfs_ino_t, ino) 3165*4882a593Smuzhiyun __field(xfs_fileoff_t, lblk) 3166*4882a593Smuzhiyun __field(xfs_extlen_t, len) 3167*4882a593Smuzhiyun __field(xfs_fsblock_t, pblk) 3168*4882a593Smuzhiyun __field(int, state) 3169*4882a593Smuzhiyun ), 3170*4882a593Smuzhiyun TP_fast_assign( 3171*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 3172*4882a593Smuzhiyun __entry->ino = ip->i_ino; 3173*4882a593Smuzhiyun __entry->lblk = irec->br_startoff; 3174*4882a593Smuzhiyun __entry->len = irec->br_blockcount; 3175*4882a593Smuzhiyun __entry->pblk = irec->br_startblock; 3176*4882a593Smuzhiyun __entry->state = irec->br_state; 3177*4882a593Smuzhiyun ), 3178*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x pblk %llu st %d", 3179*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3180*4882a593Smuzhiyun __entry->ino, 3181*4882a593Smuzhiyun __entry->lblk, 3182*4882a593Smuzhiyun __entry->len, 3183*4882a593Smuzhiyun __entry->pblk, 3184*4882a593Smuzhiyun __entry->state) 3185*4882a593Smuzhiyun ); 3186*4882a593Smuzhiyun #define DEFINE_INODE_IREC_EVENT(name) \ 3187*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_irec_class, name, \ 3188*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), \ 3189*4882a593Smuzhiyun TP_ARGS(ip, irec)) 3190*4882a593Smuzhiyun 3191*4882a593Smuzhiyun /* refcount/reflink tracepoint definitions */ 3192*4882a593Smuzhiyun 3193*4882a593Smuzhiyun /* reflink tracepoints */ 3194*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag); 3195*4882a593Smuzhiyun DEFINE_INODE_EVENT(xfs_reflink_unset_inode_flag); 3196*4882a593Smuzhiyun DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size); 3197*4882a593Smuzhiyun TRACE_EVENT(xfs_reflink_remap_blocks, 3198*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *src, xfs_fileoff_t soffset, 3199*4882a593Smuzhiyun xfs_filblks_t len, struct xfs_inode *dest, 3200*4882a593Smuzhiyun xfs_fileoff_t doffset), 3201*4882a593Smuzhiyun TP_ARGS(src, soffset, len, dest, doffset), 3202*4882a593Smuzhiyun TP_STRUCT__entry( 3203*4882a593Smuzhiyun __field(dev_t, dev) 3204*4882a593Smuzhiyun __field(xfs_ino_t, src_ino) 3205*4882a593Smuzhiyun __field(xfs_fileoff_t, src_lblk) 3206*4882a593Smuzhiyun __field(xfs_filblks_t, len) 3207*4882a593Smuzhiyun __field(xfs_ino_t, dest_ino) 3208*4882a593Smuzhiyun __field(xfs_fileoff_t, dest_lblk) 3209*4882a593Smuzhiyun ), 3210*4882a593Smuzhiyun TP_fast_assign( 3211*4882a593Smuzhiyun __entry->dev = VFS_I(src)->i_sb->s_dev; 3212*4882a593Smuzhiyun __entry->src_ino = src->i_ino; 3213*4882a593Smuzhiyun __entry->src_lblk = soffset; 3214*4882a593Smuzhiyun __entry->len = len; 3215*4882a593Smuzhiyun __entry->dest_ino = dest->i_ino; 3216*4882a593Smuzhiyun __entry->dest_lblk = doffset; 3217*4882a593Smuzhiyun ), 3218*4882a593Smuzhiyun TP_printk("dev %d:%d len 0x%llx " 3219*4882a593Smuzhiyun "ino 0x%llx offset 0x%llx blocks -> " 3220*4882a593Smuzhiyun "ino 0x%llx offset 0x%llx blocks", 3221*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3222*4882a593Smuzhiyun __entry->len, 3223*4882a593Smuzhiyun __entry->src_ino, 3224*4882a593Smuzhiyun __entry->src_lblk, 3225*4882a593Smuzhiyun __entry->dest_ino, 3226*4882a593Smuzhiyun __entry->dest_lblk) 3227*4882a593Smuzhiyun ); 3228*4882a593Smuzhiyun DEFINE_DOUBLE_IO_EVENT(xfs_reflink_remap_range); 3229*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error); 3230*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error); 3231*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error); 3232*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_blocks_error); 3233*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_extent_error); 3234*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_src); 3235*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_dest); 3236*4882a593Smuzhiyun 3237*4882a593Smuzhiyun /* dedupe tracepoints */ 3238*4882a593Smuzhiyun DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents); 3239*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error); 3240*4882a593Smuzhiyun 3241*4882a593Smuzhiyun /* ioctl tracepoints */ 3242*4882a593Smuzhiyun TRACE_EVENT(xfs_ioctl_clone, 3243*4882a593Smuzhiyun TP_PROTO(struct inode *src, struct inode *dest), 3244*4882a593Smuzhiyun TP_ARGS(src, dest), 3245*4882a593Smuzhiyun TP_STRUCT__entry( 3246*4882a593Smuzhiyun __field(dev_t, dev) 3247*4882a593Smuzhiyun __field(unsigned long, src_ino) 3248*4882a593Smuzhiyun __field(loff_t, src_isize) 3249*4882a593Smuzhiyun __field(unsigned long, dest_ino) 3250*4882a593Smuzhiyun __field(loff_t, dest_isize) 3251*4882a593Smuzhiyun ), 3252*4882a593Smuzhiyun TP_fast_assign( 3253*4882a593Smuzhiyun __entry->dev = src->i_sb->s_dev; 3254*4882a593Smuzhiyun __entry->src_ino = src->i_ino; 3255*4882a593Smuzhiyun __entry->src_isize = i_size_read(src); 3256*4882a593Smuzhiyun __entry->dest_ino = dest->i_ino; 3257*4882a593Smuzhiyun __entry->dest_isize = i_size_read(dest); 3258*4882a593Smuzhiyun ), 3259*4882a593Smuzhiyun TP_printk("dev %d:%d " 3260*4882a593Smuzhiyun "ino 0x%lx isize 0x%llx -> " 3261*4882a593Smuzhiyun "ino 0x%lx isize 0x%llx", 3262*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3263*4882a593Smuzhiyun __entry->src_ino, 3264*4882a593Smuzhiyun __entry->src_isize, 3265*4882a593Smuzhiyun __entry->dest_ino, 3266*4882a593Smuzhiyun __entry->dest_isize) 3267*4882a593Smuzhiyun ); 3268*4882a593Smuzhiyun 3269*4882a593Smuzhiyun /* unshare tracepoints */ 3270*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_unshare); 3271*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_unshare_error); 3272*4882a593Smuzhiyun 3273*4882a593Smuzhiyun /* copy on write */ 3274*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_trim_around_shared); 3275*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_found); 3276*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc); 3277*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_convert_cow); 3278*4882a593Smuzhiyun 3279*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_bounce_dio_write); 3280*4882a593Smuzhiyun 3281*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_cancel_cow_range); 3282*4882a593Smuzhiyun DEFINE_SIMPLE_IO_EVENT(xfs_reflink_end_cow); 3283*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap); 3284*4882a593Smuzhiyun 3285*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_cancel_cow_range_error); 3286*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_cow_error); 3287*4882a593Smuzhiyun 3288*4882a593Smuzhiyun 3289*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_reflink_cancel_cow); 3290*4882a593Smuzhiyun 3291*4882a593Smuzhiyun /* rmap swapext tracepoints */ 3292*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap); 3293*4882a593Smuzhiyun DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap_piece); 3294*4882a593Smuzhiyun DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error); 3295*4882a593Smuzhiyun 3296*4882a593Smuzhiyun /* fsmap traces */ 3297*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_fsmap_class, 3298*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, 3299*4882a593Smuzhiyun struct xfs_rmap_irec *rmap), 3300*4882a593Smuzhiyun TP_ARGS(mp, keydev, agno, rmap), 3301*4882a593Smuzhiyun TP_STRUCT__entry( 3302*4882a593Smuzhiyun __field(dev_t, dev) 3303*4882a593Smuzhiyun __field(dev_t, keydev) 3304*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3305*4882a593Smuzhiyun __field(xfs_fsblock_t, bno) 3306*4882a593Smuzhiyun __field(xfs_filblks_t, len) 3307*4882a593Smuzhiyun __field(uint64_t, owner) 3308*4882a593Smuzhiyun __field(uint64_t, offset) 3309*4882a593Smuzhiyun __field(unsigned int, flags) 3310*4882a593Smuzhiyun ), 3311*4882a593Smuzhiyun TP_fast_assign( 3312*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3313*4882a593Smuzhiyun __entry->keydev = new_decode_dev(keydev); 3314*4882a593Smuzhiyun __entry->agno = agno; 3315*4882a593Smuzhiyun __entry->bno = rmap->rm_startblock; 3316*4882a593Smuzhiyun __entry->len = rmap->rm_blockcount; 3317*4882a593Smuzhiyun __entry->owner = rmap->rm_owner; 3318*4882a593Smuzhiyun __entry->offset = rmap->rm_offset; 3319*4882a593Smuzhiyun __entry->flags = rmap->rm_flags; 3320*4882a593Smuzhiyun ), 3321*4882a593Smuzhiyun TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld offset %llu flags 0x%x", 3322*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3323*4882a593Smuzhiyun MAJOR(__entry->keydev), MINOR(__entry->keydev), 3324*4882a593Smuzhiyun __entry->agno, 3325*4882a593Smuzhiyun __entry->bno, 3326*4882a593Smuzhiyun __entry->len, 3327*4882a593Smuzhiyun __entry->owner, 3328*4882a593Smuzhiyun __entry->offset, 3329*4882a593Smuzhiyun __entry->flags) 3330*4882a593Smuzhiyun ) 3331*4882a593Smuzhiyun #define DEFINE_FSMAP_EVENT(name) \ 3332*4882a593Smuzhiyun DEFINE_EVENT(xfs_fsmap_class, name, \ 3333*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \ 3334*4882a593Smuzhiyun struct xfs_rmap_irec *rmap), \ 3335*4882a593Smuzhiyun TP_ARGS(mp, keydev, agno, rmap)) 3336*4882a593Smuzhiyun DEFINE_FSMAP_EVENT(xfs_fsmap_low_key); 3337*4882a593Smuzhiyun DEFINE_FSMAP_EVENT(xfs_fsmap_high_key); 3338*4882a593Smuzhiyun DEFINE_FSMAP_EVENT(xfs_fsmap_mapping); 3339*4882a593Smuzhiyun 3340*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_getfsmap_class, 3341*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), 3342*4882a593Smuzhiyun TP_ARGS(mp, fsmap), 3343*4882a593Smuzhiyun TP_STRUCT__entry( 3344*4882a593Smuzhiyun __field(dev_t, dev) 3345*4882a593Smuzhiyun __field(dev_t, keydev) 3346*4882a593Smuzhiyun __field(xfs_daddr_t, block) 3347*4882a593Smuzhiyun __field(xfs_daddr_t, len) 3348*4882a593Smuzhiyun __field(uint64_t, owner) 3349*4882a593Smuzhiyun __field(uint64_t, offset) 3350*4882a593Smuzhiyun __field(uint64_t, flags) 3351*4882a593Smuzhiyun ), 3352*4882a593Smuzhiyun TP_fast_assign( 3353*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3354*4882a593Smuzhiyun __entry->keydev = new_decode_dev(fsmap->fmr_device); 3355*4882a593Smuzhiyun __entry->block = fsmap->fmr_physical; 3356*4882a593Smuzhiyun __entry->len = fsmap->fmr_length; 3357*4882a593Smuzhiyun __entry->owner = fsmap->fmr_owner; 3358*4882a593Smuzhiyun __entry->offset = fsmap->fmr_offset; 3359*4882a593Smuzhiyun __entry->flags = fsmap->fmr_flags; 3360*4882a593Smuzhiyun ), 3361*4882a593Smuzhiyun TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld offset %llu flags 0x%llx", 3362*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3363*4882a593Smuzhiyun MAJOR(__entry->keydev), MINOR(__entry->keydev), 3364*4882a593Smuzhiyun __entry->block, 3365*4882a593Smuzhiyun __entry->len, 3366*4882a593Smuzhiyun __entry->owner, 3367*4882a593Smuzhiyun __entry->offset, 3368*4882a593Smuzhiyun __entry->flags) 3369*4882a593Smuzhiyun ) 3370*4882a593Smuzhiyun #define DEFINE_GETFSMAP_EVENT(name) \ 3371*4882a593Smuzhiyun DEFINE_EVENT(xfs_getfsmap_class, name, \ 3372*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), \ 3373*4882a593Smuzhiyun TP_ARGS(mp, fsmap)) 3374*4882a593Smuzhiyun DEFINE_GETFSMAP_EVENT(xfs_getfsmap_low_key); 3375*4882a593Smuzhiyun DEFINE_GETFSMAP_EVENT(xfs_getfsmap_high_key); 3376*4882a593Smuzhiyun DEFINE_GETFSMAP_EVENT(xfs_getfsmap_mapping); 3377*4882a593Smuzhiyun 3378*4882a593Smuzhiyun TRACE_EVENT(xfs_trans_resv_calc, 3379*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, unsigned int type, 3380*4882a593Smuzhiyun struct xfs_trans_res *res), 3381*4882a593Smuzhiyun TP_ARGS(mp, type, res), 3382*4882a593Smuzhiyun TP_STRUCT__entry( 3383*4882a593Smuzhiyun __field(dev_t, dev) 3384*4882a593Smuzhiyun __field(int, type) 3385*4882a593Smuzhiyun __field(uint, logres) 3386*4882a593Smuzhiyun __field(int, logcount) 3387*4882a593Smuzhiyun __field(int, logflags) 3388*4882a593Smuzhiyun ), 3389*4882a593Smuzhiyun TP_fast_assign( 3390*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3391*4882a593Smuzhiyun __entry->type = type; 3392*4882a593Smuzhiyun __entry->logres = res->tr_logres; 3393*4882a593Smuzhiyun __entry->logcount = res->tr_logcount; 3394*4882a593Smuzhiyun __entry->logflags = res->tr_logflags; 3395*4882a593Smuzhiyun ), 3396*4882a593Smuzhiyun TP_printk("dev %d:%d type %d logres %u logcount %d flags 0x%x", 3397*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3398*4882a593Smuzhiyun __entry->type, 3399*4882a593Smuzhiyun __entry->logres, 3400*4882a593Smuzhiyun __entry->logcount, 3401*4882a593Smuzhiyun __entry->logflags) 3402*4882a593Smuzhiyun ); 3403*4882a593Smuzhiyun 3404*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_trans_class, 3405*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), 3406*4882a593Smuzhiyun TP_ARGS(tp, caller_ip), 3407*4882a593Smuzhiyun TP_STRUCT__entry( 3408*4882a593Smuzhiyun __field(dev_t, dev) 3409*4882a593Smuzhiyun __field(uint32_t, tid) 3410*4882a593Smuzhiyun __field(uint32_t, flags) 3411*4882a593Smuzhiyun __field(unsigned long, caller_ip) 3412*4882a593Smuzhiyun ), 3413*4882a593Smuzhiyun TP_fast_assign( 3414*4882a593Smuzhiyun __entry->dev = tp->t_mountp->m_super->s_dev; 3415*4882a593Smuzhiyun __entry->tid = 0; 3416*4882a593Smuzhiyun if (tp->t_ticket) 3417*4882a593Smuzhiyun __entry->tid = tp->t_ticket->t_tid; 3418*4882a593Smuzhiyun __entry->flags = tp->t_flags; 3419*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 3420*4882a593Smuzhiyun ), 3421*4882a593Smuzhiyun TP_printk("dev %d:%d trans %x flags 0x%x caller %pS", 3422*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3423*4882a593Smuzhiyun __entry->tid, 3424*4882a593Smuzhiyun __entry->flags, 3425*4882a593Smuzhiyun (char *)__entry->caller_ip) 3426*4882a593Smuzhiyun ) 3427*4882a593Smuzhiyun 3428*4882a593Smuzhiyun #define DEFINE_TRANS_EVENT(name) \ 3429*4882a593Smuzhiyun DEFINE_EVENT(xfs_trans_class, name, \ 3430*4882a593Smuzhiyun TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \ 3431*4882a593Smuzhiyun TP_ARGS(tp, caller_ip)) 3432*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_alloc); 3433*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_cancel); 3434*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_commit); 3435*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_dup); 3436*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_free); 3437*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_roll); 3438*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_add_item); 3439*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_commit_items); 3440*4882a593Smuzhiyun DEFINE_TRANS_EVENT(xfs_trans_free_items); 3441*4882a593Smuzhiyun 3442*4882a593Smuzhiyun TRACE_EVENT(xfs_iunlink_update_bucket, 3443*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int bucket, 3444*4882a593Smuzhiyun xfs_agino_t old_ptr, xfs_agino_t new_ptr), 3445*4882a593Smuzhiyun TP_ARGS(mp, agno, bucket, old_ptr, new_ptr), 3446*4882a593Smuzhiyun TP_STRUCT__entry( 3447*4882a593Smuzhiyun __field(dev_t, dev) 3448*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3449*4882a593Smuzhiyun __field(unsigned int, bucket) 3450*4882a593Smuzhiyun __field(xfs_agino_t, old_ptr) 3451*4882a593Smuzhiyun __field(xfs_agino_t, new_ptr) 3452*4882a593Smuzhiyun ), 3453*4882a593Smuzhiyun TP_fast_assign( 3454*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3455*4882a593Smuzhiyun __entry->agno = agno; 3456*4882a593Smuzhiyun __entry->bucket = bucket; 3457*4882a593Smuzhiyun __entry->old_ptr = old_ptr; 3458*4882a593Smuzhiyun __entry->new_ptr = new_ptr; 3459*4882a593Smuzhiyun ), 3460*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u bucket %u old 0x%x new 0x%x", 3461*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3462*4882a593Smuzhiyun __entry->agno, 3463*4882a593Smuzhiyun __entry->bucket, 3464*4882a593Smuzhiyun __entry->old_ptr, 3465*4882a593Smuzhiyun __entry->new_ptr) 3466*4882a593Smuzhiyun ); 3467*4882a593Smuzhiyun 3468*4882a593Smuzhiyun TRACE_EVENT(xfs_iunlink_update_dinode, 3469*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino, 3470*4882a593Smuzhiyun xfs_agino_t old_ptr, xfs_agino_t new_ptr), 3471*4882a593Smuzhiyun TP_ARGS(mp, agno, agino, old_ptr, new_ptr), 3472*4882a593Smuzhiyun TP_STRUCT__entry( 3473*4882a593Smuzhiyun __field(dev_t, dev) 3474*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3475*4882a593Smuzhiyun __field(xfs_agino_t, agino) 3476*4882a593Smuzhiyun __field(xfs_agino_t, old_ptr) 3477*4882a593Smuzhiyun __field(xfs_agino_t, new_ptr) 3478*4882a593Smuzhiyun ), 3479*4882a593Smuzhiyun TP_fast_assign( 3480*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3481*4882a593Smuzhiyun __entry->agno = agno; 3482*4882a593Smuzhiyun __entry->agino = agino; 3483*4882a593Smuzhiyun __entry->old_ptr = old_ptr; 3484*4882a593Smuzhiyun __entry->new_ptr = new_ptr; 3485*4882a593Smuzhiyun ), 3486*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agino 0x%x old 0x%x new 0x%x", 3487*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3488*4882a593Smuzhiyun __entry->agno, 3489*4882a593Smuzhiyun __entry->agino, 3490*4882a593Smuzhiyun __entry->old_ptr, 3491*4882a593Smuzhiyun __entry->new_ptr) 3492*4882a593Smuzhiyun ); 3493*4882a593Smuzhiyun 3494*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_inode_class, 3495*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip), 3496*4882a593Smuzhiyun TP_ARGS(ip), 3497*4882a593Smuzhiyun TP_STRUCT__entry( 3498*4882a593Smuzhiyun __field(dev_t, dev) 3499*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3500*4882a593Smuzhiyun __field(xfs_agino_t, agino) 3501*4882a593Smuzhiyun ), 3502*4882a593Smuzhiyun TP_fast_assign( 3503*4882a593Smuzhiyun __entry->dev = VFS_I(ip)->i_sb->s_dev; 3504*4882a593Smuzhiyun __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino); 3505*4882a593Smuzhiyun __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); 3506*4882a593Smuzhiyun ), 3507*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agino %u", 3508*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3509*4882a593Smuzhiyun __entry->agno, __entry->agino) 3510*4882a593Smuzhiyun ) 3511*4882a593Smuzhiyun 3512*4882a593Smuzhiyun #define DEFINE_AGINODE_EVENT(name) \ 3513*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_inode_class, name, \ 3514*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip), \ 3515*4882a593Smuzhiyun TP_ARGS(ip)) 3516*4882a593Smuzhiyun DEFINE_AGINODE_EVENT(xfs_iunlink); 3517*4882a593Smuzhiyun DEFINE_AGINODE_EVENT(xfs_iunlink_remove); 3518*4882a593Smuzhiyun DEFINE_AG_EVENT(xfs_iunlink_map_prev_fallback); 3519*4882a593Smuzhiyun 3520*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_fs_corrupt_class, 3521*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, unsigned int flags), 3522*4882a593Smuzhiyun TP_ARGS(mp, flags), 3523*4882a593Smuzhiyun TP_STRUCT__entry( 3524*4882a593Smuzhiyun __field(dev_t, dev) 3525*4882a593Smuzhiyun __field(unsigned int, flags) 3526*4882a593Smuzhiyun ), 3527*4882a593Smuzhiyun TP_fast_assign( 3528*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3529*4882a593Smuzhiyun __entry->flags = flags; 3530*4882a593Smuzhiyun ), 3531*4882a593Smuzhiyun TP_printk("dev %d:%d flags 0x%x", 3532*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3533*4882a593Smuzhiyun __entry->flags) 3534*4882a593Smuzhiyun ); 3535*4882a593Smuzhiyun #define DEFINE_FS_CORRUPT_EVENT(name) \ 3536*4882a593Smuzhiyun DEFINE_EVENT(xfs_fs_corrupt_class, name, \ 3537*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, unsigned int flags), \ 3538*4882a593Smuzhiyun TP_ARGS(mp, flags)) 3539*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_sick); 3540*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_healthy); 3541*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_fs_unfixed_corruption); 3542*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_sick); 3543*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_healthy); 3544*4882a593Smuzhiyun DEFINE_FS_CORRUPT_EVENT(xfs_rt_unfixed_corruption); 3545*4882a593Smuzhiyun 3546*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_ag_corrupt_class, 3547*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int flags), 3548*4882a593Smuzhiyun TP_ARGS(mp, agno, flags), 3549*4882a593Smuzhiyun TP_STRUCT__entry( 3550*4882a593Smuzhiyun __field(dev_t, dev) 3551*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3552*4882a593Smuzhiyun __field(unsigned int, flags) 3553*4882a593Smuzhiyun ), 3554*4882a593Smuzhiyun TP_fast_assign( 3555*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3556*4882a593Smuzhiyun __entry->agno = agno; 3557*4882a593Smuzhiyun __entry->flags = flags; 3558*4882a593Smuzhiyun ), 3559*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u flags 0x%x", 3560*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3561*4882a593Smuzhiyun __entry->agno, __entry->flags) 3562*4882a593Smuzhiyun ); 3563*4882a593Smuzhiyun #define DEFINE_AG_CORRUPT_EVENT(name) \ 3564*4882a593Smuzhiyun DEFINE_EVENT(xfs_ag_corrupt_class, name, \ 3565*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 3566*4882a593Smuzhiyun unsigned int flags), \ 3567*4882a593Smuzhiyun TP_ARGS(mp, agno, flags)) 3568*4882a593Smuzhiyun DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_sick); 3569*4882a593Smuzhiyun DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_healthy); 3570*4882a593Smuzhiyun DEFINE_AG_CORRUPT_EVENT(xfs_ag_unfixed_corruption); 3571*4882a593Smuzhiyun 3572*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_inode_corrupt_class, 3573*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, unsigned int flags), 3574*4882a593Smuzhiyun TP_ARGS(ip, flags), 3575*4882a593Smuzhiyun TP_STRUCT__entry( 3576*4882a593Smuzhiyun __field(dev_t, dev) 3577*4882a593Smuzhiyun __field(xfs_ino_t, ino) 3578*4882a593Smuzhiyun __field(unsigned int, flags) 3579*4882a593Smuzhiyun ), 3580*4882a593Smuzhiyun TP_fast_assign( 3581*4882a593Smuzhiyun __entry->dev = ip->i_mount->m_super->s_dev; 3582*4882a593Smuzhiyun __entry->ino = ip->i_ino; 3583*4882a593Smuzhiyun __entry->flags = flags; 3584*4882a593Smuzhiyun ), 3585*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx flags 0x%x", 3586*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3587*4882a593Smuzhiyun __entry->ino, __entry->flags) 3588*4882a593Smuzhiyun ); 3589*4882a593Smuzhiyun #define DEFINE_INODE_CORRUPT_EVENT(name) \ 3590*4882a593Smuzhiyun DEFINE_EVENT(xfs_inode_corrupt_class, name, \ 3591*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, unsigned int flags), \ 3592*4882a593Smuzhiyun TP_ARGS(ip, flags)) 3593*4882a593Smuzhiyun DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_sick); 3594*4882a593Smuzhiyun DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_healthy); 3595*4882a593Smuzhiyun 3596*4882a593Smuzhiyun TRACE_EVENT(xfs_iwalk_ag, 3597*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 3598*4882a593Smuzhiyun xfs_agino_t startino), 3599*4882a593Smuzhiyun TP_ARGS(mp, agno, startino), 3600*4882a593Smuzhiyun TP_STRUCT__entry( 3601*4882a593Smuzhiyun __field(dev_t, dev) 3602*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3603*4882a593Smuzhiyun __field(xfs_agino_t, startino) 3604*4882a593Smuzhiyun ), 3605*4882a593Smuzhiyun TP_fast_assign( 3606*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3607*4882a593Smuzhiyun __entry->agno = agno; 3608*4882a593Smuzhiyun __entry->startino = startino; 3609*4882a593Smuzhiyun ), 3610*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d startino %u", 3611*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, 3612*4882a593Smuzhiyun __entry->startino) 3613*4882a593Smuzhiyun ) 3614*4882a593Smuzhiyun 3615*4882a593Smuzhiyun TRACE_EVENT(xfs_iwalk_ag_rec, 3616*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 3617*4882a593Smuzhiyun struct xfs_inobt_rec_incore *irec), 3618*4882a593Smuzhiyun TP_ARGS(mp, agno, irec), 3619*4882a593Smuzhiyun TP_STRUCT__entry( 3620*4882a593Smuzhiyun __field(dev_t, dev) 3621*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3622*4882a593Smuzhiyun __field(xfs_agino_t, startino) 3623*4882a593Smuzhiyun __field(uint64_t, freemask) 3624*4882a593Smuzhiyun ), 3625*4882a593Smuzhiyun TP_fast_assign( 3626*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3627*4882a593Smuzhiyun __entry->agno = agno; 3628*4882a593Smuzhiyun __entry->startino = irec->ir_startino; 3629*4882a593Smuzhiyun __entry->freemask = irec->ir_free; 3630*4882a593Smuzhiyun ), 3631*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d startino %u freemask 0x%llx", 3632*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, 3633*4882a593Smuzhiyun __entry->startino, __entry->freemask) 3634*4882a593Smuzhiyun ) 3635*4882a593Smuzhiyun 3636*4882a593Smuzhiyun TRACE_EVENT(xfs_pwork_init, 3637*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, unsigned int nr_threads, pid_t pid), 3638*4882a593Smuzhiyun TP_ARGS(mp, nr_threads, pid), 3639*4882a593Smuzhiyun TP_STRUCT__entry( 3640*4882a593Smuzhiyun __field(dev_t, dev) 3641*4882a593Smuzhiyun __field(unsigned int, nr_threads) 3642*4882a593Smuzhiyun __field(pid_t, pid) 3643*4882a593Smuzhiyun ), 3644*4882a593Smuzhiyun TP_fast_assign( 3645*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3646*4882a593Smuzhiyun __entry->nr_threads = nr_threads; 3647*4882a593Smuzhiyun __entry->pid = pid; 3648*4882a593Smuzhiyun ), 3649*4882a593Smuzhiyun TP_printk("dev %d:%d nr_threads %u pid %u", 3650*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3651*4882a593Smuzhiyun __entry->nr_threads, __entry->pid) 3652*4882a593Smuzhiyun ) 3653*4882a593Smuzhiyun 3654*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_kmem_class, 3655*4882a593Smuzhiyun TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), 3656*4882a593Smuzhiyun TP_ARGS(size, flags, caller_ip), 3657*4882a593Smuzhiyun TP_STRUCT__entry( 3658*4882a593Smuzhiyun __field(ssize_t, size) 3659*4882a593Smuzhiyun __field(int, flags) 3660*4882a593Smuzhiyun __field(unsigned long, caller_ip) 3661*4882a593Smuzhiyun ), 3662*4882a593Smuzhiyun TP_fast_assign( 3663*4882a593Smuzhiyun __entry->size = size; 3664*4882a593Smuzhiyun __entry->flags = flags; 3665*4882a593Smuzhiyun __entry->caller_ip = caller_ip; 3666*4882a593Smuzhiyun ), 3667*4882a593Smuzhiyun TP_printk("size %zd flags 0x%x caller %pS", 3668*4882a593Smuzhiyun __entry->size, 3669*4882a593Smuzhiyun __entry->flags, 3670*4882a593Smuzhiyun (char *)__entry->caller_ip) 3671*4882a593Smuzhiyun ) 3672*4882a593Smuzhiyun 3673*4882a593Smuzhiyun #define DEFINE_KMEM_EVENT(name) \ 3674*4882a593Smuzhiyun DEFINE_EVENT(xfs_kmem_class, name, \ 3675*4882a593Smuzhiyun TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), \ 3676*4882a593Smuzhiyun TP_ARGS(size, flags, caller_ip)) 3677*4882a593Smuzhiyun DEFINE_KMEM_EVENT(kmem_alloc); 3678*4882a593Smuzhiyun DEFINE_KMEM_EVENT(kmem_alloc_io); 3679*4882a593Smuzhiyun DEFINE_KMEM_EVENT(kmem_alloc_large); 3680*4882a593Smuzhiyun 3681*4882a593Smuzhiyun TRACE_EVENT(xfs_check_new_dalign, 3682*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, int new_dalign, xfs_ino_t calc_rootino), 3683*4882a593Smuzhiyun TP_ARGS(mp, new_dalign, calc_rootino), 3684*4882a593Smuzhiyun TP_STRUCT__entry( 3685*4882a593Smuzhiyun __field(dev_t, dev) 3686*4882a593Smuzhiyun __field(int, new_dalign) 3687*4882a593Smuzhiyun __field(xfs_ino_t, sb_rootino) 3688*4882a593Smuzhiyun __field(xfs_ino_t, calc_rootino) 3689*4882a593Smuzhiyun ), 3690*4882a593Smuzhiyun TP_fast_assign( 3691*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3692*4882a593Smuzhiyun __entry->new_dalign = new_dalign; 3693*4882a593Smuzhiyun __entry->sb_rootino = mp->m_sb.sb_rootino; 3694*4882a593Smuzhiyun __entry->calc_rootino = calc_rootino; 3695*4882a593Smuzhiyun ), 3696*4882a593Smuzhiyun TP_printk("dev %d:%d new_dalign %d sb_rootino %llu calc_rootino %llu", 3697*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3698*4882a593Smuzhiyun __entry->new_dalign, __entry->sb_rootino, 3699*4882a593Smuzhiyun __entry->calc_rootino) 3700*4882a593Smuzhiyun ) 3701*4882a593Smuzhiyun 3702*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_commit_afakeroot, 3703*4882a593Smuzhiyun TP_PROTO(struct xfs_btree_cur *cur), 3704*4882a593Smuzhiyun TP_ARGS(cur), 3705*4882a593Smuzhiyun TP_STRUCT__entry( 3706*4882a593Smuzhiyun __field(dev_t, dev) 3707*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 3708*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3709*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 3710*4882a593Smuzhiyun __field(unsigned int, levels) 3711*4882a593Smuzhiyun __field(unsigned int, blocks) 3712*4882a593Smuzhiyun ), 3713*4882a593Smuzhiyun TP_fast_assign( 3714*4882a593Smuzhiyun __entry->dev = cur->bc_mp->m_super->s_dev; 3715*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 3716*4882a593Smuzhiyun __entry->agno = cur->bc_ag.agno; 3717*4882a593Smuzhiyun __entry->agbno = cur->bc_ag.afake->af_root; 3718*4882a593Smuzhiyun __entry->levels = cur->bc_ag.afake->af_levels; 3719*4882a593Smuzhiyun __entry->blocks = cur->bc_ag.afake->af_blocks; 3720*4882a593Smuzhiyun ), 3721*4882a593Smuzhiyun TP_printk("dev %d:%d btree %s ag %u levels %u blocks %u root %u", 3722*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3723*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3724*4882a593Smuzhiyun __entry->agno, 3725*4882a593Smuzhiyun __entry->levels, 3726*4882a593Smuzhiyun __entry->blocks, 3727*4882a593Smuzhiyun __entry->agbno) 3728*4882a593Smuzhiyun ) 3729*4882a593Smuzhiyun 3730*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_commit_ifakeroot, 3731*4882a593Smuzhiyun TP_PROTO(struct xfs_btree_cur *cur), 3732*4882a593Smuzhiyun TP_ARGS(cur), 3733*4882a593Smuzhiyun TP_STRUCT__entry( 3734*4882a593Smuzhiyun __field(dev_t, dev) 3735*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 3736*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3737*4882a593Smuzhiyun __field(xfs_agino_t, agino) 3738*4882a593Smuzhiyun __field(unsigned int, levels) 3739*4882a593Smuzhiyun __field(unsigned int, blocks) 3740*4882a593Smuzhiyun __field(int, whichfork) 3741*4882a593Smuzhiyun ), 3742*4882a593Smuzhiyun TP_fast_assign( 3743*4882a593Smuzhiyun __entry->dev = cur->bc_mp->m_super->s_dev; 3744*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 3745*4882a593Smuzhiyun __entry->agno = XFS_INO_TO_AGNO(cur->bc_mp, 3746*4882a593Smuzhiyun cur->bc_ino.ip->i_ino); 3747*4882a593Smuzhiyun __entry->agino = XFS_INO_TO_AGINO(cur->bc_mp, 3748*4882a593Smuzhiyun cur->bc_ino.ip->i_ino); 3749*4882a593Smuzhiyun __entry->levels = cur->bc_ino.ifake->if_levels; 3750*4882a593Smuzhiyun __entry->blocks = cur->bc_ino.ifake->if_blocks; 3751*4882a593Smuzhiyun __entry->whichfork = cur->bc_ino.whichfork; 3752*4882a593Smuzhiyun ), 3753*4882a593Smuzhiyun TP_printk("dev %d:%d btree %s ag %u agino %u whichfork %s levels %u blocks %u", 3754*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3755*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3756*4882a593Smuzhiyun __entry->agno, 3757*4882a593Smuzhiyun __entry->agino, 3758*4882a593Smuzhiyun __entry->whichfork == XFS_ATTR_FORK ? "attr" : "data", 3759*4882a593Smuzhiyun __entry->levels, 3760*4882a593Smuzhiyun __entry->blocks) 3761*4882a593Smuzhiyun ) 3762*4882a593Smuzhiyun 3763*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_bload_level_geometry, 3764*4882a593Smuzhiyun TP_PROTO(struct xfs_btree_cur *cur, unsigned int level, 3765*4882a593Smuzhiyun uint64_t nr_this_level, unsigned int nr_per_block, 3766*4882a593Smuzhiyun unsigned int desired_npb, uint64_t blocks, 3767*4882a593Smuzhiyun uint64_t blocks_with_extra), 3768*4882a593Smuzhiyun TP_ARGS(cur, level, nr_this_level, nr_per_block, desired_npb, blocks, 3769*4882a593Smuzhiyun blocks_with_extra), 3770*4882a593Smuzhiyun TP_STRUCT__entry( 3771*4882a593Smuzhiyun __field(dev_t, dev) 3772*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 3773*4882a593Smuzhiyun __field(unsigned int, level) 3774*4882a593Smuzhiyun __field(unsigned int, nlevels) 3775*4882a593Smuzhiyun __field(uint64_t, nr_this_level) 3776*4882a593Smuzhiyun __field(unsigned int, nr_per_block) 3777*4882a593Smuzhiyun __field(unsigned int, desired_npb) 3778*4882a593Smuzhiyun __field(unsigned long long, blocks) 3779*4882a593Smuzhiyun __field(unsigned long long, blocks_with_extra) 3780*4882a593Smuzhiyun ), 3781*4882a593Smuzhiyun TP_fast_assign( 3782*4882a593Smuzhiyun __entry->dev = cur->bc_mp->m_super->s_dev; 3783*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 3784*4882a593Smuzhiyun __entry->level = level; 3785*4882a593Smuzhiyun __entry->nlevels = cur->bc_nlevels; 3786*4882a593Smuzhiyun __entry->nr_this_level = nr_this_level; 3787*4882a593Smuzhiyun __entry->nr_per_block = nr_per_block; 3788*4882a593Smuzhiyun __entry->desired_npb = desired_npb; 3789*4882a593Smuzhiyun __entry->blocks = blocks; 3790*4882a593Smuzhiyun __entry->blocks_with_extra = blocks_with_extra; 3791*4882a593Smuzhiyun ), 3792*4882a593Smuzhiyun TP_printk("dev %d:%d btree %s level %u/%u nr_this_level %llu nr_per_block %u desired_npb %u blocks %llu blocks_with_extra %llu", 3793*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3794*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3795*4882a593Smuzhiyun __entry->level, 3796*4882a593Smuzhiyun __entry->nlevels, 3797*4882a593Smuzhiyun __entry->nr_this_level, 3798*4882a593Smuzhiyun __entry->nr_per_block, 3799*4882a593Smuzhiyun __entry->desired_npb, 3800*4882a593Smuzhiyun __entry->blocks, 3801*4882a593Smuzhiyun __entry->blocks_with_extra) 3802*4882a593Smuzhiyun ) 3803*4882a593Smuzhiyun 3804*4882a593Smuzhiyun TRACE_EVENT(xfs_btree_bload_block, 3805*4882a593Smuzhiyun TP_PROTO(struct xfs_btree_cur *cur, unsigned int level, 3806*4882a593Smuzhiyun uint64_t block_idx, uint64_t nr_blocks, 3807*4882a593Smuzhiyun union xfs_btree_ptr *ptr, unsigned int nr_records), 3808*4882a593Smuzhiyun TP_ARGS(cur, level, block_idx, nr_blocks, ptr, nr_records), 3809*4882a593Smuzhiyun TP_STRUCT__entry( 3810*4882a593Smuzhiyun __field(dev_t, dev) 3811*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 3812*4882a593Smuzhiyun __field(unsigned int, level) 3813*4882a593Smuzhiyun __field(unsigned long long, block_idx) 3814*4882a593Smuzhiyun __field(unsigned long long, nr_blocks) 3815*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 3816*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 3817*4882a593Smuzhiyun __field(unsigned int, nr_records) 3818*4882a593Smuzhiyun ), 3819*4882a593Smuzhiyun TP_fast_assign( 3820*4882a593Smuzhiyun __entry->dev = cur->bc_mp->m_super->s_dev; 3821*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 3822*4882a593Smuzhiyun __entry->level = level; 3823*4882a593Smuzhiyun __entry->block_idx = block_idx; 3824*4882a593Smuzhiyun __entry->nr_blocks = nr_blocks; 3825*4882a593Smuzhiyun if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { 3826*4882a593Smuzhiyun xfs_fsblock_t fsb = be64_to_cpu(ptr->l); 3827*4882a593Smuzhiyun 3828*4882a593Smuzhiyun __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsb); 3829*4882a593Smuzhiyun __entry->agbno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsb); 3830*4882a593Smuzhiyun } else { 3831*4882a593Smuzhiyun __entry->agno = cur->bc_ag.agno; 3832*4882a593Smuzhiyun __entry->agbno = be32_to_cpu(ptr->s); 3833*4882a593Smuzhiyun } 3834*4882a593Smuzhiyun __entry->nr_records = nr_records; 3835*4882a593Smuzhiyun ), 3836*4882a593Smuzhiyun TP_printk("dev %d:%d btree %s level %u block %llu/%llu fsb (%u/%u) recs %u", 3837*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3838*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3839*4882a593Smuzhiyun __entry->level, 3840*4882a593Smuzhiyun __entry->block_idx, 3841*4882a593Smuzhiyun __entry->nr_blocks, 3842*4882a593Smuzhiyun __entry->agno, 3843*4882a593Smuzhiyun __entry->agbno, 3844*4882a593Smuzhiyun __entry->nr_records) 3845*4882a593Smuzhiyun ) 3846*4882a593Smuzhiyun 3847*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xfs_timestamp_range_class, 3848*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, time64_t min, time64_t max), 3849*4882a593Smuzhiyun TP_ARGS(mp, min, max), 3850*4882a593Smuzhiyun TP_STRUCT__entry( 3851*4882a593Smuzhiyun __field(dev_t, dev) 3852*4882a593Smuzhiyun __field(long long, min) 3853*4882a593Smuzhiyun __field(long long, max) 3854*4882a593Smuzhiyun ), 3855*4882a593Smuzhiyun TP_fast_assign( 3856*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 3857*4882a593Smuzhiyun __entry->min = min; 3858*4882a593Smuzhiyun __entry->max = max; 3859*4882a593Smuzhiyun ), 3860*4882a593Smuzhiyun TP_printk("dev %d:%d min %lld max %lld", 3861*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 3862*4882a593Smuzhiyun __entry->min, 3863*4882a593Smuzhiyun __entry->max) 3864*4882a593Smuzhiyun ) 3865*4882a593Smuzhiyun 3866*4882a593Smuzhiyun #define DEFINE_TIMESTAMP_RANGE_EVENT(name) \ 3867*4882a593Smuzhiyun DEFINE_EVENT(xfs_timestamp_range_class, name, \ 3868*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, long long min, long long max), \ 3869*4882a593Smuzhiyun TP_ARGS(mp, min, max)) 3870*4882a593Smuzhiyun DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range); 3871*4882a593Smuzhiyun DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range); 3872*4882a593Smuzhiyun 3873*4882a593Smuzhiyun #endif /* _TRACE_XFS_H */ 3874*4882a593Smuzhiyun 3875*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 3876*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 3877*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE xfs_trace 3878*4882a593Smuzhiyun #include <trace/define_trace.h> 3879