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