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