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