1 /* 2 * Copyright (C) 2017 Oracle. All Rights Reserved. 3 * 4 * Author: Darrick J. Wong <darrick.wong@oracle.com> 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it would be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. 19 */ 20 #undef TRACE_SYSTEM 21 #define TRACE_SYSTEM xfs_scrub 22 23 #if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 24 #define _TRACE_XFS_SCRUB_TRACE_H 25 26 #include <linux/tracepoint.h> 27 #include "xfs_bit.h" 28 29 DECLARE_EVENT_CLASS(xfs_scrub_class, 30 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, 31 int error), 32 TP_ARGS(ip, sm, error), 33 TP_STRUCT__entry( 34 __field(dev_t, dev) 35 __field(xfs_ino_t, ino) 36 __field(unsigned int, type) 37 __field(xfs_agnumber_t, agno) 38 __field(xfs_ino_t, inum) 39 __field(unsigned int, gen) 40 __field(unsigned int, flags) 41 __field(int, error) 42 ), 43 TP_fast_assign( 44 __entry->dev = ip->i_mount->m_super->s_dev; 45 __entry->ino = ip->i_ino; 46 __entry->type = sm->sm_type; 47 __entry->agno = sm->sm_agno; 48 __entry->inum = sm->sm_ino; 49 __entry->gen = sm->sm_gen; 50 __entry->flags = sm->sm_flags; 51 __entry->error = error; 52 ), 53 TP_printk("dev %d:%d ino 0x%llx type %u agno %u inum %llu gen %u flags 0x%x error %d", 54 MAJOR(__entry->dev), MINOR(__entry->dev), 55 __entry->ino, 56 __entry->type, 57 __entry->agno, 58 __entry->inum, 59 __entry->gen, 60 __entry->flags, 61 __entry->error) 62 ) 63 #define DEFINE_SCRUB_EVENT(name) \ 64 DEFINE_EVENT(xfs_scrub_class, name, \ 65 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \ 66 int error), \ 67 TP_ARGS(ip, sm, error)) 68 69 DEFINE_SCRUB_EVENT(xfs_scrub_start); 70 DEFINE_SCRUB_EVENT(xfs_scrub_done); 71 DEFINE_SCRUB_EVENT(xfs_scrub_deadlock_retry); 72 DEFINE_SCRUB_EVENT(xfs_repair_attempt); 73 DEFINE_SCRUB_EVENT(xfs_repair_done); 74 75 TRACE_EVENT(xfs_scrub_op_error, 76 TP_PROTO(struct xfs_scrub_context *sc, xfs_agnumber_t agno, 77 xfs_agblock_t bno, int error, void *ret_ip), 78 TP_ARGS(sc, agno, bno, error, ret_ip), 79 TP_STRUCT__entry( 80 __field(dev_t, dev) 81 __field(unsigned int, type) 82 __field(xfs_agnumber_t, agno) 83 __field(xfs_agblock_t, bno) 84 __field(int, error) 85 __field(void *, ret_ip) 86 ), 87 TP_fast_assign( 88 __entry->dev = sc->mp->m_super->s_dev; 89 __entry->type = sc->sm->sm_type; 90 __entry->agno = agno; 91 __entry->bno = bno; 92 __entry->error = error; 93 __entry->ret_ip = ret_ip; 94 ), 95 TP_printk("dev %d:%d type %u agno %u agbno %u error %d ret_ip %pS", 96 MAJOR(__entry->dev), MINOR(__entry->dev), 97 __entry->type, 98 __entry->agno, 99 __entry->bno, 100 __entry->error, 101 __entry->ret_ip) 102 ); 103 104 TRACE_EVENT(xfs_scrub_file_op_error, 105 TP_PROTO(struct xfs_scrub_context *sc, int whichfork, 106 xfs_fileoff_t offset, int error, void *ret_ip), 107 TP_ARGS(sc, whichfork, offset, error, ret_ip), 108 TP_STRUCT__entry( 109 __field(dev_t, dev) 110 __field(xfs_ino_t, ino) 111 __field(int, whichfork) 112 __field(unsigned int, type) 113 __field(xfs_fileoff_t, offset) 114 __field(int, error) 115 __field(void *, ret_ip) 116 ), 117 TP_fast_assign( 118 __entry->dev = sc->ip->i_mount->m_super->s_dev; 119 __entry->ino = sc->ip->i_ino; 120 __entry->whichfork = whichfork; 121 __entry->type = sc->sm->sm_type; 122 __entry->offset = offset; 123 __entry->error = error; 124 __entry->ret_ip = ret_ip; 125 ), 126 TP_printk("dev %d:%d ino 0x%llx fork %d type %u offset %llu error %d ret_ip %pS", 127 MAJOR(__entry->dev), MINOR(__entry->dev), 128 __entry->ino, 129 __entry->whichfork, 130 __entry->type, 131 __entry->offset, 132 __entry->error, 133 __entry->ret_ip) 134 ); 135 136 DECLARE_EVENT_CLASS(xfs_scrub_block_error_class, 137 TP_PROTO(struct xfs_scrub_context *sc, xfs_daddr_t daddr, void *ret_ip), 138 TP_ARGS(sc, daddr, ret_ip), 139 TP_STRUCT__entry( 140 __field(dev_t, dev) 141 __field(unsigned int, type) 142 __field(xfs_agnumber_t, agno) 143 __field(xfs_agblock_t, bno) 144 __field(void *, ret_ip) 145 ), 146 TP_fast_assign( 147 xfs_fsblock_t fsbno; 148 xfs_agnumber_t agno; 149 xfs_agblock_t bno; 150 151 fsbno = XFS_DADDR_TO_FSB(sc->mp, daddr); 152 agno = XFS_FSB_TO_AGNO(sc->mp, fsbno); 153 bno = XFS_FSB_TO_AGBNO(sc->mp, fsbno); 154 155 __entry->dev = sc->mp->m_super->s_dev; 156 __entry->type = sc->sm->sm_type; 157 __entry->agno = agno; 158 __entry->bno = bno; 159 __entry->ret_ip = ret_ip; 160 ), 161 TP_printk("dev %d:%d type %u agno %u agbno %u ret_ip %pS", 162 MAJOR(__entry->dev), MINOR(__entry->dev), 163 __entry->type, 164 __entry->agno, 165 __entry->bno, 166 __entry->ret_ip) 167 ) 168 169 #define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \ 170 DEFINE_EVENT(xfs_scrub_block_error_class, name, \ 171 TP_PROTO(struct xfs_scrub_context *sc, xfs_daddr_t daddr, \ 172 void *ret_ip), \ 173 TP_ARGS(sc, daddr, ret_ip)) 174 175 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_error); 176 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_preen); 177 178 DECLARE_EVENT_CLASS(xfs_scrub_ino_error_class, 179 TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, void *ret_ip), 180 TP_ARGS(sc, ino, ret_ip), 181 TP_STRUCT__entry( 182 __field(dev_t, dev) 183 __field(xfs_ino_t, ino) 184 __field(unsigned int, type) 185 __field(void *, ret_ip) 186 ), 187 TP_fast_assign( 188 __entry->dev = sc->mp->m_super->s_dev; 189 __entry->ino = ino; 190 __entry->type = sc->sm->sm_type; 191 __entry->ret_ip = ret_ip; 192 ), 193 TP_printk("dev %d:%d ino 0x%llx type %u ret_ip %pS", 194 MAJOR(__entry->dev), MINOR(__entry->dev), 195 __entry->ino, 196 __entry->type, 197 __entry->ret_ip) 198 ) 199 200 #define DEFINE_SCRUB_INO_ERROR_EVENT(name) \ 201 DEFINE_EVENT(xfs_scrub_ino_error_class, name, \ 202 TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, \ 203 void *ret_ip), \ 204 TP_ARGS(sc, ino, ret_ip)) 205 206 DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_error); 207 DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_preen); 208 DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_warning); 209 210 DECLARE_EVENT_CLASS(xfs_scrub_fblock_error_class, 211 TP_PROTO(struct xfs_scrub_context *sc, int whichfork, 212 xfs_fileoff_t offset, void *ret_ip), 213 TP_ARGS(sc, whichfork, offset, ret_ip), 214 TP_STRUCT__entry( 215 __field(dev_t, dev) 216 __field(xfs_ino_t, ino) 217 __field(int, whichfork) 218 __field(unsigned int, type) 219 __field(xfs_fileoff_t, offset) 220 __field(void *, ret_ip) 221 ), 222 TP_fast_assign( 223 __entry->dev = sc->ip->i_mount->m_super->s_dev; 224 __entry->ino = sc->ip->i_ino; 225 __entry->whichfork = whichfork; 226 __entry->type = sc->sm->sm_type; 227 __entry->offset = offset; 228 __entry->ret_ip = ret_ip; 229 ), 230 TP_printk("dev %d:%d ino 0x%llx fork %d type %u offset %llu ret_ip %pS", 231 MAJOR(__entry->dev), MINOR(__entry->dev), 232 __entry->ino, 233 __entry->whichfork, 234 __entry->type, 235 __entry->offset, 236 __entry->ret_ip) 237 ); 238 239 #define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \ 240 DEFINE_EVENT(xfs_scrub_fblock_error_class, name, \ 241 TP_PROTO(struct xfs_scrub_context *sc, int whichfork, \ 242 xfs_fileoff_t offset, void *ret_ip), \ 243 TP_ARGS(sc, whichfork, offset, ret_ip)) 244 245 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xfs_scrub_fblock_error); 246 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xfs_scrub_fblock_warning); 247 248 TRACE_EVENT(xfs_scrub_incomplete, 249 TP_PROTO(struct xfs_scrub_context *sc, void *ret_ip), 250 TP_ARGS(sc, ret_ip), 251 TP_STRUCT__entry( 252 __field(dev_t, dev) 253 __field(unsigned int, type) 254 __field(void *, ret_ip) 255 ), 256 TP_fast_assign( 257 __entry->dev = sc->mp->m_super->s_dev; 258 __entry->type = sc->sm->sm_type; 259 __entry->ret_ip = ret_ip; 260 ), 261 TP_printk("dev %d:%d type %u ret_ip %pS", 262 MAJOR(__entry->dev), MINOR(__entry->dev), 263 __entry->type, 264 __entry->ret_ip) 265 ); 266 267 TRACE_EVENT(xfs_scrub_btree_op_error, 268 TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, 269 int level, int error, void *ret_ip), 270 TP_ARGS(sc, cur, level, error, ret_ip), 271 TP_STRUCT__entry( 272 __field(dev_t, dev) 273 __field(unsigned int, type) 274 __field(xfs_btnum_t, btnum) 275 __field(int, level) 276 __field(xfs_agnumber_t, agno) 277 __field(xfs_agblock_t, bno) 278 __field(int, ptr); 279 __field(int, error) 280 __field(void *, ret_ip) 281 ), 282 TP_fast_assign( 283 xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level); 284 285 __entry->dev = sc->mp->m_super->s_dev; 286 __entry->type = sc->sm->sm_type; 287 __entry->btnum = cur->bc_btnum; 288 __entry->level = level; 289 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 290 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 291 __entry->ptr = cur->bc_ptrs[level]; 292 __entry->error = error; 293 __entry->ret_ip = ret_ip; 294 ), 295 TP_printk("dev %d:%d type %u btnum %d level %d ptr %d agno %u agbno %u error %d ret_ip %pS", 296 MAJOR(__entry->dev), MINOR(__entry->dev), 297 __entry->type, 298 __entry->btnum, 299 __entry->level, 300 __entry->ptr, 301 __entry->agno, 302 __entry->bno, 303 __entry->error, 304 __entry->ret_ip) 305 ); 306 307 TRACE_EVENT(xfs_scrub_ifork_btree_op_error, 308 TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, 309 int level, int error, void *ret_ip), 310 TP_ARGS(sc, cur, level, error, ret_ip), 311 TP_STRUCT__entry( 312 __field(dev_t, dev) 313 __field(xfs_ino_t, ino) 314 __field(int, whichfork) 315 __field(unsigned int, type) 316 __field(xfs_btnum_t, btnum) 317 __field(int, level) 318 __field(int, ptr) 319 __field(xfs_agnumber_t, agno) 320 __field(xfs_agblock_t, bno) 321 __field(int, error) 322 __field(void *, ret_ip) 323 ), 324 TP_fast_assign( 325 xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level); 326 __entry->dev = sc->mp->m_super->s_dev; 327 __entry->ino = sc->ip->i_ino; 328 __entry->whichfork = cur->bc_private.b.whichfork; 329 __entry->type = sc->sm->sm_type; 330 __entry->btnum = cur->bc_btnum; 331 __entry->level = level; 332 __entry->ptr = cur->bc_ptrs[level]; 333 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 334 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 335 __entry->error = error; 336 __entry->ret_ip = ret_ip; 337 ), 338 TP_printk("dev %d:%d ino 0x%llx fork %d type %u btnum %d level %d ptr %d agno %u agbno %u error %d ret_ip %pS", 339 MAJOR(__entry->dev), MINOR(__entry->dev), 340 __entry->ino, 341 __entry->whichfork, 342 __entry->type, 343 __entry->btnum, 344 __entry->level, 345 __entry->ptr, 346 __entry->agno, 347 __entry->bno, 348 __entry->error, 349 __entry->ret_ip) 350 ); 351 352 TRACE_EVENT(xfs_scrub_btree_error, 353 TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, 354 int level, void *ret_ip), 355 TP_ARGS(sc, cur, level, ret_ip), 356 TP_STRUCT__entry( 357 __field(dev_t, dev) 358 __field(unsigned int, type) 359 __field(xfs_btnum_t, btnum) 360 __field(int, level) 361 __field(xfs_agnumber_t, agno) 362 __field(xfs_agblock_t, bno) 363 __field(int, ptr); 364 __field(void *, ret_ip) 365 ), 366 TP_fast_assign( 367 xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level); 368 __entry->dev = sc->mp->m_super->s_dev; 369 __entry->type = sc->sm->sm_type; 370 __entry->btnum = cur->bc_btnum; 371 __entry->level = level; 372 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 373 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 374 __entry->ptr = cur->bc_ptrs[level]; 375 __entry->ret_ip = ret_ip; 376 ), 377 TP_printk("dev %d:%d type %u btnum %d level %d ptr %d agno %u agbno %u ret_ip %pS", 378 MAJOR(__entry->dev), MINOR(__entry->dev), 379 __entry->type, 380 __entry->btnum, 381 __entry->level, 382 __entry->ptr, 383 __entry->agno, 384 __entry->bno, 385 __entry->ret_ip) 386 ); 387 388 TRACE_EVENT(xfs_scrub_ifork_btree_error, 389 TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, 390 int level, void *ret_ip), 391 TP_ARGS(sc, cur, level, ret_ip), 392 TP_STRUCT__entry( 393 __field(dev_t, dev) 394 __field(xfs_ino_t, ino) 395 __field(int, whichfork) 396 __field(unsigned int, type) 397 __field(xfs_btnum_t, btnum) 398 __field(int, level) 399 __field(xfs_agnumber_t, agno) 400 __field(xfs_agblock_t, bno) 401 __field(int, ptr); 402 __field(void *, ret_ip) 403 ), 404 TP_fast_assign( 405 xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level); 406 __entry->dev = sc->mp->m_super->s_dev; 407 __entry->ino = sc->ip->i_ino; 408 __entry->whichfork = cur->bc_private.b.whichfork; 409 __entry->type = sc->sm->sm_type; 410 __entry->btnum = cur->bc_btnum; 411 __entry->level = level; 412 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 413 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 414 __entry->ptr = cur->bc_ptrs[level]; 415 __entry->ret_ip = ret_ip; 416 ), 417 TP_printk("dev %d:%d ino 0x%llx fork %d type %u btnum %d level %d ptr %d agno %u agbno %u ret_ip %pS", 418 MAJOR(__entry->dev), MINOR(__entry->dev), 419 __entry->ino, 420 __entry->whichfork, 421 __entry->type, 422 __entry->btnum, 423 __entry->level, 424 __entry->ptr, 425 __entry->agno, 426 __entry->bno, 427 __entry->ret_ip) 428 ); 429 430 DECLARE_EVENT_CLASS(xfs_scrub_sbtree_class, 431 TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, 432 int level), 433 TP_ARGS(sc, cur, level), 434 TP_STRUCT__entry( 435 __field(dev_t, dev) 436 __field(int, type) 437 __field(xfs_btnum_t, btnum) 438 __field(xfs_agnumber_t, agno) 439 __field(xfs_agblock_t, bno) 440 __field(int, level) 441 __field(int, nlevels) 442 __field(int, ptr) 443 ), 444 TP_fast_assign( 445 xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level); 446 447 __entry->dev = sc->mp->m_super->s_dev; 448 __entry->type = sc->sm->sm_type; 449 __entry->btnum = cur->bc_btnum; 450 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno); 451 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno); 452 __entry->level = level; 453 __entry->nlevels = cur->bc_nlevels; 454 __entry->ptr = cur->bc_ptrs[level]; 455 ), 456 TP_printk("dev %d:%d type %u btnum %d agno %u agbno %u level %d nlevels %d ptr %d", 457 MAJOR(__entry->dev), MINOR(__entry->dev), 458 __entry->type, 459 __entry->btnum, 460 __entry->agno, 461 __entry->bno, 462 __entry->level, 463 __entry->nlevels, 464 __entry->ptr) 465 ) 466 #define DEFINE_SCRUB_SBTREE_EVENT(name) \ 467 DEFINE_EVENT(xfs_scrub_sbtree_class, name, \ 468 TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, \ 469 int level), \ 470 TP_ARGS(sc, cur, level)) 471 472 DEFINE_SCRUB_SBTREE_EVENT(xfs_scrub_btree_rec); 473 DEFINE_SCRUB_SBTREE_EVENT(xfs_scrub_btree_key); 474 475 TRACE_EVENT(xfs_scrub_xref_error, 476 TP_PROTO(struct xfs_scrub_context *sc, int error, void *ret_ip), 477 TP_ARGS(sc, error, ret_ip), 478 TP_STRUCT__entry( 479 __field(dev_t, dev) 480 __field(int, type) 481 __field(int, error) 482 __field(void *, ret_ip) 483 ), 484 TP_fast_assign( 485 __entry->dev = sc->mp->m_super->s_dev; 486 __entry->type = sc->sm->sm_type; 487 __entry->error = error; 488 __entry->ret_ip = ret_ip; 489 ), 490 TP_printk("dev %d:%d type %u xref error %d ret_ip %pF", 491 MAJOR(__entry->dev), MINOR(__entry->dev), 492 __entry->type, 493 __entry->error, 494 __entry->ret_ip) 495 ); 496 497 /* repair tracepoints */ 498 #if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) 499 500 DECLARE_EVENT_CLASS(xfs_repair_extent_class, 501 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 502 xfs_agblock_t agbno, xfs_extlen_t len), 503 TP_ARGS(mp, agno, agbno, len), 504 TP_STRUCT__entry( 505 __field(dev_t, dev) 506 __field(xfs_agnumber_t, agno) 507 __field(xfs_agblock_t, agbno) 508 __field(xfs_extlen_t, len) 509 ), 510 TP_fast_assign( 511 __entry->dev = mp->m_super->s_dev; 512 __entry->agno = agno; 513 __entry->agbno = agbno; 514 __entry->len = len; 515 ), 516 TP_printk("dev %d:%d agno %u agbno %u len %u", 517 MAJOR(__entry->dev), MINOR(__entry->dev), 518 __entry->agno, 519 __entry->agbno, 520 __entry->len) 521 ); 522 #define DEFINE_REPAIR_EXTENT_EVENT(name) \ 523 DEFINE_EVENT(xfs_repair_extent_class, name, \ 524 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 525 xfs_agblock_t agbno, xfs_extlen_t len), \ 526 TP_ARGS(mp, agno, agbno, len)) 527 DEFINE_REPAIR_EXTENT_EVENT(xfs_repair_dispose_btree_extent); 528 DEFINE_REPAIR_EXTENT_EVENT(xfs_repair_collect_btree_extent); 529 DEFINE_REPAIR_EXTENT_EVENT(xfs_repair_agfl_insert); 530 531 DECLARE_EVENT_CLASS(xfs_repair_rmap_class, 532 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 533 xfs_agblock_t agbno, xfs_extlen_t len, 534 uint64_t owner, uint64_t offset, unsigned int flags), 535 TP_ARGS(mp, agno, agbno, len, owner, offset, flags), 536 TP_STRUCT__entry( 537 __field(dev_t, dev) 538 __field(xfs_agnumber_t, agno) 539 __field(xfs_agblock_t, agbno) 540 __field(xfs_extlen_t, len) 541 __field(uint64_t, owner) 542 __field(uint64_t, offset) 543 __field(unsigned int, flags) 544 ), 545 TP_fast_assign( 546 __entry->dev = mp->m_super->s_dev; 547 __entry->agno = agno; 548 __entry->agbno = agbno; 549 __entry->len = len; 550 __entry->owner = owner; 551 __entry->offset = offset; 552 __entry->flags = flags; 553 ), 554 TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x", 555 MAJOR(__entry->dev), MINOR(__entry->dev), 556 __entry->agno, 557 __entry->agbno, 558 __entry->len, 559 __entry->owner, 560 __entry->offset, 561 __entry->flags) 562 ); 563 #define DEFINE_REPAIR_RMAP_EVENT(name) \ 564 DEFINE_EVENT(xfs_repair_rmap_class, name, \ 565 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 566 xfs_agblock_t agbno, xfs_extlen_t len, \ 567 uint64_t owner, uint64_t offset, unsigned int flags), \ 568 TP_ARGS(mp, agno, agbno, len, owner, offset, flags)) 569 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_alloc_extent_fn); 570 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_ialloc_extent_fn); 571 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_rmap_extent_fn); 572 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_bmap_extent_fn); 573 574 TRACE_EVENT(xfs_repair_refcount_extent_fn, 575 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 576 struct xfs_refcount_irec *irec), 577 TP_ARGS(mp, agno, irec), 578 TP_STRUCT__entry( 579 __field(dev_t, dev) 580 __field(xfs_agnumber_t, agno) 581 __field(xfs_agblock_t, startblock) 582 __field(xfs_extlen_t, blockcount) 583 __field(xfs_nlink_t, refcount) 584 ), 585 TP_fast_assign( 586 __entry->dev = mp->m_super->s_dev; 587 __entry->agno = agno; 588 __entry->startblock = irec->rc_startblock; 589 __entry->blockcount = irec->rc_blockcount; 590 __entry->refcount = irec->rc_refcount; 591 ), 592 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u", 593 MAJOR(__entry->dev), MINOR(__entry->dev), 594 __entry->agno, 595 __entry->startblock, 596 __entry->blockcount, 597 __entry->refcount) 598 ) 599 600 TRACE_EVENT(xfs_repair_init_btblock, 601 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 602 xfs_btnum_t btnum), 603 TP_ARGS(mp, agno, agbno, btnum), 604 TP_STRUCT__entry( 605 __field(dev_t, dev) 606 __field(xfs_agnumber_t, agno) 607 __field(xfs_agblock_t, agbno) 608 __field(uint32_t, btnum) 609 ), 610 TP_fast_assign( 611 __entry->dev = mp->m_super->s_dev; 612 __entry->agno = agno; 613 __entry->agbno = agbno; 614 __entry->btnum = btnum; 615 ), 616 TP_printk("dev %d:%d agno %u agbno %u btnum %d", 617 MAJOR(__entry->dev), MINOR(__entry->dev), 618 __entry->agno, 619 __entry->agbno, 620 __entry->btnum) 621 ) 622 TRACE_EVENT(xfs_repair_findroot_block, 623 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 624 uint32_t magic, uint16_t level), 625 TP_ARGS(mp, agno, agbno, magic, level), 626 TP_STRUCT__entry( 627 __field(dev_t, dev) 628 __field(xfs_agnumber_t, agno) 629 __field(xfs_agblock_t, agbno) 630 __field(uint32_t, magic) 631 __field(uint16_t, level) 632 ), 633 TP_fast_assign( 634 __entry->dev = mp->m_super->s_dev; 635 __entry->agno = agno; 636 __entry->agbno = agbno; 637 __entry->magic = magic; 638 __entry->level = level; 639 ), 640 TP_printk("dev %d:%d agno %u agbno %u magic 0x%x level %u", 641 MAJOR(__entry->dev), MINOR(__entry->dev), 642 __entry->agno, 643 __entry->agbno, 644 __entry->magic, 645 __entry->level) 646 ) 647 TRACE_EVENT(xfs_repair_calc_ag_resblks, 648 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 649 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen, 650 xfs_agblock_t usedlen), 651 TP_ARGS(mp, agno, icount, aglen, freelen, usedlen), 652 TP_STRUCT__entry( 653 __field(dev_t, dev) 654 __field(xfs_agnumber_t, agno) 655 __field(xfs_agino_t, icount) 656 __field(xfs_agblock_t, aglen) 657 __field(xfs_agblock_t, freelen) 658 __field(xfs_agblock_t, usedlen) 659 ), 660 TP_fast_assign( 661 __entry->dev = mp->m_super->s_dev; 662 __entry->agno = agno; 663 __entry->icount = icount; 664 __entry->aglen = aglen; 665 __entry->freelen = freelen; 666 __entry->usedlen = usedlen; 667 ), 668 TP_printk("dev %d:%d agno %d icount %u aglen %u freelen %u usedlen %u", 669 MAJOR(__entry->dev), MINOR(__entry->dev), 670 __entry->agno, 671 __entry->icount, 672 __entry->aglen, 673 __entry->freelen, 674 __entry->usedlen) 675 ) 676 TRACE_EVENT(xfs_repair_calc_ag_resblks_btsize, 677 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 678 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz, 679 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz), 680 TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz), 681 TP_STRUCT__entry( 682 __field(dev_t, dev) 683 __field(xfs_agnumber_t, agno) 684 __field(xfs_agblock_t, bnobt_sz) 685 __field(xfs_agblock_t, inobt_sz) 686 __field(xfs_agblock_t, rmapbt_sz) 687 __field(xfs_agblock_t, refcbt_sz) 688 ), 689 TP_fast_assign( 690 __entry->dev = mp->m_super->s_dev; 691 __entry->agno = agno; 692 __entry->bnobt_sz = bnobt_sz; 693 __entry->inobt_sz = inobt_sz; 694 __entry->rmapbt_sz = rmapbt_sz; 695 __entry->refcbt_sz = refcbt_sz; 696 ), 697 TP_printk("dev %d:%d agno %d bno %u ino %u rmap %u refcount %u", 698 MAJOR(__entry->dev), MINOR(__entry->dev), 699 __entry->agno, 700 __entry->bnobt_sz, 701 __entry->inobt_sz, 702 __entry->rmapbt_sz, 703 __entry->refcbt_sz) 704 ) 705 TRACE_EVENT(xfs_repair_reset_counters, 706 TP_PROTO(struct xfs_mount *mp), 707 TP_ARGS(mp), 708 TP_STRUCT__entry( 709 __field(dev_t, dev) 710 ), 711 TP_fast_assign( 712 __entry->dev = mp->m_super->s_dev; 713 ), 714 TP_printk("dev %d:%d", 715 MAJOR(__entry->dev), MINOR(__entry->dev)) 716 ) 717 718 TRACE_EVENT(xfs_repair_ialloc_insert, 719 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 720 xfs_agino_t startino, uint16_t holemask, uint8_t count, 721 uint8_t freecount, uint64_t freemask), 722 TP_ARGS(mp, agno, startino, holemask, count, freecount, freemask), 723 TP_STRUCT__entry( 724 __field(dev_t, dev) 725 __field(xfs_agnumber_t, agno) 726 __field(xfs_agino_t, startino) 727 __field(uint16_t, holemask) 728 __field(uint8_t, count) 729 __field(uint8_t, freecount) 730 __field(uint64_t, freemask) 731 ), 732 TP_fast_assign( 733 __entry->dev = mp->m_super->s_dev; 734 __entry->agno = agno; 735 __entry->startino = startino; 736 __entry->holemask = holemask; 737 __entry->count = count; 738 __entry->freecount = freecount; 739 __entry->freemask = freemask; 740 ), 741 TP_printk("dev %d:%d agno %d startino %u holemask 0x%x count %u freecount %u freemask 0x%llx", 742 MAJOR(__entry->dev), MINOR(__entry->dev), 743 __entry->agno, 744 __entry->startino, 745 __entry->holemask, 746 __entry->count, 747 __entry->freecount, 748 __entry->freemask) 749 ) 750 751 #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */ 752 753 #endif /* _TRACE_XFS_SCRUB_TRACE_H */ 754 755 #undef TRACE_INCLUDE_PATH 756 #define TRACE_INCLUDE_PATH . 757 #define TRACE_INCLUDE_FILE scrub/trace 758 #include <trace/define_trace.h> 759