1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (C) 2017-2023 Oracle. All Rights Reserved. 4 * Author: Darrick J. Wong <djwong@kernel.org> 5 * 6 * NOTE: none of these tracepoints shall be considered a stable kernel ABI 7 * as they can change at any time. See xfs_trace.h for documentation of 8 * specific units found in tracepoint output. 9 */ 10 #undef TRACE_SYSTEM 11 #define TRACE_SYSTEM xfs_scrub 12 13 #if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 14 #define _TRACE_XFS_SCRUB_TRACE_H 15 16 #include <linux/tracepoint.h> 17 #include "xfs_bit.h" 18 19 struct xfile; 20 struct xfarray; 21 struct xfarray_sortinfo; 22 struct xchk_dqiter; 23 24 /* 25 * ftrace's __print_symbolic requires that all enum values be wrapped in the 26 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace 27 * ring buffer. Somehow this was only worth mentioning in the ftrace sample 28 * code. 29 */ 30 TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi); 31 TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi); 32 TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi); 33 TRACE_DEFINE_ENUM(XFS_BTNUM_INOi); 34 TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi); 35 TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi); 36 TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi); 37 38 TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED); 39 TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW); 40 41 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE); 42 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB); 43 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF); 44 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL); 45 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI); 46 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT); 47 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT); 48 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT); 49 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT); 50 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT); 51 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT); 52 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE); 53 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD); 54 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA); 55 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC); 56 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR); 57 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR); 58 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK); 59 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT); 60 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP); 61 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM); 62 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA); 63 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA); 64 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA); 65 TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS); 66 67 #define XFS_SCRUB_TYPE_STRINGS \ 68 { XFS_SCRUB_TYPE_PROBE, "probe" }, \ 69 { XFS_SCRUB_TYPE_SB, "sb" }, \ 70 { XFS_SCRUB_TYPE_AGF, "agf" }, \ 71 { XFS_SCRUB_TYPE_AGFL, "agfl" }, \ 72 { XFS_SCRUB_TYPE_AGI, "agi" }, \ 73 { XFS_SCRUB_TYPE_BNOBT, "bnobt" }, \ 74 { XFS_SCRUB_TYPE_CNTBT, "cntbt" }, \ 75 { XFS_SCRUB_TYPE_INOBT, "inobt" }, \ 76 { XFS_SCRUB_TYPE_FINOBT, "finobt" }, \ 77 { XFS_SCRUB_TYPE_RMAPBT, "rmapbt" }, \ 78 { XFS_SCRUB_TYPE_REFCNTBT, "refcountbt" }, \ 79 { XFS_SCRUB_TYPE_INODE, "inode" }, \ 80 { XFS_SCRUB_TYPE_BMBTD, "bmapbtd" }, \ 81 { XFS_SCRUB_TYPE_BMBTA, "bmapbta" }, \ 82 { XFS_SCRUB_TYPE_BMBTC, "bmapbtc" }, \ 83 { XFS_SCRUB_TYPE_DIR, "directory" }, \ 84 { XFS_SCRUB_TYPE_XATTR, "xattr" }, \ 85 { XFS_SCRUB_TYPE_SYMLINK, "symlink" }, \ 86 { XFS_SCRUB_TYPE_PARENT, "parent" }, \ 87 { XFS_SCRUB_TYPE_RTBITMAP, "rtbitmap" }, \ 88 { XFS_SCRUB_TYPE_RTSUM, "rtsummary" }, \ 89 { XFS_SCRUB_TYPE_UQUOTA, "usrquota" }, \ 90 { XFS_SCRUB_TYPE_GQUOTA, "grpquota" }, \ 91 { XFS_SCRUB_TYPE_PQUOTA, "prjquota" }, \ 92 { XFS_SCRUB_TYPE_FSCOUNTERS, "fscounters" } 93 94 #define XFS_SCRUB_FLAG_STRINGS \ 95 { XFS_SCRUB_IFLAG_REPAIR, "repair" }, \ 96 { XFS_SCRUB_OFLAG_CORRUPT, "corrupt" }, \ 97 { XFS_SCRUB_OFLAG_PREEN, "preen" }, \ 98 { XFS_SCRUB_OFLAG_XFAIL, "xfail" }, \ 99 { XFS_SCRUB_OFLAG_XCORRUPT, "xcorrupt" }, \ 100 { XFS_SCRUB_OFLAG_INCOMPLETE, "incomplete" }, \ 101 { XFS_SCRUB_OFLAG_WARNING, "warning" }, \ 102 { XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED, "norepair" }, \ 103 { XFS_SCRUB_IFLAG_FORCE_REBUILD, "rebuild" } 104 105 #define XFS_SCRUB_STATE_STRINGS \ 106 { XCHK_TRY_HARDER, "try_harder" }, \ 107 { XCHK_HAVE_FREEZE_PROT, "nofreeze" }, \ 108 { XCHK_FSGATES_DRAIN, "fsgates_drain" }, \ 109 { XCHK_NEED_DRAIN, "need_drain" }, \ 110 { XREP_RESET_PERAG_RESV, "reset_perag_resv" }, \ 111 { XREP_ALREADY_FIXED, "already_fixed" } 112 113 DECLARE_EVENT_CLASS(xchk_class, 114 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, 115 int error), 116 TP_ARGS(ip, sm, error), 117 TP_STRUCT__entry( 118 __field(dev_t, dev) 119 __field(xfs_ino_t, ino) 120 __field(unsigned int, type) 121 __field(xfs_agnumber_t, agno) 122 __field(xfs_ino_t, inum) 123 __field(unsigned int, gen) 124 __field(unsigned int, flags) 125 __field(int, error) 126 ), 127 TP_fast_assign( 128 __entry->dev = ip->i_mount->m_super->s_dev; 129 __entry->ino = ip->i_ino; 130 __entry->type = sm->sm_type; 131 __entry->agno = sm->sm_agno; 132 __entry->inum = sm->sm_ino; 133 __entry->gen = sm->sm_gen; 134 __entry->flags = sm->sm_flags; 135 __entry->error = error; 136 ), 137 TP_printk("dev %d:%d ino 0x%llx type %s agno 0x%x inum 0x%llx gen 0x%x flags (%s) error %d", 138 MAJOR(__entry->dev), MINOR(__entry->dev), 139 __entry->ino, 140 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 141 __entry->agno, 142 __entry->inum, 143 __entry->gen, 144 __print_flags(__entry->flags, "|", XFS_SCRUB_FLAG_STRINGS), 145 __entry->error) 146 ) 147 #define DEFINE_SCRUB_EVENT(name) \ 148 DEFINE_EVENT(xchk_class, name, \ 149 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \ 150 int error), \ 151 TP_ARGS(ip, sm, error)) 152 153 DEFINE_SCRUB_EVENT(xchk_start); 154 DEFINE_SCRUB_EVENT(xchk_done); 155 DEFINE_SCRUB_EVENT(xchk_deadlock_retry); 156 DEFINE_SCRUB_EVENT(xrep_attempt); 157 DEFINE_SCRUB_EVENT(xrep_done); 158 159 DECLARE_EVENT_CLASS(xchk_fsgate_class, 160 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgate_flags), 161 TP_ARGS(sc, fsgate_flags), 162 TP_STRUCT__entry( 163 __field(dev_t, dev) 164 __field(unsigned int, type) 165 __field(unsigned int, fsgate_flags) 166 ), 167 TP_fast_assign( 168 __entry->dev = sc->mp->m_super->s_dev; 169 __entry->type = sc->sm->sm_type; 170 __entry->fsgate_flags = fsgate_flags; 171 ), 172 TP_printk("dev %d:%d type %s fsgates '%s'", 173 MAJOR(__entry->dev), MINOR(__entry->dev), 174 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 175 __print_flags(__entry->fsgate_flags, "|", XFS_SCRUB_STATE_STRINGS)) 176 ) 177 178 #define DEFINE_SCRUB_FSHOOK_EVENT(name) \ 179 DEFINE_EVENT(xchk_fsgate_class, name, \ 180 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \ 181 TP_ARGS(sc, fsgates_flags)) 182 183 DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable); 184 DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable); 185 186 TRACE_EVENT(xchk_op_error, 187 TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno, 188 xfs_agblock_t bno, int error, void *ret_ip), 189 TP_ARGS(sc, agno, bno, error, ret_ip), 190 TP_STRUCT__entry( 191 __field(dev_t, dev) 192 __field(unsigned int, type) 193 __field(xfs_agnumber_t, agno) 194 __field(xfs_agblock_t, bno) 195 __field(int, error) 196 __field(void *, ret_ip) 197 ), 198 TP_fast_assign( 199 __entry->dev = sc->mp->m_super->s_dev; 200 __entry->type = sc->sm->sm_type; 201 __entry->agno = agno; 202 __entry->bno = bno; 203 __entry->error = error; 204 __entry->ret_ip = ret_ip; 205 ), 206 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x error %d ret_ip %pS", 207 MAJOR(__entry->dev), MINOR(__entry->dev), 208 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 209 __entry->agno, 210 __entry->bno, 211 __entry->error, 212 __entry->ret_ip) 213 ); 214 215 TRACE_EVENT(xchk_file_op_error, 216 TP_PROTO(struct xfs_scrub *sc, int whichfork, 217 xfs_fileoff_t offset, int error, void *ret_ip), 218 TP_ARGS(sc, whichfork, offset, error, ret_ip), 219 TP_STRUCT__entry( 220 __field(dev_t, dev) 221 __field(xfs_ino_t, ino) 222 __field(int, whichfork) 223 __field(unsigned int, type) 224 __field(xfs_fileoff_t, offset) 225 __field(int, error) 226 __field(void *, ret_ip) 227 ), 228 TP_fast_assign( 229 __entry->dev = sc->ip->i_mount->m_super->s_dev; 230 __entry->ino = sc->ip->i_ino; 231 __entry->whichfork = whichfork; 232 __entry->type = sc->sm->sm_type; 233 __entry->offset = offset; 234 __entry->error = error; 235 __entry->ret_ip = ret_ip; 236 ), 237 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx error %d ret_ip %pS", 238 MAJOR(__entry->dev), MINOR(__entry->dev), 239 __entry->ino, 240 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS), 241 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 242 __entry->offset, 243 __entry->error, 244 __entry->ret_ip) 245 ); 246 247 DECLARE_EVENT_CLASS(xchk_block_error_class, 248 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip), 249 TP_ARGS(sc, daddr, ret_ip), 250 TP_STRUCT__entry( 251 __field(dev_t, dev) 252 __field(unsigned int, type) 253 __field(xfs_agnumber_t, agno) 254 __field(xfs_agblock_t, agbno) 255 __field(void *, ret_ip) 256 ), 257 TP_fast_assign( 258 __entry->dev = sc->mp->m_super->s_dev; 259 __entry->type = sc->sm->sm_type; 260 __entry->agno = xfs_daddr_to_agno(sc->mp, daddr); 261 __entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr); 262 __entry->ret_ip = ret_ip; 263 ), 264 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x ret_ip %pS", 265 MAJOR(__entry->dev), MINOR(__entry->dev), 266 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 267 __entry->agno, 268 __entry->agbno, 269 __entry->ret_ip) 270 ) 271 272 #define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \ 273 DEFINE_EVENT(xchk_block_error_class, name, \ 274 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \ 275 void *ret_ip), \ 276 TP_ARGS(sc, daddr, ret_ip)) 277 278 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error); 279 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error); 280 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen); 281 282 DECLARE_EVENT_CLASS(xchk_ino_error_class, 283 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip), 284 TP_ARGS(sc, ino, ret_ip), 285 TP_STRUCT__entry( 286 __field(dev_t, dev) 287 __field(xfs_ino_t, ino) 288 __field(unsigned int, type) 289 __field(void *, ret_ip) 290 ), 291 TP_fast_assign( 292 __entry->dev = sc->mp->m_super->s_dev; 293 __entry->ino = ino; 294 __entry->type = sc->sm->sm_type; 295 __entry->ret_ip = ret_ip; 296 ), 297 TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS", 298 MAJOR(__entry->dev), MINOR(__entry->dev), 299 __entry->ino, 300 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 301 __entry->ret_ip) 302 ) 303 304 #define DEFINE_SCRUB_INO_ERROR_EVENT(name) \ 305 DEFINE_EVENT(xchk_ino_error_class, name, \ 306 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \ 307 void *ret_ip), \ 308 TP_ARGS(sc, ino, ret_ip)) 309 310 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error); 311 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen); 312 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning); 313 314 DECLARE_EVENT_CLASS(xchk_fblock_error_class, 315 TP_PROTO(struct xfs_scrub *sc, int whichfork, 316 xfs_fileoff_t offset, void *ret_ip), 317 TP_ARGS(sc, whichfork, offset, ret_ip), 318 TP_STRUCT__entry( 319 __field(dev_t, dev) 320 __field(xfs_ino_t, ino) 321 __field(int, whichfork) 322 __field(unsigned int, type) 323 __field(xfs_fileoff_t, offset) 324 __field(void *, ret_ip) 325 ), 326 TP_fast_assign( 327 __entry->dev = sc->ip->i_mount->m_super->s_dev; 328 __entry->ino = sc->ip->i_ino; 329 __entry->whichfork = whichfork; 330 __entry->type = sc->sm->sm_type; 331 __entry->offset = offset; 332 __entry->ret_ip = ret_ip; 333 ), 334 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx ret_ip %pS", 335 MAJOR(__entry->dev), MINOR(__entry->dev), 336 __entry->ino, 337 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS), 338 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 339 __entry->offset, 340 __entry->ret_ip) 341 ); 342 343 #define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \ 344 DEFINE_EVENT(xchk_fblock_error_class, name, \ 345 TP_PROTO(struct xfs_scrub *sc, int whichfork, \ 346 xfs_fileoff_t offset, void *ret_ip), \ 347 TP_ARGS(sc, whichfork, offset, ret_ip)) 348 349 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error); 350 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning); 351 352 #ifdef CONFIG_XFS_QUOTA 353 DECLARE_EVENT_CLASS(xchk_dqiter_class, 354 TP_PROTO(struct xchk_dqiter *cursor, uint64_t id), 355 TP_ARGS(cursor, id), 356 TP_STRUCT__entry( 357 __field(dev_t, dev) 358 __field(xfs_dqtype_t, dqtype) 359 __field(xfs_ino_t, ino) 360 __field(unsigned long long, cur_id) 361 __field(unsigned long long, id) 362 __field(xfs_fileoff_t, startoff) 363 __field(xfs_fsblock_t, startblock) 364 __field(xfs_filblks_t, blockcount) 365 __field(xfs_exntst_t, state) 366 ), 367 TP_fast_assign( 368 __entry->dev = cursor->sc->ip->i_mount->m_super->s_dev; 369 __entry->dqtype = cursor->dqtype; 370 __entry->ino = cursor->quota_ip->i_ino; 371 __entry->cur_id = cursor->id; 372 __entry->startoff = cursor->bmap.br_startoff; 373 __entry->startblock = cursor->bmap.br_startblock; 374 __entry->blockcount = cursor->bmap.br_blockcount; 375 __entry->state = cursor->bmap.br_state; 376 __entry->id = id; 377 ), 378 TP_printk("dev %d:%d dquot type %s ino 0x%llx cursor_id 0x%llx startoff 0x%llx startblock 0x%llx blockcount 0x%llx state %u id 0x%llx", 379 MAJOR(__entry->dev), MINOR(__entry->dev), 380 __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS), 381 __entry->ino, 382 __entry->cur_id, 383 __entry->startoff, 384 __entry->startblock, 385 __entry->blockcount, 386 __entry->state, 387 __entry->id) 388 ); 389 390 #define DEFINE_SCRUB_DQITER_EVENT(name) \ 391 DEFINE_EVENT(xchk_dqiter_class, name, \ 392 TP_PROTO(struct xchk_dqiter *cursor, uint64_t id), \ 393 TP_ARGS(cursor, id)) 394 DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_revalidate_bmap); 395 DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_bmap); 396 DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_incore); 397 DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter); 398 #endif /* CONFIG_XFS_QUOTA */ 399 400 TRACE_EVENT(xchk_incomplete, 401 TP_PROTO(struct xfs_scrub *sc, void *ret_ip), 402 TP_ARGS(sc, ret_ip), 403 TP_STRUCT__entry( 404 __field(dev_t, dev) 405 __field(unsigned int, type) 406 __field(void *, ret_ip) 407 ), 408 TP_fast_assign( 409 __entry->dev = sc->mp->m_super->s_dev; 410 __entry->type = sc->sm->sm_type; 411 __entry->ret_ip = ret_ip; 412 ), 413 TP_printk("dev %d:%d type %s ret_ip %pS", 414 MAJOR(__entry->dev), MINOR(__entry->dev), 415 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 416 __entry->ret_ip) 417 ); 418 419 TRACE_EVENT(xchk_btree_op_error, 420 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 421 int level, int error, void *ret_ip), 422 TP_ARGS(sc, cur, level, error, ret_ip), 423 TP_STRUCT__entry( 424 __field(dev_t, dev) 425 __field(unsigned int, type) 426 __field(xfs_btnum_t, btnum) 427 __field(int, level) 428 __field(xfs_agnumber_t, agno) 429 __field(xfs_agblock_t, bno) 430 __field(int, ptr) 431 __field(int, error) 432 __field(void *, ret_ip) 433 ), 434 TP_fast_assign( 435 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 436 437 __entry->dev = sc->mp->m_super->s_dev; 438 __entry->type = sc->sm->sm_type; 439 __entry->btnum = cur->bc_btnum; 440 __entry->level = level; 441 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 442 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 443 __entry->ptr = cur->bc_levels[level].ptr; 444 __entry->error = error; 445 __entry->ret_ip = ret_ip; 446 ), 447 TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS", 448 MAJOR(__entry->dev), MINOR(__entry->dev), 449 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 450 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 451 __entry->level, 452 __entry->ptr, 453 __entry->agno, 454 __entry->bno, 455 __entry->error, 456 __entry->ret_ip) 457 ); 458 459 TRACE_EVENT(xchk_ifork_btree_op_error, 460 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 461 int level, int error, void *ret_ip), 462 TP_ARGS(sc, cur, level, error, ret_ip), 463 TP_STRUCT__entry( 464 __field(dev_t, dev) 465 __field(xfs_ino_t, ino) 466 __field(int, whichfork) 467 __field(unsigned int, type) 468 __field(xfs_btnum_t, btnum) 469 __field(int, level) 470 __field(int, ptr) 471 __field(xfs_agnumber_t, agno) 472 __field(xfs_agblock_t, bno) 473 __field(int, error) 474 __field(void *, ret_ip) 475 ), 476 TP_fast_assign( 477 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 478 __entry->dev = sc->mp->m_super->s_dev; 479 __entry->ino = sc->ip->i_ino; 480 __entry->whichfork = cur->bc_ino.whichfork; 481 __entry->type = sc->sm->sm_type; 482 __entry->btnum = cur->bc_btnum; 483 __entry->level = level; 484 __entry->ptr = cur->bc_levels[level].ptr; 485 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 486 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 487 __entry->error = error; 488 __entry->ret_ip = ret_ip; 489 ), 490 TP_printk("dev %d:%d ino 0x%llx fork %s type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS", 491 MAJOR(__entry->dev), MINOR(__entry->dev), 492 __entry->ino, 493 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS), 494 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 495 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 496 __entry->level, 497 __entry->ptr, 498 __entry->agno, 499 __entry->bno, 500 __entry->error, 501 __entry->ret_ip) 502 ); 503 504 TRACE_EVENT(xchk_btree_error, 505 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 506 int level, void *ret_ip), 507 TP_ARGS(sc, cur, level, ret_ip), 508 TP_STRUCT__entry( 509 __field(dev_t, dev) 510 __field(unsigned int, type) 511 __field(xfs_btnum_t, btnum) 512 __field(int, level) 513 __field(xfs_agnumber_t, agno) 514 __field(xfs_agblock_t, bno) 515 __field(int, ptr) 516 __field(void *, ret_ip) 517 ), 518 TP_fast_assign( 519 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 520 __entry->dev = sc->mp->m_super->s_dev; 521 __entry->type = sc->sm->sm_type; 522 __entry->btnum = cur->bc_btnum; 523 __entry->level = level; 524 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 525 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 526 __entry->ptr = cur->bc_levels[level].ptr; 527 __entry->ret_ip = ret_ip; 528 ), 529 TP_printk("dev %d:%d type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS", 530 MAJOR(__entry->dev), MINOR(__entry->dev), 531 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 532 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 533 __entry->level, 534 __entry->ptr, 535 __entry->agno, 536 __entry->bno, 537 __entry->ret_ip) 538 ); 539 540 TRACE_EVENT(xchk_ifork_btree_error, 541 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 542 int level, void *ret_ip), 543 TP_ARGS(sc, cur, level, ret_ip), 544 TP_STRUCT__entry( 545 __field(dev_t, dev) 546 __field(xfs_ino_t, ino) 547 __field(int, whichfork) 548 __field(unsigned int, type) 549 __field(xfs_btnum_t, btnum) 550 __field(int, level) 551 __field(xfs_agnumber_t, agno) 552 __field(xfs_agblock_t, bno) 553 __field(int, ptr) 554 __field(void *, ret_ip) 555 ), 556 TP_fast_assign( 557 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 558 __entry->dev = sc->mp->m_super->s_dev; 559 __entry->ino = sc->ip->i_ino; 560 __entry->whichfork = cur->bc_ino.whichfork; 561 __entry->type = sc->sm->sm_type; 562 __entry->btnum = cur->bc_btnum; 563 __entry->level = level; 564 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 565 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 566 __entry->ptr = cur->bc_levels[level].ptr; 567 __entry->ret_ip = ret_ip; 568 ), 569 TP_printk("dev %d:%d ino 0x%llx fork %s type %s btree %s level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS", 570 MAJOR(__entry->dev), MINOR(__entry->dev), 571 __entry->ino, 572 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS), 573 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 574 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 575 __entry->level, 576 __entry->ptr, 577 __entry->agno, 578 __entry->bno, 579 __entry->ret_ip) 580 ); 581 582 DECLARE_EVENT_CLASS(xchk_sbtree_class, 583 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, 584 int level), 585 TP_ARGS(sc, cur, level), 586 TP_STRUCT__entry( 587 __field(dev_t, dev) 588 __field(int, type) 589 __field(xfs_btnum_t, btnum) 590 __field(xfs_agnumber_t, agno) 591 __field(xfs_agblock_t, bno) 592 __field(int, level) 593 __field(int, nlevels) 594 __field(int, ptr) 595 ), 596 TP_fast_assign( 597 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); 598 599 __entry->dev = sc->mp->m_super->s_dev; 600 __entry->type = sc->sm->sm_type; 601 __entry->btnum = cur->bc_btnum; 602 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 603 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 604 __entry->level = level; 605 __entry->nlevels = cur->bc_nlevels; 606 __entry->ptr = cur->bc_levels[level].ptr; 607 ), 608 TP_printk("dev %d:%d type %s btree %s agno 0x%x agbno 0x%x level %d nlevels %d ptr %d", 609 MAJOR(__entry->dev), MINOR(__entry->dev), 610 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 611 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 612 __entry->agno, 613 __entry->bno, 614 __entry->level, 615 __entry->nlevels, 616 __entry->ptr) 617 ) 618 #define DEFINE_SCRUB_SBTREE_EVENT(name) \ 619 DEFINE_EVENT(xchk_sbtree_class, name, \ 620 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \ 621 int level), \ 622 TP_ARGS(sc, cur, level)) 623 624 DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec); 625 DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key); 626 627 TRACE_EVENT(xchk_xref_error, 628 TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip), 629 TP_ARGS(sc, error, ret_ip), 630 TP_STRUCT__entry( 631 __field(dev_t, dev) 632 __field(int, type) 633 __field(int, error) 634 __field(void *, ret_ip) 635 ), 636 TP_fast_assign( 637 __entry->dev = sc->mp->m_super->s_dev; 638 __entry->type = sc->sm->sm_type; 639 __entry->error = error; 640 __entry->ret_ip = ret_ip; 641 ), 642 TP_printk("dev %d:%d type %s xref error %d ret_ip %pS", 643 MAJOR(__entry->dev), MINOR(__entry->dev), 644 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 645 __entry->error, 646 __entry->ret_ip) 647 ); 648 649 TRACE_EVENT(xchk_iallocbt_check_cluster, 650 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 651 xfs_agino_t startino, xfs_daddr_t map_daddr, 652 unsigned short map_len, unsigned int chunk_ino, 653 unsigned int nr_inodes, uint16_t cluster_mask, 654 uint16_t holemask, unsigned int cluster_ino), 655 TP_ARGS(mp, agno, startino, map_daddr, map_len, chunk_ino, nr_inodes, 656 cluster_mask, holemask, cluster_ino), 657 TP_STRUCT__entry( 658 __field(dev_t, dev) 659 __field(xfs_agnumber_t, agno) 660 __field(xfs_agino_t, startino) 661 __field(xfs_daddr_t, map_daddr) 662 __field(unsigned short, map_len) 663 __field(unsigned int, chunk_ino) 664 __field(unsigned int, nr_inodes) 665 __field(unsigned int, cluster_ino) 666 __field(uint16_t, cluster_mask) 667 __field(uint16_t, holemask) 668 ), 669 TP_fast_assign( 670 __entry->dev = mp->m_super->s_dev; 671 __entry->agno = agno; 672 __entry->startino = startino; 673 __entry->map_daddr = map_daddr; 674 __entry->map_len = map_len; 675 __entry->chunk_ino = chunk_ino; 676 __entry->nr_inodes = nr_inodes; 677 __entry->cluster_mask = cluster_mask; 678 __entry->holemask = holemask; 679 __entry->cluster_ino = cluster_ino; 680 ), 681 TP_printk("dev %d:%d agno 0x%x startino 0x%x daddr 0x%llx bbcount 0x%x chunkino 0x%x nr_inodes %u cluster_mask 0x%x holemask 0x%x cluster_ino 0x%x", 682 MAJOR(__entry->dev), MINOR(__entry->dev), 683 __entry->agno, 684 __entry->startino, 685 __entry->map_daddr, 686 __entry->map_len, 687 __entry->chunk_ino, 688 __entry->nr_inodes, 689 __entry->cluster_mask, 690 __entry->holemask, 691 __entry->cluster_ino) 692 ) 693 694 TRACE_EVENT(xchk_inode_is_allocated, 695 TP_PROTO(struct xfs_inode *ip), 696 TP_ARGS(ip), 697 TP_STRUCT__entry( 698 __field(dev_t, dev) 699 __field(xfs_ino_t, ino) 700 __field(unsigned long, iflags) 701 __field(umode_t, mode) 702 ), 703 TP_fast_assign( 704 __entry->dev = VFS_I(ip)->i_sb->s_dev; 705 __entry->ino = ip->i_ino; 706 __entry->iflags = ip->i_flags; 707 __entry->mode = VFS_I(ip)->i_mode; 708 ), 709 TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx mode 0x%x", 710 MAJOR(__entry->dev), MINOR(__entry->dev), 711 __entry->ino, 712 __entry->iflags, 713 __entry->mode) 714 ); 715 716 TRACE_EVENT(xchk_fscounters_calc, 717 TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree, 718 uint64_t fdblocks, uint64_t delalloc), 719 TP_ARGS(mp, icount, ifree, fdblocks, delalloc), 720 TP_STRUCT__entry( 721 __field(dev_t, dev) 722 __field(int64_t, icount_sb) 723 __field(uint64_t, icount_calculated) 724 __field(int64_t, ifree_sb) 725 __field(uint64_t, ifree_calculated) 726 __field(int64_t, fdblocks_sb) 727 __field(uint64_t, fdblocks_calculated) 728 __field(uint64_t, delalloc) 729 ), 730 TP_fast_assign( 731 __entry->dev = mp->m_super->s_dev; 732 __entry->icount_sb = mp->m_sb.sb_icount; 733 __entry->icount_calculated = icount; 734 __entry->ifree_sb = mp->m_sb.sb_ifree; 735 __entry->ifree_calculated = ifree; 736 __entry->fdblocks_sb = mp->m_sb.sb_fdblocks; 737 __entry->fdblocks_calculated = fdblocks; 738 __entry->delalloc = delalloc; 739 ), 740 TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu", 741 MAJOR(__entry->dev), MINOR(__entry->dev), 742 __entry->icount_sb, 743 __entry->icount_calculated, 744 __entry->ifree_sb, 745 __entry->ifree_calculated, 746 __entry->fdblocks_sb, 747 __entry->fdblocks_calculated, 748 __entry->delalloc) 749 ) 750 751 TRACE_EVENT(xchk_fscounters_within_range, 752 TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value, 753 int64_t old_value), 754 TP_ARGS(mp, expected, curr_value, old_value), 755 TP_STRUCT__entry( 756 __field(dev_t, dev) 757 __field(uint64_t, expected) 758 __field(int64_t, curr_value) 759 __field(int64_t, old_value) 760 ), 761 TP_fast_assign( 762 __entry->dev = mp->m_super->s_dev; 763 __entry->expected = expected; 764 __entry->curr_value = curr_value; 765 __entry->old_value = old_value; 766 ), 767 TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld", 768 MAJOR(__entry->dev), MINOR(__entry->dev), 769 __entry->expected, 770 __entry->curr_value, 771 __entry->old_value) 772 ) 773 774 DECLARE_EVENT_CLASS(xchk_fsfreeze_class, 775 TP_PROTO(struct xfs_scrub *sc, int error), 776 TP_ARGS(sc, error), 777 TP_STRUCT__entry( 778 __field(dev_t, dev) 779 __field(unsigned int, type) 780 __field(int, error) 781 ), 782 TP_fast_assign( 783 __entry->dev = sc->mp->m_super->s_dev; 784 __entry->type = sc->sm->sm_type; 785 __entry->error = error; 786 ), 787 TP_printk("dev %d:%d type %s error %d", 788 MAJOR(__entry->dev), MINOR(__entry->dev), 789 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS), 790 __entry->error) 791 ); 792 #define DEFINE_XCHK_FSFREEZE_EVENT(name) \ 793 DEFINE_EVENT(xchk_fsfreeze_class, name, \ 794 TP_PROTO(struct xfs_scrub *sc, int error), \ 795 TP_ARGS(sc, error)) 796 DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze); 797 DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw); 798 799 TRACE_EVENT(xchk_refcount_incorrect, 800 TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *irec, 801 xfs_nlink_t seen), 802 TP_ARGS(pag, irec, seen), 803 TP_STRUCT__entry( 804 __field(dev_t, dev) 805 __field(xfs_agnumber_t, agno) 806 __field(enum xfs_refc_domain, domain) 807 __field(xfs_agblock_t, startblock) 808 __field(xfs_extlen_t, blockcount) 809 __field(xfs_nlink_t, refcount) 810 __field(xfs_nlink_t, seen) 811 ), 812 TP_fast_assign( 813 __entry->dev = pag->pag_mount->m_super->s_dev; 814 __entry->agno = pag->pag_agno; 815 __entry->domain = irec->rc_domain; 816 __entry->startblock = irec->rc_startblock; 817 __entry->blockcount = irec->rc_blockcount; 818 __entry->refcount = irec->rc_refcount; 819 __entry->seen = seen; 820 ), 821 TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u", 822 MAJOR(__entry->dev), MINOR(__entry->dev), 823 __entry->agno, 824 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS), 825 __entry->startblock, 826 __entry->blockcount, 827 __entry->refcount, 828 __entry->seen) 829 ) 830 831 TRACE_EVENT(xfile_create, 832 TP_PROTO(struct xfile *xf), 833 TP_ARGS(xf), 834 TP_STRUCT__entry( 835 __field(dev_t, dev) 836 __field(unsigned long, ino) 837 __array(char, pathname, 256) 838 ), 839 TP_fast_assign( 840 char pathname[257]; 841 char *path; 842 843 __entry->ino = file_inode(xf->file)->i_ino; 844 memset(pathname, 0, sizeof(pathname)); 845 path = file_path(xf->file, pathname, sizeof(pathname) - 1); 846 if (IS_ERR(path)) 847 path = "(unknown)"; 848 strncpy(__entry->pathname, path, sizeof(__entry->pathname)); 849 ), 850 TP_printk("xfino 0x%lx path '%s'", 851 __entry->ino, 852 __entry->pathname) 853 ); 854 855 TRACE_EVENT(xfile_destroy, 856 TP_PROTO(struct xfile *xf), 857 TP_ARGS(xf), 858 TP_STRUCT__entry( 859 __field(unsigned long, ino) 860 __field(unsigned long long, bytes) 861 __field(loff_t, size) 862 ), 863 TP_fast_assign( 864 struct inode *inode = file_inode(xf->file); 865 866 __entry->ino = inode->i_ino; 867 __entry->bytes = inode->i_blocks << SECTOR_SHIFT; 868 __entry->size = i_size_read(inode); 869 ), 870 TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx", 871 __entry->ino, 872 __entry->bytes, 873 __entry->size) 874 ); 875 876 DECLARE_EVENT_CLASS(xfile_class, 877 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), 878 TP_ARGS(xf, pos, bytecount), 879 TP_STRUCT__entry( 880 __field(unsigned long, ino) 881 __field(unsigned long long, bytes_used) 882 __field(loff_t, pos) 883 __field(loff_t, size) 884 __field(unsigned long long, bytecount) 885 ), 886 TP_fast_assign( 887 struct inode *inode = file_inode(xf->file); 888 889 __entry->ino = inode->i_ino; 890 __entry->bytes_used = inode->i_blocks << SECTOR_SHIFT; 891 __entry->pos = pos; 892 __entry->size = i_size_read(inode); 893 __entry->bytecount = bytecount; 894 ), 895 TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx", 896 __entry->ino, 897 __entry->bytes_used, 898 __entry->pos, 899 __entry->bytecount, 900 __entry->size) 901 ); 902 #define DEFINE_XFILE_EVENT(name) \ 903 DEFINE_EVENT(xfile_class, name, \ 904 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), \ 905 TP_ARGS(xf, pos, bytecount)) 906 DEFINE_XFILE_EVENT(xfile_load); 907 DEFINE_XFILE_EVENT(xfile_store); 908 DEFINE_XFILE_EVENT(xfile_seek_data); 909 DEFINE_XFILE_EVENT(xfile_get_folio); 910 DEFINE_XFILE_EVENT(xfile_put_folio); 911 912 TRACE_EVENT(xfarray_create, 913 TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity), 914 TP_ARGS(xfa, required_capacity), 915 TP_STRUCT__entry( 916 __field(unsigned long, ino) 917 __field(uint64_t, max_nr) 918 __field(size_t, obj_size) 919 __field(int, obj_size_log) 920 __field(unsigned long long, required_capacity) 921 ), 922 TP_fast_assign( 923 __entry->max_nr = xfa->max_nr; 924 __entry->obj_size = xfa->obj_size; 925 __entry->obj_size_log = xfa->obj_size_log; 926 __entry->ino = file_inode(xfa->xfile->file)->i_ino; 927 __entry->required_capacity = required_capacity; 928 ), 929 TP_printk("xfino 0x%lx max_nr %llu reqd_nr %llu objsz %zu objszlog %d", 930 __entry->ino, 931 __entry->max_nr, 932 __entry->required_capacity, 933 __entry->obj_size, 934 __entry->obj_size_log) 935 ); 936 937 TRACE_EVENT(xfarray_isort, 938 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi), 939 TP_ARGS(si, lo, hi), 940 TP_STRUCT__entry( 941 __field(unsigned long, ino) 942 __field(unsigned long long, lo) 943 __field(unsigned long long, hi) 944 ), 945 TP_fast_assign( 946 __entry->ino = file_inode(si->array->xfile->file)->i_ino; 947 __entry->lo = lo; 948 __entry->hi = hi; 949 ), 950 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu", 951 __entry->ino, 952 __entry->lo, 953 __entry->hi, 954 __entry->hi - __entry->lo) 955 ); 956 957 TRACE_EVENT(xfarray_foliosort, 958 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi), 959 TP_ARGS(si, lo, hi), 960 TP_STRUCT__entry( 961 __field(unsigned long, ino) 962 __field(unsigned long long, lo) 963 __field(unsigned long long, hi) 964 ), 965 TP_fast_assign( 966 __entry->ino = file_inode(si->array->xfile->file)->i_ino; 967 __entry->lo = lo; 968 __entry->hi = hi; 969 ), 970 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu", 971 __entry->ino, 972 __entry->lo, 973 __entry->hi, 974 __entry->hi - __entry->lo) 975 ); 976 977 TRACE_EVENT(xfarray_qsort, 978 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi), 979 TP_ARGS(si, lo, hi), 980 TP_STRUCT__entry( 981 __field(unsigned long, ino) 982 __field(unsigned long long, lo) 983 __field(unsigned long long, hi) 984 __field(int, stack_depth) 985 __field(int, max_stack_depth) 986 ), 987 TP_fast_assign( 988 __entry->ino = file_inode(si->array->xfile->file)->i_ino; 989 __entry->lo = lo; 990 __entry->hi = hi; 991 __entry->stack_depth = si->stack_depth; 992 __entry->max_stack_depth = si->max_stack_depth; 993 ), 994 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu stack %d/%d", 995 __entry->ino, 996 __entry->lo, 997 __entry->hi, 998 __entry->hi - __entry->lo, 999 __entry->stack_depth, 1000 __entry->max_stack_depth) 1001 ); 1002 1003 TRACE_EVENT(xfarray_sort, 1004 TP_PROTO(struct xfarray_sortinfo *si, size_t bytes), 1005 TP_ARGS(si, bytes), 1006 TP_STRUCT__entry( 1007 __field(unsigned long, ino) 1008 __field(unsigned long long, nr) 1009 __field(size_t, obj_size) 1010 __field(size_t, bytes) 1011 __field(unsigned int, max_stack_depth) 1012 ), 1013 TP_fast_assign( 1014 __entry->nr = si->array->nr; 1015 __entry->obj_size = si->array->obj_size; 1016 __entry->ino = file_inode(si->array->xfile->file)->i_ino; 1017 __entry->bytes = bytes; 1018 __entry->max_stack_depth = si->max_stack_depth; 1019 ), 1020 TP_printk("xfino 0x%lx nr %llu objsz %zu stack %u bytes %zu", 1021 __entry->ino, 1022 __entry->nr, 1023 __entry->obj_size, 1024 __entry->max_stack_depth, 1025 __entry->bytes) 1026 ); 1027 1028 TRACE_EVENT(xfarray_sort_scan, 1029 TP_PROTO(struct xfarray_sortinfo *si, unsigned long long idx), 1030 TP_ARGS(si, idx), 1031 TP_STRUCT__entry( 1032 __field(unsigned long, ino) 1033 __field(unsigned long long, nr) 1034 __field(size_t, obj_size) 1035 __field(unsigned long long, idx) 1036 __field(unsigned long long, folio_pos) 1037 __field(unsigned long, folio_bytes) 1038 __field(unsigned long long, first_idx) 1039 __field(unsigned long long, last_idx) 1040 ), 1041 TP_fast_assign( 1042 __entry->nr = si->array->nr; 1043 __entry->obj_size = si->array->obj_size; 1044 __entry->ino = file_inode(si->array->xfile->file)->i_ino; 1045 __entry->idx = idx; 1046 if (si->folio) { 1047 __entry->folio_pos = folio_pos(si->folio); 1048 __entry->folio_bytes = folio_size(si->folio); 1049 __entry->first_idx = si->first_folio_idx; 1050 __entry->last_idx = si->last_folio_idx; 1051 } else { 1052 __entry->folio_pos = 0; 1053 __entry->folio_bytes = 0; 1054 __entry->first_idx = 0; 1055 __entry->last_idx = 0; 1056 } 1057 ), 1058 TP_printk("xfino 0x%lx nr %llu objsz %zu idx %llu folio_pos 0x%llx folio_bytes 0x%lx first_idx %llu last_idx %llu", 1059 __entry->ino, 1060 __entry->nr, 1061 __entry->obj_size, 1062 __entry->idx, 1063 __entry->folio_pos, 1064 __entry->folio_bytes, 1065 __entry->first_idx, 1066 __entry->last_idx) 1067 ); 1068 1069 TRACE_EVENT(xfarray_sort_stats, 1070 TP_PROTO(struct xfarray_sortinfo *si, int error), 1071 TP_ARGS(si, error), 1072 TP_STRUCT__entry( 1073 __field(unsigned long, ino) 1074 #ifdef DEBUG 1075 __field(unsigned long long, loads) 1076 __field(unsigned long long, stores) 1077 __field(unsigned long long, compares) 1078 __field(unsigned long long, heapsorts) 1079 #endif 1080 __field(unsigned int, max_stack_depth) 1081 __field(unsigned int, max_stack_used) 1082 __field(int, error) 1083 ), 1084 TP_fast_assign( 1085 __entry->ino = file_inode(si->array->xfile->file)->i_ino; 1086 #ifdef DEBUG 1087 __entry->loads = si->loads; 1088 __entry->stores = si->stores; 1089 __entry->compares = si->compares; 1090 __entry->heapsorts = si->heapsorts; 1091 #endif 1092 __entry->max_stack_depth = si->max_stack_depth; 1093 __entry->max_stack_used = si->max_stack_used; 1094 __entry->error = error; 1095 ), 1096 TP_printk( 1097 #ifdef DEBUG 1098 "xfino 0x%lx loads %llu stores %llu compares %llu heapsorts %llu stack_depth %u/%u error %d", 1099 #else 1100 "xfino 0x%lx stack_depth %u/%u error %d", 1101 #endif 1102 __entry->ino, 1103 #ifdef DEBUG 1104 __entry->loads, 1105 __entry->stores, 1106 __entry->compares, 1107 __entry->heapsorts, 1108 #endif 1109 __entry->max_stack_used, 1110 __entry->max_stack_depth, 1111 __entry->error) 1112 ); 1113 1114 #ifdef CONFIG_XFS_RT 1115 TRACE_EVENT(xchk_rtsum_record_free, 1116 TP_PROTO(struct xfs_mount *mp, xfs_rtxnum_t start, 1117 xfs_rtbxlen_t len, unsigned int log, loff_t pos, 1118 xfs_suminfo_t value), 1119 TP_ARGS(mp, start, len, log, pos, value), 1120 TP_STRUCT__entry( 1121 __field(dev_t, dev) 1122 __field(dev_t, rtdev) 1123 __field(xfs_rtxnum_t, start) 1124 __field(unsigned long long, len) 1125 __field(unsigned int, log) 1126 __field(loff_t, pos) 1127 __field(xfs_suminfo_t, value) 1128 ), 1129 TP_fast_assign( 1130 __entry->dev = mp->m_super->s_dev; 1131 __entry->rtdev = mp->m_rtdev_targp->bt_dev; 1132 __entry->start = start; 1133 __entry->len = len; 1134 __entry->log = log; 1135 __entry->pos = pos; 1136 __entry->value = value; 1137 ), 1138 TP_printk("dev %d:%d rtdev %d:%d rtx 0x%llx rtxcount 0x%llx log %u rsumpos 0x%llx sumcount %u", 1139 MAJOR(__entry->dev), MINOR(__entry->dev), 1140 MAJOR(__entry->rtdev), MINOR(__entry->rtdev), 1141 __entry->start, 1142 __entry->len, 1143 __entry->log, 1144 __entry->pos, 1145 __entry->value) 1146 ); 1147 #endif /* CONFIG_XFS_RT */ 1148 1149 /* repair tracepoints */ 1150 #if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) 1151 1152 DECLARE_EVENT_CLASS(xrep_extent_class, 1153 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len), 1154 TP_ARGS(pag, agbno, len), 1155 TP_STRUCT__entry( 1156 __field(dev_t, dev) 1157 __field(xfs_agnumber_t, agno) 1158 __field(xfs_agblock_t, agbno) 1159 __field(xfs_extlen_t, len) 1160 ), 1161 TP_fast_assign( 1162 __entry->dev = pag->pag_mount->m_super->s_dev; 1163 __entry->agno = pag->pag_agno; 1164 __entry->agbno = agbno; 1165 __entry->len = len; 1166 ), 1167 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x", 1168 MAJOR(__entry->dev), MINOR(__entry->dev), 1169 __entry->agno, 1170 __entry->agbno, 1171 __entry->len) 1172 ); 1173 #define DEFINE_REPAIR_EXTENT_EVENT(name) \ 1174 DEFINE_EVENT(xrep_extent_class, name, \ 1175 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len), \ 1176 TP_ARGS(pag, agbno, len)) 1177 DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent); 1178 DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent); 1179 DEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval); 1180 DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert); 1181 1182 DECLARE_EVENT_CLASS(xrep_reap_find_class, 1183 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len, 1184 bool crosslinked), 1185 TP_ARGS(pag, agbno, len, crosslinked), 1186 TP_STRUCT__entry( 1187 __field(dev_t, dev) 1188 __field(xfs_agnumber_t, agno) 1189 __field(xfs_agblock_t, agbno) 1190 __field(xfs_extlen_t, len) 1191 __field(bool, crosslinked) 1192 ), 1193 TP_fast_assign( 1194 __entry->dev = pag->pag_mount->m_super->s_dev; 1195 __entry->agno = pag->pag_agno; 1196 __entry->agbno = agbno; 1197 __entry->len = len; 1198 __entry->crosslinked = crosslinked; 1199 ), 1200 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x crosslinked %d", 1201 MAJOR(__entry->dev), MINOR(__entry->dev), 1202 __entry->agno, 1203 __entry->agbno, 1204 __entry->len, 1205 __entry->crosslinked ? 1 : 0) 1206 ); 1207 #define DEFINE_REPAIR_REAP_FIND_EVENT(name) \ 1208 DEFINE_EVENT(xrep_reap_find_class, name, \ 1209 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len, \ 1210 bool crosslinked), \ 1211 TP_ARGS(pag, agbno, len, crosslinked)) 1212 DEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select); 1213 1214 DECLARE_EVENT_CLASS(xrep_rmap_class, 1215 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1216 xfs_agblock_t agbno, xfs_extlen_t len, 1217 uint64_t owner, uint64_t offset, unsigned int flags), 1218 TP_ARGS(mp, agno, agbno, len, owner, offset, flags), 1219 TP_STRUCT__entry( 1220 __field(dev_t, dev) 1221 __field(xfs_agnumber_t, agno) 1222 __field(xfs_agblock_t, agbno) 1223 __field(xfs_extlen_t, len) 1224 __field(uint64_t, owner) 1225 __field(uint64_t, offset) 1226 __field(unsigned int, flags) 1227 ), 1228 TP_fast_assign( 1229 __entry->dev = mp->m_super->s_dev; 1230 __entry->agno = agno; 1231 __entry->agbno = agbno; 1232 __entry->len = len; 1233 __entry->owner = owner; 1234 __entry->offset = offset; 1235 __entry->flags = flags; 1236 ), 1237 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x", 1238 MAJOR(__entry->dev), MINOR(__entry->dev), 1239 __entry->agno, 1240 __entry->agbno, 1241 __entry->len, 1242 __entry->owner, 1243 __entry->offset, 1244 __entry->flags) 1245 ); 1246 #define DEFINE_REPAIR_RMAP_EVENT(name) \ 1247 DEFINE_EVENT(xrep_rmap_class, name, \ 1248 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 1249 xfs_agblock_t agbno, xfs_extlen_t len, \ 1250 uint64_t owner, uint64_t offset, unsigned int flags), \ 1251 TP_ARGS(mp, agno, agbno, len, owner, offset, flags)) 1252 DEFINE_REPAIR_RMAP_EVENT(xrep_ibt_walk_rmap); 1253 DEFINE_REPAIR_RMAP_EVENT(xrep_rmap_extent_fn); 1254 DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_walk_rmap); 1255 1256 TRACE_EVENT(xrep_abt_found, 1257 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1258 const struct xfs_alloc_rec_incore *rec), 1259 TP_ARGS(mp, agno, rec), 1260 TP_STRUCT__entry( 1261 __field(dev_t, dev) 1262 __field(xfs_agnumber_t, agno) 1263 __field(xfs_agblock_t, startblock) 1264 __field(xfs_extlen_t, blockcount) 1265 ), 1266 TP_fast_assign( 1267 __entry->dev = mp->m_super->s_dev; 1268 __entry->agno = agno; 1269 __entry->startblock = rec->ar_startblock; 1270 __entry->blockcount = rec->ar_blockcount; 1271 ), 1272 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x", 1273 MAJOR(__entry->dev), MINOR(__entry->dev), 1274 __entry->agno, 1275 __entry->startblock, 1276 __entry->blockcount) 1277 ) 1278 1279 TRACE_EVENT(xrep_ibt_found, 1280 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1281 const struct xfs_inobt_rec_incore *rec), 1282 TP_ARGS(mp, agno, rec), 1283 TP_STRUCT__entry( 1284 __field(dev_t, dev) 1285 __field(xfs_agnumber_t, agno) 1286 __field(xfs_agino_t, startino) 1287 __field(uint16_t, holemask) 1288 __field(uint8_t, count) 1289 __field(uint8_t, freecount) 1290 __field(uint64_t, freemask) 1291 ), 1292 TP_fast_assign( 1293 __entry->dev = mp->m_super->s_dev; 1294 __entry->agno = agno; 1295 __entry->startino = rec->ir_startino; 1296 __entry->holemask = rec->ir_holemask; 1297 __entry->count = rec->ir_count; 1298 __entry->freecount = rec->ir_freecount; 1299 __entry->freemask = rec->ir_free; 1300 ), 1301 TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x count 0x%x freecount 0x%x freemask 0x%llx", 1302 MAJOR(__entry->dev), MINOR(__entry->dev), 1303 __entry->agno, 1304 __entry->startino, 1305 __entry->holemask, 1306 __entry->count, 1307 __entry->freecount, 1308 __entry->freemask) 1309 ) 1310 1311 TRACE_EVENT(xrep_refc_found, 1312 TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *rec), 1313 TP_ARGS(pag, rec), 1314 TP_STRUCT__entry( 1315 __field(dev_t, dev) 1316 __field(xfs_agnumber_t, agno) 1317 __field(enum xfs_refc_domain, domain) 1318 __field(xfs_agblock_t, startblock) 1319 __field(xfs_extlen_t, blockcount) 1320 __field(xfs_nlink_t, refcount) 1321 ), 1322 TP_fast_assign( 1323 __entry->dev = pag->pag_mount->m_super->s_dev; 1324 __entry->agno = pag->pag_agno; 1325 __entry->domain = rec->rc_domain; 1326 __entry->startblock = rec->rc_startblock; 1327 __entry->blockcount = rec->rc_blockcount; 1328 __entry->refcount = rec->rc_refcount; 1329 ), 1330 TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u", 1331 MAJOR(__entry->dev), MINOR(__entry->dev), 1332 __entry->agno, 1333 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS), 1334 __entry->startblock, 1335 __entry->blockcount, 1336 __entry->refcount) 1337 ) 1338 1339 TRACE_EVENT(xrep_bmap_found, 1340 TP_PROTO(struct xfs_inode *ip, int whichfork, 1341 struct xfs_bmbt_irec *irec), 1342 TP_ARGS(ip, whichfork, irec), 1343 TP_STRUCT__entry( 1344 __field(dev_t, dev) 1345 __field(xfs_ino_t, ino) 1346 __field(int, whichfork) 1347 __field(xfs_fileoff_t, lblk) 1348 __field(xfs_filblks_t, len) 1349 __field(xfs_fsblock_t, pblk) 1350 __field(int, state) 1351 ), 1352 TP_fast_assign( 1353 __entry->dev = VFS_I(ip)->i_sb->s_dev; 1354 __entry->ino = ip->i_ino; 1355 __entry->whichfork = whichfork; 1356 __entry->lblk = irec->br_startoff; 1357 __entry->len = irec->br_blockcount; 1358 __entry->pblk = irec->br_startblock; 1359 __entry->state = irec->br_state; 1360 ), 1361 TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d", 1362 MAJOR(__entry->dev), MINOR(__entry->dev), 1363 __entry->ino, 1364 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS), 1365 __entry->lblk, 1366 __entry->len, 1367 __entry->pblk, 1368 __entry->state) 1369 ); 1370 1371 TRACE_EVENT(xrep_findroot_block, 1372 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 1373 uint32_t magic, uint16_t level), 1374 TP_ARGS(mp, agno, agbno, magic, level), 1375 TP_STRUCT__entry( 1376 __field(dev_t, dev) 1377 __field(xfs_agnumber_t, agno) 1378 __field(xfs_agblock_t, agbno) 1379 __field(uint32_t, magic) 1380 __field(uint16_t, level) 1381 ), 1382 TP_fast_assign( 1383 __entry->dev = mp->m_super->s_dev; 1384 __entry->agno = agno; 1385 __entry->agbno = agbno; 1386 __entry->magic = magic; 1387 __entry->level = level; 1388 ), 1389 TP_printk("dev %d:%d agno 0x%x agbno 0x%x magic 0x%x level %u", 1390 MAJOR(__entry->dev), MINOR(__entry->dev), 1391 __entry->agno, 1392 __entry->agbno, 1393 __entry->magic, 1394 __entry->level) 1395 ) 1396 TRACE_EVENT(xrep_calc_ag_resblks, 1397 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1398 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen, 1399 xfs_agblock_t usedlen), 1400 TP_ARGS(mp, agno, icount, aglen, freelen, usedlen), 1401 TP_STRUCT__entry( 1402 __field(dev_t, dev) 1403 __field(xfs_agnumber_t, agno) 1404 __field(xfs_agino_t, icount) 1405 __field(xfs_agblock_t, aglen) 1406 __field(xfs_agblock_t, freelen) 1407 __field(xfs_agblock_t, usedlen) 1408 ), 1409 TP_fast_assign( 1410 __entry->dev = mp->m_super->s_dev; 1411 __entry->agno = agno; 1412 __entry->icount = icount; 1413 __entry->aglen = aglen; 1414 __entry->freelen = freelen; 1415 __entry->usedlen = usedlen; 1416 ), 1417 TP_printk("dev %d:%d agno 0x%x icount %u aglen %u freelen %u usedlen %u", 1418 MAJOR(__entry->dev), MINOR(__entry->dev), 1419 __entry->agno, 1420 __entry->icount, 1421 __entry->aglen, 1422 __entry->freelen, 1423 __entry->usedlen) 1424 ) 1425 TRACE_EVENT(xrep_calc_ag_resblks_btsize, 1426 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1427 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz, 1428 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz), 1429 TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz), 1430 TP_STRUCT__entry( 1431 __field(dev_t, dev) 1432 __field(xfs_agnumber_t, agno) 1433 __field(xfs_agblock_t, bnobt_sz) 1434 __field(xfs_agblock_t, inobt_sz) 1435 __field(xfs_agblock_t, rmapbt_sz) 1436 __field(xfs_agblock_t, refcbt_sz) 1437 ), 1438 TP_fast_assign( 1439 __entry->dev = mp->m_super->s_dev; 1440 __entry->agno = agno; 1441 __entry->bnobt_sz = bnobt_sz; 1442 __entry->inobt_sz = inobt_sz; 1443 __entry->rmapbt_sz = rmapbt_sz; 1444 __entry->refcbt_sz = refcbt_sz; 1445 ), 1446 TP_printk("dev %d:%d agno 0x%x bnobt %u inobt %u rmapbt %u refcountbt %u", 1447 MAJOR(__entry->dev), MINOR(__entry->dev), 1448 __entry->agno, 1449 __entry->bnobt_sz, 1450 __entry->inobt_sz, 1451 __entry->rmapbt_sz, 1452 __entry->refcbt_sz) 1453 ) 1454 TRACE_EVENT(xrep_reset_counters, 1455 TP_PROTO(struct xfs_mount *mp), 1456 TP_ARGS(mp), 1457 TP_STRUCT__entry( 1458 __field(dev_t, dev) 1459 ), 1460 TP_fast_assign( 1461 __entry->dev = mp->m_super->s_dev; 1462 ), 1463 TP_printk("dev %d:%d", 1464 MAJOR(__entry->dev), MINOR(__entry->dev)) 1465 ) 1466 1467 DECLARE_EVENT_CLASS(xrep_newbt_extent_class, 1468 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1469 xfs_agblock_t agbno, xfs_extlen_t len, 1470 int64_t owner), 1471 TP_ARGS(mp, agno, agbno, len, owner), 1472 TP_STRUCT__entry( 1473 __field(dev_t, dev) 1474 __field(xfs_agnumber_t, agno) 1475 __field(xfs_agblock_t, agbno) 1476 __field(xfs_extlen_t, len) 1477 __field(int64_t, owner) 1478 ), 1479 TP_fast_assign( 1480 __entry->dev = mp->m_super->s_dev; 1481 __entry->agno = agno; 1482 __entry->agbno = agbno; 1483 __entry->len = len; 1484 __entry->owner = owner; 1485 ), 1486 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx", 1487 MAJOR(__entry->dev), MINOR(__entry->dev), 1488 __entry->agno, 1489 __entry->agbno, 1490 __entry->len, 1491 __entry->owner) 1492 ); 1493 #define DEFINE_NEWBT_EXTENT_EVENT(name) \ 1494 DEFINE_EVENT(xrep_newbt_extent_class, name, \ 1495 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 1496 xfs_agblock_t agbno, xfs_extlen_t len, \ 1497 int64_t owner), \ 1498 TP_ARGS(mp, agno, agbno, len, owner)) 1499 DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_ag_blocks); 1500 DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_file_blocks); 1501 DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_free_blocks); 1502 DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_claim_block); 1503 1504 DECLARE_EVENT_CLASS(xrep_dinode_class, 1505 TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip), 1506 TP_ARGS(sc, dip), 1507 TP_STRUCT__entry( 1508 __field(dev_t, dev) 1509 __field(xfs_ino_t, ino) 1510 __field(uint16_t, mode) 1511 __field(uint8_t, version) 1512 __field(uint8_t, format) 1513 __field(uint32_t, uid) 1514 __field(uint32_t, gid) 1515 __field(uint64_t, size) 1516 __field(uint64_t, nblocks) 1517 __field(uint32_t, extsize) 1518 __field(uint32_t, nextents) 1519 __field(uint16_t, anextents) 1520 __field(uint8_t, forkoff) 1521 __field(uint8_t, aformat) 1522 __field(uint16_t, flags) 1523 __field(uint32_t, gen) 1524 __field(uint64_t, flags2) 1525 __field(uint32_t, cowextsize) 1526 ), 1527 TP_fast_assign( 1528 __entry->dev = sc->mp->m_super->s_dev; 1529 __entry->ino = sc->sm->sm_ino; 1530 __entry->mode = be16_to_cpu(dip->di_mode); 1531 __entry->version = dip->di_version; 1532 __entry->format = dip->di_format; 1533 __entry->uid = be32_to_cpu(dip->di_uid); 1534 __entry->gid = be32_to_cpu(dip->di_gid); 1535 __entry->size = be64_to_cpu(dip->di_size); 1536 __entry->nblocks = be64_to_cpu(dip->di_nblocks); 1537 __entry->extsize = be32_to_cpu(dip->di_extsize); 1538 __entry->nextents = be32_to_cpu(dip->di_nextents); 1539 __entry->anextents = be16_to_cpu(dip->di_anextents); 1540 __entry->forkoff = dip->di_forkoff; 1541 __entry->aformat = dip->di_aformat; 1542 __entry->flags = be16_to_cpu(dip->di_flags); 1543 __entry->gen = be32_to_cpu(dip->di_gen); 1544 __entry->flags2 = be64_to_cpu(dip->di_flags2); 1545 __entry->cowextsize = be32_to_cpu(dip->di_cowextsize); 1546 ), 1547 TP_printk("dev %d:%d ino 0x%llx mode 0x%x version %u format %u uid %u gid %u disize 0x%llx nblocks 0x%llx extsize %u nextents %u anextents %u forkoff 0x%x aformat %u flags 0x%x gen 0x%x flags2 0x%llx cowextsize %u", 1548 MAJOR(__entry->dev), MINOR(__entry->dev), 1549 __entry->ino, 1550 __entry->mode, 1551 __entry->version, 1552 __entry->format, 1553 __entry->uid, 1554 __entry->gid, 1555 __entry->size, 1556 __entry->nblocks, 1557 __entry->extsize, 1558 __entry->nextents, 1559 __entry->anextents, 1560 __entry->forkoff, 1561 __entry->aformat, 1562 __entry->flags, 1563 __entry->gen, 1564 __entry->flags2, 1565 __entry->cowextsize) 1566 ) 1567 1568 #define DEFINE_REPAIR_DINODE_EVENT(name) \ 1569 DEFINE_EVENT(xrep_dinode_class, name, \ 1570 TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip), \ 1571 TP_ARGS(sc, dip)) 1572 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_header); 1573 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_mode); 1574 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_flags); 1575 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_size); 1576 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_extsize_hints); 1577 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_symlink); 1578 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dir); 1579 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_fixed); 1580 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_forks); 1581 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dfork); 1582 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_afork); 1583 DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_ensure_forkoff); 1584 1585 DECLARE_EVENT_CLASS(xrep_inode_class, 1586 TP_PROTO(struct xfs_scrub *sc), 1587 TP_ARGS(sc), 1588 TP_STRUCT__entry( 1589 __field(dev_t, dev) 1590 __field(xfs_ino_t, ino) 1591 __field(xfs_fsize_t, size) 1592 __field(xfs_rfsblock_t, nblocks) 1593 __field(uint16_t, flags) 1594 __field(uint64_t, flags2) 1595 __field(uint32_t, nextents) 1596 __field(uint8_t, format) 1597 __field(uint32_t, anextents) 1598 __field(uint8_t, aformat) 1599 ), 1600 TP_fast_assign( 1601 __entry->dev = sc->mp->m_super->s_dev; 1602 __entry->ino = sc->sm->sm_ino; 1603 __entry->size = sc->ip->i_disk_size; 1604 __entry->nblocks = sc->ip->i_nblocks; 1605 __entry->flags = sc->ip->i_diflags; 1606 __entry->flags2 = sc->ip->i_diflags2; 1607 __entry->nextents = sc->ip->i_df.if_nextents; 1608 __entry->format = sc->ip->i_df.if_format; 1609 __entry->anextents = sc->ip->i_af.if_nextents; 1610 __entry->aformat = sc->ip->i_af.if_format; 1611 ), 1612 TP_printk("dev %d:%d ino 0x%llx disize 0x%llx nblocks 0x%llx flags 0x%x flags2 0x%llx nextents %u format %u anextents %u aformat %u", 1613 MAJOR(__entry->dev), MINOR(__entry->dev), 1614 __entry->ino, 1615 __entry->size, 1616 __entry->nblocks, 1617 __entry->flags, 1618 __entry->flags2, 1619 __entry->nextents, 1620 __entry->format, 1621 __entry->anextents, 1622 __entry->aformat) 1623 ) 1624 1625 #define DEFINE_REPAIR_INODE_EVENT(name) \ 1626 DEFINE_EVENT(xrep_inode_class, name, \ 1627 TP_PROTO(struct xfs_scrub *sc), \ 1628 TP_ARGS(sc)) 1629 DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockcounts); 1630 DEFINE_REPAIR_INODE_EVENT(xrep_inode_ids); 1631 DEFINE_REPAIR_INODE_EVENT(xrep_inode_flags); 1632 DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockdir_size); 1633 DEFINE_REPAIR_INODE_EVENT(xrep_inode_sfdir_size); 1634 DEFINE_REPAIR_INODE_EVENT(xrep_inode_dir_size); 1635 DEFINE_REPAIR_INODE_EVENT(xrep_inode_fixed); 1636 1637 TRACE_EVENT(xrep_dinode_count_rmaps, 1638 TP_PROTO(struct xfs_scrub *sc, xfs_rfsblock_t data_blocks, 1639 xfs_rfsblock_t rt_blocks, xfs_rfsblock_t attr_blocks, 1640 xfs_extnum_t data_extents, xfs_extnum_t rt_extents, 1641 xfs_aextnum_t attr_extents), 1642 TP_ARGS(sc, data_blocks, rt_blocks, attr_blocks, data_extents, 1643 rt_extents, attr_extents), 1644 TP_STRUCT__entry( 1645 __field(dev_t, dev) 1646 __field(xfs_ino_t, ino) 1647 __field(xfs_rfsblock_t, data_blocks) 1648 __field(xfs_rfsblock_t, rt_blocks) 1649 __field(xfs_rfsblock_t, attr_blocks) 1650 __field(xfs_extnum_t, data_extents) 1651 __field(xfs_extnum_t, rt_extents) 1652 __field(xfs_aextnum_t, attr_extents) 1653 ), 1654 TP_fast_assign( 1655 __entry->dev = sc->mp->m_super->s_dev; 1656 __entry->ino = sc->sm->sm_ino; 1657 __entry->data_blocks = data_blocks; 1658 __entry->rt_blocks = rt_blocks; 1659 __entry->attr_blocks = attr_blocks; 1660 __entry->data_extents = data_extents; 1661 __entry->rt_extents = rt_extents; 1662 __entry->attr_extents = attr_extents; 1663 ), 1664 TP_printk("dev %d:%d ino 0x%llx dblocks 0x%llx rtblocks 0x%llx ablocks 0x%llx dextents %llu rtextents %llu aextents %u", 1665 MAJOR(__entry->dev), MINOR(__entry->dev), 1666 __entry->ino, 1667 __entry->data_blocks, 1668 __entry->rt_blocks, 1669 __entry->attr_blocks, 1670 __entry->data_extents, 1671 __entry->rt_extents, 1672 __entry->attr_extents) 1673 ); 1674 1675 TRACE_EVENT(xrep_cow_mark_file_range, 1676 TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t startblock, 1677 xfs_fileoff_t startoff, xfs_filblks_t blockcount), 1678 TP_ARGS(ip, startblock, startoff, blockcount), 1679 TP_STRUCT__entry( 1680 __field(dev_t, dev) 1681 __field(xfs_ino_t, ino) 1682 __field(xfs_fsblock_t, startblock) 1683 __field(xfs_fileoff_t, startoff) 1684 __field(xfs_filblks_t, blockcount) 1685 ), 1686 TP_fast_assign( 1687 __entry->dev = ip->i_mount->m_super->s_dev; 1688 __entry->ino = ip->i_ino; 1689 __entry->startoff = startoff; 1690 __entry->startblock = startblock; 1691 __entry->blockcount = blockcount; 1692 ), 1693 TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx", 1694 MAJOR(__entry->dev), MINOR(__entry->dev), 1695 __entry->ino, 1696 __entry->startoff, 1697 __entry->startblock, 1698 __entry->blockcount) 1699 ); 1700 1701 TRACE_EVENT(xrep_cow_replace_mapping, 1702 TP_PROTO(struct xfs_inode *ip, const struct xfs_bmbt_irec *irec, 1703 xfs_fsblock_t new_startblock, xfs_extlen_t new_blockcount), 1704 TP_ARGS(ip, irec, new_startblock, new_blockcount), 1705 TP_STRUCT__entry( 1706 __field(dev_t, dev) 1707 __field(xfs_ino_t, ino) 1708 __field(xfs_fsblock_t, startblock) 1709 __field(xfs_fileoff_t, startoff) 1710 __field(xfs_filblks_t, blockcount) 1711 __field(xfs_exntst_t, state) 1712 __field(xfs_fsblock_t, new_startblock) 1713 __field(xfs_extlen_t, new_blockcount) 1714 ), 1715 TP_fast_assign( 1716 __entry->dev = ip->i_mount->m_super->s_dev; 1717 __entry->ino = ip->i_ino; 1718 __entry->startoff = irec->br_startoff; 1719 __entry->startblock = irec->br_startblock; 1720 __entry->blockcount = irec->br_blockcount; 1721 __entry->state = irec->br_state; 1722 __entry->new_startblock = new_startblock; 1723 __entry->new_blockcount = new_blockcount; 1724 ), 1725 TP_printk("dev %d:%d ino 0x%llx startoff 0x%llx startblock 0x%llx fsbcount 0x%llx state 0x%x new_startblock 0x%llx new_fsbcount 0x%x", 1726 MAJOR(__entry->dev), MINOR(__entry->dev), 1727 __entry->ino, 1728 __entry->startoff, 1729 __entry->startblock, 1730 __entry->blockcount, 1731 __entry->state, 1732 __entry->new_startblock, 1733 __entry->new_blockcount) 1734 ); 1735 1736 TRACE_EVENT(xrep_cow_free_staging, 1737 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, 1738 xfs_extlen_t blockcount), 1739 TP_ARGS(pag, agbno, blockcount), 1740 TP_STRUCT__entry( 1741 __field(dev_t, dev) 1742 __field(xfs_agnumber_t, agno) 1743 __field(xfs_agblock_t, agbno) 1744 __field(xfs_extlen_t, blockcount) 1745 ), 1746 TP_fast_assign( 1747 __entry->dev = pag->pag_mount->m_super->s_dev; 1748 __entry->agno = pag->pag_agno; 1749 __entry->agbno = agbno; 1750 __entry->blockcount = blockcount; 1751 ), 1752 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x", 1753 MAJOR(__entry->dev), MINOR(__entry->dev), 1754 __entry->agno, 1755 __entry->agbno, 1756 __entry->blockcount) 1757 ); 1758 1759 #ifdef CONFIG_XFS_QUOTA 1760 DECLARE_EVENT_CLASS(xrep_dquot_class, 1761 TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id), 1762 TP_ARGS(mp, type, id), 1763 TP_STRUCT__entry( 1764 __field(dev_t, dev) 1765 __field(uint8_t, type) 1766 __field(uint32_t, id) 1767 ), 1768 TP_fast_assign( 1769 __entry->dev = mp->m_super->s_dev; 1770 __entry->id = id; 1771 __entry->type = type; 1772 ), 1773 TP_printk("dev %d:%d type %s id 0x%x", 1774 MAJOR(__entry->dev), MINOR(__entry->dev), 1775 __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 1776 __entry->id) 1777 ); 1778 1779 #define DEFINE_XREP_DQUOT_EVENT(name) \ 1780 DEFINE_EVENT(xrep_dquot_class, name, \ 1781 TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id), \ 1782 TP_ARGS(mp, type, id)) 1783 DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item); 1784 DEFINE_XREP_DQUOT_EVENT(xrep_disk_dquot); 1785 DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item_fill_bmap_hole); 1786 #endif /* CONFIG_XFS_QUOTA */ 1787 1788 #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */ 1789 1790 #endif /* _TRACE_XFS_SCRUB_TRACE_H */ 1791 1792 #undef TRACE_INCLUDE_PATH 1793 #define TRACE_INCLUDE_PATH . 1794 #define TRACE_INCLUDE_FILE scrub/trace 1795 #include <trace/define_trace.h> 1796