1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0+ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2017 Oracle. All Rights Reserved. 4*4882a593Smuzhiyun * Author: Darrick J. Wong <darrick.wong@oracle.com> 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #undef TRACE_SYSTEM 7*4882a593Smuzhiyun #define TRACE_SYSTEM xfs_scrub 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 10*4882a593Smuzhiyun #define _TRACE_XFS_SCRUB_TRACE_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <linux/tracepoint.h> 13*4882a593Smuzhiyun #include "xfs_bit.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * ftrace's __print_symbolic requires that all enum values be wrapped in the 17*4882a593Smuzhiyun * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace 18*4882a593Smuzhiyun * ring buffer. Somehow this was only worth mentioning in the ftrace sample 19*4882a593Smuzhiyun * code. 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi); 22*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi); 23*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi); 24*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_INOi); 25*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi); 26*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi); 27*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE); 30*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB); 31*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF); 32*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL); 33*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI); 34*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT); 35*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT); 36*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT); 37*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT); 38*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT); 39*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT); 40*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE); 41*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD); 42*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA); 43*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC); 44*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR); 45*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR); 46*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK); 47*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT); 48*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP); 49*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM); 50*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA); 51*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA); 52*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA); 53*4882a593Smuzhiyun TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS); 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #define XFS_SCRUB_TYPE_STRINGS \ 56*4882a593Smuzhiyun { XFS_SCRUB_TYPE_PROBE, "probe" }, \ 57*4882a593Smuzhiyun { XFS_SCRUB_TYPE_SB, "sb" }, \ 58*4882a593Smuzhiyun { XFS_SCRUB_TYPE_AGF, "agf" }, \ 59*4882a593Smuzhiyun { XFS_SCRUB_TYPE_AGFL, "agfl" }, \ 60*4882a593Smuzhiyun { XFS_SCRUB_TYPE_AGI, "agi" }, \ 61*4882a593Smuzhiyun { XFS_SCRUB_TYPE_BNOBT, "bnobt" }, \ 62*4882a593Smuzhiyun { XFS_SCRUB_TYPE_CNTBT, "cntbt" }, \ 63*4882a593Smuzhiyun { XFS_SCRUB_TYPE_INOBT, "inobt" }, \ 64*4882a593Smuzhiyun { XFS_SCRUB_TYPE_FINOBT, "finobt" }, \ 65*4882a593Smuzhiyun { XFS_SCRUB_TYPE_RMAPBT, "rmapbt" }, \ 66*4882a593Smuzhiyun { XFS_SCRUB_TYPE_REFCNTBT, "refcountbt" }, \ 67*4882a593Smuzhiyun { XFS_SCRUB_TYPE_INODE, "inode" }, \ 68*4882a593Smuzhiyun { XFS_SCRUB_TYPE_BMBTD, "bmapbtd" }, \ 69*4882a593Smuzhiyun { XFS_SCRUB_TYPE_BMBTA, "bmapbta" }, \ 70*4882a593Smuzhiyun { XFS_SCRUB_TYPE_BMBTC, "bmapbtc" }, \ 71*4882a593Smuzhiyun { XFS_SCRUB_TYPE_DIR, "directory" }, \ 72*4882a593Smuzhiyun { XFS_SCRUB_TYPE_XATTR, "xattr" }, \ 73*4882a593Smuzhiyun { XFS_SCRUB_TYPE_SYMLINK, "symlink" }, \ 74*4882a593Smuzhiyun { XFS_SCRUB_TYPE_PARENT, "parent" }, \ 75*4882a593Smuzhiyun { XFS_SCRUB_TYPE_RTBITMAP, "rtbitmap" }, \ 76*4882a593Smuzhiyun { XFS_SCRUB_TYPE_RTSUM, "rtsummary" }, \ 77*4882a593Smuzhiyun { XFS_SCRUB_TYPE_UQUOTA, "usrquota" }, \ 78*4882a593Smuzhiyun { XFS_SCRUB_TYPE_GQUOTA, "grpquota" }, \ 79*4882a593Smuzhiyun { XFS_SCRUB_TYPE_PQUOTA, "prjquota" }, \ 80*4882a593Smuzhiyun { XFS_SCRUB_TYPE_FSCOUNTERS, "fscounters" } 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xchk_class, 83*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, 84*4882a593Smuzhiyun int error), 85*4882a593Smuzhiyun TP_ARGS(ip, sm, error), 86*4882a593Smuzhiyun TP_STRUCT__entry( 87*4882a593Smuzhiyun __field(dev_t, dev) 88*4882a593Smuzhiyun __field(xfs_ino_t, ino) 89*4882a593Smuzhiyun __field(unsigned int, type) 90*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 91*4882a593Smuzhiyun __field(xfs_ino_t, inum) 92*4882a593Smuzhiyun __field(unsigned int, gen) 93*4882a593Smuzhiyun __field(unsigned int, flags) 94*4882a593Smuzhiyun __field(int, error) 95*4882a593Smuzhiyun ), 96*4882a593Smuzhiyun TP_fast_assign( 97*4882a593Smuzhiyun __entry->dev = ip->i_mount->m_super->s_dev; 98*4882a593Smuzhiyun __entry->ino = ip->i_ino; 99*4882a593Smuzhiyun __entry->type = sm->sm_type; 100*4882a593Smuzhiyun __entry->agno = sm->sm_agno; 101*4882a593Smuzhiyun __entry->inum = sm->sm_ino; 102*4882a593Smuzhiyun __entry->gen = sm->sm_gen; 103*4882a593Smuzhiyun __entry->flags = sm->sm_flags; 104*4882a593Smuzhiyun __entry->error = error; 105*4882a593Smuzhiyun ), 106*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx type %s agno %u inum %llu gen %u flags 0x%x error %d", 107*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 108*4882a593Smuzhiyun __entry->ino, 109*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 110*4882a593Smuzhiyun __entry->agno, 111*4882a593Smuzhiyun __entry->inum, 112*4882a593Smuzhiyun __entry->gen, 113*4882a593Smuzhiyun __entry->flags, 114*4882a593Smuzhiyun __entry->error) 115*4882a593Smuzhiyun ) 116*4882a593Smuzhiyun #define DEFINE_SCRUB_EVENT(name) \ 117*4882a593Smuzhiyun DEFINE_EVENT(xchk_class, name, \ 118*4882a593Smuzhiyun TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \ 119*4882a593Smuzhiyun int error), \ 120*4882a593Smuzhiyun TP_ARGS(ip, sm, error)) 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun DEFINE_SCRUB_EVENT(xchk_start); 123*4882a593Smuzhiyun DEFINE_SCRUB_EVENT(xchk_done); 124*4882a593Smuzhiyun DEFINE_SCRUB_EVENT(xchk_deadlock_retry); 125*4882a593Smuzhiyun DEFINE_SCRUB_EVENT(xrep_attempt); 126*4882a593Smuzhiyun DEFINE_SCRUB_EVENT(xrep_done); 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun TRACE_EVENT(xchk_op_error, 129*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno, 130*4882a593Smuzhiyun xfs_agblock_t bno, int error, void *ret_ip), 131*4882a593Smuzhiyun TP_ARGS(sc, agno, bno, error, ret_ip), 132*4882a593Smuzhiyun TP_STRUCT__entry( 133*4882a593Smuzhiyun __field(dev_t, dev) 134*4882a593Smuzhiyun __field(unsigned int, type) 135*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 136*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 137*4882a593Smuzhiyun __field(int, error) 138*4882a593Smuzhiyun __field(void *, ret_ip) 139*4882a593Smuzhiyun ), 140*4882a593Smuzhiyun TP_fast_assign( 141*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 142*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 143*4882a593Smuzhiyun __entry->agno = agno; 144*4882a593Smuzhiyun __entry->bno = bno; 145*4882a593Smuzhiyun __entry->error = error; 146*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 147*4882a593Smuzhiyun ), 148*4882a593Smuzhiyun TP_printk("dev %d:%d type %s agno %u agbno %u error %d ret_ip %pS", 149*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 150*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 151*4882a593Smuzhiyun __entry->agno, 152*4882a593Smuzhiyun __entry->bno, 153*4882a593Smuzhiyun __entry->error, 154*4882a593Smuzhiyun __entry->ret_ip) 155*4882a593Smuzhiyun ); 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun TRACE_EVENT(xchk_file_op_error, 158*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, int whichfork, 159*4882a593Smuzhiyun xfs_fileoff_t offset, int error, void *ret_ip), 160*4882a593Smuzhiyun TP_ARGS(sc, whichfork, offset, error, ret_ip), 161*4882a593Smuzhiyun TP_STRUCT__entry( 162*4882a593Smuzhiyun __field(dev_t, dev) 163*4882a593Smuzhiyun __field(xfs_ino_t, ino) 164*4882a593Smuzhiyun __field(int, whichfork) 165*4882a593Smuzhiyun __field(unsigned int, type) 166*4882a593Smuzhiyun __field(xfs_fileoff_t, offset) 167*4882a593Smuzhiyun __field(int, error) 168*4882a593Smuzhiyun __field(void *, ret_ip) 169*4882a593Smuzhiyun ), 170*4882a593Smuzhiyun TP_fast_assign( 171*4882a593Smuzhiyun __entry->dev = sc->ip->i_mount->m_super->s_dev; 172*4882a593Smuzhiyun __entry->ino = sc->ip->i_ino; 173*4882a593Smuzhiyun __entry->whichfork = whichfork; 174*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 175*4882a593Smuzhiyun __entry->offset = offset; 176*4882a593Smuzhiyun __entry->error = error; 177*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 178*4882a593Smuzhiyun ), 179*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx fork %d type %s offset %llu error %d ret_ip %pS", 180*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 181*4882a593Smuzhiyun __entry->ino, 182*4882a593Smuzhiyun __entry->whichfork, 183*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 184*4882a593Smuzhiyun __entry->offset, 185*4882a593Smuzhiyun __entry->error, 186*4882a593Smuzhiyun __entry->ret_ip) 187*4882a593Smuzhiyun ); 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xchk_block_error_class, 190*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip), 191*4882a593Smuzhiyun TP_ARGS(sc, daddr, ret_ip), 192*4882a593Smuzhiyun TP_STRUCT__entry( 193*4882a593Smuzhiyun __field(dev_t, dev) 194*4882a593Smuzhiyun __field(unsigned int, type) 195*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 196*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 197*4882a593Smuzhiyun __field(void *, ret_ip) 198*4882a593Smuzhiyun ), 199*4882a593Smuzhiyun TP_fast_assign( 200*4882a593Smuzhiyun xfs_fsblock_t fsbno; 201*4882a593Smuzhiyun xfs_agnumber_t agno; 202*4882a593Smuzhiyun xfs_agblock_t bno; 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun fsbno = XFS_DADDR_TO_FSB(sc->mp, daddr); 205*4882a593Smuzhiyun agno = XFS_FSB_TO_AGNO(sc->mp, fsbno); 206*4882a593Smuzhiyun bno = XFS_FSB_TO_AGBNO(sc->mp, fsbno); 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 209*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 210*4882a593Smuzhiyun __entry->agno = agno; 211*4882a593Smuzhiyun __entry->bno = bno; 212*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 213*4882a593Smuzhiyun ), 214*4882a593Smuzhiyun TP_printk("dev %d:%d type %s agno %u agbno %u ret_ip %pS", 215*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 216*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 217*4882a593Smuzhiyun __entry->agno, 218*4882a593Smuzhiyun __entry->bno, 219*4882a593Smuzhiyun __entry->ret_ip) 220*4882a593Smuzhiyun ) 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun #define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \ 223*4882a593Smuzhiyun DEFINE_EVENT(xchk_block_error_class, name, \ 224*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \ 225*4882a593Smuzhiyun void *ret_ip), \ 226*4882a593Smuzhiyun TP_ARGS(sc, daddr, ret_ip)) 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error); 229*4882a593Smuzhiyun DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error); 230*4882a593Smuzhiyun DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen); 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xchk_ino_error_class, 233*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip), 234*4882a593Smuzhiyun TP_ARGS(sc, ino, ret_ip), 235*4882a593Smuzhiyun TP_STRUCT__entry( 236*4882a593Smuzhiyun __field(dev_t, dev) 237*4882a593Smuzhiyun __field(xfs_ino_t, ino) 238*4882a593Smuzhiyun __field(unsigned int, type) 239*4882a593Smuzhiyun __field(void *, ret_ip) 240*4882a593Smuzhiyun ), 241*4882a593Smuzhiyun TP_fast_assign( 242*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 243*4882a593Smuzhiyun __entry->ino = ino; 244*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 245*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 246*4882a593Smuzhiyun ), 247*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS", 248*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 249*4882a593Smuzhiyun __entry->ino, 250*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 251*4882a593Smuzhiyun __entry->ret_ip) 252*4882a593Smuzhiyun ) 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun #define DEFINE_SCRUB_INO_ERROR_EVENT(name) \ 255*4882a593Smuzhiyun DEFINE_EVENT(xchk_ino_error_class, name, \ 256*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \ 257*4882a593Smuzhiyun void *ret_ip), \ 258*4882a593Smuzhiyun TP_ARGS(sc, ino, ret_ip)) 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error); 261*4882a593Smuzhiyun DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen); 262*4882a593Smuzhiyun DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning); 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xchk_fblock_error_class, 265*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, int whichfork, 266*4882a593Smuzhiyun xfs_fileoff_t offset, void *ret_ip), 267*4882a593Smuzhiyun TP_ARGS(sc, whichfork, offset, ret_ip), 268*4882a593Smuzhiyun TP_STRUCT__entry( 269*4882a593Smuzhiyun __field(dev_t, dev) 270*4882a593Smuzhiyun __field(xfs_ino_t, ino) 271*4882a593Smuzhiyun __field(int, whichfork) 272*4882a593Smuzhiyun __field(unsigned int, type) 273*4882a593Smuzhiyun __field(xfs_fileoff_t, offset) 274*4882a593Smuzhiyun __field(void *, ret_ip) 275*4882a593Smuzhiyun ), 276*4882a593Smuzhiyun TP_fast_assign( 277*4882a593Smuzhiyun __entry->dev = sc->ip->i_mount->m_super->s_dev; 278*4882a593Smuzhiyun __entry->ino = sc->ip->i_ino; 279*4882a593Smuzhiyun __entry->whichfork = whichfork; 280*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 281*4882a593Smuzhiyun __entry->offset = offset; 282*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 283*4882a593Smuzhiyun ), 284*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx fork %d type %s offset %llu ret_ip %pS", 285*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 286*4882a593Smuzhiyun __entry->ino, 287*4882a593Smuzhiyun __entry->whichfork, 288*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 289*4882a593Smuzhiyun __entry->offset, 290*4882a593Smuzhiyun __entry->ret_ip) 291*4882a593Smuzhiyun ); 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun #define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \ 294*4882a593Smuzhiyun DEFINE_EVENT(xchk_fblock_error_class, name, \ 295*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, int whichfork, \ 296*4882a593Smuzhiyun xfs_fileoff_t offset, void *ret_ip), \ 297*4882a593Smuzhiyun TP_ARGS(sc, whichfork, offset, ret_ip)) 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error); 300*4882a593Smuzhiyun DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning); 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun TRACE_EVENT(xchk_incomplete, 303*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, void *ret_ip), 304*4882a593Smuzhiyun TP_ARGS(sc, ret_ip), 305*4882a593Smuzhiyun TP_STRUCT__entry( 306*4882a593Smuzhiyun __field(dev_t, dev) 307*4882a593Smuzhiyun __field(unsigned int, type) 308*4882a593Smuzhiyun __field(void *, ret_ip) 309*4882a593Smuzhiyun ), 310*4882a593Smuzhiyun TP_fast_assign( 311*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 312*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 313*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 314*4882a593Smuzhiyun ), 315*4882a593Smuzhiyun TP_printk("dev %d:%d type %s ret_ip %pS", 316*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 317*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 318*4882a593Smuzhiyun __entry->ret_ip) 319*4882a593Smuzhiyun ); 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun TRACE_EVENT(xchk_btree_op_error, 322*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 323*4882a593Smuzhiyun int level, int error, void *ret_ip), 324*4882a593Smuzhiyun TP_ARGS(sc, cur, level, error, ret_ip), 325*4882a593Smuzhiyun TP_STRUCT__entry( 326*4882a593Smuzhiyun __field(dev_t, dev) 327*4882a593Smuzhiyun __field(unsigned int, type) 328*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 329*4882a593Smuzhiyun __field(int, level) 330*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 331*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 332*4882a593Smuzhiyun __field(int, ptr) 333*4882a593Smuzhiyun __field(int, error) 334*4882a593Smuzhiyun __field(void *, ret_ip) 335*4882a593Smuzhiyun ), 336*4882a593Smuzhiyun TP_fast_assign( 337*4882a593Smuzhiyun xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 340*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 341*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 342*4882a593Smuzhiyun __entry->level = level; 343*4882a593Smuzhiyun __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 344*4882a593Smuzhiyun __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 345*4882a593Smuzhiyun __entry->ptr = cur->bc_ptrs[level]; 346*4882a593Smuzhiyun __entry->error = error; 347*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 348*4882a593Smuzhiyun ), 349*4882a593Smuzhiyun TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno %u agbno %u error %d ret_ip %pS", 350*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 351*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 352*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 353*4882a593Smuzhiyun __entry->level, 354*4882a593Smuzhiyun __entry->ptr, 355*4882a593Smuzhiyun __entry->agno, 356*4882a593Smuzhiyun __entry->bno, 357*4882a593Smuzhiyun __entry->error, 358*4882a593Smuzhiyun __entry->ret_ip) 359*4882a593Smuzhiyun ); 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun TRACE_EVENT(xchk_ifork_btree_op_error, 362*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 363*4882a593Smuzhiyun int level, int error, void *ret_ip), 364*4882a593Smuzhiyun TP_ARGS(sc, cur, level, error, ret_ip), 365*4882a593Smuzhiyun TP_STRUCT__entry( 366*4882a593Smuzhiyun __field(dev_t, dev) 367*4882a593Smuzhiyun __field(xfs_ino_t, ino) 368*4882a593Smuzhiyun __field(int, whichfork) 369*4882a593Smuzhiyun __field(unsigned int, type) 370*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 371*4882a593Smuzhiyun __field(int, level) 372*4882a593Smuzhiyun __field(int, ptr) 373*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 374*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 375*4882a593Smuzhiyun __field(int, error) 376*4882a593Smuzhiyun __field(void *, ret_ip) 377*4882a593Smuzhiyun ), 378*4882a593Smuzhiyun TP_fast_assign( 379*4882a593Smuzhiyun xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 380*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 381*4882a593Smuzhiyun __entry->ino = sc->ip->i_ino; 382*4882a593Smuzhiyun __entry->whichfork = cur->bc_ino.whichfork; 383*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 384*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 385*4882a593Smuzhiyun __entry->level = level; 386*4882a593Smuzhiyun __entry->ptr = cur->bc_ptrs[level]; 387*4882a593Smuzhiyun __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 388*4882a593Smuzhiyun __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 389*4882a593Smuzhiyun __entry->error = error; 390*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 391*4882a593Smuzhiyun ), 392*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx fork %d type %s btree %s level %d ptr %d agno %u agbno %u error %d ret_ip %pS", 393*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 394*4882a593Smuzhiyun __entry->ino, 395*4882a593Smuzhiyun __entry->whichfork, 396*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 397*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 398*4882a593Smuzhiyun __entry->level, 399*4882a593Smuzhiyun __entry->ptr, 400*4882a593Smuzhiyun __entry->agno, 401*4882a593Smuzhiyun __entry->bno, 402*4882a593Smuzhiyun __entry->error, 403*4882a593Smuzhiyun __entry->ret_ip) 404*4882a593Smuzhiyun ); 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun TRACE_EVENT(xchk_btree_error, 407*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 408*4882a593Smuzhiyun int level, void *ret_ip), 409*4882a593Smuzhiyun TP_ARGS(sc, cur, level, ret_ip), 410*4882a593Smuzhiyun TP_STRUCT__entry( 411*4882a593Smuzhiyun __field(dev_t, dev) 412*4882a593Smuzhiyun __field(unsigned int, type) 413*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 414*4882a593Smuzhiyun __field(int, level) 415*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 416*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 417*4882a593Smuzhiyun __field(int, ptr) 418*4882a593Smuzhiyun __field(void *, ret_ip) 419*4882a593Smuzhiyun ), 420*4882a593Smuzhiyun TP_fast_assign( 421*4882a593Smuzhiyun xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 422*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 423*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 424*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 425*4882a593Smuzhiyun __entry->level = level; 426*4882a593Smuzhiyun __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 427*4882a593Smuzhiyun __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 428*4882a593Smuzhiyun __entry->ptr = cur->bc_ptrs[level]; 429*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 430*4882a593Smuzhiyun ), 431*4882a593Smuzhiyun TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno %u agbno %u ret_ip %pS", 432*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 433*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 434*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 435*4882a593Smuzhiyun __entry->level, 436*4882a593Smuzhiyun __entry->ptr, 437*4882a593Smuzhiyun __entry->agno, 438*4882a593Smuzhiyun __entry->bno, 439*4882a593Smuzhiyun __entry->ret_ip) 440*4882a593Smuzhiyun ); 441*4882a593Smuzhiyun 442*4882a593Smuzhiyun TRACE_EVENT(xchk_ifork_btree_error, 443*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 444*4882a593Smuzhiyun int level, void *ret_ip), 445*4882a593Smuzhiyun TP_ARGS(sc, cur, level, ret_ip), 446*4882a593Smuzhiyun TP_STRUCT__entry( 447*4882a593Smuzhiyun __field(dev_t, dev) 448*4882a593Smuzhiyun __field(xfs_ino_t, ino) 449*4882a593Smuzhiyun __field(int, whichfork) 450*4882a593Smuzhiyun __field(unsigned int, type) 451*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 452*4882a593Smuzhiyun __field(int, level) 453*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 454*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 455*4882a593Smuzhiyun __field(int, ptr) 456*4882a593Smuzhiyun __field(void *, ret_ip) 457*4882a593Smuzhiyun ), 458*4882a593Smuzhiyun TP_fast_assign( 459*4882a593Smuzhiyun xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 460*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 461*4882a593Smuzhiyun __entry->ino = sc->ip->i_ino; 462*4882a593Smuzhiyun __entry->whichfork = cur->bc_ino.whichfork; 463*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 464*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 465*4882a593Smuzhiyun __entry->level = level; 466*4882a593Smuzhiyun __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 467*4882a593Smuzhiyun __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 468*4882a593Smuzhiyun __entry->ptr = cur->bc_ptrs[level]; 469*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 470*4882a593Smuzhiyun ), 471*4882a593Smuzhiyun TP_printk("dev %d:%d ino 0x%llx fork %d type %s btree %s level %d ptr %d agno %u agbno %u ret_ip %pS", 472*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 473*4882a593Smuzhiyun __entry->ino, 474*4882a593Smuzhiyun __entry->whichfork, 475*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 476*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 477*4882a593Smuzhiyun __entry->level, 478*4882a593Smuzhiyun __entry->ptr, 479*4882a593Smuzhiyun __entry->agno, 480*4882a593Smuzhiyun __entry->bno, 481*4882a593Smuzhiyun __entry->ret_ip) 482*4882a593Smuzhiyun ); 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xchk_sbtree_class, 485*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 486*4882a593Smuzhiyun int level), 487*4882a593Smuzhiyun TP_ARGS(sc, cur, level), 488*4882a593Smuzhiyun TP_STRUCT__entry( 489*4882a593Smuzhiyun __field(dev_t, dev) 490*4882a593Smuzhiyun __field(int, type) 491*4882a593Smuzhiyun __field(xfs_btnum_t, btnum) 492*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 493*4882a593Smuzhiyun __field(xfs_agblock_t, bno) 494*4882a593Smuzhiyun __field(int, level) 495*4882a593Smuzhiyun __field(int, nlevels) 496*4882a593Smuzhiyun __field(int, ptr) 497*4882a593Smuzhiyun ), 498*4882a593Smuzhiyun TP_fast_assign( 499*4882a593Smuzhiyun xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 502*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 503*4882a593Smuzhiyun __entry->btnum = cur->bc_btnum; 504*4882a593Smuzhiyun __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 505*4882a593Smuzhiyun __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 506*4882a593Smuzhiyun __entry->level = level; 507*4882a593Smuzhiyun __entry->nlevels = cur->bc_nlevels; 508*4882a593Smuzhiyun __entry->ptr = cur->bc_ptrs[level]; 509*4882a593Smuzhiyun ), 510*4882a593Smuzhiyun TP_printk("dev %d:%d type %s btree %s agno %u agbno %u level %d nlevels %d ptr %d", 511*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 512*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 513*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 514*4882a593Smuzhiyun __entry->agno, 515*4882a593Smuzhiyun __entry->bno, 516*4882a593Smuzhiyun __entry->level, 517*4882a593Smuzhiyun __entry->nlevels, 518*4882a593Smuzhiyun __entry->ptr) 519*4882a593Smuzhiyun ) 520*4882a593Smuzhiyun #define DEFINE_SCRUB_SBTREE_EVENT(name) \ 521*4882a593Smuzhiyun DEFINE_EVENT(xchk_sbtree_class, name, \ 522*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \ 523*4882a593Smuzhiyun int level), \ 524*4882a593Smuzhiyun TP_ARGS(sc, cur, level)) 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec); 527*4882a593Smuzhiyun DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key); 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun TRACE_EVENT(xchk_xref_error, 530*4882a593Smuzhiyun TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip), 531*4882a593Smuzhiyun TP_ARGS(sc, error, ret_ip), 532*4882a593Smuzhiyun TP_STRUCT__entry( 533*4882a593Smuzhiyun __field(dev_t, dev) 534*4882a593Smuzhiyun __field(int, type) 535*4882a593Smuzhiyun __field(int, error) 536*4882a593Smuzhiyun __field(void *, ret_ip) 537*4882a593Smuzhiyun ), 538*4882a593Smuzhiyun TP_fast_assign( 539*4882a593Smuzhiyun __entry->dev = sc->mp->m_super->s_dev; 540*4882a593Smuzhiyun __entry->type = sc->sm->sm_type; 541*4882a593Smuzhiyun __entry->error = error; 542*4882a593Smuzhiyun __entry->ret_ip = ret_ip; 543*4882a593Smuzhiyun ), 544*4882a593Smuzhiyun TP_printk("dev %d:%d type %s xref error %d ret_ip %pS", 545*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 546*4882a593Smuzhiyun __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 547*4882a593Smuzhiyun __entry->error, 548*4882a593Smuzhiyun __entry->ret_ip) 549*4882a593Smuzhiyun ); 550*4882a593Smuzhiyun 551*4882a593Smuzhiyun TRACE_EVENT(xchk_iallocbt_check_cluster, 552*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 553*4882a593Smuzhiyun xfs_agino_t startino, xfs_daddr_t map_daddr, 554*4882a593Smuzhiyun unsigned short map_len, unsigned int chunk_ino, 555*4882a593Smuzhiyun unsigned int nr_inodes, uint16_t cluster_mask, 556*4882a593Smuzhiyun uint16_t holemask, unsigned int cluster_ino), 557*4882a593Smuzhiyun TP_ARGS(mp, agno, startino, map_daddr, map_len, chunk_ino, nr_inodes, 558*4882a593Smuzhiyun cluster_mask, holemask, cluster_ino), 559*4882a593Smuzhiyun TP_STRUCT__entry( 560*4882a593Smuzhiyun __field(dev_t, dev) 561*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 562*4882a593Smuzhiyun __field(xfs_agino_t, startino) 563*4882a593Smuzhiyun __field(xfs_daddr_t, map_daddr) 564*4882a593Smuzhiyun __field(unsigned short, map_len) 565*4882a593Smuzhiyun __field(unsigned int, chunk_ino) 566*4882a593Smuzhiyun __field(unsigned int, nr_inodes) 567*4882a593Smuzhiyun __field(unsigned int, cluster_ino) 568*4882a593Smuzhiyun __field(uint16_t, cluster_mask) 569*4882a593Smuzhiyun __field(uint16_t, holemask) 570*4882a593Smuzhiyun ), 571*4882a593Smuzhiyun TP_fast_assign( 572*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 573*4882a593Smuzhiyun __entry->agno = agno; 574*4882a593Smuzhiyun __entry->startino = startino; 575*4882a593Smuzhiyun __entry->map_daddr = map_daddr; 576*4882a593Smuzhiyun __entry->map_len = map_len; 577*4882a593Smuzhiyun __entry->chunk_ino = chunk_ino; 578*4882a593Smuzhiyun __entry->nr_inodes = nr_inodes; 579*4882a593Smuzhiyun __entry->cluster_mask = cluster_mask; 580*4882a593Smuzhiyun __entry->holemask = holemask; 581*4882a593Smuzhiyun __entry->cluster_ino = cluster_ino; 582*4882a593Smuzhiyun ), 583*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d startino %u daddr 0x%llx len %d chunkino %u nr_inodes %u cluster_mask 0x%x holemask 0x%x cluster_ino %u", 584*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 585*4882a593Smuzhiyun __entry->agno, 586*4882a593Smuzhiyun __entry->startino, 587*4882a593Smuzhiyun __entry->map_daddr, 588*4882a593Smuzhiyun __entry->map_len, 589*4882a593Smuzhiyun __entry->chunk_ino, 590*4882a593Smuzhiyun __entry->nr_inodes, 591*4882a593Smuzhiyun __entry->cluster_mask, 592*4882a593Smuzhiyun __entry->holemask, 593*4882a593Smuzhiyun __entry->cluster_ino) 594*4882a593Smuzhiyun ) 595*4882a593Smuzhiyun 596*4882a593Smuzhiyun TRACE_EVENT(xchk_fscounters_calc, 597*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree, 598*4882a593Smuzhiyun uint64_t fdblocks, uint64_t delalloc), 599*4882a593Smuzhiyun TP_ARGS(mp, icount, ifree, fdblocks, delalloc), 600*4882a593Smuzhiyun TP_STRUCT__entry( 601*4882a593Smuzhiyun __field(dev_t, dev) 602*4882a593Smuzhiyun __field(int64_t, icount_sb) 603*4882a593Smuzhiyun __field(uint64_t, icount_calculated) 604*4882a593Smuzhiyun __field(int64_t, ifree_sb) 605*4882a593Smuzhiyun __field(uint64_t, ifree_calculated) 606*4882a593Smuzhiyun __field(int64_t, fdblocks_sb) 607*4882a593Smuzhiyun __field(uint64_t, fdblocks_calculated) 608*4882a593Smuzhiyun __field(uint64_t, delalloc) 609*4882a593Smuzhiyun ), 610*4882a593Smuzhiyun TP_fast_assign( 611*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 612*4882a593Smuzhiyun __entry->icount_sb = mp->m_sb.sb_icount; 613*4882a593Smuzhiyun __entry->icount_calculated = icount; 614*4882a593Smuzhiyun __entry->ifree_sb = mp->m_sb.sb_ifree; 615*4882a593Smuzhiyun __entry->ifree_calculated = ifree; 616*4882a593Smuzhiyun __entry->fdblocks_sb = mp->m_sb.sb_fdblocks; 617*4882a593Smuzhiyun __entry->fdblocks_calculated = fdblocks; 618*4882a593Smuzhiyun __entry->delalloc = delalloc; 619*4882a593Smuzhiyun ), 620*4882a593Smuzhiyun TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu", 621*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 622*4882a593Smuzhiyun __entry->icount_sb, 623*4882a593Smuzhiyun __entry->icount_calculated, 624*4882a593Smuzhiyun __entry->ifree_sb, 625*4882a593Smuzhiyun __entry->ifree_calculated, 626*4882a593Smuzhiyun __entry->fdblocks_sb, 627*4882a593Smuzhiyun __entry->fdblocks_calculated, 628*4882a593Smuzhiyun __entry->delalloc) 629*4882a593Smuzhiyun ) 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun TRACE_EVENT(xchk_fscounters_within_range, 632*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value, 633*4882a593Smuzhiyun int64_t old_value), 634*4882a593Smuzhiyun TP_ARGS(mp, expected, curr_value, old_value), 635*4882a593Smuzhiyun TP_STRUCT__entry( 636*4882a593Smuzhiyun __field(dev_t, dev) 637*4882a593Smuzhiyun __field(uint64_t, expected) 638*4882a593Smuzhiyun __field(int64_t, curr_value) 639*4882a593Smuzhiyun __field(int64_t, old_value) 640*4882a593Smuzhiyun ), 641*4882a593Smuzhiyun TP_fast_assign( 642*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 643*4882a593Smuzhiyun __entry->expected = expected; 644*4882a593Smuzhiyun __entry->curr_value = curr_value; 645*4882a593Smuzhiyun __entry->old_value = old_value; 646*4882a593Smuzhiyun ), 647*4882a593Smuzhiyun TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld", 648*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 649*4882a593Smuzhiyun __entry->expected, 650*4882a593Smuzhiyun __entry->curr_value, 651*4882a593Smuzhiyun __entry->old_value) 652*4882a593Smuzhiyun ) 653*4882a593Smuzhiyun 654*4882a593Smuzhiyun /* repair tracepoints */ 655*4882a593Smuzhiyun #if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) 656*4882a593Smuzhiyun 657*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xrep_extent_class, 658*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 659*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len), 660*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len), 661*4882a593Smuzhiyun TP_STRUCT__entry( 662*4882a593Smuzhiyun __field(dev_t, dev) 663*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 664*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 665*4882a593Smuzhiyun __field(xfs_extlen_t, len) 666*4882a593Smuzhiyun ), 667*4882a593Smuzhiyun TP_fast_assign( 668*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 669*4882a593Smuzhiyun __entry->agno = agno; 670*4882a593Smuzhiyun __entry->agbno = agbno; 671*4882a593Smuzhiyun __entry->len = len; 672*4882a593Smuzhiyun ), 673*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u", 674*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 675*4882a593Smuzhiyun __entry->agno, 676*4882a593Smuzhiyun __entry->agbno, 677*4882a593Smuzhiyun __entry->len) 678*4882a593Smuzhiyun ); 679*4882a593Smuzhiyun #define DEFINE_REPAIR_EXTENT_EVENT(name) \ 680*4882a593Smuzhiyun DEFINE_EVENT(xrep_extent_class, name, \ 681*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 682*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len), \ 683*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len)) 684*4882a593Smuzhiyun DEFINE_REPAIR_EXTENT_EVENT(xrep_dispose_btree_extent); 685*4882a593Smuzhiyun DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert); 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xrep_rmap_class, 688*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 689*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, 690*4882a593Smuzhiyun uint64_t owner, uint64_t offset, unsigned int flags), 691*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, owner, offset, flags), 692*4882a593Smuzhiyun TP_STRUCT__entry( 693*4882a593Smuzhiyun __field(dev_t, dev) 694*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 695*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 696*4882a593Smuzhiyun __field(xfs_extlen_t, len) 697*4882a593Smuzhiyun __field(uint64_t, owner) 698*4882a593Smuzhiyun __field(uint64_t, offset) 699*4882a593Smuzhiyun __field(unsigned int, flags) 700*4882a593Smuzhiyun ), 701*4882a593Smuzhiyun TP_fast_assign( 702*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 703*4882a593Smuzhiyun __entry->agno = agno; 704*4882a593Smuzhiyun __entry->agbno = agbno; 705*4882a593Smuzhiyun __entry->len = len; 706*4882a593Smuzhiyun __entry->owner = owner; 707*4882a593Smuzhiyun __entry->offset = offset; 708*4882a593Smuzhiyun __entry->flags = flags; 709*4882a593Smuzhiyun ), 710*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x", 711*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 712*4882a593Smuzhiyun __entry->agno, 713*4882a593Smuzhiyun __entry->agbno, 714*4882a593Smuzhiyun __entry->len, 715*4882a593Smuzhiyun __entry->owner, 716*4882a593Smuzhiyun __entry->offset, 717*4882a593Smuzhiyun __entry->flags) 718*4882a593Smuzhiyun ); 719*4882a593Smuzhiyun #define DEFINE_REPAIR_RMAP_EVENT(name) \ 720*4882a593Smuzhiyun DEFINE_EVENT(xrep_rmap_class, name, \ 721*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 722*4882a593Smuzhiyun xfs_agblock_t agbno, xfs_extlen_t len, \ 723*4882a593Smuzhiyun uint64_t owner, uint64_t offset, unsigned int flags), \ 724*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, len, owner, offset, flags)) 725*4882a593Smuzhiyun DEFINE_REPAIR_RMAP_EVENT(xrep_alloc_extent_fn); 726*4882a593Smuzhiyun DEFINE_REPAIR_RMAP_EVENT(xrep_ialloc_extent_fn); 727*4882a593Smuzhiyun DEFINE_REPAIR_RMAP_EVENT(xrep_rmap_extent_fn); 728*4882a593Smuzhiyun DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_extent_fn); 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun TRACE_EVENT(xrep_refcount_extent_fn, 731*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 732*4882a593Smuzhiyun struct xfs_refcount_irec *irec), 733*4882a593Smuzhiyun TP_ARGS(mp, agno, irec), 734*4882a593Smuzhiyun TP_STRUCT__entry( 735*4882a593Smuzhiyun __field(dev_t, dev) 736*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 737*4882a593Smuzhiyun __field(xfs_agblock_t, startblock) 738*4882a593Smuzhiyun __field(xfs_extlen_t, blockcount) 739*4882a593Smuzhiyun __field(xfs_nlink_t, refcount) 740*4882a593Smuzhiyun ), 741*4882a593Smuzhiyun TP_fast_assign( 742*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 743*4882a593Smuzhiyun __entry->agno = agno; 744*4882a593Smuzhiyun __entry->startblock = irec->rc_startblock; 745*4882a593Smuzhiyun __entry->blockcount = irec->rc_blockcount; 746*4882a593Smuzhiyun __entry->refcount = irec->rc_refcount; 747*4882a593Smuzhiyun ), 748*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u", 749*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 750*4882a593Smuzhiyun __entry->agno, 751*4882a593Smuzhiyun __entry->startblock, 752*4882a593Smuzhiyun __entry->blockcount, 753*4882a593Smuzhiyun __entry->refcount) 754*4882a593Smuzhiyun ) 755*4882a593Smuzhiyun 756*4882a593Smuzhiyun TRACE_EVENT(xrep_init_btblock, 757*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 758*4882a593Smuzhiyun xfs_btnum_t btnum), 759*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, btnum), 760*4882a593Smuzhiyun TP_STRUCT__entry( 761*4882a593Smuzhiyun __field(dev_t, dev) 762*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 763*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 764*4882a593Smuzhiyun __field(uint32_t, btnum) 765*4882a593Smuzhiyun ), 766*4882a593Smuzhiyun TP_fast_assign( 767*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 768*4882a593Smuzhiyun __entry->agno = agno; 769*4882a593Smuzhiyun __entry->agbno = agbno; 770*4882a593Smuzhiyun __entry->btnum = btnum; 771*4882a593Smuzhiyun ), 772*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u btree %s", 773*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 774*4882a593Smuzhiyun __entry->agno, 775*4882a593Smuzhiyun __entry->agbno, 776*4882a593Smuzhiyun __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS)) 777*4882a593Smuzhiyun ) 778*4882a593Smuzhiyun TRACE_EVENT(xrep_findroot_block, 779*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 780*4882a593Smuzhiyun uint32_t magic, uint16_t level), 781*4882a593Smuzhiyun TP_ARGS(mp, agno, agbno, magic, level), 782*4882a593Smuzhiyun TP_STRUCT__entry( 783*4882a593Smuzhiyun __field(dev_t, dev) 784*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 785*4882a593Smuzhiyun __field(xfs_agblock_t, agbno) 786*4882a593Smuzhiyun __field(uint32_t, magic) 787*4882a593Smuzhiyun __field(uint16_t, level) 788*4882a593Smuzhiyun ), 789*4882a593Smuzhiyun TP_fast_assign( 790*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 791*4882a593Smuzhiyun __entry->agno = agno; 792*4882a593Smuzhiyun __entry->agbno = agbno; 793*4882a593Smuzhiyun __entry->magic = magic; 794*4882a593Smuzhiyun __entry->level = level; 795*4882a593Smuzhiyun ), 796*4882a593Smuzhiyun TP_printk("dev %d:%d agno %u agbno %u magic 0x%x level %u", 797*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 798*4882a593Smuzhiyun __entry->agno, 799*4882a593Smuzhiyun __entry->agbno, 800*4882a593Smuzhiyun __entry->magic, 801*4882a593Smuzhiyun __entry->level) 802*4882a593Smuzhiyun ) 803*4882a593Smuzhiyun TRACE_EVENT(xrep_calc_ag_resblks, 804*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 805*4882a593Smuzhiyun xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen, 806*4882a593Smuzhiyun xfs_agblock_t usedlen), 807*4882a593Smuzhiyun TP_ARGS(mp, agno, icount, aglen, freelen, usedlen), 808*4882a593Smuzhiyun TP_STRUCT__entry( 809*4882a593Smuzhiyun __field(dev_t, dev) 810*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 811*4882a593Smuzhiyun __field(xfs_agino_t, icount) 812*4882a593Smuzhiyun __field(xfs_agblock_t, aglen) 813*4882a593Smuzhiyun __field(xfs_agblock_t, freelen) 814*4882a593Smuzhiyun __field(xfs_agblock_t, usedlen) 815*4882a593Smuzhiyun ), 816*4882a593Smuzhiyun TP_fast_assign( 817*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 818*4882a593Smuzhiyun __entry->agno = agno; 819*4882a593Smuzhiyun __entry->icount = icount; 820*4882a593Smuzhiyun __entry->aglen = aglen; 821*4882a593Smuzhiyun __entry->freelen = freelen; 822*4882a593Smuzhiyun __entry->usedlen = usedlen; 823*4882a593Smuzhiyun ), 824*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d icount %u aglen %u freelen %u usedlen %u", 825*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 826*4882a593Smuzhiyun __entry->agno, 827*4882a593Smuzhiyun __entry->icount, 828*4882a593Smuzhiyun __entry->aglen, 829*4882a593Smuzhiyun __entry->freelen, 830*4882a593Smuzhiyun __entry->usedlen) 831*4882a593Smuzhiyun ) 832*4882a593Smuzhiyun TRACE_EVENT(xrep_calc_ag_resblks_btsize, 833*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 834*4882a593Smuzhiyun xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz, 835*4882a593Smuzhiyun xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz), 836*4882a593Smuzhiyun TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz), 837*4882a593Smuzhiyun TP_STRUCT__entry( 838*4882a593Smuzhiyun __field(dev_t, dev) 839*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 840*4882a593Smuzhiyun __field(xfs_agblock_t, bnobt_sz) 841*4882a593Smuzhiyun __field(xfs_agblock_t, inobt_sz) 842*4882a593Smuzhiyun __field(xfs_agblock_t, rmapbt_sz) 843*4882a593Smuzhiyun __field(xfs_agblock_t, refcbt_sz) 844*4882a593Smuzhiyun ), 845*4882a593Smuzhiyun TP_fast_assign( 846*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 847*4882a593Smuzhiyun __entry->agno = agno; 848*4882a593Smuzhiyun __entry->bnobt_sz = bnobt_sz; 849*4882a593Smuzhiyun __entry->inobt_sz = inobt_sz; 850*4882a593Smuzhiyun __entry->rmapbt_sz = rmapbt_sz; 851*4882a593Smuzhiyun __entry->refcbt_sz = refcbt_sz; 852*4882a593Smuzhiyun ), 853*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d bno %u ino %u rmap %u refcount %u", 854*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 855*4882a593Smuzhiyun __entry->agno, 856*4882a593Smuzhiyun __entry->bnobt_sz, 857*4882a593Smuzhiyun __entry->inobt_sz, 858*4882a593Smuzhiyun __entry->rmapbt_sz, 859*4882a593Smuzhiyun __entry->refcbt_sz) 860*4882a593Smuzhiyun ) 861*4882a593Smuzhiyun TRACE_EVENT(xrep_reset_counters, 862*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp), 863*4882a593Smuzhiyun TP_ARGS(mp), 864*4882a593Smuzhiyun TP_STRUCT__entry( 865*4882a593Smuzhiyun __field(dev_t, dev) 866*4882a593Smuzhiyun ), 867*4882a593Smuzhiyun TP_fast_assign( 868*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 869*4882a593Smuzhiyun ), 870*4882a593Smuzhiyun TP_printk("dev %d:%d", 871*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev)) 872*4882a593Smuzhiyun ) 873*4882a593Smuzhiyun 874*4882a593Smuzhiyun TRACE_EVENT(xrep_ialloc_insert, 875*4882a593Smuzhiyun TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 876*4882a593Smuzhiyun xfs_agino_t startino, uint16_t holemask, uint8_t count, 877*4882a593Smuzhiyun uint8_t freecount, uint64_t freemask), 878*4882a593Smuzhiyun TP_ARGS(mp, agno, startino, holemask, count, freecount, freemask), 879*4882a593Smuzhiyun TP_STRUCT__entry( 880*4882a593Smuzhiyun __field(dev_t, dev) 881*4882a593Smuzhiyun __field(xfs_agnumber_t, agno) 882*4882a593Smuzhiyun __field(xfs_agino_t, startino) 883*4882a593Smuzhiyun __field(uint16_t, holemask) 884*4882a593Smuzhiyun __field(uint8_t, count) 885*4882a593Smuzhiyun __field(uint8_t, freecount) 886*4882a593Smuzhiyun __field(uint64_t, freemask) 887*4882a593Smuzhiyun ), 888*4882a593Smuzhiyun TP_fast_assign( 889*4882a593Smuzhiyun __entry->dev = mp->m_super->s_dev; 890*4882a593Smuzhiyun __entry->agno = agno; 891*4882a593Smuzhiyun __entry->startino = startino; 892*4882a593Smuzhiyun __entry->holemask = holemask; 893*4882a593Smuzhiyun __entry->count = count; 894*4882a593Smuzhiyun __entry->freecount = freecount; 895*4882a593Smuzhiyun __entry->freemask = freemask; 896*4882a593Smuzhiyun ), 897*4882a593Smuzhiyun TP_printk("dev %d:%d agno %d startino %u holemask 0x%x count %u freecount %u freemask 0x%llx", 898*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 899*4882a593Smuzhiyun __entry->agno, 900*4882a593Smuzhiyun __entry->startino, 901*4882a593Smuzhiyun __entry->holemask, 902*4882a593Smuzhiyun __entry->count, 903*4882a593Smuzhiyun __entry->freecount, 904*4882a593Smuzhiyun __entry->freemask) 905*4882a593Smuzhiyun ) 906*4882a593Smuzhiyun 907*4882a593Smuzhiyun #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */ 908*4882a593Smuzhiyun 909*4882a593Smuzhiyun #endif /* _TRACE_XFS_SCRUB_TRACE_H */ 910*4882a593Smuzhiyun 911*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 912*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 913*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE scrub/trace 914*4882a593Smuzhiyun #include <trace/define_trace.h> 915