1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2009, Christoph Hellwig 4 * All Rights Reserved. 5 */ 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM xfs 8 9 #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ) 10 #define _TRACE_XFS_H 11 12 #include <linux/tracepoint.h> 13 14 struct xfs_agf; 15 struct xfs_alloc_arg; 16 struct xfs_attr_list_context; 17 struct xfs_buf_log_item; 18 struct xfs_da_args; 19 struct xfs_da_node_entry; 20 struct xfs_dquot; 21 struct xfs_log_item; 22 struct xlog; 23 struct xlog_ticket; 24 struct xlog_recover; 25 struct xlog_recover_item; 26 struct xlog_rec_header; 27 struct xfs_buf_log_format; 28 struct xfs_inode_log_format; 29 struct xfs_bmbt_irec; 30 struct xfs_btree_cur; 31 struct xfs_refcount_irec; 32 struct xfs_fsmap; 33 struct xfs_rmap_irec; 34 struct xfs_icreate_log; 35 struct xfs_owner_info; 36 struct xfs_trans_res; 37 struct xfs_inobt_rec_incore; 38 union xfs_btree_ptr; 39 struct xfs_dqtrx; 40 struct xfs_eofblocks; 41 42 #define XFS_ATTR_FILTER_FLAGS \ 43 { XFS_ATTR_ROOT, "ROOT" }, \ 44 { XFS_ATTR_SECURE, "SECURE" }, \ 45 { XFS_ATTR_INCOMPLETE, "INCOMPLETE" } 46 47 DECLARE_EVENT_CLASS(xfs_attr_list_class, 48 TP_PROTO(struct xfs_attr_list_context *ctx), 49 TP_ARGS(ctx), 50 TP_STRUCT__entry( 51 __field(dev_t, dev) 52 __field(xfs_ino_t, ino) 53 __field(u32, hashval) 54 __field(u32, blkno) 55 __field(u32, offset) 56 __field(void *, buffer) 57 __field(int, bufsize) 58 __field(int, count) 59 __field(int, firstu) 60 __field(int, dupcnt) 61 __field(unsigned int, attr_filter) 62 ), 63 TP_fast_assign( 64 __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; 65 __entry->ino = ctx->dp->i_ino; 66 __entry->hashval = ctx->cursor.hashval; 67 __entry->blkno = ctx->cursor.blkno; 68 __entry->offset = ctx->cursor.offset; 69 __entry->buffer = ctx->buffer; 70 __entry->bufsize = ctx->bufsize; 71 __entry->count = ctx->count; 72 __entry->firstu = ctx->firstu; 73 __entry->attr_filter = ctx->attr_filter; 74 ), 75 TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u " 76 "buffer %p size %u count %u firstu %u filter %s", 77 MAJOR(__entry->dev), MINOR(__entry->dev), 78 __entry->ino, 79 __entry->hashval, 80 __entry->blkno, 81 __entry->offset, 82 __entry->dupcnt, 83 __entry->buffer, 84 __entry->bufsize, 85 __entry->count, 86 __entry->firstu, 87 __print_flags(__entry->attr_filter, "|", 88 XFS_ATTR_FILTER_FLAGS) 89 ) 90 ) 91 92 #define DEFINE_ATTR_LIST_EVENT(name) \ 93 DEFINE_EVENT(xfs_attr_list_class, name, \ 94 TP_PROTO(struct xfs_attr_list_context *ctx), \ 95 TP_ARGS(ctx)) 96 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf); 97 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all); 98 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf); 99 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end); 100 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full); 101 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add); 102 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk); 103 DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound); 104 DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list); 105 DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list); 106 107 TRACE_EVENT(xlog_intent_recovery_failed, 108 TP_PROTO(struct xfs_mount *mp, int error, void *function), 109 TP_ARGS(mp, error, function), 110 TP_STRUCT__entry( 111 __field(dev_t, dev) 112 __field(int, error) 113 __field(void *, function) 114 ), 115 TP_fast_assign( 116 __entry->dev = mp->m_super->s_dev; 117 __entry->error = error; 118 __entry->function = function; 119 ), 120 TP_printk("dev %d:%d error %d function %pS", 121 MAJOR(__entry->dev), MINOR(__entry->dev), 122 __entry->error, __entry->function) 123 ); 124 125 DECLARE_EVENT_CLASS(xfs_perag_class, 126 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount, 127 unsigned long caller_ip), 128 TP_ARGS(mp, agno, refcount, caller_ip), 129 TP_STRUCT__entry( 130 __field(dev_t, dev) 131 __field(xfs_agnumber_t, agno) 132 __field(int, refcount) 133 __field(unsigned long, caller_ip) 134 ), 135 TP_fast_assign( 136 __entry->dev = mp->m_super->s_dev; 137 __entry->agno = agno; 138 __entry->refcount = refcount; 139 __entry->caller_ip = caller_ip; 140 ), 141 TP_printk("dev %d:%d agno %u refcount %d caller %pS", 142 MAJOR(__entry->dev), MINOR(__entry->dev), 143 __entry->agno, 144 __entry->refcount, 145 (char *)__entry->caller_ip) 146 ); 147 148 #define DEFINE_PERAG_REF_EVENT(name) \ 149 DEFINE_EVENT(xfs_perag_class, name, \ 150 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount, \ 151 unsigned long caller_ip), \ 152 TP_ARGS(mp, agno, refcount, caller_ip)) 153 DEFINE_PERAG_REF_EVENT(xfs_perag_get); 154 DEFINE_PERAG_REF_EVENT(xfs_perag_get_tag); 155 DEFINE_PERAG_REF_EVENT(xfs_perag_put); 156 DEFINE_PERAG_REF_EVENT(xfs_perag_set_reclaim); 157 DEFINE_PERAG_REF_EVENT(xfs_perag_clear_reclaim); 158 DEFINE_PERAG_REF_EVENT(xfs_perag_set_blockgc); 159 DEFINE_PERAG_REF_EVENT(xfs_perag_clear_blockgc); 160 161 DECLARE_EVENT_CLASS(xfs_ag_class, 162 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno), 163 TP_ARGS(mp, agno), 164 TP_STRUCT__entry( 165 __field(dev_t, dev) 166 __field(xfs_agnumber_t, agno) 167 ), 168 TP_fast_assign( 169 __entry->dev = mp->m_super->s_dev; 170 __entry->agno = agno; 171 ), 172 TP_printk("dev %d:%d agno %u", 173 MAJOR(__entry->dev), MINOR(__entry->dev), 174 __entry->agno) 175 ); 176 #define DEFINE_AG_EVENT(name) \ 177 DEFINE_EVENT(xfs_ag_class, name, \ 178 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno), \ 179 TP_ARGS(mp, agno)) 180 181 DEFINE_AG_EVENT(xfs_read_agf); 182 DEFINE_AG_EVENT(xfs_alloc_read_agf); 183 DEFINE_AG_EVENT(xfs_read_agi); 184 DEFINE_AG_EVENT(xfs_ialloc_read_agi); 185 186 TRACE_EVENT(xfs_attr_list_node_descend, 187 TP_PROTO(struct xfs_attr_list_context *ctx, 188 struct xfs_da_node_entry *btree), 189 TP_ARGS(ctx, btree), 190 TP_STRUCT__entry( 191 __field(dev_t, dev) 192 __field(xfs_ino_t, ino) 193 __field(u32, hashval) 194 __field(u32, blkno) 195 __field(u32, offset) 196 __field(void *, buffer) 197 __field(int, bufsize) 198 __field(int, count) 199 __field(int, firstu) 200 __field(int, dupcnt) 201 __field(unsigned int, attr_filter) 202 __field(u32, bt_hashval) 203 __field(u32, bt_before) 204 ), 205 TP_fast_assign( 206 __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; 207 __entry->ino = ctx->dp->i_ino; 208 __entry->hashval = ctx->cursor.hashval; 209 __entry->blkno = ctx->cursor.blkno; 210 __entry->offset = ctx->cursor.offset; 211 __entry->buffer = ctx->buffer; 212 __entry->bufsize = ctx->bufsize; 213 __entry->count = ctx->count; 214 __entry->firstu = ctx->firstu; 215 __entry->attr_filter = ctx->attr_filter; 216 __entry->bt_hashval = be32_to_cpu(btree->hashval); 217 __entry->bt_before = be32_to_cpu(btree->before); 218 ), 219 TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u " 220 "buffer %p size %u count %u firstu %u filter %s " 221 "node hashval %u, node before %u", 222 MAJOR(__entry->dev), MINOR(__entry->dev), 223 __entry->ino, 224 __entry->hashval, 225 __entry->blkno, 226 __entry->offset, 227 __entry->dupcnt, 228 __entry->buffer, 229 __entry->bufsize, 230 __entry->count, 231 __entry->firstu, 232 __print_flags(__entry->attr_filter, "|", 233 XFS_ATTR_FILTER_FLAGS), 234 __entry->bt_hashval, 235 __entry->bt_before) 236 ); 237 238 DECLARE_EVENT_CLASS(xfs_bmap_class, 239 TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, 240 unsigned long caller_ip), 241 TP_ARGS(ip, cur, state, caller_ip), 242 TP_STRUCT__entry( 243 __field(dev_t, dev) 244 __field(xfs_ino_t, ino) 245 __field(void *, leaf) 246 __field(int, pos) 247 __field(xfs_fileoff_t, startoff) 248 __field(xfs_fsblock_t, startblock) 249 __field(xfs_filblks_t, blockcount) 250 __field(xfs_exntst_t, state) 251 __field(int, bmap_state) 252 __field(unsigned long, caller_ip) 253 ), 254 TP_fast_assign( 255 struct xfs_ifork *ifp; 256 struct xfs_bmbt_irec r; 257 258 ifp = xfs_iext_state_to_fork(ip, state); 259 xfs_iext_get_extent(ifp, cur, &r); 260 __entry->dev = VFS_I(ip)->i_sb->s_dev; 261 __entry->ino = ip->i_ino; 262 __entry->leaf = cur->leaf; 263 __entry->pos = cur->pos; 264 __entry->startoff = r.br_startoff; 265 __entry->startblock = r.br_startblock; 266 __entry->blockcount = r.br_blockcount; 267 __entry->state = r.br_state; 268 __entry->bmap_state = state; 269 __entry->caller_ip = caller_ip; 270 ), 271 TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d " 272 "offset %lld block %lld count %lld flag %d caller %pS", 273 MAJOR(__entry->dev), MINOR(__entry->dev), 274 __entry->ino, 275 __print_flags(__entry->bmap_state, "|", XFS_BMAP_EXT_FLAGS), 276 __entry->leaf, 277 __entry->pos, 278 __entry->startoff, 279 (int64_t)__entry->startblock, 280 __entry->blockcount, 281 __entry->state, 282 (char *)__entry->caller_ip) 283 ) 284 285 #define DEFINE_BMAP_EVENT(name) \ 286 DEFINE_EVENT(xfs_bmap_class, name, \ 287 TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \ 288 unsigned long caller_ip), \ 289 TP_ARGS(ip, cur, state, caller_ip)) 290 DEFINE_BMAP_EVENT(xfs_iext_insert); 291 DEFINE_BMAP_EVENT(xfs_iext_remove); 292 DEFINE_BMAP_EVENT(xfs_bmap_pre_update); 293 DEFINE_BMAP_EVENT(xfs_bmap_post_update); 294 DEFINE_BMAP_EVENT(xfs_read_extent); 295 DEFINE_BMAP_EVENT(xfs_write_extent); 296 297 DECLARE_EVENT_CLASS(xfs_buf_class, 298 TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), 299 TP_ARGS(bp, caller_ip), 300 TP_STRUCT__entry( 301 __field(dev_t, dev) 302 __field(xfs_daddr_t, bno) 303 __field(int, nblks) 304 __field(int, hold) 305 __field(int, pincount) 306 __field(unsigned, lockval) 307 __field(unsigned, flags) 308 __field(unsigned long, caller_ip) 309 ), 310 TP_fast_assign( 311 __entry->dev = bp->b_target->bt_dev; 312 if (bp->b_bn == XFS_BUF_DADDR_NULL) 313 __entry->bno = bp->b_maps[0].bm_bn; 314 else 315 __entry->bno = bp->b_bn; 316 __entry->nblks = bp->b_length; 317 __entry->hold = atomic_read(&bp->b_hold); 318 __entry->pincount = atomic_read(&bp->b_pin_count); 319 __entry->lockval = bp->b_sema.count; 320 __entry->flags = bp->b_flags; 321 __entry->caller_ip = caller_ip; 322 ), 323 TP_printk("dev %d:%d bno 0x%llx nblks 0x%x hold %d pincount %d " 324 "lock %d flags %s caller %pS", 325 MAJOR(__entry->dev), MINOR(__entry->dev), 326 (unsigned long long)__entry->bno, 327 __entry->nblks, 328 __entry->hold, 329 __entry->pincount, 330 __entry->lockval, 331 __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), 332 (void *)__entry->caller_ip) 333 ) 334 335 #define DEFINE_BUF_EVENT(name) \ 336 DEFINE_EVENT(xfs_buf_class, name, \ 337 TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \ 338 TP_ARGS(bp, caller_ip)) 339 DEFINE_BUF_EVENT(xfs_buf_init); 340 DEFINE_BUF_EVENT(xfs_buf_free); 341 DEFINE_BUF_EVENT(xfs_buf_hold); 342 DEFINE_BUF_EVENT(xfs_buf_rele); 343 DEFINE_BUF_EVENT(xfs_buf_iodone); 344 DEFINE_BUF_EVENT(xfs_buf_submit); 345 DEFINE_BUF_EVENT(xfs_buf_lock); 346 DEFINE_BUF_EVENT(xfs_buf_lock_done); 347 DEFINE_BUF_EVENT(xfs_buf_trylock_fail); 348 DEFINE_BUF_EVENT(xfs_buf_trylock); 349 DEFINE_BUF_EVENT(xfs_buf_unlock); 350 DEFINE_BUF_EVENT(xfs_buf_iowait); 351 DEFINE_BUF_EVENT(xfs_buf_iowait_done); 352 DEFINE_BUF_EVENT(xfs_buf_delwri_queue); 353 DEFINE_BUF_EVENT(xfs_buf_delwri_queued); 354 DEFINE_BUF_EVENT(xfs_buf_delwri_split); 355 DEFINE_BUF_EVENT(xfs_buf_delwri_pushbuf); 356 DEFINE_BUF_EVENT(xfs_buf_get_uncached); 357 DEFINE_BUF_EVENT(xfs_buf_item_relse); 358 DEFINE_BUF_EVENT(xfs_buf_iodone_async); 359 DEFINE_BUF_EVENT(xfs_buf_error_relse); 360 DEFINE_BUF_EVENT(xfs_buf_drain_buftarg); 361 DEFINE_BUF_EVENT(xfs_trans_read_buf_shut); 362 363 /* not really buffer traces, but the buf provides useful information */ 364 DEFINE_BUF_EVENT(xfs_btree_corrupt); 365 DEFINE_BUF_EVENT(xfs_reset_dqcounts); 366 367 /* pass flags explicitly */ 368 DECLARE_EVENT_CLASS(xfs_buf_flags_class, 369 TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), 370 TP_ARGS(bp, flags, caller_ip), 371 TP_STRUCT__entry( 372 __field(dev_t, dev) 373 __field(xfs_daddr_t, bno) 374 __field(size_t, buffer_length) 375 __field(int, hold) 376 __field(int, pincount) 377 __field(unsigned, lockval) 378 __field(unsigned, flags) 379 __field(unsigned long, caller_ip) 380 ), 381 TP_fast_assign( 382 __entry->dev = bp->b_target->bt_dev; 383 __entry->bno = bp->b_bn; 384 __entry->buffer_length = BBTOB(bp->b_length); 385 __entry->flags = flags; 386 __entry->hold = atomic_read(&bp->b_hold); 387 __entry->pincount = atomic_read(&bp->b_pin_count); 388 __entry->lockval = bp->b_sema.count; 389 __entry->caller_ip = caller_ip; 390 ), 391 TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d " 392 "lock %d flags %s caller %pS", 393 MAJOR(__entry->dev), MINOR(__entry->dev), 394 (unsigned long long)__entry->bno, 395 __entry->buffer_length, 396 __entry->hold, 397 __entry->pincount, 398 __entry->lockval, 399 __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), 400 (void *)__entry->caller_ip) 401 ) 402 403 #define DEFINE_BUF_FLAGS_EVENT(name) \ 404 DEFINE_EVENT(xfs_buf_flags_class, name, \ 405 TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \ 406 TP_ARGS(bp, flags, caller_ip)) 407 DEFINE_BUF_FLAGS_EVENT(xfs_buf_find); 408 DEFINE_BUF_FLAGS_EVENT(xfs_buf_get); 409 DEFINE_BUF_FLAGS_EVENT(xfs_buf_read); 410 411 TRACE_EVENT(xfs_buf_ioerror, 412 TP_PROTO(struct xfs_buf *bp, int error, xfs_failaddr_t caller_ip), 413 TP_ARGS(bp, error, caller_ip), 414 TP_STRUCT__entry( 415 __field(dev_t, dev) 416 __field(xfs_daddr_t, bno) 417 __field(size_t, buffer_length) 418 __field(unsigned, flags) 419 __field(int, hold) 420 __field(int, pincount) 421 __field(unsigned, lockval) 422 __field(int, error) 423 __field(xfs_failaddr_t, caller_ip) 424 ), 425 TP_fast_assign( 426 __entry->dev = bp->b_target->bt_dev; 427 __entry->bno = bp->b_bn; 428 __entry->buffer_length = BBTOB(bp->b_length); 429 __entry->hold = atomic_read(&bp->b_hold); 430 __entry->pincount = atomic_read(&bp->b_pin_count); 431 __entry->lockval = bp->b_sema.count; 432 __entry->error = error; 433 __entry->flags = bp->b_flags; 434 __entry->caller_ip = caller_ip; 435 ), 436 TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d " 437 "lock %d error %d flags %s caller %pS", 438 MAJOR(__entry->dev), MINOR(__entry->dev), 439 (unsigned long long)__entry->bno, 440 __entry->buffer_length, 441 __entry->hold, 442 __entry->pincount, 443 __entry->lockval, 444 __entry->error, 445 __print_flags(__entry->flags, "|", XFS_BUF_FLAGS), 446 (void *)__entry->caller_ip) 447 ); 448 449 DECLARE_EVENT_CLASS(xfs_buf_item_class, 450 TP_PROTO(struct xfs_buf_log_item *bip), 451 TP_ARGS(bip), 452 TP_STRUCT__entry( 453 __field(dev_t, dev) 454 __field(xfs_daddr_t, buf_bno) 455 __field(size_t, buf_len) 456 __field(int, buf_hold) 457 __field(int, buf_pincount) 458 __field(int, buf_lockval) 459 __field(unsigned, buf_flags) 460 __field(unsigned, bli_recur) 461 __field(int, bli_refcount) 462 __field(unsigned, bli_flags) 463 __field(unsigned long, li_flags) 464 ), 465 TP_fast_assign( 466 __entry->dev = bip->bli_buf->b_target->bt_dev; 467 __entry->bli_flags = bip->bli_flags; 468 __entry->bli_recur = bip->bli_recur; 469 __entry->bli_refcount = atomic_read(&bip->bli_refcount); 470 __entry->buf_bno = bip->bli_buf->b_bn; 471 __entry->buf_len = BBTOB(bip->bli_buf->b_length); 472 __entry->buf_flags = bip->bli_buf->b_flags; 473 __entry->buf_hold = atomic_read(&bip->bli_buf->b_hold); 474 __entry->buf_pincount = atomic_read(&bip->bli_buf->b_pin_count); 475 __entry->buf_lockval = bip->bli_buf->b_sema.count; 476 __entry->li_flags = bip->bli_item.li_flags; 477 ), 478 TP_printk("dev %d:%d bno 0x%llx len 0x%zx hold %d pincount %d " 479 "lock %d flags %s recur %d refcount %d bliflags %s " 480 "liflags %s", 481 MAJOR(__entry->dev), MINOR(__entry->dev), 482 (unsigned long long)__entry->buf_bno, 483 __entry->buf_len, 484 __entry->buf_hold, 485 __entry->buf_pincount, 486 __entry->buf_lockval, 487 __print_flags(__entry->buf_flags, "|", XFS_BUF_FLAGS), 488 __entry->bli_recur, 489 __entry->bli_refcount, 490 __print_flags(__entry->bli_flags, "|", XFS_BLI_FLAGS), 491 __print_flags(__entry->li_flags, "|", XFS_LI_FLAGS)) 492 ) 493 494 #define DEFINE_BUF_ITEM_EVENT(name) \ 495 DEFINE_EVENT(xfs_buf_item_class, name, \ 496 TP_PROTO(struct xfs_buf_log_item *bip), \ 497 TP_ARGS(bip)) 498 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size); 499 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered); 500 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale); 501 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format); 502 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale); 503 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered); 504 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin); 505 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin); 506 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale); 507 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release); 508 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed); 509 DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push); 510 DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf); 511 DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur); 512 DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb); 513 DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur); 514 DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf); 515 DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur); 516 DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf); 517 DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse); 518 DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin); 519 DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold); 520 DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release); 521 DEFINE_BUF_ITEM_EVENT(xfs_trans_binval); 522 523 DECLARE_EVENT_CLASS(xfs_filestream_class, 524 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno), 525 TP_ARGS(mp, ino, agno), 526 TP_STRUCT__entry( 527 __field(dev_t, dev) 528 __field(xfs_ino_t, ino) 529 __field(xfs_agnumber_t, agno) 530 __field(int, streams) 531 ), 532 TP_fast_assign( 533 __entry->dev = mp->m_super->s_dev; 534 __entry->ino = ino; 535 __entry->agno = agno; 536 __entry->streams = xfs_filestream_peek_ag(mp, agno); 537 ), 538 TP_printk("dev %d:%d ino 0x%llx agno %u streams %d", 539 MAJOR(__entry->dev), MINOR(__entry->dev), 540 __entry->ino, 541 __entry->agno, 542 __entry->streams) 543 ) 544 #define DEFINE_FILESTREAM_EVENT(name) \ 545 DEFINE_EVENT(xfs_filestream_class, name, \ 546 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino, xfs_agnumber_t agno), \ 547 TP_ARGS(mp, ino, agno)) 548 DEFINE_FILESTREAM_EVENT(xfs_filestream_free); 549 DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup); 550 DEFINE_FILESTREAM_EVENT(xfs_filestream_scan); 551 552 TRACE_EVENT(xfs_filestream_pick, 553 TP_PROTO(struct xfs_inode *ip, xfs_agnumber_t agno, 554 xfs_extlen_t free, int nscan), 555 TP_ARGS(ip, agno, free, nscan), 556 TP_STRUCT__entry( 557 __field(dev_t, dev) 558 __field(xfs_ino_t, ino) 559 __field(xfs_agnumber_t, agno) 560 __field(int, streams) 561 __field(xfs_extlen_t, free) 562 __field(int, nscan) 563 ), 564 TP_fast_assign( 565 __entry->dev = VFS_I(ip)->i_sb->s_dev; 566 __entry->ino = ip->i_ino; 567 __entry->agno = agno; 568 __entry->streams = xfs_filestream_peek_ag(ip->i_mount, agno); 569 __entry->free = free; 570 __entry->nscan = nscan; 571 ), 572 TP_printk("dev %d:%d ino 0x%llx agno %u streams %d free %d nscan %d", 573 MAJOR(__entry->dev), MINOR(__entry->dev), 574 __entry->ino, 575 __entry->agno, 576 __entry->streams, 577 __entry->free, 578 __entry->nscan) 579 ); 580 581 DECLARE_EVENT_CLASS(xfs_lock_class, 582 TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, 583 unsigned long caller_ip), 584 TP_ARGS(ip, lock_flags, caller_ip), 585 TP_STRUCT__entry( 586 __field(dev_t, dev) 587 __field(xfs_ino_t, ino) 588 __field(int, lock_flags) 589 __field(unsigned long, caller_ip) 590 ), 591 TP_fast_assign( 592 __entry->dev = VFS_I(ip)->i_sb->s_dev; 593 __entry->ino = ip->i_ino; 594 __entry->lock_flags = lock_flags; 595 __entry->caller_ip = caller_ip; 596 ), 597 TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS", 598 MAJOR(__entry->dev), MINOR(__entry->dev), 599 __entry->ino, 600 __print_flags(__entry->lock_flags, "|", XFS_LOCK_FLAGS), 601 (void *)__entry->caller_ip) 602 ) 603 604 #define DEFINE_LOCK_EVENT(name) \ 605 DEFINE_EVENT(xfs_lock_class, name, \ 606 TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \ 607 unsigned long caller_ip), \ 608 TP_ARGS(ip, lock_flags, caller_ip)) 609 DEFINE_LOCK_EVENT(xfs_ilock); 610 DEFINE_LOCK_EVENT(xfs_ilock_nowait); 611 DEFINE_LOCK_EVENT(xfs_ilock_demote); 612 DEFINE_LOCK_EVENT(xfs_iunlock); 613 614 DECLARE_EVENT_CLASS(xfs_inode_class, 615 TP_PROTO(struct xfs_inode *ip), 616 TP_ARGS(ip), 617 TP_STRUCT__entry( 618 __field(dev_t, dev) 619 __field(xfs_ino_t, ino) 620 ), 621 TP_fast_assign( 622 __entry->dev = VFS_I(ip)->i_sb->s_dev; 623 __entry->ino = ip->i_ino; 624 ), 625 TP_printk("dev %d:%d ino 0x%llx", 626 MAJOR(__entry->dev), MINOR(__entry->dev), 627 __entry->ino) 628 ) 629 630 #define DEFINE_INODE_EVENT(name) \ 631 DEFINE_EVENT(xfs_inode_class, name, \ 632 TP_PROTO(struct xfs_inode *ip), \ 633 TP_ARGS(ip)) 634 DEFINE_INODE_EVENT(xfs_iget_skip); 635 DEFINE_INODE_EVENT(xfs_iget_reclaim); 636 DEFINE_INODE_EVENT(xfs_iget_reclaim_fail); 637 DEFINE_INODE_EVENT(xfs_iget_hit); 638 DEFINE_INODE_EVENT(xfs_iget_miss); 639 640 DEFINE_INODE_EVENT(xfs_getattr); 641 DEFINE_INODE_EVENT(xfs_setattr); 642 DEFINE_INODE_EVENT(xfs_readlink); 643 DEFINE_INODE_EVENT(xfs_inactive_symlink); 644 DEFINE_INODE_EVENT(xfs_alloc_file_space); 645 DEFINE_INODE_EVENT(xfs_free_file_space); 646 DEFINE_INODE_EVENT(xfs_zero_file_space); 647 DEFINE_INODE_EVENT(xfs_collapse_file_space); 648 DEFINE_INODE_EVENT(xfs_insert_file_space); 649 DEFINE_INODE_EVENT(xfs_readdir); 650 #ifdef CONFIG_XFS_POSIX_ACL 651 DEFINE_INODE_EVENT(xfs_get_acl); 652 #endif 653 DEFINE_INODE_EVENT(xfs_vm_bmap); 654 DEFINE_INODE_EVENT(xfs_file_ioctl); 655 DEFINE_INODE_EVENT(xfs_file_compat_ioctl); 656 DEFINE_INODE_EVENT(xfs_ioctl_setattr); 657 DEFINE_INODE_EVENT(xfs_dir_fsync); 658 DEFINE_INODE_EVENT(xfs_file_fsync); 659 DEFINE_INODE_EVENT(xfs_destroy_inode); 660 DEFINE_INODE_EVENT(xfs_update_time); 661 662 DEFINE_INODE_EVENT(xfs_dquot_dqalloc); 663 DEFINE_INODE_EVENT(xfs_dquot_dqdetach); 664 665 DEFINE_INODE_EVENT(xfs_inode_set_eofblocks_tag); 666 DEFINE_INODE_EVENT(xfs_inode_clear_eofblocks_tag); 667 DEFINE_INODE_EVENT(xfs_inode_free_eofblocks_invalid); 668 DEFINE_INODE_EVENT(xfs_inode_set_cowblocks_tag); 669 DEFINE_INODE_EVENT(xfs_inode_clear_cowblocks_tag); 670 DEFINE_INODE_EVENT(xfs_inode_free_cowblocks_invalid); 671 672 /* 673 * ftrace's __print_symbolic requires that all enum values be wrapped in the 674 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace 675 * ring buffer. Somehow this was only worth mentioning in the ftrace sample 676 * code. 677 */ 678 TRACE_DEFINE_ENUM(PE_SIZE_PTE); 679 TRACE_DEFINE_ENUM(PE_SIZE_PMD); 680 TRACE_DEFINE_ENUM(PE_SIZE_PUD); 681 682 TRACE_EVENT(xfs_filemap_fault, 683 TP_PROTO(struct xfs_inode *ip, enum page_entry_size pe_size, 684 bool write_fault), 685 TP_ARGS(ip, pe_size, write_fault), 686 TP_STRUCT__entry( 687 __field(dev_t, dev) 688 __field(xfs_ino_t, ino) 689 __field(enum page_entry_size, pe_size) 690 __field(bool, write_fault) 691 ), 692 TP_fast_assign( 693 __entry->dev = VFS_I(ip)->i_sb->s_dev; 694 __entry->ino = ip->i_ino; 695 __entry->pe_size = pe_size; 696 __entry->write_fault = write_fault; 697 ), 698 TP_printk("dev %d:%d ino 0x%llx %s write_fault %d", 699 MAJOR(__entry->dev), MINOR(__entry->dev), 700 __entry->ino, 701 __print_symbolic(__entry->pe_size, 702 { PE_SIZE_PTE, "PTE" }, 703 { PE_SIZE_PMD, "PMD" }, 704 { PE_SIZE_PUD, "PUD" }), 705 __entry->write_fault) 706 ) 707 708 DECLARE_EVENT_CLASS(xfs_iref_class, 709 TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), 710 TP_ARGS(ip, caller_ip), 711 TP_STRUCT__entry( 712 __field(dev_t, dev) 713 __field(xfs_ino_t, ino) 714 __field(int, count) 715 __field(int, pincount) 716 __field(unsigned long, caller_ip) 717 ), 718 TP_fast_assign( 719 __entry->dev = VFS_I(ip)->i_sb->s_dev; 720 __entry->ino = ip->i_ino; 721 __entry->count = atomic_read(&VFS_I(ip)->i_count); 722 __entry->pincount = atomic_read(&ip->i_pincount); 723 __entry->caller_ip = caller_ip; 724 ), 725 TP_printk("dev %d:%d ino 0x%llx count %d pincount %d caller %pS", 726 MAJOR(__entry->dev), MINOR(__entry->dev), 727 __entry->ino, 728 __entry->count, 729 __entry->pincount, 730 (char *)__entry->caller_ip) 731 ) 732 733 TRACE_EVENT(xfs_iomap_prealloc_size, 734 TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t blocks, int shift, 735 unsigned int writeio_blocks), 736 TP_ARGS(ip, blocks, shift, writeio_blocks), 737 TP_STRUCT__entry( 738 __field(dev_t, dev) 739 __field(xfs_ino_t, ino) 740 __field(xfs_fsblock_t, blocks) 741 __field(int, shift) 742 __field(unsigned int, writeio_blocks) 743 ), 744 TP_fast_assign( 745 __entry->dev = VFS_I(ip)->i_sb->s_dev; 746 __entry->ino = ip->i_ino; 747 __entry->blocks = blocks; 748 __entry->shift = shift; 749 __entry->writeio_blocks = writeio_blocks; 750 ), 751 TP_printk("dev %d:%d ino 0x%llx prealloc blocks %llu shift %d " 752 "m_allocsize_blocks %u", 753 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, 754 __entry->blocks, __entry->shift, __entry->writeio_blocks) 755 ) 756 757 TRACE_EVENT(xfs_irec_merge_pre, 758 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino, 759 uint16_t holemask, xfs_agino_t nagino, uint16_t nholemask), 760 TP_ARGS(mp, agno, agino, holemask, nagino, nholemask), 761 TP_STRUCT__entry( 762 __field(dev_t, dev) 763 __field(xfs_agnumber_t, agno) 764 __field(xfs_agino_t, agino) 765 __field(uint16_t, holemask) 766 __field(xfs_agino_t, nagino) 767 __field(uint16_t, nholemask) 768 ), 769 TP_fast_assign( 770 __entry->dev = mp->m_super->s_dev; 771 __entry->agno = agno; 772 __entry->agino = agino; 773 __entry->holemask = holemask; 774 __entry->nagino = nagino; 775 __entry->nholemask = holemask; 776 ), 777 TP_printk("dev %d:%d agno %d inobt (%u:0x%x) new (%u:0x%x)", 778 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, 779 __entry->agino, __entry->holemask, __entry->nagino, 780 __entry->nholemask) 781 ) 782 783 TRACE_EVENT(xfs_irec_merge_post, 784 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino, 785 uint16_t holemask), 786 TP_ARGS(mp, agno, agino, holemask), 787 TP_STRUCT__entry( 788 __field(dev_t, dev) 789 __field(xfs_agnumber_t, agno) 790 __field(xfs_agino_t, agino) 791 __field(uint16_t, holemask) 792 ), 793 TP_fast_assign( 794 __entry->dev = mp->m_super->s_dev; 795 __entry->agno = agno; 796 __entry->agino = agino; 797 __entry->holemask = holemask; 798 ), 799 TP_printk("dev %d:%d agno %d inobt (%u:0x%x)", MAJOR(__entry->dev), 800 MINOR(__entry->dev), __entry->agno, __entry->agino, 801 __entry->holemask) 802 ) 803 804 #define DEFINE_IREF_EVENT(name) \ 805 DEFINE_EVENT(xfs_iref_class, name, \ 806 TP_PROTO(struct xfs_inode *ip, unsigned long caller_ip), \ 807 TP_ARGS(ip, caller_ip)) 808 DEFINE_IREF_EVENT(xfs_irele); 809 DEFINE_IREF_EVENT(xfs_inode_pin); 810 DEFINE_IREF_EVENT(xfs_inode_unpin); 811 DEFINE_IREF_EVENT(xfs_inode_unpin_nowait); 812 813 DECLARE_EVENT_CLASS(xfs_namespace_class, 814 TP_PROTO(struct xfs_inode *dp, struct xfs_name *name), 815 TP_ARGS(dp, name), 816 TP_STRUCT__entry( 817 __field(dev_t, dev) 818 __field(xfs_ino_t, dp_ino) 819 __field(int, namelen) 820 __dynamic_array(char, name, name->len) 821 ), 822 TP_fast_assign( 823 __entry->dev = VFS_I(dp)->i_sb->s_dev; 824 __entry->dp_ino = dp->i_ino; 825 __entry->namelen = name->len; 826 memcpy(__get_str(name), name->name, name->len); 827 ), 828 TP_printk("dev %d:%d dp ino 0x%llx name %.*s", 829 MAJOR(__entry->dev), MINOR(__entry->dev), 830 __entry->dp_ino, 831 __entry->namelen, 832 __get_str(name)) 833 ) 834 835 #define DEFINE_NAMESPACE_EVENT(name) \ 836 DEFINE_EVENT(xfs_namespace_class, name, \ 837 TP_PROTO(struct xfs_inode *dp, struct xfs_name *name), \ 838 TP_ARGS(dp, name)) 839 DEFINE_NAMESPACE_EVENT(xfs_remove); 840 DEFINE_NAMESPACE_EVENT(xfs_link); 841 DEFINE_NAMESPACE_EVENT(xfs_lookup); 842 DEFINE_NAMESPACE_EVENT(xfs_create); 843 DEFINE_NAMESPACE_EVENT(xfs_symlink); 844 845 TRACE_EVENT(xfs_rename, 846 TP_PROTO(struct xfs_inode *src_dp, struct xfs_inode *target_dp, 847 struct xfs_name *src_name, struct xfs_name *target_name), 848 TP_ARGS(src_dp, target_dp, src_name, target_name), 849 TP_STRUCT__entry( 850 __field(dev_t, dev) 851 __field(xfs_ino_t, src_dp_ino) 852 __field(xfs_ino_t, target_dp_ino) 853 __field(int, src_namelen) 854 __field(int, target_namelen) 855 __dynamic_array(char, src_name, src_name->len) 856 __dynamic_array(char, target_name, target_name->len) 857 ), 858 TP_fast_assign( 859 __entry->dev = VFS_I(src_dp)->i_sb->s_dev; 860 __entry->src_dp_ino = src_dp->i_ino; 861 __entry->target_dp_ino = target_dp->i_ino; 862 __entry->src_namelen = src_name->len; 863 __entry->target_namelen = target_name->len; 864 memcpy(__get_str(src_name), src_name->name, src_name->len); 865 memcpy(__get_str(target_name), target_name->name, 866 target_name->len); 867 ), 868 TP_printk("dev %d:%d src dp ino 0x%llx target dp ino 0x%llx" 869 " src name %.*s target name %.*s", 870 MAJOR(__entry->dev), MINOR(__entry->dev), 871 __entry->src_dp_ino, 872 __entry->target_dp_ino, 873 __entry->src_namelen, 874 __get_str(src_name), 875 __entry->target_namelen, 876 __get_str(target_name)) 877 ) 878 879 DECLARE_EVENT_CLASS(xfs_dquot_class, 880 TP_PROTO(struct xfs_dquot *dqp), 881 TP_ARGS(dqp), 882 TP_STRUCT__entry( 883 __field(dev_t, dev) 884 __field(u32, id) 885 __field(xfs_dqtype_t, type) 886 __field(unsigned, flags) 887 __field(unsigned, nrefs) 888 __field(unsigned long long, res_bcount) 889 __field(unsigned long long, res_rtbcount) 890 __field(unsigned long long, res_icount) 891 892 __field(unsigned long long, bcount) 893 __field(unsigned long long, rtbcount) 894 __field(unsigned long long, icount) 895 896 __field(unsigned long long, blk_hardlimit) 897 __field(unsigned long long, blk_softlimit) 898 __field(unsigned long long, rtb_hardlimit) 899 __field(unsigned long long, rtb_softlimit) 900 __field(unsigned long long, ino_hardlimit) 901 __field(unsigned long long, ino_softlimit) 902 ), 903 TP_fast_assign( 904 __entry->dev = dqp->q_mount->m_super->s_dev; 905 __entry->id = dqp->q_id; 906 __entry->type = dqp->q_type; 907 __entry->flags = dqp->q_flags; 908 __entry->nrefs = dqp->q_nrefs; 909 910 __entry->res_bcount = dqp->q_blk.reserved; 911 __entry->res_rtbcount = dqp->q_rtb.reserved; 912 __entry->res_icount = dqp->q_ino.reserved; 913 914 __entry->bcount = dqp->q_blk.count; 915 __entry->rtbcount = dqp->q_rtb.count; 916 __entry->icount = dqp->q_ino.count; 917 918 __entry->blk_hardlimit = dqp->q_blk.hardlimit; 919 __entry->blk_softlimit = dqp->q_blk.softlimit; 920 __entry->rtb_hardlimit = dqp->q_rtb.hardlimit; 921 __entry->rtb_softlimit = dqp->q_rtb.softlimit; 922 __entry->ino_hardlimit = dqp->q_ino.hardlimit; 923 __entry->ino_softlimit = dqp->q_ino.softlimit; 924 ), 925 TP_printk("dev %d:%d id 0x%x type %s flags %s nrefs %u " 926 "res_bc 0x%llx res_rtbc 0x%llx res_ic 0x%llx " 927 "bcnt 0x%llx bhardlimit 0x%llx bsoftlimit 0x%llx " 928 "rtbcnt 0x%llx rtbhardlimit 0x%llx rtbsoftlimit 0x%llx " 929 "icnt 0x%llx ihardlimit 0x%llx isoftlimit 0x%llx]", 930 MAJOR(__entry->dev), MINOR(__entry->dev), 931 __entry->id, 932 __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 933 __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS), 934 __entry->nrefs, 935 __entry->res_bcount, 936 __entry->res_rtbcount, 937 __entry->res_icount, 938 __entry->bcount, 939 __entry->blk_hardlimit, 940 __entry->blk_softlimit, 941 __entry->rtbcount, 942 __entry->rtb_hardlimit, 943 __entry->rtb_softlimit, 944 __entry->icount, 945 __entry->ino_hardlimit, 946 __entry->ino_softlimit) 947 ) 948 949 #define DEFINE_DQUOT_EVENT(name) \ 950 DEFINE_EVENT(xfs_dquot_class, name, \ 951 TP_PROTO(struct xfs_dquot *dqp), \ 952 TP_ARGS(dqp)) 953 DEFINE_DQUOT_EVENT(xfs_dqadjust); 954 DEFINE_DQUOT_EVENT(xfs_dqreclaim_want); 955 DEFINE_DQUOT_EVENT(xfs_dqreclaim_dirty); 956 DEFINE_DQUOT_EVENT(xfs_dqreclaim_busy); 957 DEFINE_DQUOT_EVENT(xfs_dqreclaim_done); 958 DEFINE_DQUOT_EVENT(xfs_dqattach_found); 959 DEFINE_DQUOT_EVENT(xfs_dqattach_get); 960 DEFINE_DQUOT_EVENT(xfs_dqalloc); 961 DEFINE_DQUOT_EVENT(xfs_dqtobp_read); 962 DEFINE_DQUOT_EVENT(xfs_dqread); 963 DEFINE_DQUOT_EVENT(xfs_dqread_fail); 964 DEFINE_DQUOT_EVENT(xfs_dqget_hit); 965 DEFINE_DQUOT_EVENT(xfs_dqget_miss); 966 DEFINE_DQUOT_EVENT(xfs_dqget_freeing); 967 DEFINE_DQUOT_EVENT(xfs_dqget_dup); 968 DEFINE_DQUOT_EVENT(xfs_dqput); 969 DEFINE_DQUOT_EVENT(xfs_dqput_free); 970 DEFINE_DQUOT_EVENT(xfs_dqrele); 971 DEFINE_DQUOT_EVENT(xfs_dqflush); 972 DEFINE_DQUOT_EVENT(xfs_dqflush_force); 973 DEFINE_DQUOT_EVENT(xfs_dqflush_done); 974 DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_before); 975 DEFINE_DQUOT_EVENT(xfs_trans_apply_dquot_deltas_after); 976 977 #define XFS_QMOPT_FLAGS \ 978 { XFS_QMOPT_UQUOTA, "UQUOTA" }, \ 979 { XFS_QMOPT_PQUOTA, "PQUOTA" }, \ 980 { XFS_QMOPT_FORCE_RES, "FORCE_RES" }, \ 981 { XFS_QMOPT_SBVERSION, "SBVERSION" }, \ 982 { XFS_QMOPT_GQUOTA, "GQUOTA" }, \ 983 { XFS_QMOPT_INHERIT, "INHERIT" }, \ 984 { XFS_QMOPT_RES_REGBLKS, "RES_REGBLKS" }, \ 985 { XFS_QMOPT_RES_RTBLKS, "RES_RTBLKS" }, \ 986 { XFS_QMOPT_BCOUNT, "BCOUNT" }, \ 987 { XFS_QMOPT_ICOUNT, "ICOUNT" }, \ 988 { XFS_QMOPT_RTBCOUNT, "RTBCOUNT" }, \ 989 { XFS_QMOPT_DELBCOUNT, "DELBCOUNT" }, \ 990 { XFS_QMOPT_DELRTBCOUNT, "DELRTBCOUNT" }, \ 991 { XFS_QMOPT_RES_INOS, "RES_INOS" } 992 993 TRACE_EVENT(xfs_trans_mod_dquot, 994 TP_PROTO(struct xfs_trans *tp, struct xfs_dquot *dqp, 995 unsigned int field, int64_t delta), 996 TP_ARGS(tp, dqp, field, delta), 997 TP_STRUCT__entry( 998 __field(dev_t, dev) 999 __field(xfs_dqtype_t, type) 1000 __field(unsigned int, flags) 1001 __field(unsigned int, dqid) 1002 __field(unsigned int, field) 1003 __field(int64_t, delta) 1004 ), 1005 TP_fast_assign( 1006 __entry->dev = tp->t_mountp->m_super->s_dev; 1007 __entry->type = dqp->q_type; 1008 __entry->flags = dqp->q_flags; 1009 __entry->dqid = dqp->q_id; 1010 __entry->field = field; 1011 __entry->delta = delta; 1012 ), 1013 TP_printk("dev %d:%d dquot id 0x%x type %s flags %s field %s delta %lld", 1014 MAJOR(__entry->dev), MINOR(__entry->dev), 1015 __entry->dqid, 1016 __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 1017 __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS), 1018 __print_flags(__entry->field, "|", XFS_QMOPT_FLAGS), 1019 __entry->delta) 1020 ); 1021 1022 DECLARE_EVENT_CLASS(xfs_dqtrx_class, 1023 TP_PROTO(struct xfs_dqtrx *qtrx), 1024 TP_ARGS(qtrx), 1025 TP_STRUCT__entry( 1026 __field(dev_t, dev) 1027 __field(xfs_dqtype_t, type) 1028 __field(unsigned int, flags) 1029 __field(u32, dqid) 1030 1031 __field(uint64_t, blk_res) 1032 __field(int64_t, bcount_delta) 1033 __field(int64_t, delbcnt_delta) 1034 1035 __field(uint64_t, rtblk_res) 1036 __field(uint64_t, rtblk_res_used) 1037 __field(int64_t, rtbcount_delta) 1038 __field(int64_t, delrtb_delta) 1039 1040 __field(uint64_t, ino_res) 1041 __field(uint64_t, ino_res_used) 1042 __field(int64_t, icount_delta) 1043 ), 1044 TP_fast_assign( 1045 __entry->dev = qtrx->qt_dquot->q_mount->m_super->s_dev; 1046 __entry->type = qtrx->qt_dquot->q_type; 1047 __entry->flags = qtrx->qt_dquot->q_flags; 1048 __entry->dqid = qtrx->qt_dquot->q_id; 1049 1050 __entry->blk_res = qtrx->qt_blk_res; 1051 __entry->bcount_delta = qtrx->qt_bcount_delta; 1052 __entry->delbcnt_delta = qtrx->qt_delbcnt_delta; 1053 1054 __entry->rtblk_res = qtrx->qt_rtblk_res; 1055 __entry->rtblk_res_used = qtrx->qt_rtblk_res_used; 1056 __entry->rtbcount_delta = qtrx->qt_rtbcount_delta; 1057 __entry->delrtb_delta = qtrx->qt_delrtb_delta; 1058 1059 __entry->ino_res = qtrx->qt_ino_res; 1060 __entry->ino_res_used = qtrx->qt_ino_res_used; 1061 __entry->icount_delta = qtrx->qt_icount_delta; 1062 ), 1063 TP_printk("dev %d:%d dquot id 0x%x type %s flags %s" 1064 "blk_res %llu bcount_delta %lld delbcnt_delta %lld " 1065 "rtblk_res %llu rtblk_res_used %llu rtbcount_delta %lld delrtb_delta %lld " 1066 "ino_res %llu ino_res_used %llu icount_delta %lld", 1067 MAJOR(__entry->dev), MINOR(__entry->dev), 1068 __entry->dqid, 1069 __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS), 1070 __print_flags(__entry->flags, "|", XFS_DQFLAG_STRINGS), 1071 1072 __entry->blk_res, 1073 __entry->bcount_delta, 1074 __entry->delbcnt_delta, 1075 1076 __entry->rtblk_res, 1077 __entry->rtblk_res_used, 1078 __entry->rtbcount_delta, 1079 __entry->delrtb_delta, 1080 1081 __entry->ino_res, 1082 __entry->ino_res_used, 1083 __entry->icount_delta) 1084 ) 1085 1086 #define DEFINE_DQTRX_EVENT(name) \ 1087 DEFINE_EVENT(xfs_dqtrx_class, name, \ 1088 TP_PROTO(struct xfs_dqtrx *qtrx), \ 1089 TP_ARGS(qtrx)) 1090 DEFINE_DQTRX_EVENT(xfs_trans_apply_dquot_deltas); 1091 DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_before); 1092 DEFINE_DQTRX_EVENT(xfs_trans_mod_dquot_after); 1093 1094 DECLARE_EVENT_CLASS(xfs_loggrant_class, 1095 TP_PROTO(struct xlog *log, struct xlog_ticket *tic), 1096 TP_ARGS(log, tic), 1097 TP_STRUCT__entry( 1098 __field(dev_t, dev) 1099 __field(char, ocnt) 1100 __field(char, cnt) 1101 __field(int, curr_res) 1102 __field(int, unit_res) 1103 __field(unsigned int, flags) 1104 __field(int, reserveq) 1105 __field(int, writeq) 1106 __field(int, grant_reserve_cycle) 1107 __field(int, grant_reserve_bytes) 1108 __field(int, grant_write_cycle) 1109 __field(int, grant_write_bytes) 1110 __field(int, curr_cycle) 1111 __field(int, curr_block) 1112 __field(xfs_lsn_t, tail_lsn) 1113 ), 1114 TP_fast_assign( 1115 __entry->dev = log->l_mp->m_super->s_dev; 1116 __entry->ocnt = tic->t_ocnt; 1117 __entry->cnt = tic->t_cnt; 1118 __entry->curr_res = tic->t_curr_res; 1119 __entry->unit_res = tic->t_unit_res; 1120 __entry->flags = tic->t_flags; 1121 __entry->reserveq = list_empty(&log->l_reserve_head.waiters); 1122 __entry->writeq = list_empty(&log->l_write_head.waiters); 1123 xlog_crack_grant_head(&log->l_reserve_head.grant, 1124 &__entry->grant_reserve_cycle, 1125 &__entry->grant_reserve_bytes); 1126 xlog_crack_grant_head(&log->l_write_head.grant, 1127 &__entry->grant_write_cycle, 1128 &__entry->grant_write_bytes); 1129 __entry->curr_cycle = log->l_curr_cycle; 1130 __entry->curr_block = log->l_curr_block; 1131 __entry->tail_lsn = atomic64_read(&log->l_tail_lsn); 1132 ), 1133 TP_printk("dev %d:%d t_ocnt %u t_cnt %u t_curr_res %u " 1134 "t_unit_res %u t_flags %s reserveq %s " 1135 "writeq %s grant_reserve_cycle %d " 1136 "grant_reserve_bytes %d grant_write_cycle %d " 1137 "grant_write_bytes %d curr_cycle %d curr_block %d " 1138 "tail_cycle %d tail_block %d", 1139 MAJOR(__entry->dev), MINOR(__entry->dev), 1140 __entry->ocnt, 1141 __entry->cnt, 1142 __entry->curr_res, 1143 __entry->unit_res, 1144 __print_flags(__entry->flags, "|", XLOG_TIC_FLAGS), 1145 __entry->reserveq ? "empty" : "active", 1146 __entry->writeq ? "empty" : "active", 1147 __entry->grant_reserve_cycle, 1148 __entry->grant_reserve_bytes, 1149 __entry->grant_write_cycle, 1150 __entry->grant_write_bytes, 1151 __entry->curr_cycle, 1152 __entry->curr_block, 1153 CYCLE_LSN(__entry->tail_lsn), 1154 BLOCK_LSN(__entry->tail_lsn) 1155 ) 1156 ) 1157 1158 #define DEFINE_LOGGRANT_EVENT(name) \ 1159 DEFINE_EVENT(xfs_loggrant_class, name, \ 1160 TP_PROTO(struct xlog *log, struct xlog_ticket *tic), \ 1161 TP_ARGS(log, tic)) 1162 DEFINE_LOGGRANT_EVENT(xfs_log_umount_write); 1163 DEFINE_LOGGRANT_EVENT(xfs_log_grant_sleep); 1164 DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake); 1165 DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up); 1166 DEFINE_LOGGRANT_EVENT(xfs_log_reserve); 1167 DEFINE_LOGGRANT_EVENT(xfs_log_reserve_exit); 1168 DEFINE_LOGGRANT_EVENT(xfs_log_regrant); 1169 DEFINE_LOGGRANT_EVENT(xfs_log_regrant_exit); 1170 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant); 1171 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_exit); 1172 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_regrant_sub); 1173 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant); 1174 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_sub); 1175 DEFINE_LOGGRANT_EVENT(xfs_log_ticket_ungrant_exit); 1176 DEFINE_LOGGRANT_EVENT(xfs_log_cil_wait); 1177 1178 DECLARE_EVENT_CLASS(xfs_log_item_class, 1179 TP_PROTO(struct xfs_log_item *lip), 1180 TP_ARGS(lip), 1181 TP_STRUCT__entry( 1182 __field(dev_t, dev) 1183 __field(void *, lip) 1184 __field(uint, type) 1185 __field(unsigned long, flags) 1186 __field(xfs_lsn_t, lsn) 1187 ), 1188 TP_fast_assign( 1189 __entry->dev = lip->li_mountp->m_super->s_dev; 1190 __entry->lip = lip; 1191 __entry->type = lip->li_type; 1192 __entry->flags = lip->li_flags; 1193 __entry->lsn = lip->li_lsn; 1194 ), 1195 TP_printk("dev %d:%d lip %p lsn %d/%d type %s flags %s", 1196 MAJOR(__entry->dev), MINOR(__entry->dev), 1197 __entry->lip, 1198 CYCLE_LSN(__entry->lsn), BLOCK_LSN(__entry->lsn), 1199 __print_symbolic(__entry->type, XFS_LI_TYPE_DESC), 1200 __print_flags(__entry->flags, "|", XFS_LI_FLAGS)) 1201 ) 1202 1203 TRACE_EVENT(xfs_log_force, 1204 TP_PROTO(struct xfs_mount *mp, xfs_lsn_t lsn, unsigned long caller_ip), 1205 TP_ARGS(mp, lsn, caller_ip), 1206 TP_STRUCT__entry( 1207 __field(dev_t, dev) 1208 __field(xfs_lsn_t, lsn) 1209 __field(unsigned long, caller_ip) 1210 ), 1211 TP_fast_assign( 1212 __entry->dev = mp->m_super->s_dev; 1213 __entry->lsn = lsn; 1214 __entry->caller_ip = caller_ip; 1215 ), 1216 TP_printk("dev %d:%d lsn 0x%llx caller %pS", 1217 MAJOR(__entry->dev), MINOR(__entry->dev), 1218 __entry->lsn, (void *)__entry->caller_ip) 1219 ) 1220 1221 #define DEFINE_LOG_ITEM_EVENT(name) \ 1222 DEFINE_EVENT(xfs_log_item_class, name, \ 1223 TP_PROTO(struct xfs_log_item *lip), \ 1224 TP_ARGS(lip)) 1225 DEFINE_LOG_ITEM_EVENT(xfs_ail_push); 1226 DEFINE_LOG_ITEM_EVENT(xfs_ail_pinned); 1227 DEFINE_LOG_ITEM_EVENT(xfs_ail_locked); 1228 DEFINE_LOG_ITEM_EVENT(xfs_ail_flushing); 1229 1230 DECLARE_EVENT_CLASS(xfs_ail_class, 1231 TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), 1232 TP_ARGS(lip, old_lsn, new_lsn), 1233 TP_STRUCT__entry( 1234 __field(dev_t, dev) 1235 __field(void *, lip) 1236 __field(uint, type) 1237 __field(unsigned long, flags) 1238 __field(xfs_lsn_t, old_lsn) 1239 __field(xfs_lsn_t, new_lsn) 1240 ), 1241 TP_fast_assign( 1242 __entry->dev = lip->li_mountp->m_super->s_dev; 1243 __entry->lip = lip; 1244 __entry->type = lip->li_type; 1245 __entry->flags = lip->li_flags; 1246 __entry->old_lsn = old_lsn; 1247 __entry->new_lsn = new_lsn; 1248 ), 1249 TP_printk("dev %d:%d lip %p old lsn %d/%d new lsn %d/%d type %s flags %s", 1250 MAJOR(__entry->dev), MINOR(__entry->dev), 1251 __entry->lip, 1252 CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn), 1253 CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn), 1254 __print_symbolic(__entry->type, XFS_LI_TYPE_DESC), 1255 __print_flags(__entry->flags, "|", XFS_LI_FLAGS)) 1256 ) 1257 1258 #define DEFINE_AIL_EVENT(name) \ 1259 DEFINE_EVENT(xfs_ail_class, name, \ 1260 TP_PROTO(struct xfs_log_item *lip, xfs_lsn_t old_lsn, xfs_lsn_t new_lsn), \ 1261 TP_ARGS(lip, old_lsn, new_lsn)) 1262 DEFINE_AIL_EVENT(xfs_ail_insert); 1263 DEFINE_AIL_EVENT(xfs_ail_move); 1264 DEFINE_AIL_EVENT(xfs_ail_delete); 1265 1266 TRACE_EVENT(xfs_log_assign_tail_lsn, 1267 TP_PROTO(struct xlog *log, xfs_lsn_t new_lsn), 1268 TP_ARGS(log, new_lsn), 1269 TP_STRUCT__entry( 1270 __field(dev_t, dev) 1271 __field(xfs_lsn_t, new_lsn) 1272 __field(xfs_lsn_t, old_lsn) 1273 __field(xfs_lsn_t, last_sync_lsn) 1274 ), 1275 TP_fast_assign( 1276 __entry->dev = log->l_mp->m_super->s_dev; 1277 __entry->new_lsn = new_lsn; 1278 __entry->old_lsn = atomic64_read(&log->l_tail_lsn); 1279 __entry->last_sync_lsn = atomic64_read(&log->l_last_sync_lsn); 1280 ), 1281 TP_printk("dev %d:%d new tail lsn %d/%d, old lsn %d/%d, last sync %d/%d", 1282 MAJOR(__entry->dev), MINOR(__entry->dev), 1283 CYCLE_LSN(__entry->new_lsn), BLOCK_LSN(__entry->new_lsn), 1284 CYCLE_LSN(__entry->old_lsn), BLOCK_LSN(__entry->old_lsn), 1285 CYCLE_LSN(__entry->last_sync_lsn), BLOCK_LSN(__entry->last_sync_lsn)) 1286 ) 1287 1288 DECLARE_EVENT_CLASS(xfs_file_class, 1289 TP_PROTO(struct kiocb *iocb, struct iov_iter *iter), 1290 TP_ARGS(iocb, iter), 1291 TP_STRUCT__entry( 1292 __field(dev_t, dev) 1293 __field(xfs_ino_t, ino) 1294 __field(xfs_fsize_t, size) 1295 __field(loff_t, offset) 1296 __field(size_t, count) 1297 ), 1298 TP_fast_assign( 1299 __entry->dev = file_inode(iocb->ki_filp)->i_sb->s_dev; 1300 __entry->ino = XFS_I(file_inode(iocb->ki_filp))->i_ino; 1301 __entry->size = XFS_I(file_inode(iocb->ki_filp))->i_d.di_size; 1302 __entry->offset = iocb->ki_pos; 1303 __entry->count = iov_iter_count(iter); 1304 ), 1305 TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count 0x%zx", 1306 MAJOR(__entry->dev), MINOR(__entry->dev), 1307 __entry->ino, 1308 __entry->size, 1309 __entry->offset, 1310 __entry->count) 1311 ) 1312 1313 #define DEFINE_RW_EVENT(name) \ 1314 DEFINE_EVENT(xfs_file_class, name, \ 1315 TP_PROTO(struct kiocb *iocb, struct iov_iter *iter), \ 1316 TP_ARGS(iocb, iter)) 1317 DEFINE_RW_EVENT(xfs_file_buffered_read); 1318 DEFINE_RW_EVENT(xfs_file_direct_read); 1319 DEFINE_RW_EVENT(xfs_file_dax_read); 1320 DEFINE_RW_EVENT(xfs_file_buffered_write); 1321 DEFINE_RW_EVENT(xfs_file_direct_write); 1322 DEFINE_RW_EVENT(xfs_file_dax_write); 1323 DEFINE_RW_EVENT(xfs_reflink_bounce_dio_write); 1324 1325 1326 DECLARE_EVENT_CLASS(xfs_imap_class, 1327 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, 1328 int whichfork, struct xfs_bmbt_irec *irec), 1329 TP_ARGS(ip, offset, count, whichfork, irec), 1330 TP_STRUCT__entry( 1331 __field(dev_t, dev) 1332 __field(xfs_ino_t, ino) 1333 __field(loff_t, size) 1334 __field(loff_t, offset) 1335 __field(size_t, count) 1336 __field(int, whichfork) 1337 __field(xfs_fileoff_t, startoff) 1338 __field(xfs_fsblock_t, startblock) 1339 __field(xfs_filblks_t, blockcount) 1340 ), 1341 TP_fast_assign( 1342 __entry->dev = VFS_I(ip)->i_sb->s_dev; 1343 __entry->ino = ip->i_ino; 1344 __entry->size = ip->i_d.di_size; 1345 __entry->offset = offset; 1346 __entry->count = count; 1347 __entry->whichfork = whichfork; 1348 __entry->startoff = irec ? irec->br_startoff : 0; 1349 __entry->startblock = irec ? irec->br_startblock : 0; 1350 __entry->blockcount = irec ? irec->br_blockcount : 0; 1351 ), 1352 TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset 0x%llx count %zd " 1353 "fork %s startoff 0x%llx startblock %lld blockcount 0x%llx", 1354 MAJOR(__entry->dev), MINOR(__entry->dev), 1355 __entry->ino, 1356 __entry->size, 1357 __entry->offset, 1358 __entry->count, 1359 __entry->whichfork == XFS_COW_FORK ? "cow" : "data", 1360 __entry->startoff, 1361 (int64_t)__entry->startblock, 1362 __entry->blockcount) 1363 ) 1364 1365 #define DEFINE_IMAP_EVENT(name) \ 1366 DEFINE_EVENT(xfs_imap_class, name, \ 1367 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, \ 1368 int whichfork, struct xfs_bmbt_irec *irec), \ 1369 TP_ARGS(ip, offset, count, whichfork, irec)) 1370 DEFINE_IMAP_EVENT(xfs_map_blocks_found); 1371 DEFINE_IMAP_EVENT(xfs_map_blocks_alloc); 1372 DEFINE_IMAP_EVENT(xfs_iomap_alloc); 1373 DEFINE_IMAP_EVENT(xfs_iomap_found); 1374 1375 DECLARE_EVENT_CLASS(xfs_simple_io_class, 1376 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count), 1377 TP_ARGS(ip, offset, count), 1378 TP_STRUCT__entry( 1379 __field(dev_t, dev) 1380 __field(xfs_ino_t, ino) 1381 __field(loff_t, isize) 1382 __field(loff_t, disize) 1383 __field(loff_t, offset) 1384 __field(size_t, count) 1385 ), 1386 TP_fast_assign( 1387 __entry->dev = VFS_I(ip)->i_sb->s_dev; 1388 __entry->ino = ip->i_ino; 1389 __entry->isize = VFS_I(ip)->i_size; 1390 __entry->disize = ip->i_d.di_size; 1391 __entry->offset = offset; 1392 __entry->count = count; 1393 ), 1394 TP_printk("dev %d:%d ino 0x%llx isize 0x%llx disize 0x%llx " 1395 "offset 0x%llx count %zd", 1396 MAJOR(__entry->dev), MINOR(__entry->dev), 1397 __entry->ino, 1398 __entry->isize, 1399 __entry->disize, 1400 __entry->offset, 1401 __entry->count) 1402 ); 1403 1404 #define DEFINE_SIMPLE_IO_EVENT(name) \ 1405 DEFINE_EVENT(xfs_simple_io_class, name, \ 1406 TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count), \ 1407 TP_ARGS(ip, offset, count)) 1408 DEFINE_SIMPLE_IO_EVENT(xfs_delalloc_enospc); 1409 DEFINE_SIMPLE_IO_EVENT(xfs_unwritten_convert); 1410 DEFINE_SIMPLE_IO_EVENT(xfs_setfilesize); 1411 DEFINE_SIMPLE_IO_EVENT(xfs_zero_eof); 1412 DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write); 1413 DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_unwritten); 1414 DEFINE_SIMPLE_IO_EVENT(xfs_end_io_direct_write_append); 1415 1416 DECLARE_EVENT_CLASS(xfs_itrunc_class, 1417 TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), 1418 TP_ARGS(ip, new_size), 1419 TP_STRUCT__entry( 1420 __field(dev_t, dev) 1421 __field(xfs_ino_t, ino) 1422 __field(xfs_fsize_t, size) 1423 __field(xfs_fsize_t, new_size) 1424 ), 1425 TP_fast_assign( 1426 __entry->dev = VFS_I(ip)->i_sb->s_dev; 1427 __entry->ino = ip->i_ino; 1428 __entry->size = ip->i_d.di_size; 1429 __entry->new_size = new_size; 1430 ), 1431 TP_printk("dev %d:%d ino 0x%llx size 0x%llx new_size 0x%llx", 1432 MAJOR(__entry->dev), MINOR(__entry->dev), 1433 __entry->ino, 1434 __entry->size, 1435 __entry->new_size) 1436 ) 1437 1438 #define DEFINE_ITRUNC_EVENT(name) \ 1439 DEFINE_EVENT(xfs_itrunc_class, name, \ 1440 TP_PROTO(struct xfs_inode *ip, xfs_fsize_t new_size), \ 1441 TP_ARGS(ip, new_size)) 1442 DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_start); 1443 DEFINE_ITRUNC_EVENT(xfs_itruncate_extents_end); 1444 1445 TRACE_EVENT(xfs_pagecache_inval, 1446 TP_PROTO(struct xfs_inode *ip, xfs_off_t start, xfs_off_t finish), 1447 TP_ARGS(ip, start, finish), 1448 TP_STRUCT__entry( 1449 __field(dev_t, dev) 1450 __field(xfs_ino_t, ino) 1451 __field(xfs_fsize_t, size) 1452 __field(xfs_off_t, start) 1453 __field(xfs_off_t, finish) 1454 ), 1455 TP_fast_assign( 1456 __entry->dev = VFS_I(ip)->i_sb->s_dev; 1457 __entry->ino = ip->i_ino; 1458 __entry->size = ip->i_d.di_size; 1459 __entry->start = start; 1460 __entry->finish = finish; 1461 ), 1462 TP_printk("dev %d:%d ino 0x%llx size 0x%llx start 0x%llx finish 0x%llx", 1463 MAJOR(__entry->dev), MINOR(__entry->dev), 1464 __entry->ino, 1465 __entry->size, 1466 __entry->start, 1467 __entry->finish) 1468 ); 1469 1470 TRACE_EVENT(xfs_bunmap, 1471 TP_PROTO(struct xfs_inode *ip, xfs_fileoff_t bno, xfs_filblks_t len, 1472 int flags, unsigned long caller_ip), 1473 TP_ARGS(ip, bno, len, flags, caller_ip), 1474 TP_STRUCT__entry( 1475 __field(dev_t, dev) 1476 __field(xfs_ino_t, ino) 1477 __field(xfs_fsize_t, size) 1478 __field(xfs_fileoff_t, bno) 1479 __field(xfs_filblks_t, len) 1480 __field(unsigned long, caller_ip) 1481 __field(int, flags) 1482 ), 1483 TP_fast_assign( 1484 __entry->dev = VFS_I(ip)->i_sb->s_dev; 1485 __entry->ino = ip->i_ino; 1486 __entry->size = ip->i_d.di_size; 1487 __entry->bno = bno; 1488 __entry->len = len; 1489 __entry->caller_ip = caller_ip; 1490 __entry->flags = flags; 1491 ), 1492 TP_printk("dev %d:%d ino 0x%llx size 0x%llx bno 0x%llx len 0x%llx" 1493 "flags %s caller %pS", 1494 MAJOR(__entry->dev), MINOR(__entry->dev), 1495 __entry->ino, 1496 __entry->size, 1497 __entry->bno, 1498 __entry->len, 1499 __print_flags(__entry->flags, "|", XFS_BMAPI_FLAGS), 1500 (void *)__entry->caller_ip) 1501 1502 ); 1503 1504 DECLARE_EVENT_CLASS(xfs_extent_busy_class, 1505 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1506 xfs_agblock_t agbno, xfs_extlen_t len), 1507 TP_ARGS(mp, agno, agbno, len), 1508 TP_STRUCT__entry( 1509 __field(dev_t, dev) 1510 __field(xfs_agnumber_t, agno) 1511 __field(xfs_agblock_t, agbno) 1512 __field(xfs_extlen_t, len) 1513 ), 1514 TP_fast_assign( 1515 __entry->dev = mp->m_super->s_dev; 1516 __entry->agno = agno; 1517 __entry->agbno = agbno; 1518 __entry->len = len; 1519 ), 1520 TP_printk("dev %d:%d agno %u agbno %u len %u", 1521 MAJOR(__entry->dev), MINOR(__entry->dev), 1522 __entry->agno, 1523 __entry->agbno, 1524 __entry->len) 1525 ); 1526 #define DEFINE_BUSY_EVENT(name) \ 1527 DEFINE_EVENT(xfs_extent_busy_class, name, \ 1528 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 1529 xfs_agblock_t agbno, xfs_extlen_t len), \ 1530 TP_ARGS(mp, agno, agbno, len)) 1531 DEFINE_BUSY_EVENT(xfs_extent_busy); 1532 DEFINE_BUSY_EVENT(xfs_extent_busy_enomem); 1533 DEFINE_BUSY_EVENT(xfs_extent_busy_force); 1534 DEFINE_BUSY_EVENT(xfs_extent_busy_reuse); 1535 DEFINE_BUSY_EVENT(xfs_extent_busy_clear); 1536 1537 TRACE_EVENT(xfs_extent_busy_trim, 1538 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 1539 xfs_agblock_t agbno, xfs_extlen_t len, 1540 xfs_agblock_t tbno, xfs_extlen_t tlen), 1541 TP_ARGS(mp, agno, agbno, len, tbno, tlen), 1542 TP_STRUCT__entry( 1543 __field(dev_t, dev) 1544 __field(xfs_agnumber_t, agno) 1545 __field(xfs_agblock_t, agbno) 1546 __field(xfs_extlen_t, len) 1547 __field(xfs_agblock_t, tbno) 1548 __field(xfs_extlen_t, tlen) 1549 ), 1550 TP_fast_assign( 1551 __entry->dev = mp->m_super->s_dev; 1552 __entry->agno = agno; 1553 __entry->agbno = agbno; 1554 __entry->len = len; 1555 __entry->tbno = tbno; 1556 __entry->tlen = tlen; 1557 ), 1558 TP_printk("dev %d:%d agno %u agbno %u len %u tbno %u tlen %u", 1559 MAJOR(__entry->dev), MINOR(__entry->dev), 1560 __entry->agno, 1561 __entry->agbno, 1562 __entry->len, 1563 __entry->tbno, 1564 __entry->tlen) 1565 ); 1566 1567 DECLARE_EVENT_CLASS(xfs_agf_class, 1568 TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, 1569 unsigned long caller_ip), 1570 TP_ARGS(mp, agf, flags, caller_ip), 1571 TP_STRUCT__entry( 1572 __field(dev_t, dev) 1573 __field(xfs_agnumber_t, agno) 1574 __field(int, flags) 1575 __field(__u32, length) 1576 __field(__u32, bno_root) 1577 __field(__u32, cnt_root) 1578 __field(__u32, bno_level) 1579 __field(__u32, cnt_level) 1580 __field(__u32, flfirst) 1581 __field(__u32, fllast) 1582 __field(__u32, flcount) 1583 __field(__u32, freeblks) 1584 __field(__u32, longest) 1585 __field(unsigned long, caller_ip) 1586 ), 1587 TP_fast_assign( 1588 __entry->dev = mp->m_super->s_dev; 1589 __entry->agno = be32_to_cpu(agf->agf_seqno), 1590 __entry->flags = flags; 1591 __entry->length = be32_to_cpu(agf->agf_length), 1592 __entry->bno_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), 1593 __entry->cnt_root = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), 1594 __entry->bno_level = 1595 be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), 1596 __entry->cnt_level = 1597 be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), 1598 __entry->flfirst = be32_to_cpu(agf->agf_flfirst), 1599 __entry->fllast = be32_to_cpu(agf->agf_fllast), 1600 __entry->flcount = be32_to_cpu(agf->agf_flcount), 1601 __entry->freeblks = be32_to_cpu(agf->agf_freeblks), 1602 __entry->longest = be32_to_cpu(agf->agf_longest); 1603 __entry->caller_ip = caller_ip; 1604 ), 1605 TP_printk("dev %d:%d agno %u flags %s length %u roots b %u c %u " 1606 "levels b %u c %u flfirst %u fllast %u flcount %u " 1607 "freeblks %u longest %u caller %pS", 1608 MAJOR(__entry->dev), MINOR(__entry->dev), 1609 __entry->agno, 1610 __print_flags(__entry->flags, "|", XFS_AGF_FLAGS), 1611 __entry->length, 1612 __entry->bno_root, 1613 __entry->cnt_root, 1614 __entry->bno_level, 1615 __entry->cnt_level, 1616 __entry->flfirst, 1617 __entry->fllast, 1618 __entry->flcount, 1619 __entry->freeblks, 1620 __entry->longest, 1621 (void *)__entry->caller_ip) 1622 ); 1623 #define DEFINE_AGF_EVENT(name) \ 1624 DEFINE_EVENT(xfs_agf_class, name, \ 1625 TP_PROTO(struct xfs_mount *mp, struct xfs_agf *agf, int flags, \ 1626 unsigned long caller_ip), \ 1627 TP_ARGS(mp, agf, flags, caller_ip)) 1628 DEFINE_AGF_EVENT(xfs_agf); 1629 DEFINE_AGF_EVENT(xfs_agfl_reset); 1630 1631 TRACE_EVENT(xfs_free_extent, 1632 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno, 1633 xfs_extlen_t len, enum xfs_ag_resv_type resv, int haveleft, 1634 int haveright), 1635 TP_ARGS(mp, agno, agbno, len, resv, haveleft, haveright), 1636 TP_STRUCT__entry( 1637 __field(dev_t, dev) 1638 __field(xfs_agnumber_t, agno) 1639 __field(xfs_agblock_t, agbno) 1640 __field(xfs_extlen_t, len) 1641 __field(int, resv) 1642 __field(int, haveleft) 1643 __field(int, haveright) 1644 ), 1645 TP_fast_assign( 1646 __entry->dev = mp->m_super->s_dev; 1647 __entry->agno = agno; 1648 __entry->agbno = agbno; 1649 __entry->len = len; 1650 __entry->resv = resv; 1651 __entry->haveleft = haveleft; 1652 __entry->haveright = haveright; 1653 ), 1654 TP_printk("dev %d:%d agno %u agbno %u len %u resv %d %s", 1655 MAJOR(__entry->dev), MINOR(__entry->dev), 1656 __entry->agno, 1657 __entry->agbno, 1658 __entry->len, 1659 __entry->resv, 1660 __entry->haveleft ? 1661 (__entry->haveright ? "both" : "left") : 1662 (__entry->haveright ? "right" : "none")) 1663 1664 ); 1665 1666 DECLARE_EVENT_CLASS(xfs_alloc_class, 1667 TP_PROTO(struct xfs_alloc_arg *args), 1668 TP_ARGS(args), 1669 TP_STRUCT__entry( 1670 __field(dev_t, dev) 1671 __field(xfs_agnumber_t, agno) 1672 __field(xfs_agblock_t, agbno) 1673 __field(xfs_extlen_t, minlen) 1674 __field(xfs_extlen_t, maxlen) 1675 __field(xfs_extlen_t, mod) 1676 __field(xfs_extlen_t, prod) 1677 __field(xfs_extlen_t, minleft) 1678 __field(xfs_extlen_t, total) 1679 __field(xfs_extlen_t, alignment) 1680 __field(xfs_extlen_t, minalignslop) 1681 __field(xfs_extlen_t, len) 1682 __field(short, type) 1683 __field(short, otype) 1684 __field(char, wasdel) 1685 __field(char, wasfromfl) 1686 __field(int, resv) 1687 __field(int, datatype) 1688 __field(xfs_fsblock_t, firstblock) 1689 ), 1690 TP_fast_assign( 1691 __entry->dev = args->mp->m_super->s_dev; 1692 __entry->agno = args->agno; 1693 __entry->agbno = args->agbno; 1694 __entry->minlen = args->minlen; 1695 __entry->maxlen = args->maxlen; 1696 __entry->mod = args->mod; 1697 __entry->prod = args->prod; 1698 __entry->minleft = args->minleft; 1699 __entry->total = args->total; 1700 __entry->alignment = args->alignment; 1701 __entry->minalignslop = args->minalignslop; 1702 __entry->len = args->len; 1703 __entry->type = args->type; 1704 __entry->otype = args->otype; 1705 __entry->wasdel = args->wasdel; 1706 __entry->wasfromfl = args->wasfromfl; 1707 __entry->resv = args->resv; 1708 __entry->datatype = args->datatype; 1709 __entry->firstblock = args->tp->t_firstblock; 1710 ), 1711 TP_printk("dev %d:%d agno %u agbno %u minlen %u maxlen %u mod %u " 1712 "prod %u minleft %u total %u alignment %u minalignslop %u " 1713 "len %u type %s otype %s wasdel %d wasfromfl %d resv %d " 1714 "datatype 0x%x firstblock 0x%llx", 1715 MAJOR(__entry->dev), MINOR(__entry->dev), 1716 __entry->agno, 1717 __entry->agbno, 1718 __entry->minlen, 1719 __entry->maxlen, 1720 __entry->mod, 1721 __entry->prod, 1722 __entry->minleft, 1723 __entry->total, 1724 __entry->alignment, 1725 __entry->minalignslop, 1726 __entry->len, 1727 __print_symbolic(__entry->type, XFS_ALLOC_TYPES), 1728 __print_symbolic(__entry->otype, XFS_ALLOC_TYPES), 1729 __entry->wasdel, 1730 __entry->wasfromfl, 1731 __entry->resv, 1732 __entry->datatype, 1733 (unsigned long long)__entry->firstblock) 1734 ) 1735 1736 #define DEFINE_ALLOC_EVENT(name) \ 1737 DEFINE_EVENT(xfs_alloc_class, name, \ 1738 TP_PROTO(struct xfs_alloc_arg *args), \ 1739 TP_ARGS(args)) 1740 DEFINE_ALLOC_EVENT(xfs_alloc_exact_done); 1741 DEFINE_ALLOC_EVENT(xfs_alloc_exact_notfound); 1742 DEFINE_ALLOC_EVENT(xfs_alloc_exact_error); 1743 DEFINE_ALLOC_EVENT(xfs_alloc_near_nominleft); 1744 DEFINE_ALLOC_EVENT(xfs_alloc_near_first); 1745 DEFINE_ALLOC_EVENT(xfs_alloc_cur); 1746 DEFINE_ALLOC_EVENT(xfs_alloc_cur_right); 1747 DEFINE_ALLOC_EVENT(xfs_alloc_cur_left); 1748 DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup); 1749 DEFINE_ALLOC_EVENT(xfs_alloc_cur_lookup_done); 1750 DEFINE_ALLOC_EVENT(xfs_alloc_near_error); 1751 DEFINE_ALLOC_EVENT(xfs_alloc_near_noentry); 1752 DEFINE_ALLOC_EVENT(xfs_alloc_near_busy); 1753 DEFINE_ALLOC_EVENT(xfs_alloc_size_neither); 1754 DEFINE_ALLOC_EVENT(xfs_alloc_size_noentry); 1755 DEFINE_ALLOC_EVENT(xfs_alloc_size_nominleft); 1756 DEFINE_ALLOC_EVENT(xfs_alloc_size_done); 1757 DEFINE_ALLOC_EVENT(xfs_alloc_size_error); 1758 DEFINE_ALLOC_EVENT(xfs_alloc_size_busy); 1759 DEFINE_ALLOC_EVENT(xfs_alloc_small_freelist); 1760 DEFINE_ALLOC_EVENT(xfs_alloc_small_notenough); 1761 DEFINE_ALLOC_EVENT(xfs_alloc_small_done); 1762 DEFINE_ALLOC_EVENT(xfs_alloc_small_error); 1763 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_badargs); 1764 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_nofix); 1765 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_noagbp); 1766 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_loopfailed); 1767 DEFINE_ALLOC_EVENT(xfs_alloc_vextent_allfailed); 1768 1769 TRACE_EVENT(xfs_alloc_cur_check, 1770 TP_PROTO(struct xfs_mount *mp, xfs_btnum_t btnum, xfs_agblock_t bno, 1771 xfs_extlen_t len, xfs_extlen_t diff, bool new), 1772 TP_ARGS(mp, btnum, bno, len, diff, new), 1773 TP_STRUCT__entry( 1774 __field(dev_t, dev) 1775 __field(xfs_btnum_t, btnum) 1776 __field(xfs_agblock_t, bno) 1777 __field(xfs_extlen_t, len) 1778 __field(xfs_extlen_t, diff) 1779 __field(bool, new) 1780 ), 1781 TP_fast_assign( 1782 __entry->dev = mp->m_super->s_dev; 1783 __entry->btnum = btnum; 1784 __entry->bno = bno; 1785 __entry->len = len; 1786 __entry->diff = diff; 1787 __entry->new = new; 1788 ), 1789 TP_printk("dev %d:%d btree %s bno 0x%x len 0x%x diff 0x%x new %d", 1790 MAJOR(__entry->dev), MINOR(__entry->dev), 1791 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 1792 __entry->bno, __entry->len, __entry->diff, __entry->new) 1793 ) 1794 1795 DECLARE_EVENT_CLASS(xfs_da_class, 1796 TP_PROTO(struct xfs_da_args *args), 1797 TP_ARGS(args), 1798 TP_STRUCT__entry( 1799 __field(dev_t, dev) 1800 __field(xfs_ino_t, ino) 1801 __dynamic_array(char, name, args->namelen) 1802 __field(int, namelen) 1803 __field(xfs_dahash_t, hashval) 1804 __field(xfs_ino_t, inumber) 1805 __field(int, op_flags) 1806 ), 1807 TP_fast_assign( 1808 __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1809 __entry->ino = args->dp->i_ino; 1810 if (args->namelen) 1811 memcpy(__get_str(name), args->name, args->namelen); 1812 __entry->namelen = args->namelen; 1813 __entry->hashval = args->hashval; 1814 __entry->inumber = args->inumber; 1815 __entry->op_flags = args->op_flags; 1816 ), 1817 TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d hashval 0x%x " 1818 "inumber 0x%llx op_flags %s", 1819 MAJOR(__entry->dev), MINOR(__entry->dev), 1820 __entry->ino, 1821 __entry->namelen, 1822 __entry->namelen ? __get_str(name) : NULL, 1823 __entry->namelen, 1824 __entry->hashval, 1825 __entry->inumber, 1826 __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS)) 1827 ) 1828 1829 #define DEFINE_DIR2_EVENT(name) \ 1830 DEFINE_EVENT(xfs_da_class, name, \ 1831 TP_PROTO(struct xfs_da_args *args), \ 1832 TP_ARGS(args)) 1833 DEFINE_DIR2_EVENT(xfs_dir2_sf_addname); 1834 DEFINE_DIR2_EVENT(xfs_dir2_sf_create); 1835 DEFINE_DIR2_EVENT(xfs_dir2_sf_lookup); 1836 DEFINE_DIR2_EVENT(xfs_dir2_sf_replace); 1837 DEFINE_DIR2_EVENT(xfs_dir2_sf_removename); 1838 DEFINE_DIR2_EVENT(xfs_dir2_sf_toino4); 1839 DEFINE_DIR2_EVENT(xfs_dir2_sf_toino8); 1840 DEFINE_DIR2_EVENT(xfs_dir2_sf_to_block); 1841 DEFINE_DIR2_EVENT(xfs_dir2_block_addname); 1842 DEFINE_DIR2_EVENT(xfs_dir2_block_lookup); 1843 DEFINE_DIR2_EVENT(xfs_dir2_block_replace); 1844 DEFINE_DIR2_EVENT(xfs_dir2_block_removename); 1845 DEFINE_DIR2_EVENT(xfs_dir2_block_to_sf); 1846 DEFINE_DIR2_EVENT(xfs_dir2_block_to_leaf); 1847 DEFINE_DIR2_EVENT(xfs_dir2_leaf_addname); 1848 DEFINE_DIR2_EVENT(xfs_dir2_leaf_lookup); 1849 DEFINE_DIR2_EVENT(xfs_dir2_leaf_replace); 1850 DEFINE_DIR2_EVENT(xfs_dir2_leaf_removename); 1851 DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_block); 1852 DEFINE_DIR2_EVENT(xfs_dir2_leaf_to_node); 1853 DEFINE_DIR2_EVENT(xfs_dir2_node_addname); 1854 DEFINE_DIR2_EVENT(xfs_dir2_node_lookup); 1855 DEFINE_DIR2_EVENT(xfs_dir2_node_replace); 1856 DEFINE_DIR2_EVENT(xfs_dir2_node_removename); 1857 DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf); 1858 1859 DECLARE_EVENT_CLASS(xfs_attr_class, 1860 TP_PROTO(struct xfs_da_args *args), 1861 TP_ARGS(args), 1862 TP_STRUCT__entry( 1863 __field(dev_t, dev) 1864 __field(xfs_ino_t, ino) 1865 __dynamic_array(char, name, args->namelen) 1866 __field(int, namelen) 1867 __field(int, valuelen) 1868 __field(xfs_dahash_t, hashval) 1869 __field(unsigned int, attr_filter) 1870 __field(unsigned int, attr_flags) 1871 __field(int, op_flags) 1872 ), 1873 TP_fast_assign( 1874 __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1875 __entry->ino = args->dp->i_ino; 1876 if (args->namelen) 1877 memcpy(__get_str(name), args->name, args->namelen); 1878 __entry->namelen = args->namelen; 1879 __entry->valuelen = args->valuelen; 1880 __entry->hashval = args->hashval; 1881 __entry->attr_filter = args->attr_filter; 1882 __entry->attr_flags = args->attr_flags; 1883 __entry->op_flags = args->op_flags; 1884 ), 1885 TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d " 1886 "hashval 0x%x filter %s flags %s op_flags %s", 1887 MAJOR(__entry->dev), MINOR(__entry->dev), 1888 __entry->ino, 1889 __entry->namelen, 1890 __entry->namelen ? __get_str(name) : NULL, 1891 __entry->namelen, 1892 __entry->valuelen, 1893 __entry->hashval, 1894 __print_flags(__entry->attr_filter, "|", 1895 XFS_ATTR_FILTER_FLAGS), 1896 __print_flags(__entry->attr_flags, "|", 1897 { XATTR_CREATE, "CREATE" }, 1898 { XATTR_REPLACE, "REPLACE" }), 1899 __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS)) 1900 ) 1901 1902 #define DEFINE_ATTR_EVENT(name) \ 1903 DEFINE_EVENT(xfs_attr_class, name, \ 1904 TP_PROTO(struct xfs_da_args *args), \ 1905 TP_ARGS(args)) 1906 DEFINE_ATTR_EVENT(xfs_attr_sf_add); 1907 DEFINE_ATTR_EVENT(xfs_attr_sf_addname); 1908 DEFINE_ATTR_EVENT(xfs_attr_sf_create); 1909 DEFINE_ATTR_EVENT(xfs_attr_sf_lookup); 1910 DEFINE_ATTR_EVENT(xfs_attr_sf_remove); 1911 DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf); 1912 1913 DEFINE_ATTR_EVENT(xfs_attr_leaf_add); 1914 DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old); 1915 DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new); 1916 DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work); 1917 DEFINE_ATTR_EVENT(xfs_attr_leaf_addname); 1918 DEFINE_ATTR_EVENT(xfs_attr_leaf_create); 1919 DEFINE_ATTR_EVENT(xfs_attr_leaf_compact); 1920 DEFINE_ATTR_EVENT(xfs_attr_leaf_get); 1921 DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup); 1922 DEFINE_ATTR_EVENT(xfs_attr_leaf_replace); 1923 DEFINE_ATTR_EVENT(xfs_attr_leaf_remove); 1924 DEFINE_ATTR_EVENT(xfs_attr_leaf_removename); 1925 DEFINE_ATTR_EVENT(xfs_attr_leaf_split); 1926 DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before); 1927 DEFINE_ATTR_EVENT(xfs_attr_leaf_split_after); 1928 DEFINE_ATTR_EVENT(xfs_attr_leaf_clearflag); 1929 DEFINE_ATTR_EVENT(xfs_attr_leaf_setflag); 1930 DEFINE_ATTR_EVENT(xfs_attr_leaf_flipflags); 1931 DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf); 1932 DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node); 1933 DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance); 1934 DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance); 1935 DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall); 1936 1937 DEFINE_ATTR_EVENT(xfs_attr_node_addname); 1938 DEFINE_ATTR_EVENT(xfs_attr_node_get); 1939 DEFINE_ATTR_EVENT(xfs_attr_node_replace); 1940 DEFINE_ATTR_EVENT(xfs_attr_node_removename); 1941 1942 DEFINE_ATTR_EVENT(xfs_attr_fillstate); 1943 DEFINE_ATTR_EVENT(xfs_attr_refillstate); 1944 1945 DEFINE_ATTR_EVENT(xfs_attr_rmtval_get); 1946 DEFINE_ATTR_EVENT(xfs_attr_rmtval_set); 1947 DEFINE_ATTR_EVENT(xfs_attr_rmtval_remove); 1948 1949 #define DEFINE_DA_EVENT(name) \ 1950 DEFINE_EVENT(xfs_da_class, name, \ 1951 TP_PROTO(struct xfs_da_args *args), \ 1952 TP_ARGS(args)) 1953 DEFINE_DA_EVENT(xfs_da_split); 1954 DEFINE_DA_EVENT(xfs_da_join); 1955 DEFINE_DA_EVENT(xfs_da_link_before); 1956 DEFINE_DA_EVENT(xfs_da_link_after); 1957 DEFINE_DA_EVENT(xfs_da_unlink_back); 1958 DEFINE_DA_EVENT(xfs_da_unlink_forward); 1959 DEFINE_DA_EVENT(xfs_da_root_split); 1960 DEFINE_DA_EVENT(xfs_da_root_join); 1961 DEFINE_DA_EVENT(xfs_da_node_add); 1962 DEFINE_DA_EVENT(xfs_da_node_create); 1963 DEFINE_DA_EVENT(xfs_da_node_split); 1964 DEFINE_DA_EVENT(xfs_da_node_remove); 1965 DEFINE_DA_EVENT(xfs_da_node_rebalance); 1966 DEFINE_DA_EVENT(xfs_da_node_unbalance); 1967 DEFINE_DA_EVENT(xfs_da_node_toosmall); 1968 DEFINE_DA_EVENT(xfs_da_swap_lastblock); 1969 DEFINE_DA_EVENT(xfs_da_grow_inode); 1970 DEFINE_DA_EVENT(xfs_da_shrink_inode); 1971 DEFINE_DA_EVENT(xfs_da_fixhashpath); 1972 DEFINE_DA_EVENT(xfs_da_path_shift); 1973 1974 DECLARE_EVENT_CLASS(xfs_dir2_space_class, 1975 TP_PROTO(struct xfs_da_args *args, int idx), 1976 TP_ARGS(args, idx), 1977 TP_STRUCT__entry( 1978 __field(dev_t, dev) 1979 __field(xfs_ino_t, ino) 1980 __field(int, op_flags) 1981 __field(int, idx) 1982 ), 1983 TP_fast_assign( 1984 __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 1985 __entry->ino = args->dp->i_ino; 1986 __entry->op_flags = args->op_flags; 1987 __entry->idx = idx; 1988 ), 1989 TP_printk("dev %d:%d ino 0x%llx op_flags %s index %d", 1990 MAJOR(__entry->dev), MINOR(__entry->dev), 1991 __entry->ino, 1992 __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS), 1993 __entry->idx) 1994 ) 1995 1996 #define DEFINE_DIR2_SPACE_EVENT(name) \ 1997 DEFINE_EVENT(xfs_dir2_space_class, name, \ 1998 TP_PROTO(struct xfs_da_args *args, int idx), \ 1999 TP_ARGS(args, idx)) 2000 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_add); 2001 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_leafn_remove); 2002 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_grow_inode); 2003 DEFINE_DIR2_SPACE_EVENT(xfs_dir2_shrink_inode); 2004 2005 TRACE_EVENT(xfs_dir2_leafn_moveents, 2006 TP_PROTO(struct xfs_da_args *args, int src_idx, int dst_idx, int count), 2007 TP_ARGS(args, src_idx, dst_idx, count), 2008 TP_STRUCT__entry( 2009 __field(dev_t, dev) 2010 __field(xfs_ino_t, ino) 2011 __field(int, op_flags) 2012 __field(int, src_idx) 2013 __field(int, dst_idx) 2014 __field(int, count) 2015 ), 2016 TP_fast_assign( 2017 __entry->dev = VFS_I(args->dp)->i_sb->s_dev; 2018 __entry->ino = args->dp->i_ino; 2019 __entry->op_flags = args->op_flags; 2020 __entry->src_idx = src_idx; 2021 __entry->dst_idx = dst_idx; 2022 __entry->count = count; 2023 ), 2024 TP_printk("dev %d:%d ino 0x%llx op_flags %s " 2025 "src_idx %d dst_idx %d count %d", 2026 MAJOR(__entry->dev), MINOR(__entry->dev), 2027 __entry->ino, 2028 __print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS), 2029 __entry->src_idx, 2030 __entry->dst_idx, 2031 __entry->count) 2032 ); 2033 2034 #define XFS_SWAPEXT_INODES \ 2035 { 0, "target" }, \ 2036 { 1, "temp" } 2037 2038 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_DEV); 2039 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_LOCAL); 2040 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_EXTENTS); 2041 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_BTREE); 2042 TRACE_DEFINE_ENUM(XFS_DINODE_FMT_UUID); 2043 2044 DECLARE_EVENT_CLASS(xfs_swap_extent_class, 2045 TP_PROTO(struct xfs_inode *ip, int which), 2046 TP_ARGS(ip, which), 2047 TP_STRUCT__entry( 2048 __field(dev_t, dev) 2049 __field(int, which) 2050 __field(xfs_ino_t, ino) 2051 __field(int, format) 2052 __field(int, nex) 2053 __field(int, broot_size) 2054 __field(int, fork_off) 2055 ), 2056 TP_fast_assign( 2057 __entry->dev = VFS_I(ip)->i_sb->s_dev; 2058 __entry->which = which; 2059 __entry->ino = ip->i_ino; 2060 __entry->format = ip->i_df.if_format; 2061 __entry->nex = ip->i_df.if_nextents; 2062 __entry->broot_size = ip->i_df.if_broot_bytes; 2063 __entry->fork_off = XFS_IFORK_BOFF(ip); 2064 ), 2065 TP_printk("dev %d:%d ino 0x%llx (%s), %s format, num_extents %d, " 2066 "broot size %d, fork offset %d", 2067 MAJOR(__entry->dev), MINOR(__entry->dev), 2068 __entry->ino, 2069 __print_symbolic(__entry->which, XFS_SWAPEXT_INODES), 2070 __print_symbolic(__entry->format, XFS_INODE_FORMAT_STR), 2071 __entry->nex, 2072 __entry->broot_size, 2073 __entry->fork_off) 2074 ) 2075 2076 #define DEFINE_SWAPEXT_EVENT(name) \ 2077 DEFINE_EVENT(xfs_swap_extent_class, name, \ 2078 TP_PROTO(struct xfs_inode *ip, int which), \ 2079 TP_ARGS(ip, which)) 2080 2081 DEFINE_SWAPEXT_EVENT(xfs_swap_extent_before); 2082 DEFINE_SWAPEXT_EVENT(xfs_swap_extent_after); 2083 2084 TRACE_EVENT(xfs_log_recover, 2085 TP_PROTO(struct xlog *log, xfs_daddr_t headblk, xfs_daddr_t tailblk), 2086 TP_ARGS(log, headblk, tailblk), 2087 TP_STRUCT__entry( 2088 __field(dev_t, dev) 2089 __field(xfs_daddr_t, headblk) 2090 __field(xfs_daddr_t, tailblk) 2091 ), 2092 TP_fast_assign( 2093 __entry->dev = log->l_mp->m_super->s_dev; 2094 __entry->headblk = headblk; 2095 __entry->tailblk = tailblk; 2096 ), 2097 TP_printk("dev %d:%d headblk 0x%llx tailblk 0x%llx", 2098 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->headblk, 2099 __entry->tailblk) 2100 ) 2101 2102 TRACE_EVENT(xfs_log_recover_record, 2103 TP_PROTO(struct xlog *log, struct xlog_rec_header *rhead, int pass), 2104 TP_ARGS(log, rhead, pass), 2105 TP_STRUCT__entry( 2106 __field(dev_t, dev) 2107 __field(xfs_lsn_t, lsn) 2108 __field(int, len) 2109 __field(int, num_logops) 2110 __field(int, pass) 2111 ), 2112 TP_fast_assign( 2113 __entry->dev = log->l_mp->m_super->s_dev; 2114 __entry->lsn = be64_to_cpu(rhead->h_lsn); 2115 __entry->len = be32_to_cpu(rhead->h_len); 2116 __entry->num_logops = be32_to_cpu(rhead->h_num_logops); 2117 __entry->pass = pass; 2118 ), 2119 TP_printk("dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d", 2120 MAJOR(__entry->dev), MINOR(__entry->dev), 2121 __entry->lsn, __entry->len, __entry->num_logops, 2122 __entry->pass) 2123 ) 2124 2125 DECLARE_EVENT_CLASS(xfs_log_recover_item_class, 2126 TP_PROTO(struct xlog *log, struct xlog_recover *trans, 2127 struct xlog_recover_item *item, int pass), 2128 TP_ARGS(log, trans, item, pass), 2129 TP_STRUCT__entry( 2130 __field(dev_t, dev) 2131 __field(unsigned long, item) 2132 __field(xlog_tid_t, tid) 2133 __field(xfs_lsn_t, lsn) 2134 __field(int, type) 2135 __field(int, pass) 2136 __field(int, count) 2137 __field(int, total) 2138 ), 2139 TP_fast_assign( 2140 __entry->dev = log->l_mp->m_super->s_dev; 2141 __entry->item = (unsigned long)item; 2142 __entry->tid = trans->r_log_tid; 2143 __entry->lsn = trans->r_lsn; 2144 __entry->type = ITEM_TYPE(item); 2145 __entry->pass = pass; 2146 __entry->count = item->ri_cnt; 2147 __entry->total = item->ri_total; 2148 ), 2149 TP_printk("dev %d:%d tid 0x%x lsn 0x%llx, pass %d, item %p, " 2150 "item type %s item region count/total %d/%d", 2151 MAJOR(__entry->dev), MINOR(__entry->dev), 2152 __entry->tid, 2153 __entry->lsn, 2154 __entry->pass, 2155 (void *)__entry->item, 2156 __print_symbolic(__entry->type, XFS_LI_TYPE_DESC), 2157 __entry->count, 2158 __entry->total) 2159 ) 2160 2161 #define DEFINE_LOG_RECOVER_ITEM(name) \ 2162 DEFINE_EVENT(xfs_log_recover_item_class, name, \ 2163 TP_PROTO(struct xlog *log, struct xlog_recover *trans, \ 2164 struct xlog_recover_item *item, int pass), \ 2165 TP_ARGS(log, trans, item, pass)) 2166 2167 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add); 2168 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_add_cont); 2169 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_head); 2170 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_reorder_tail); 2171 DEFINE_LOG_RECOVER_ITEM(xfs_log_recover_item_recover); 2172 2173 DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class, 2174 TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), 2175 TP_ARGS(log, buf_f), 2176 TP_STRUCT__entry( 2177 __field(dev_t, dev) 2178 __field(int64_t, blkno) 2179 __field(unsigned short, len) 2180 __field(unsigned short, flags) 2181 __field(unsigned short, size) 2182 __field(unsigned int, map_size) 2183 ), 2184 TP_fast_assign( 2185 __entry->dev = log->l_mp->m_super->s_dev; 2186 __entry->blkno = buf_f->blf_blkno; 2187 __entry->len = buf_f->blf_len; 2188 __entry->flags = buf_f->blf_flags; 2189 __entry->size = buf_f->blf_size; 2190 __entry->map_size = buf_f->blf_map_size; 2191 ), 2192 TP_printk("dev %d:%d blkno 0x%llx, len %u, flags 0x%x, size %d, " 2193 "map_size %d", 2194 MAJOR(__entry->dev), MINOR(__entry->dev), 2195 __entry->blkno, 2196 __entry->len, 2197 __entry->flags, 2198 __entry->size, 2199 __entry->map_size) 2200 ) 2201 2202 #define DEFINE_LOG_RECOVER_BUF_ITEM(name) \ 2203 DEFINE_EVENT(xfs_log_recover_buf_item_class, name, \ 2204 TP_PROTO(struct xlog *log, struct xfs_buf_log_format *buf_f), \ 2205 TP_ARGS(log, buf_f)) 2206 2207 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_not_cancel); 2208 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel); 2209 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_add); 2210 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel_ref_inc); 2211 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_recover); 2212 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_skip); 2213 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_inode_buf); 2214 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_reg_buf); 2215 DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_dquot_buf); 2216 2217 DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class, 2218 TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), 2219 TP_ARGS(log, in_f), 2220 TP_STRUCT__entry( 2221 __field(dev_t, dev) 2222 __field(xfs_ino_t, ino) 2223 __field(unsigned short, size) 2224 __field(int, fields) 2225 __field(unsigned short, asize) 2226 __field(unsigned short, dsize) 2227 __field(int64_t, blkno) 2228 __field(int, len) 2229 __field(int, boffset) 2230 ), 2231 TP_fast_assign( 2232 __entry->dev = log->l_mp->m_super->s_dev; 2233 __entry->ino = in_f->ilf_ino; 2234 __entry->size = in_f->ilf_size; 2235 __entry->fields = in_f->ilf_fields; 2236 __entry->asize = in_f->ilf_asize; 2237 __entry->dsize = in_f->ilf_dsize; 2238 __entry->blkno = in_f->ilf_blkno; 2239 __entry->len = in_f->ilf_len; 2240 __entry->boffset = in_f->ilf_boffset; 2241 ), 2242 TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, " 2243 "dsize %d, blkno 0x%llx, len %d, boffset %d", 2244 MAJOR(__entry->dev), MINOR(__entry->dev), 2245 __entry->ino, 2246 __entry->size, 2247 __entry->fields, 2248 __entry->asize, 2249 __entry->dsize, 2250 __entry->blkno, 2251 __entry->len, 2252 __entry->boffset) 2253 ) 2254 #define DEFINE_LOG_RECOVER_INO_ITEM(name) \ 2255 DEFINE_EVENT(xfs_log_recover_ino_item_class, name, \ 2256 TP_PROTO(struct xlog *log, struct xfs_inode_log_format *in_f), \ 2257 TP_ARGS(log, in_f)) 2258 2259 DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_recover); 2260 DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_cancel); 2261 DEFINE_LOG_RECOVER_INO_ITEM(xfs_log_recover_inode_skip); 2262 2263 DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class, 2264 TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), 2265 TP_ARGS(log, in_f), 2266 TP_STRUCT__entry( 2267 __field(dev_t, dev) 2268 __field(xfs_agnumber_t, agno) 2269 __field(xfs_agblock_t, agbno) 2270 __field(unsigned int, count) 2271 __field(unsigned int, isize) 2272 __field(xfs_agblock_t, length) 2273 __field(unsigned int, gen) 2274 ), 2275 TP_fast_assign( 2276 __entry->dev = log->l_mp->m_super->s_dev; 2277 __entry->agno = be32_to_cpu(in_f->icl_ag); 2278 __entry->agbno = be32_to_cpu(in_f->icl_agbno); 2279 __entry->count = be32_to_cpu(in_f->icl_count); 2280 __entry->isize = be32_to_cpu(in_f->icl_isize); 2281 __entry->length = be32_to_cpu(in_f->icl_length); 2282 __entry->gen = be32_to_cpu(in_f->icl_gen); 2283 ), 2284 TP_printk("dev %d:%d agno %u agbno %u count %u isize %u length %u " 2285 "gen %u", MAJOR(__entry->dev), MINOR(__entry->dev), 2286 __entry->agno, __entry->agbno, __entry->count, __entry->isize, 2287 __entry->length, __entry->gen) 2288 ) 2289 #define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \ 2290 DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \ 2291 TP_PROTO(struct xlog *log, struct xfs_icreate_log *in_f), \ 2292 TP_ARGS(log, in_f)) 2293 2294 DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_cancel); 2295 DEFINE_LOG_RECOVER_ICREATE_ITEM(xfs_log_recover_icreate_recover); 2296 2297 DECLARE_EVENT_CLASS(xfs_discard_class, 2298 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2299 xfs_agblock_t agbno, xfs_extlen_t len), 2300 TP_ARGS(mp, agno, agbno, len), 2301 TP_STRUCT__entry( 2302 __field(dev_t, dev) 2303 __field(xfs_agnumber_t, agno) 2304 __field(xfs_agblock_t, agbno) 2305 __field(xfs_extlen_t, len) 2306 ), 2307 TP_fast_assign( 2308 __entry->dev = mp->m_super->s_dev; 2309 __entry->agno = agno; 2310 __entry->agbno = agbno; 2311 __entry->len = len; 2312 ), 2313 TP_printk("dev %d:%d agno %u agbno %u len %u", 2314 MAJOR(__entry->dev), MINOR(__entry->dev), 2315 __entry->agno, 2316 __entry->agbno, 2317 __entry->len) 2318 ) 2319 2320 #define DEFINE_DISCARD_EVENT(name) \ 2321 DEFINE_EVENT(xfs_discard_class, name, \ 2322 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2323 xfs_agblock_t agbno, xfs_extlen_t len), \ 2324 TP_ARGS(mp, agno, agbno, len)) 2325 DEFINE_DISCARD_EVENT(xfs_discard_extent); 2326 DEFINE_DISCARD_EVENT(xfs_discard_toosmall); 2327 DEFINE_DISCARD_EVENT(xfs_discard_exclude); 2328 DEFINE_DISCARD_EVENT(xfs_discard_busy); 2329 2330 /* btree cursor events */ 2331 TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi); 2332 TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi); 2333 TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi); 2334 TRACE_DEFINE_ENUM(XFS_BTNUM_INOi); 2335 TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi); 2336 TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi); 2337 TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi); 2338 2339 DECLARE_EVENT_CLASS(xfs_btree_cur_class, 2340 TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), 2341 TP_ARGS(cur, level, bp), 2342 TP_STRUCT__entry( 2343 __field(dev_t, dev) 2344 __field(xfs_btnum_t, btnum) 2345 __field(int, level) 2346 __field(int, nlevels) 2347 __field(int, ptr) 2348 __field(xfs_daddr_t, daddr) 2349 ), 2350 TP_fast_assign( 2351 __entry->dev = cur->bc_mp->m_super->s_dev; 2352 __entry->btnum = cur->bc_btnum; 2353 __entry->level = level; 2354 __entry->nlevels = cur->bc_nlevels; 2355 __entry->ptr = cur->bc_ptrs[level]; 2356 __entry->daddr = bp ? bp->b_bn : -1; 2357 ), 2358 TP_printk("dev %d:%d btree %s level %d/%d ptr %d daddr 0x%llx", 2359 MAJOR(__entry->dev), MINOR(__entry->dev), 2360 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 2361 __entry->level, 2362 __entry->nlevels, 2363 __entry->ptr, 2364 (unsigned long long)__entry->daddr) 2365 ) 2366 2367 #define DEFINE_BTREE_CUR_EVENT(name) \ 2368 DEFINE_EVENT(xfs_btree_cur_class, name, \ 2369 TP_PROTO(struct xfs_btree_cur *cur, int level, struct xfs_buf *bp), \ 2370 TP_ARGS(cur, level, bp)) 2371 DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys); 2372 DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range); 2373 2374 /* deferred ops */ 2375 struct xfs_defer_pending; 2376 2377 DECLARE_EVENT_CLASS(xfs_defer_class, 2378 TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), 2379 TP_ARGS(tp, caller_ip), 2380 TP_STRUCT__entry( 2381 __field(dev_t, dev) 2382 __field(struct xfs_trans *, tp) 2383 __field(char, committed) 2384 __field(unsigned long, caller_ip) 2385 ), 2386 TP_fast_assign( 2387 __entry->dev = tp->t_mountp->m_super->s_dev; 2388 __entry->tp = tp; 2389 __entry->caller_ip = caller_ip; 2390 ), 2391 TP_printk("dev %d:%d tp %p caller %pS", 2392 MAJOR(__entry->dev), MINOR(__entry->dev), 2393 __entry->tp, 2394 (char *)__entry->caller_ip) 2395 ) 2396 #define DEFINE_DEFER_EVENT(name) \ 2397 DEFINE_EVENT(xfs_defer_class, name, \ 2398 TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \ 2399 TP_ARGS(tp, caller_ip)) 2400 2401 DECLARE_EVENT_CLASS(xfs_defer_error_class, 2402 TP_PROTO(struct xfs_trans *tp, int error), 2403 TP_ARGS(tp, error), 2404 TP_STRUCT__entry( 2405 __field(dev_t, dev) 2406 __field(struct xfs_trans *, tp) 2407 __field(char, committed) 2408 __field(int, error) 2409 ), 2410 TP_fast_assign( 2411 __entry->dev = tp->t_mountp->m_super->s_dev; 2412 __entry->tp = tp; 2413 __entry->error = error; 2414 ), 2415 TP_printk("dev %d:%d tp %p err %d", 2416 MAJOR(__entry->dev), MINOR(__entry->dev), 2417 __entry->tp, 2418 __entry->error) 2419 ) 2420 #define DEFINE_DEFER_ERROR_EVENT(name) \ 2421 DEFINE_EVENT(xfs_defer_error_class, name, \ 2422 TP_PROTO(struct xfs_trans *tp, int error), \ 2423 TP_ARGS(tp, error)) 2424 2425 DECLARE_EVENT_CLASS(xfs_defer_pending_class, 2426 TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), 2427 TP_ARGS(mp, dfp), 2428 TP_STRUCT__entry( 2429 __field(dev_t, dev) 2430 __field(int, type) 2431 __field(void *, intent) 2432 __field(char, committed) 2433 __field(int, nr) 2434 ), 2435 TP_fast_assign( 2436 __entry->dev = mp ? mp->m_super->s_dev : 0; 2437 __entry->type = dfp->dfp_type; 2438 __entry->intent = dfp->dfp_intent; 2439 __entry->committed = dfp->dfp_done != NULL; 2440 __entry->nr = dfp->dfp_count; 2441 ), 2442 TP_printk("dev %d:%d optype %d intent %p committed %d nr %d", 2443 MAJOR(__entry->dev), MINOR(__entry->dev), 2444 __entry->type, 2445 __entry->intent, 2446 __entry->committed, 2447 __entry->nr) 2448 ) 2449 #define DEFINE_DEFER_PENDING_EVENT(name) \ 2450 DEFINE_EVENT(xfs_defer_pending_class, name, \ 2451 TP_PROTO(struct xfs_mount *mp, struct xfs_defer_pending *dfp), \ 2452 TP_ARGS(mp, dfp)) 2453 2454 DECLARE_EVENT_CLASS(xfs_phys_extent_deferred_class, 2455 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2456 int type, xfs_agblock_t agbno, xfs_extlen_t len), 2457 TP_ARGS(mp, agno, type, agbno, len), 2458 TP_STRUCT__entry( 2459 __field(dev_t, dev) 2460 __field(xfs_agnumber_t, agno) 2461 __field(int, type) 2462 __field(xfs_agblock_t, agbno) 2463 __field(xfs_extlen_t, len) 2464 ), 2465 TP_fast_assign( 2466 __entry->dev = mp->m_super->s_dev; 2467 __entry->agno = agno; 2468 __entry->type = type; 2469 __entry->agbno = agbno; 2470 __entry->len = len; 2471 ), 2472 TP_printk("dev %d:%d op %d agno %u agbno %u len %u", 2473 MAJOR(__entry->dev), MINOR(__entry->dev), 2474 __entry->type, 2475 __entry->agno, 2476 __entry->agbno, 2477 __entry->len) 2478 ); 2479 #define DEFINE_PHYS_EXTENT_DEFERRED_EVENT(name) \ 2480 DEFINE_EVENT(xfs_phys_extent_deferred_class, name, \ 2481 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2482 int type, \ 2483 xfs_agblock_t bno, \ 2484 xfs_extlen_t len), \ 2485 TP_ARGS(mp, agno, type, bno, len)) 2486 2487 DECLARE_EVENT_CLASS(xfs_map_extent_deferred_class, 2488 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2489 int op, 2490 xfs_agblock_t agbno, 2491 xfs_ino_t ino, 2492 int whichfork, 2493 xfs_fileoff_t offset, 2494 xfs_filblks_t len, 2495 xfs_exntst_t state), 2496 TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state), 2497 TP_STRUCT__entry( 2498 __field(dev_t, dev) 2499 __field(xfs_agnumber_t, agno) 2500 __field(xfs_ino_t, ino) 2501 __field(xfs_agblock_t, agbno) 2502 __field(int, whichfork) 2503 __field(xfs_fileoff_t, l_loff) 2504 __field(xfs_filblks_t, l_len) 2505 __field(xfs_exntst_t, l_state) 2506 __field(int, op) 2507 ), 2508 TP_fast_assign( 2509 __entry->dev = mp->m_super->s_dev; 2510 __entry->agno = agno; 2511 __entry->ino = ino; 2512 __entry->agbno = agbno; 2513 __entry->whichfork = whichfork; 2514 __entry->l_loff = offset; 2515 __entry->l_len = len; 2516 __entry->l_state = state; 2517 __entry->op = op; 2518 ), 2519 TP_printk("dev %d:%d op %d agno %u agbno %u owner %lld %s offset %llu len %llu state %d", 2520 MAJOR(__entry->dev), MINOR(__entry->dev), 2521 __entry->op, 2522 __entry->agno, 2523 __entry->agbno, 2524 __entry->ino, 2525 __entry->whichfork == XFS_ATTR_FORK ? "attr" : "data", 2526 __entry->l_loff, 2527 __entry->l_len, 2528 __entry->l_state) 2529 ); 2530 #define DEFINE_MAP_EXTENT_DEFERRED_EVENT(name) \ 2531 DEFINE_EVENT(xfs_map_extent_deferred_class, name, \ 2532 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2533 int op, \ 2534 xfs_agblock_t agbno, \ 2535 xfs_ino_t ino, \ 2536 int whichfork, \ 2537 xfs_fileoff_t offset, \ 2538 xfs_filblks_t len, \ 2539 xfs_exntst_t state), \ 2540 TP_ARGS(mp, agno, op, agbno, ino, whichfork, offset, len, state)) 2541 2542 DEFINE_DEFER_EVENT(xfs_defer_cancel); 2543 DEFINE_DEFER_EVENT(xfs_defer_trans_roll); 2544 DEFINE_DEFER_EVENT(xfs_defer_trans_abort); 2545 DEFINE_DEFER_EVENT(xfs_defer_finish); 2546 DEFINE_DEFER_EVENT(xfs_defer_finish_done); 2547 2548 DEFINE_DEFER_ERROR_EVENT(xfs_defer_trans_roll_error); 2549 DEFINE_DEFER_ERROR_EVENT(xfs_defer_finish_error); 2550 2551 DEFINE_DEFER_PENDING_EVENT(xfs_defer_create_intent); 2552 DEFINE_DEFER_PENDING_EVENT(xfs_defer_cancel_list); 2553 DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_finish); 2554 DEFINE_DEFER_PENDING_EVENT(xfs_defer_pending_abort); 2555 DEFINE_DEFER_PENDING_EVENT(xfs_defer_relog_intent); 2556 2557 #define DEFINE_BMAP_FREE_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT 2558 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer); 2559 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred); 2560 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_defer); 2561 DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_agfl_free_deferred); 2562 2563 /* rmap tracepoints */ 2564 DECLARE_EVENT_CLASS(xfs_rmap_class, 2565 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2566 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, 2567 const struct xfs_owner_info *oinfo), 2568 TP_ARGS(mp, agno, agbno, len, unwritten, oinfo), 2569 TP_STRUCT__entry( 2570 __field(dev_t, dev) 2571 __field(xfs_agnumber_t, agno) 2572 __field(xfs_agblock_t, agbno) 2573 __field(xfs_extlen_t, len) 2574 __field(uint64_t, owner) 2575 __field(uint64_t, offset) 2576 __field(unsigned long, flags) 2577 ), 2578 TP_fast_assign( 2579 __entry->dev = mp->m_super->s_dev; 2580 __entry->agno = agno; 2581 __entry->agbno = agbno; 2582 __entry->len = len; 2583 __entry->owner = oinfo->oi_owner; 2584 __entry->offset = oinfo->oi_offset; 2585 __entry->flags = oinfo->oi_flags; 2586 if (unwritten) 2587 __entry->flags |= XFS_RMAP_UNWRITTEN; 2588 ), 2589 TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%lx", 2590 MAJOR(__entry->dev), MINOR(__entry->dev), 2591 __entry->agno, 2592 __entry->agbno, 2593 __entry->len, 2594 __entry->owner, 2595 __entry->offset, 2596 __entry->flags) 2597 ); 2598 #define DEFINE_RMAP_EVENT(name) \ 2599 DEFINE_EVENT(xfs_rmap_class, name, \ 2600 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2601 xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \ 2602 const struct xfs_owner_info *oinfo), \ 2603 TP_ARGS(mp, agno, agbno, len, unwritten, oinfo)) 2604 2605 /* simple AG-based error/%ip tracepoint class */ 2606 DECLARE_EVENT_CLASS(xfs_ag_error_class, 2607 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, 2608 unsigned long caller_ip), 2609 TP_ARGS(mp, agno, error, caller_ip), 2610 TP_STRUCT__entry( 2611 __field(dev_t, dev) 2612 __field(xfs_agnumber_t, agno) 2613 __field(int, error) 2614 __field(unsigned long, caller_ip) 2615 ), 2616 TP_fast_assign( 2617 __entry->dev = mp->m_super->s_dev; 2618 __entry->agno = agno; 2619 __entry->error = error; 2620 __entry->caller_ip = caller_ip; 2621 ), 2622 TP_printk("dev %d:%d agno %u error %d caller %pS", 2623 MAJOR(__entry->dev), MINOR(__entry->dev), 2624 __entry->agno, 2625 __entry->error, 2626 (char *)__entry->caller_ip) 2627 ); 2628 2629 #define DEFINE_AG_ERROR_EVENT(name) \ 2630 DEFINE_EVENT(xfs_ag_error_class, name, \ 2631 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \ 2632 unsigned long caller_ip), \ 2633 TP_ARGS(mp, agno, error, caller_ip)) 2634 2635 DEFINE_RMAP_EVENT(xfs_rmap_unmap); 2636 DEFINE_RMAP_EVENT(xfs_rmap_unmap_done); 2637 DEFINE_AG_ERROR_EVENT(xfs_rmap_unmap_error); 2638 DEFINE_RMAP_EVENT(xfs_rmap_map); 2639 DEFINE_RMAP_EVENT(xfs_rmap_map_done); 2640 DEFINE_AG_ERROR_EVENT(xfs_rmap_map_error); 2641 DEFINE_RMAP_EVENT(xfs_rmap_convert); 2642 DEFINE_RMAP_EVENT(xfs_rmap_convert_done); 2643 DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_error); 2644 DEFINE_AG_ERROR_EVENT(xfs_rmap_convert_state); 2645 2646 DECLARE_EVENT_CLASS(xfs_rmapbt_class, 2647 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2648 xfs_agblock_t agbno, xfs_extlen_t len, 2649 uint64_t owner, uint64_t offset, unsigned int flags), 2650 TP_ARGS(mp, agno, agbno, len, owner, offset, flags), 2651 TP_STRUCT__entry( 2652 __field(dev_t, dev) 2653 __field(xfs_agnumber_t, agno) 2654 __field(xfs_agblock_t, agbno) 2655 __field(xfs_extlen_t, len) 2656 __field(uint64_t, owner) 2657 __field(uint64_t, offset) 2658 __field(unsigned int, flags) 2659 ), 2660 TP_fast_assign( 2661 __entry->dev = mp->m_super->s_dev; 2662 __entry->agno = agno; 2663 __entry->agbno = agbno; 2664 __entry->len = len; 2665 __entry->owner = owner; 2666 __entry->offset = offset; 2667 __entry->flags = flags; 2668 ), 2669 TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x", 2670 MAJOR(__entry->dev), MINOR(__entry->dev), 2671 __entry->agno, 2672 __entry->agbno, 2673 __entry->len, 2674 __entry->owner, 2675 __entry->offset, 2676 __entry->flags) 2677 ); 2678 #define DEFINE_RMAPBT_EVENT(name) \ 2679 DEFINE_EVENT(xfs_rmapbt_class, name, \ 2680 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2681 xfs_agblock_t agbno, xfs_extlen_t len, \ 2682 uint64_t owner, uint64_t offset, unsigned int flags), \ 2683 TP_ARGS(mp, agno, agbno, len, owner, offset, flags)) 2684 2685 #define DEFINE_RMAP_DEFERRED_EVENT DEFINE_MAP_EXTENT_DEFERRED_EVENT 2686 DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer); 2687 DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred); 2688 2689 DEFINE_BUSY_EVENT(xfs_rmapbt_alloc_block); 2690 DEFINE_BUSY_EVENT(xfs_rmapbt_free_block); 2691 DEFINE_RMAPBT_EVENT(xfs_rmap_update); 2692 DEFINE_RMAPBT_EVENT(xfs_rmap_insert); 2693 DEFINE_RMAPBT_EVENT(xfs_rmap_delete); 2694 DEFINE_AG_ERROR_EVENT(xfs_rmap_insert_error); 2695 DEFINE_AG_ERROR_EVENT(xfs_rmap_delete_error); 2696 DEFINE_AG_ERROR_EVENT(xfs_rmap_update_error); 2697 2698 DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_candidate); 2699 DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_query); 2700 DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_candidate); 2701 DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range); 2702 DEFINE_RMAPBT_EVENT(xfs_rmap_lookup_le_range_result); 2703 DEFINE_RMAPBT_EVENT(xfs_rmap_find_right_neighbor_result); 2704 DEFINE_RMAPBT_EVENT(xfs_rmap_find_left_neighbor_result); 2705 2706 /* deferred bmbt updates */ 2707 #define DEFINE_BMAP_DEFERRED_EVENT DEFINE_RMAP_DEFERRED_EVENT 2708 DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_defer); 2709 DEFINE_BMAP_DEFERRED_EVENT(xfs_bmap_deferred); 2710 2711 /* per-AG reservation */ 2712 DECLARE_EVENT_CLASS(xfs_ag_resv_class, 2713 TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type resv, 2714 xfs_extlen_t len), 2715 TP_ARGS(pag, resv, len), 2716 TP_STRUCT__entry( 2717 __field(dev_t, dev) 2718 __field(xfs_agnumber_t, agno) 2719 __field(int, resv) 2720 __field(xfs_extlen_t, freeblks) 2721 __field(xfs_extlen_t, flcount) 2722 __field(xfs_extlen_t, reserved) 2723 __field(xfs_extlen_t, asked) 2724 __field(xfs_extlen_t, len) 2725 ), 2726 TP_fast_assign( 2727 struct xfs_ag_resv *r = xfs_perag_resv(pag, resv); 2728 2729 __entry->dev = pag->pag_mount->m_super->s_dev; 2730 __entry->agno = pag->pag_agno; 2731 __entry->resv = resv; 2732 __entry->freeblks = pag->pagf_freeblks; 2733 __entry->flcount = pag->pagf_flcount; 2734 __entry->reserved = r ? r->ar_reserved : 0; 2735 __entry->asked = r ? r->ar_asked : 0; 2736 __entry->len = len; 2737 ), 2738 TP_printk("dev %d:%d agno %u resv %d freeblks %u flcount %u " 2739 "resv %u ask %u len %u", 2740 MAJOR(__entry->dev), MINOR(__entry->dev), 2741 __entry->agno, 2742 __entry->resv, 2743 __entry->freeblks, 2744 __entry->flcount, 2745 __entry->reserved, 2746 __entry->asked, 2747 __entry->len) 2748 ) 2749 #define DEFINE_AG_RESV_EVENT(name) \ 2750 DEFINE_EVENT(xfs_ag_resv_class, name, \ 2751 TP_PROTO(struct xfs_perag *pag, enum xfs_ag_resv_type type, \ 2752 xfs_extlen_t len), \ 2753 TP_ARGS(pag, type, len)) 2754 2755 /* per-AG reservation tracepoints */ 2756 DEFINE_AG_RESV_EVENT(xfs_ag_resv_init); 2757 DEFINE_AG_RESV_EVENT(xfs_ag_resv_free); 2758 DEFINE_AG_RESV_EVENT(xfs_ag_resv_alloc_extent); 2759 DEFINE_AG_RESV_EVENT(xfs_ag_resv_free_extent); 2760 DEFINE_AG_RESV_EVENT(xfs_ag_resv_critical); 2761 DEFINE_AG_RESV_EVENT(xfs_ag_resv_needed); 2762 2763 DEFINE_AG_ERROR_EVENT(xfs_ag_resv_free_error); 2764 DEFINE_AG_ERROR_EVENT(xfs_ag_resv_init_error); 2765 2766 /* refcount tracepoint classes */ 2767 2768 /* reuse the discard trace class for agbno/aglen-based traces */ 2769 #define DEFINE_AG_EXTENT_EVENT(name) DEFINE_DISCARD_EVENT(name) 2770 2771 /* ag btree lookup tracepoint class */ 2772 TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi); 2773 TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi); 2774 TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi); 2775 DECLARE_EVENT_CLASS(xfs_ag_btree_lookup_class, 2776 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2777 xfs_agblock_t agbno, xfs_lookup_t dir), 2778 TP_ARGS(mp, agno, agbno, dir), 2779 TP_STRUCT__entry( 2780 __field(dev_t, dev) 2781 __field(xfs_agnumber_t, agno) 2782 __field(xfs_agblock_t, agbno) 2783 __field(xfs_lookup_t, dir) 2784 ), 2785 TP_fast_assign( 2786 __entry->dev = mp->m_super->s_dev; 2787 __entry->agno = agno; 2788 __entry->agbno = agbno; 2789 __entry->dir = dir; 2790 ), 2791 TP_printk("dev %d:%d agno %u agbno %u cmp %s(%d)", 2792 MAJOR(__entry->dev), MINOR(__entry->dev), 2793 __entry->agno, 2794 __entry->agbno, 2795 __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR), 2796 __entry->dir) 2797 ) 2798 2799 #define DEFINE_AG_BTREE_LOOKUP_EVENT(name) \ 2800 DEFINE_EVENT(xfs_ag_btree_lookup_class, name, \ 2801 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2802 xfs_agblock_t agbno, xfs_lookup_t dir), \ 2803 TP_ARGS(mp, agno, agbno, dir)) 2804 2805 /* single-rcext tracepoint class */ 2806 DECLARE_EVENT_CLASS(xfs_refcount_extent_class, 2807 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2808 struct xfs_refcount_irec *irec), 2809 TP_ARGS(mp, agno, irec), 2810 TP_STRUCT__entry( 2811 __field(dev_t, dev) 2812 __field(xfs_agnumber_t, agno) 2813 __field(xfs_agblock_t, startblock) 2814 __field(xfs_extlen_t, blockcount) 2815 __field(xfs_nlink_t, refcount) 2816 ), 2817 TP_fast_assign( 2818 __entry->dev = mp->m_super->s_dev; 2819 __entry->agno = agno; 2820 __entry->startblock = irec->rc_startblock; 2821 __entry->blockcount = irec->rc_blockcount; 2822 __entry->refcount = irec->rc_refcount; 2823 ), 2824 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u", 2825 MAJOR(__entry->dev), MINOR(__entry->dev), 2826 __entry->agno, 2827 __entry->startblock, 2828 __entry->blockcount, 2829 __entry->refcount) 2830 ) 2831 2832 #define DEFINE_REFCOUNT_EXTENT_EVENT(name) \ 2833 DEFINE_EVENT(xfs_refcount_extent_class, name, \ 2834 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2835 struct xfs_refcount_irec *irec), \ 2836 TP_ARGS(mp, agno, irec)) 2837 2838 /* single-rcext and an agbno tracepoint class */ 2839 DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class, 2840 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2841 struct xfs_refcount_irec *irec, xfs_agblock_t agbno), 2842 TP_ARGS(mp, agno, irec, agbno), 2843 TP_STRUCT__entry( 2844 __field(dev_t, dev) 2845 __field(xfs_agnumber_t, agno) 2846 __field(xfs_agblock_t, startblock) 2847 __field(xfs_extlen_t, blockcount) 2848 __field(xfs_nlink_t, refcount) 2849 __field(xfs_agblock_t, agbno) 2850 ), 2851 TP_fast_assign( 2852 __entry->dev = mp->m_super->s_dev; 2853 __entry->agno = agno; 2854 __entry->startblock = irec->rc_startblock; 2855 __entry->blockcount = irec->rc_blockcount; 2856 __entry->refcount = irec->rc_refcount; 2857 __entry->agbno = agbno; 2858 ), 2859 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u @ agbno %u", 2860 MAJOR(__entry->dev), MINOR(__entry->dev), 2861 __entry->agno, 2862 __entry->startblock, 2863 __entry->blockcount, 2864 __entry->refcount, 2865 __entry->agbno) 2866 ) 2867 2868 #define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \ 2869 DEFINE_EVENT(xfs_refcount_extent_at_class, name, \ 2870 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2871 struct xfs_refcount_irec *irec, xfs_agblock_t agbno), \ 2872 TP_ARGS(mp, agno, irec, agbno)) 2873 2874 /* double-rcext tracepoint class */ 2875 DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class, 2876 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2877 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), 2878 TP_ARGS(mp, agno, i1, i2), 2879 TP_STRUCT__entry( 2880 __field(dev_t, dev) 2881 __field(xfs_agnumber_t, agno) 2882 __field(xfs_agblock_t, i1_startblock) 2883 __field(xfs_extlen_t, i1_blockcount) 2884 __field(xfs_nlink_t, i1_refcount) 2885 __field(xfs_agblock_t, i2_startblock) 2886 __field(xfs_extlen_t, i2_blockcount) 2887 __field(xfs_nlink_t, i2_refcount) 2888 ), 2889 TP_fast_assign( 2890 __entry->dev = mp->m_super->s_dev; 2891 __entry->agno = agno; 2892 __entry->i1_startblock = i1->rc_startblock; 2893 __entry->i1_blockcount = i1->rc_blockcount; 2894 __entry->i1_refcount = i1->rc_refcount; 2895 __entry->i2_startblock = i2->rc_startblock; 2896 __entry->i2_blockcount = i2->rc_blockcount; 2897 __entry->i2_refcount = i2->rc_refcount; 2898 ), 2899 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " 2900 "agbno %u len %u refcount %u", 2901 MAJOR(__entry->dev), MINOR(__entry->dev), 2902 __entry->agno, 2903 __entry->i1_startblock, 2904 __entry->i1_blockcount, 2905 __entry->i1_refcount, 2906 __entry->i2_startblock, 2907 __entry->i2_blockcount, 2908 __entry->i2_refcount) 2909 ) 2910 2911 #define DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(name) \ 2912 DEFINE_EVENT(xfs_refcount_double_extent_class, name, \ 2913 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2914 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2), \ 2915 TP_ARGS(mp, agno, i1, i2)) 2916 2917 /* double-rcext and an agbno tracepoint class */ 2918 DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class, 2919 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2920 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, 2921 xfs_agblock_t agbno), 2922 TP_ARGS(mp, agno, i1, i2, agbno), 2923 TP_STRUCT__entry( 2924 __field(dev_t, dev) 2925 __field(xfs_agnumber_t, agno) 2926 __field(xfs_agblock_t, i1_startblock) 2927 __field(xfs_extlen_t, i1_blockcount) 2928 __field(xfs_nlink_t, i1_refcount) 2929 __field(xfs_agblock_t, i2_startblock) 2930 __field(xfs_extlen_t, i2_blockcount) 2931 __field(xfs_nlink_t, i2_refcount) 2932 __field(xfs_agblock_t, agbno) 2933 ), 2934 TP_fast_assign( 2935 __entry->dev = mp->m_super->s_dev; 2936 __entry->agno = agno; 2937 __entry->i1_startblock = i1->rc_startblock; 2938 __entry->i1_blockcount = i1->rc_blockcount; 2939 __entry->i1_refcount = i1->rc_refcount; 2940 __entry->i2_startblock = i2->rc_startblock; 2941 __entry->i2_blockcount = i2->rc_blockcount; 2942 __entry->i2_refcount = i2->rc_refcount; 2943 __entry->agbno = agbno; 2944 ), 2945 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " 2946 "agbno %u len %u refcount %u @ agbno %u", 2947 MAJOR(__entry->dev), MINOR(__entry->dev), 2948 __entry->agno, 2949 __entry->i1_startblock, 2950 __entry->i1_blockcount, 2951 __entry->i1_refcount, 2952 __entry->i2_startblock, 2953 __entry->i2_blockcount, 2954 __entry->i2_refcount, 2955 __entry->agbno) 2956 ) 2957 2958 #define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \ 2959 DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \ 2960 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 2961 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \ 2962 xfs_agblock_t agbno), \ 2963 TP_ARGS(mp, agno, i1, i2, agbno)) 2964 2965 /* triple-rcext tracepoint class */ 2966 DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class, 2967 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 2968 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, 2969 struct xfs_refcount_irec *i3), 2970 TP_ARGS(mp, agno, i1, i2, i3), 2971 TP_STRUCT__entry( 2972 __field(dev_t, dev) 2973 __field(xfs_agnumber_t, agno) 2974 __field(xfs_agblock_t, i1_startblock) 2975 __field(xfs_extlen_t, i1_blockcount) 2976 __field(xfs_nlink_t, i1_refcount) 2977 __field(xfs_agblock_t, i2_startblock) 2978 __field(xfs_extlen_t, i2_blockcount) 2979 __field(xfs_nlink_t, i2_refcount) 2980 __field(xfs_agblock_t, i3_startblock) 2981 __field(xfs_extlen_t, i3_blockcount) 2982 __field(xfs_nlink_t, i3_refcount) 2983 ), 2984 TP_fast_assign( 2985 __entry->dev = mp->m_super->s_dev; 2986 __entry->agno = agno; 2987 __entry->i1_startblock = i1->rc_startblock; 2988 __entry->i1_blockcount = i1->rc_blockcount; 2989 __entry->i1_refcount = i1->rc_refcount; 2990 __entry->i2_startblock = i2->rc_startblock; 2991 __entry->i2_blockcount = i2->rc_blockcount; 2992 __entry->i2_refcount = i2->rc_refcount; 2993 __entry->i3_startblock = i3->rc_startblock; 2994 __entry->i3_blockcount = i3->rc_blockcount; 2995 __entry->i3_refcount = i3->rc_refcount; 2996 ), 2997 TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u -- " 2998 "agbno %u len %u refcount %u -- " 2999 "agbno %u len %u refcount %u", 3000 MAJOR(__entry->dev), MINOR(__entry->dev), 3001 __entry->agno, 3002 __entry->i1_startblock, 3003 __entry->i1_blockcount, 3004 __entry->i1_refcount, 3005 __entry->i2_startblock, 3006 __entry->i2_blockcount, 3007 __entry->i2_refcount, 3008 __entry->i3_startblock, 3009 __entry->i3_blockcount, 3010 __entry->i3_refcount) 3011 ); 3012 3013 #define DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(name) \ 3014 DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \ 3015 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 3016 struct xfs_refcount_irec *i1, struct xfs_refcount_irec *i2, \ 3017 struct xfs_refcount_irec *i3), \ 3018 TP_ARGS(mp, agno, i1, i2, i3)) 3019 3020 /* refcount btree tracepoints */ 3021 DEFINE_BUSY_EVENT(xfs_refcountbt_alloc_block); 3022 DEFINE_BUSY_EVENT(xfs_refcountbt_free_block); 3023 DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcount_lookup); 3024 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get); 3025 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update); 3026 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_insert); 3027 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_delete); 3028 DEFINE_AG_ERROR_EVENT(xfs_refcount_insert_error); 3029 DEFINE_AG_ERROR_EVENT(xfs_refcount_delete_error); 3030 DEFINE_AG_ERROR_EVENT(xfs_refcount_update_error); 3031 3032 /* refcount adjustment tracepoints */ 3033 DEFINE_AG_EXTENT_EVENT(xfs_refcount_increase); 3034 DEFINE_AG_EXTENT_EVENT(xfs_refcount_decrease); 3035 DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_increase); 3036 DEFINE_AG_EXTENT_EVENT(xfs_refcount_cow_decrease); 3037 DEFINE_REFCOUNT_TRIPLE_EXTENT_EVENT(xfs_refcount_merge_center_extents); 3038 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_modify_extent); 3039 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_recover_extent); 3040 DEFINE_REFCOUNT_EXTENT_AT_EVENT(xfs_refcount_split_extent); 3041 DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_left_extent); 3042 DEFINE_REFCOUNT_DOUBLE_EXTENT_EVENT(xfs_refcount_merge_right_extent); 3043 DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_left_extent); 3044 DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(xfs_refcount_find_right_extent); 3045 DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_error); 3046 DEFINE_AG_ERROR_EVENT(xfs_refcount_adjust_cow_error); 3047 DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_center_extents_error); 3048 DEFINE_AG_ERROR_EVENT(xfs_refcount_modify_extent_error); 3049 DEFINE_AG_ERROR_EVENT(xfs_refcount_split_extent_error); 3050 DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_left_extent_error); 3051 DEFINE_AG_ERROR_EVENT(xfs_refcount_merge_right_extent_error); 3052 DEFINE_AG_ERROR_EVENT(xfs_refcount_find_left_extent_error); 3053 DEFINE_AG_ERROR_EVENT(xfs_refcount_find_right_extent_error); 3054 3055 /* reflink helpers */ 3056 DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared); 3057 DEFINE_AG_EXTENT_EVENT(xfs_refcount_find_shared_result); 3058 DEFINE_AG_ERROR_EVENT(xfs_refcount_find_shared_error); 3059 #define DEFINE_REFCOUNT_DEFERRED_EVENT DEFINE_PHYS_EXTENT_DEFERRED_EVENT 3060 DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_defer); 3061 DEFINE_REFCOUNT_DEFERRED_EVENT(xfs_refcount_deferred); 3062 3063 TRACE_EVENT(xfs_refcount_finish_one_leftover, 3064 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 3065 int type, xfs_agblock_t agbno, xfs_extlen_t len, 3066 xfs_agblock_t new_agbno, xfs_extlen_t new_len), 3067 TP_ARGS(mp, agno, type, agbno, len, new_agbno, new_len), 3068 TP_STRUCT__entry( 3069 __field(dev_t, dev) 3070 __field(xfs_agnumber_t, agno) 3071 __field(int, type) 3072 __field(xfs_agblock_t, agbno) 3073 __field(xfs_extlen_t, len) 3074 __field(xfs_agblock_t, new_agbno) 3075 __field(xfs_extlen_t, new_len) 3076 ), 3077 TP_fast_assign( 3078 __entry->dev = mp->m_super->s_dev; 3079 __entry->agno = agno; 3080 __entry->type = type; 3081 __entry->agbno = agbno; 3082 __entry->len = len; 3083 __entry->new_agbno = new_agbno; 3084 __entry->new_len = new_len; 3085 ), 3086 TP_printk("dev %d:%d type %d agno %u agbno %u len %u new_agbno %u new_len %u", 3087 MAJOR(__entry->dev), MINOR(__entry->dev), 3088 __entry->type, 3089 __entry->agno, 3090 __entry->agbno, 3091 __entry->len, 3092 __entry->new_agbno, 3093 __entry->new_len) 3094 ); 3095 3096 /* simple inode-based error/%ip tracepoint class */ 3097 DECLARE_EVENT_CLASS(xfs_inode_error_class, 3098 TP_PROTO(struct xfs_inode *ip, int error, unsigned long caller_ip), 3099 TP_ARGS(ip, error, caller_ip), 3100 TP_STRUCT__entry( 3101 __field(dev_t, dev) 3102 __field(xfs_ino_t, ino) 3103 __field(int, error) 3104 __field(unsigned long, caller_ip) 3105 ), 3106 TP_fast_assign( 3107 __entry->dev = VFS_I(ip)->i_sb->s_dev; 3108 __entry->ino = ip->i_ino; 3109 __entry->error = error; 3110 __entry->caller_ip = caller_ip; 3111 ), 3112 TP_printk("dev %d:%d ino %llx error %d caller %pS", 3113 MAJOR(__entry->dev), MINOR(__entry->dev), 3114 __entry->ino, 3115 __entry->error, 3116 (char *)__entry->caller_ip) 3117 ); 3118 3119 #define DEFINE_INODE_ERROR_EVENT(name) \ 3120 DEFINE_EVENT(xfs_inode_error_class, name, \ 3121 TP_PROTO(struct xfs_inode *ip, int error, \ 3122 unsigned long caller_ip), \ 3123 TP_ARGS(ip, error, caller_ip)) 3124 3125 /* reflink tracepoint classes */ 3126 3127 /* two-file io tracepoint class */ 3128 DECLARE_EVENT_CLASS(xfs_double_io_class, 3129 TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, 3130 struct xfs_inode *dest, xfs_off_t doffset), 3131 TP_ARGS(src, soffset, len, dest, doffset), 3132 TP_STRUCT__entry( 3133 __field(dev_t, dev) 3134 __field(xfs_ino_t, src_ino) 3135 __field(loff_t, src_isize) 3136 __field(loff_t, src_disize) 3137 __field(loff_t, src_offset) 3138 __field(size_t, len) 3139 __field(xfs_ino_t, dest_ino) 3140 __field(loff_t, dest_isize) 3141 __field(loff_t, dest_disize) 3142 __field(loff_t, dest_offset) 3143 ), 3144 TP_fast_assign( 3145 __entry->dev = VFS_I(src)->i_sb->s_dev; 3146 __entry->src_ino = src->i_ino; 3147 __entry->src_isize = VFS_I(src)->i_size; 3148 __entry->src_disize = src->i_d.di_size; 3149 __entry->src_offset = soffset; 3150 __entry->len = len; 3151 __entry->dest_ino = dest->i_ino; 3152 __entry->dest_isize = VFS_I(dest)->i_size; 3153 __entry->dest_disize = dest->i_d.di_size; 3154 __entry->dest_offset = doffset; 3155 ), 3156 TP_printk("dev %d:%d count %zd " 3157 "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx -> " 3158 "ino 0x%llx isize 0x%llx disize 0x%llx offset 0x%llx", 3159 MAJOR(__entry->dev), MINOR(__entry->dev), 3160 __entry->len, 3161 __entry->src_ino, 3162 __entry->src_isize, 3163 __entry->src_disize, 3164 __entry->src_offset, 3165 __entry->dest_ino, 3166 __entry->dest_isize, 3167 __entry->dest_disize, 3168 __entry->dest_offset) 3169 ) 3170 3171 #define DEFINE_DOUBLE_IO_EVENT(name) \ 3172 DEFINE_EVENT(xfs_double_io_class, name, \ 3173 TP_PROTO(struct xfs_inode *src, xfs_off_t soffset, xfs_off_t len, \ 3174 struct xfs_inode *dest, xfs_off_t doffset), \ 3175 TP_ARGS(src, soffset, len, dest, doffset)) 3176 3177 /* inode/irec events */ 3178 DECLARE_EVENT_CLASS(xfs_inode_irec_class, 3179 TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), 3180 TP_ARGS(ip, irec), 3181 TP_STRUCT__entry( 3182 __field(dev_t, dev) 3183 __field(xfs_ino_t, ino) 3184 __field(xfs_fileoff_t, lblk) 3185 __field(xfs_extlen_t, len) 3186 __field(xfs_fsblock_t, pblk) 3187 __field(int, state) 3188 ), 3189 TP_fast_assign( 3190 __entry->dev = VFS_I(ip)->i_sb->s_dev; 3191 __entry->ino = ip->i_ino; 3192 __entry->lblk = irec->br_startoff; 3193 __entry->len = irec->br_blockcount; 3194 __entry->pblk = irec->br_startblock; 3195 __entry->state = irec->br_state; 3196 ), 3197 TP_printk("dev %d:%d ino 0x%llx lblk 0x%llx len 0x%x pblk %llu st %d", 3198 MAJOR(__entry->dev), MINOR(__entry->dev), 3199 __entry->ino, 3200 __entry->lblk, 3201 __entry->len, 3202 __entry->pblk, 3203 __entry->state) 3204 ); 3205 #define DEFINE_INODE_IREC_EVENT(name) \ 3206 DEFINE_EVENT(xfs_inode_irec_class, name, \ 3207 TP_PROTO(struct xfs_inode *ip, struct xfs_bmbt_irec *irec), \ 3208 TP_ARGS(ip, irec)) 3209 3210 /* refcount/reflink tracepoint definitions */ 3211 3212 /* reflink tracepoints */ 3213 DEFINE_INODE_EVENT(xfs_reflink_set_inode_flag); 3214 DEFINE_INODE_EVENT(xfs_reflink_unset_inode_flag); 3215 DEFINE_ITRUNC_EVENT(xfs_reflink_update_inode_size); 3216 TRACE_EVENT(xfs_reflink_remap_blocks, 3217 TP_PROTO(struct xfs_inode *src, xfs_fileoff_t soffset, 3218 xfs_filblks_t len, struct xfs_inode *dest, 3219 xfs_fileoff_t doffset), 3220 TP_ARGS(src, soffset, len, dest, doffset), 3221 TP_STRUCT__entry( 3222 __field(dev_t, dev) 3223 __field(xfs_ino_t, src_ino) 3224 __field(xfs_fileoff_t, src_lblk) 3225 __field(xfs_filblks_t, len) 3226 __field(xfs_ino_t, dest_ino) 3227 __field(xfs_fileoff_t, dest_lblk) 3228 ), 3229 TP_fast_assign( 3230 __entry->dev = VFS_I(src)->i_sb->s_dev; 3231 __entry->src_ino = src->i_ino; 3232 __entry->src_lblk = soffset; 3233 __entry->len = len; 3234 __entry->dest_ino = dest->i_ino; 3235 __entry->dest_lblk = doffset; 3236 ), 3237 TP_printk("dev %d:%d len 0x%llx " 3238 "ino 0x%llx offset 0x%llx blocks -> " 3239 "ino 0x%llx offset 0x%llx blocks", 3240 MAJOR(__entry->dev), MINOR(__entry->dev), 3241 __entry->len, 3242 __entry->src_ino, 3243 __entry->src_lblk, 3244 __entry->dest_ino, 3245 __entry->dest_lblk) 3246 ); 3247 DEFINE_DOUBLE_IO_EVENT(xfs_reflink_remap_range); 3248 DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_range_error); 3249 DEFINE_INODE_ERROR_EVENT(xfs_reflink_set_inode_flag_error); 3250 DEFINE_INODE_ERROR_EVENT(xfs_reflink_update_inode_size_error); 3251 DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_blocks_error); 3252 DEFINE_INODE_ERROR_EVENT(xfs_reflink_remap_extent_error); 3253 DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_src); 3254 DEFINE_INODE_IREC_EVENT(xfs_reflink_remap_extent_dest); 3255 3256 /* dedupe tracepoints */ 3257 DEFINE_DOUBLE_IO_EVENT(xfs_reflink_compare_extents); 3258 DEFINE_INODE_ERROR_EVENT(xfs_reflink_compare_extents_error); 3259 3260 /* ioctl tracepoints */ 3261 TRACE_EVENT(xfs_ioctl_clone, 3262 TP_PROTO(struct inode *src, struct inode *dest), 3263 TP_ARGS(src, dest), 3264 TP_STRUCT__entry( 3265 __field(dev_t, dev) 3266 __field(unsigned long, src_ino) 3267 __field(loff_t, src_isize) 3268 __field(unsigned long, dest_ino) 3269 __field(loff_t, dest_isize) 3270 ), 3271 TP_fast_assign( 3272 __entry->dev = src->i_sb->s_dev; 3273 __entry->src_ino = src->i_ino; 3274 __entry->src_isize = i_size_read(src); 3275 __entry->dest_ino = dest->i_ino; 3276 __entry->dest_isize = i_size_read(dest); 3277 ), 3278 TP_printk("dev %d:%d " 3279 "ino 0x%lx isize 0x%llx -> " 3280 "ino 0x%lx isize 0x%llx", 3281 MAJOR(__entry->dev), MINOR(__entry->dev), 3282 __entry->src_ino, 3283 __entry->src_isize, 3284 __entry->dest_ino, 3285 __entry->dest_isize) 3286 ); 3287 3288 /* unshare tracepoints */ 3289 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_unshare); 3290 DEFINE_INODE_ERROR_EVENT(xfs_reflink_unshare_error); 3291 3292 /* copy on write */ 3293 DEFINE_INODE_IREC_EVENT(xfs_reflink_trim_around_shared); 3294 DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_found); 3295 DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_enospc); 3296 DEFINE_INODE_IREC_EVENT(xfs_reflink_convert_cow); 3297 3298 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_cancel_cow_range); 3299 DEFINE_SIMPLE_IO_EVENT(xfs_reflink_end_cow); 3300 DEFINE_INODE_IREC_EVENT(xfs_reflink_cow_remap); 3301 3302 DEFINE_INODE_ERROR_EVENT(xfs_reflink_cancel_cow_range_error); 3303 DEFINE_INODE_ERROR_EVENT(xfs_reflink_end_cow_error); 3304 3305 3306 DEFINE_INODE_IREC_EVENT(xfs_reflink_cancel_cow); 3307 3308 /* rmap swapext tracepoints */ 3309 DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap); 3310 DEFINE_INODE_IREC_EVENT(xfs_swap_extent_rmap_remap_piece); 3311 DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error); 3312 3313 /* fsmap traces */ 3314 DECLARE_EVENT_CLASS(xfs_fsmap_class, 3315 TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, 3316 struct xfs_rmap_irec *rmap), 3317 TP_ARGS(mp, keydev, agno, rmap), 3318 TP_STRUCT__entry( 3319 __field(dev_t, dev) 3320 __field(dev_t, keydev) 3321 __field(xfs_agnumber_t, agno) 3322 __field(xfs_fsblock_t, bno) 3323 __field(xfs_filblks_t, len) 3324 __field(uint64_t, owner) 3325 __field(uint64_t, offset) 3326 __field(unsigned int, flags) 3327 ), 3328 TP_fast_assign( 3329 __entry->dev = mp->m_super->s_dev; 3330 __entry->keydev = new_decode_dev(keydev); 3331 __entry->agno = agno; 3332 __entry->bno = rmap->rm_startblock; 3333 __entry->len = rmap->rm_blockcount; 3334 __entry->owner = rmap->rm_owner; 3335 __entry->offset = rmap->rm_offset; 3336 __entry->flags = rmap->rm_flags; 3337 ), 3338 TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld offset %llu flags 0x%x", 3339 MAJOR(__entry->dev), MINOR(__entry->dev), 3340 MAJOR(__entry->keydev), MINOR(__entry->keydev), 3341 __entry->agno, 3342 __entry->bno, 3343 __entry->len, 3344 __entry->owner, 3345 __entry->offset, 3346 __entry->flags) 3347 ) 3348 #define DEFINE_FSMAP_EVENT(name) \ 3349 DEFINE_EVENT(xfs_fsmap_class, name, \ 3350 TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \ 3351 struct xfs_rmap_irec *rmap), \ 3352 TP_ARGS(mp, keydev, agno, rmap)) 3353 DEFINE_FSMAP_EVENT(xfs_fsmap_low_key); 3354 DEFINE_FSMAP_EVENT(xfs_fsmap_high_key); 3355 DEFINE_FSMAP_EVENT(xfs_fsmap_mapping); 3356 3357 DECLARE_EVENT_CLASS(xfs_getfsmap_class, 3358 TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), 3359 TP_ARGS(mp, fsmap), 3360 TP_STRUCT__entry( 3361 __field(dev_t, dev) 3362 __field(dev_t, keydev) 3363 __field(xfs_daddr_t, block) 3364 __field(xfs_daddr_t, len) 3365 __field(uint64_t, owner) 3366 __field(uint64_t, offset) 3367 __field(uint64_t, flags) 3368 ), 3369 TP_fast_assign( 3370 __entry->dev = mp->m_super->s_dev; 3371 __entry->keydev = new_decode_dev(fsmap->fmr_device); 3372 __entry->block = fsmap->fmr_physical; 3373 __entry->len = fsmap->fmr_length; 3374 __entry->owner = fsmap->fmr_owner; 3375 __entry->offset = fsmap->fmr_offset; 3376 __entry->flags = fsmap->fmr_flags; 3377 ), 3378 TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld offset %llu flags 0x%llx", 3379 MAJOR(__entry->dev), MINOR(__entry->dev), 3380 MAJOR(__entry->keydev), MINOR(__entry->keydev), 3381 __entry->block, 3382 __entry->len, 3383 __entry->owner, 3384 __entry->offset, 3385 __entry->flags) 3386 ) 3387 #define DEFINE_GETFSMAP_EVENT(name) \ 3388 DEFINE_EVENT(xfs_getfsmap_class, name, \ 3389 TP_PROTO(struct xfs_mount *mp, struct xfs_fsmap *fsmap), \ 3390 TP_ARGS(mp, fsmap)) 3391 DEFINE_GETFSMAP_EVENT(xfs_getfsmap_low_key); 3392 DEFINE_GETFSMAP_EVENT(xfs_getfsmap_high_key); 3393 DEFINE_GETFSMAP_EVENT(xfs_getfsmap_mapping); 3394 3395 TRACE_EVENT(xfs_trans_resv_calc, 3396 TP_PROTO(struct xfs_mount *mp, unsigned int type, 3397 struct xfs_trans_res *res), 3398 TP_ARGS(mp, type, res), 3399 TP_STRUCT__entry( 3400 __field(dev_t, dev) 3401 __field(int, type) 3402 __field(uint, logres) 3403 __field(int, logcount) 3404 __field(int, logflags) 3405 ), 3406 TP_fast_assign( 3407 __entry->dev = mp->m_super->s_dev; 3408 __entry->type = type; 3409 __entry->logres = res->tr_logres; 3410 __entry->logcount = res->tr_logcount; 3411 __entry->logflags = res->tr_logflags; 3412 ), 3413 TP_printk("dev %d:%d type %d logres %u logcount %d flags 0x%x", 3414 MAJOR(__entry->dev), MINOR(__entry->dev), 3415 __entry->type, 3416 __entry->logres, 3417 __entry->logcount, 3418 __entry->logflags) 3419 ); 3420 3421 DECLARE_EVENT_CLASS(xfs_trans_class, 3422 TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), 3423 TP_ARGS(tp, caller_ip), 3424 TP_STRUCT__entry( 3425 __field(dev_t, dev) 3426 __field(uint32_t, tid) 3427 __field(uint32_t, flags) 3428 __field(unsigned long, caller_ip) 3429 ), 3430 TP_fast_assign( 3431 __entry->dev = tp->t_mountp->m_super->s_dev; 3432 __entry->tid = 0; 3433 if (tp->t_ticket) 3434 __entry->tid = tp->t_ticket->t_tid; 3435 __entry->flags = tp->t_flags; 3436 __entry->caller_ip = caller_ip; 3437 ), 3438 TP_printk("dev %d:%d trans %x flags 0x%x caller %pS", 3439 MAJOR(__entry->dev), MINOR(__entry->dev), 3440 __entry->tid, 3441 __entry->flags, 3442 (char *)__entry->caller_ip) 3443 ) 3444 3445 #define DEFINE_TRANS_EVENT(name) \ 3446 DEFINE_EVENT(xfs_trans_class, name, \ 3447 TP_PROTO(struct xfs_trans *tp, unsigned long caller_ip), \ 3448 TP_ARGS(tp, caller_ip)) 3449 DEFINE_TRANS_EVENT(xfs_trans_alloc); 3450 DEFINE_TRANS_EVENT(xfs_trans_cancel); 3451 DEFINE_TRANS_EVENT(xfs_trans_commit); 3452 DEFINE_TRANS_EVENT(xfs_trans_dup); 3453 DEFINE_TRANS_EVENT(xfs_trans_free); 3454 DEFINE_TRANS_EVENT(xfs_trans_roll); 3455 DEFINE_TRANS_EVENT(xfs_trans_add_item); 3456 DEFINE_TRANS_EVENT(xfs_trans_commit_items); 3457 DEFINE_TRANS_EVENT(xfs_trans_free_items); 3458 3459 TRACE_EVENT(xfs_iunlink_update_bucket, 3460 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int bucket, 3461 xfs_agino_t old_ptr, xfs_agino_t new_ptr), 3462 TP_ARGS(mp, agno, bucket, old_ptr, new_ptr), 3463 TP_STRUCT__entry( 3464 __field(dev_t, dev) 3465 __field(xfs_agnumber_t, agno) 3466 __field(unsigned int, bucket) 3467 __field(xfs_agino_t, old_ptr) 3468 __field(xfs_agino_t, new_ptr) 3469 ), 3470 TP_fast_assign( 3471 __entry->dev = mp->m_super->s_dev; 3472 __entry->agno = agno; 3473 __entry->bucket = bucket; 3474 __entry->old_ptr = old_ptr; 3475 __entry->new_ptr = new_ptr; 3476 ), 3477 TP_printk("dev %d:%d agno %u bucket %u old 0x%x new 0x%x", 3478 MAJOR(__entry->dev), MINOR(__entry->dev), 3479 __entry->agno, 3480 __entry->bucket, 3481 __entry->old_ptr, 3482 __entry->new_ptr) 3483 ); 3484 3485 TRACE_EVENT(xfs_iunlink_update_dinode, 3486 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agino_t agino, 3487 xfs_agino_t old_ptr, xfs_agino_t new_ptr), 3488 TP_ARGS(mp, agno, agino, old_ptr, new_ptr), 3489 TP_STRUCT__entry( 3490 __field(dev_t, dev) 3491 __field(xfs_agnumber_t, agno) 3492 __field(xfs_agino_t, agino) 3493 __field(xfs_agino_t, old_ptr) 3494 __field(xfs_agino_t, new_ptr) 3495 ), 3496 TP_fast_assign( 3497 __entry->dev = mp->m_super->s_dev; 3498 __entry->agno = agno; 3499 __entry->agino = agino; 3500 __entry->old_ptr = old_ptr; 3501 __entry->new_ptr = new_ptr; 3502 ), 3503 TP_printk("dev %d:%d agno %u agino 0x%x old 0x%x new 0x%x", 3504 MAJOR(__entry->dev), MINOR(__entry->dev), 3505 __entry->agno, 3506 __entry->agino, 3507 __entry->old_ptr, 3508 __entry->new_ptr) 3509 ); 3510 3511 DECLARE_EVENT_CLASS(xfs_ag_inode_class, 3512 TP_PROTO(struct xfs_inode *ip), 3513 TP_ARGS(ip), 3514 TP_STRUCT__entry( 3515 __field(dev_t, dev) 3516 __field(xfs_agnumber_t, agno) 3517 __field(xfs_agino_t, agino) 3518 ), 3519 TP_fast_assign( 3520 __entry->dev = VFS_I(ip)->i_sb->s_dev; 3521 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino); 3522 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); 3523 ), 3524 TP_printk("dev %d:%d agno %u agino %u", 3525 MAJOR(__entry->dev), MINOR(__entry->dev), 3526 __entry->agno, __entry->agino) 3527 ) 3528 3529 #define DEFINE_AGINODE_EVENT(name) \ 3530 DEFINE_EVENT(xfs_ag_inode_class, name, \ 3531 TP_PROTO(struct xfs_inode *ip), \ 3532 TP_ARGS(ip)) 3533 DEFINE_AGINODE_EVENT(xfs_iunlink); 3534 DEFINE_AGINODE_EVENT(xfs_iunlink_remove); 3535 DEFINE_AG_EVENT(xfs_iunlink_map_prev_fallback); 3536 3537 DECLARE_EVENT_CLASS(xfs_fs_corrupt_class, 3538 TP_PROTO(struct xfs_mount *mp, unsigned int flags), 3539 TP_ARGS(mp, flags), 3540 TP_STRUCT__entry( 3541 __field(dev_t, dev) 3542 __field(unsigned int, flags) 3543 ), 3544 TP_fast_assign( 3545 __entry->dev = mp->m_super->s_dev; 3546 __entry->flags = flags; 3547 ), 3548 TP_printk("dev %d:%d flags 0x%x", 3549 MAJOR(__entry->dev), MINOR(__entry->dev), 3550 __entry->flags) 3551 ); 3552 #define DEFINE_FS_CORRUPT_EVENT(name) \ 3553 DEFINE_EVENT(xfs_fs_corrupt_class, name, \ 3554 TP_PROTO(struct xfs_mount *mp, unsigned int flags), \ 3555 TP_ARGS(mp, flags)) 3556 DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_sick); 3557 DEFINE_FS_CORRUPT_EVENT(xfs_fs_mark_healthy); 3558 DEFINE_FS_CORRUPT_EVENT(xfs_fs_unfixed_corruption); 3559 DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_sick); 3560 DEFINE_FS_CORRUPT_EVENT(xfs_rt_mark_healthy); 3561 DEFINE_FS_CORRUPT_EVENT(xfs_rt_unfixed_corruption); 3562 3563 DECLARE_EVENT_CLASS(xfs_ag_corrupt_class, 3564 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int flags), 3565 TP_ARGS(mp, agno, flags), 3566 TP_STRUCT__entry( 3567 __field(dev_t, dev) 3568 __field(xfs_agnumber_t, agno) 3569 __field(unsigned int, flags) 3570 ), 3571 TP_fast_assign( 3572 __entry->dev = mp->m_super->s_dev; 3573 __entry->agno = agno; 3574 __entry->flags = flags; 3575 ), 3576 TP_printk("dev %d:%d agno %u flags 0x%x", 3577 MAJOR(__entry->dev), MINOR(__entry->dev), 3578 __entry->agno, __entry->flags) 3579 ); 3580 #define DEFINE_AG_CORRUPT_EVENT(name) \ 3581 DEFINE_EVENT(xfs_ag_corrupt_class, name, \ 3582 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \ 3583 unsigned int flags), \ 3584 TP_ARGS(mp, agno, flags)) 3585 DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_sick); 3586 DEFINE_AG_CORRUPT_EVENT(xfs_ag_mark_healthy); 3587 DEFINE_AG_CORRUPT_EVENT(xfs_ag_unfixed_corruption); 3588 3589 DECLARE_EVENT_CLASS(xfs_inode_corrupt_class, 3590 TP_PROTO(struct xfs_inode *ip, unsigned int flags), 3591 TP_ARGS(ip, flags), 3592 TP_STRUCT__entry( 3593 __field(dev_t, dev) 3594 __field(xfs_ino_t, ino) 3595 __field(unsigned int, flags) 3596 ), 3597 TP_fast_assign( 3598 __entry->dev = ip->i_mount->m_super->s_dev; 3599 __entry->ino = ip->i_ino; 3600 __entry->flags = flags; 3601 ), 3602 TP_printk("dev %d:%d ino 0x%llx flags 0x%x", 3603 MAJOR(__entry->dev), MINOR(__entry->dev), 3604 __entry->ino, __entry->flags) 3605 ); 3606 #define DEFINE_INODE_CORRUPT_EVENT(name) \ 3607 DEFINE_EVENT(xfs_inode_corrupt_class, name, \ 3608 TP_PROTO(struct xfs_inode *ip, unsigned int flags), \ 3609 TP_ARGS(ip, flags)) 3610 DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_sick); 3611 DEFINE_INODE_CORRUPT_EVENT(xfs_inode_mark_healthy); 3612 3613 TRACE_EVENT(xfs_iwalk_ag, 3614 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 3615 xfs_agino_t startino), 3616 TP_ARGS(mp, agno, startino), 3617 TP_STRUCT__entry( 3618 __field(dev_t, dev) 3619 __field(xfs_agnumber_t, agno) 3620 __field(xfs_agino_t, startino) 3621 ), 3622 TP_fast_assign( 3623 __entry->dev = mp->m_super->s_dev; 3624 __entry->agno = agno; 3625 __entry->startino = startino; 3626 ), 3627 TP_printk("dev %d:%d agno %d startino %u", 3628 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, 3629 __entry->startino) 3630 ) 3631 3632 TRACE_EVENT(xfs_iwalk_ag_rec, 3633 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, 3634 struct xfs_inobt_rec_incore *irec), 3635 TP_ARGS(mp, agno, irec), 3636 TP_STRUCT__entry( 3637 __field(dev_t, dev) 3638 __field(xfs_agnumber_t, agno) 3639 __field(xfs_agino_t, startino) 3640 __field(uint64_t, freemask) 3641 ), 3642 TP_fast_assign( 3643 __entry->dev = mp->m_super->s_dev; 3644 __entry->agno = agno; 3645 __entry->startino = irec->ir_startino; 3646 __entry->freemask = irec->ir_free; 3647 ), 3648 TP_printk("dev %d:%d agno %d startino %u freemask 0x%llx", 3649 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, 3650 __entry->startino, __entry->freemask) 3651 ) 3652 3653 TRACE_EVENT(xfs_pwork_init, 3654 TP_PROTO(struct xfs_mount *mp, unsigned int nr_threads, pid_t pid), 3655 TP_ARGS(mp, nr_threads, pid), 3656 TP_STRUCT__entry( 3657 __field(dev_t, dev) 3658 __field(unsigned int, nr_threads) 3659 __field(pid_t, pid) 3660 ), 3661 TP_fast_assign( 3662 __entry->dev = mp->m_super->s_dev; 3663 __entry->nr_threads = nr_threads; 3664 __entry->pid = pid; 3665 ), 3666 TP_printk("dev %d:%d nr_threads %u pid %u", 3667 MAJOR(__entry->dev), MINOR(__entry->dev), 3668 __entry->nr_threads, __entry->pid) 3669 ) 3670 3671 DECLARE_EVENT_CLASS(xfs_kmem_class, 3672 TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), 3673 TP_ARGS(size, flags, caller_ip), 3674 TP_STRUCT__entry( 3675 __field(ssize_t, size) 3676 __field(int, flags) 3677 __field(unsigned long, caller_ip) 3678 ), 3679 TP_fast_assign( 3680 __entry->size = size; 3681 __entry->flags = flags; 3682 __entry->caller_ip = caller_ip; 3683 ), 3684 TP_printk("size %zd flags 0x%x caller %pS", 3685 __entry->size, 3686 __entry->flags, 3687 (char *)__entry->caller_ip) 3688 ) 3689 3690 #define DEFINE_KMEM_EVENT(name) \ 3691 DEFINE_EVENT(xfs_kmem_class, name, \ 3692 TP_PROTO(ssize_t size, int flags, unsigned long caller_ip), \ 3693 TP_ARGS(size, flags, caller_ip)) 3694 DEFINE_KMEM_EVENT(kmem_alloc); 3695 DEFINE_KMEM_EVENT(kmem_alloc_io); 3696 DEFINE_KMEM_EVENT(kmem_alloc_large); 3697 3698 TRACE_EVENT(xfs_check_new_dalign, 3699 TP_PROTO(struct xfs_mount *mp, int new_dalign, xfs_ino_t calc_rootino), 3700 TP_ARGS(mp, new_dalign, calc_rootino), 3701 TP_STRUCT__entry( 3702 __field(dev_t, dev) 3703 __field(int, new_dalign) 3704 __field(xfs_ino_t, sb_rootino) 3705 __field(xfs_ino_t, calc_rootino) 3706 ), 3707 TP_fast_assign( 3708 __entry->dev = mp->m_super->s_dev; 3709 __entry->new_dalign = new_dalign; 3710 __entry->sb_rootino = mp->m_sb.sb_rootino; 3711 __entry->calc_rootino = calc_rootino; 3712 ), 3713 TP_printk("dev %d:%d new_dalign %d sb_rootino %llu calc_rootino %llu", 3714 MAJOR(__entry->dev), MINOR(__entry->dev), 3715 __entry->new_dalign, __entry->sb_rootino, 3716 __entry->calc_rootino) 3717 ) 3718 3719 TRACE_EVENT(xfs_btree_commit_afakeroot, 3720 TP_PROTO(struct xfs_btree_cur *cur), 3721 TP_ARGS(cur), 3722 TP_STRUCT__entry( 3723 __field(dev_t, dev) 3724 __field(xfs_btnum_t, btnum) 3725 __field(xfs_agnumber_t, agno) 3726 __field(xfs_agblock_t, agbno) 3727 __field(unsigned int, levels) 3728 __field(unsigned int, blocks) 3729 ), 3730 TP_fast_assign( 3731 __entry->dev = cur->bc_mp->m_super->s_dev; 3732 __entry->btnum = cur->bc_btnum; 3733 __entry->agno = cur->bc_ag.agno; 3734 __entry->agbno = cur->bc_ag.afake->af_root; 3735 __entry->levels = cur->bc_ag.afake->af_levels; 3736 __entry->blocks = cur->bc_ag.afake->af_blocks; 3737 ), 3738 TP_printk("dev %d:%d btree %s ag %u levels %u blocks %u root %u", 3739 MAJOR(__entry->dev), MINOR(__entry->dev), 3740 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3741 __entry->agno, 3742 __entry->levels, 3743 __entry->blocks, 3744 __entry->agbno) 3745 ) 3746 3747 TRACE_EVENT(xfs_btree_commit_ifakeroot, 3748 TP_PROTO(struct xfs_btree_cur *cur), 3749 TP_ARGS(cur), 3750 TP_STRUCT__entry( 3751 __field(dev_t, dev) 3752 __field(xfs_btnum_t, btnum) 3753 __field(xfs_agnumber_t, agno) 3754 __field(xfs_agino_t, agino) 3755 __field(unsigned int, levels) 3756 __field(unsigned int, blocks) 3757 __field(int, whichfork) 3758 ), 3759 TP_fast_assign( 3760 __entry->dev = cur->bc_mp->m_super->s_dev; 3761 __entry->btnum = cur->bc_btnum; 3762 __entry->agno = XFS_INO_TO_AGNO(cur->bc_mp, 3763 cur->bc_ino.ip->i_ino); 3764 __entry->agino = XFS_INO_TO_AGINO(cur->bc_mp, 3765 cur->bc_ino.ip->i_ino); 3766 __entry->levels = cur->bc_ino.ifake->if_levels; 3767 __entry->blocks = cur->bc_ino.ifake->if_blocks; 3768 __entry->whichfork = cur->bc_ino.whichfork; 3769 ), 3770 TP_printk("dev %d:%d btree %s ag %u agino %u whichfork %s levels %u blocks %u", 3771 MAJOR(__entry->dev), MINOR(__entry->dev), 3772 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3773 __entry->agno, 3774 __entry->agino, 3775 __entry->whichfork == XFS_ATTR_FORK ? "attr" : "data", 3776 __entry->levels, 3777 __entry->blocks) 3778 ) 3779 3780 TRACE_EVENT(xfs_btree_bload_level_geometry, 3781 TP_PROTO(struct xfs_btree_cur *cur, unsigned int level, 3782 uint64_t nr_this_level, unsigned int nr_per_block, 3783 unsigned int desired_npb, uint64_t blocks, 3784 uint64_t blocks_with_extra), 3785 TP_ARGS(cur, level, nr_this_level, nr_per_block, desired_npb, blocks, 3786 blocks_with_extra), 3787 TP_STRUCT__entry( 3788 __field(dev_t, dev) 3789 __field(xfs_btnum_t, btnum) 3790 __field(unsigned int, level) 3791 __field(unsigned int, nlevels) 3792 __field(uint64_t, nr_this_level) 3793 __field(unsigned int, nr_per_block) 3794 __field(unsigned int, desired_npb) 3795 __field(unsigned long long, blocks) 3796 __field(unsigned long long, blocks_with_extra) 3797 ), 3798 TP_fast_assign( 3799 __entry->dev = cur->bc_mp->m_super->s_dev; 3800 __entry->btnum = cur->bc_btnum; 3801 __entry->level = level; 3802 __entry->nlevels = cur->bc_nlevels; 3803 __entry->nr_this_level = nr_this_level; 3804 __entry->nr_per_block = nr_per_block; 3805 __entry->desired_npb = desired_npb; 3806 __entry->blocks = blocks; 3807 __entry->blocks_with_extra = blocks_with_extra; 3808 ), 3809 TP_printk("dev %d:%d btree %s level %u/%u nr_this_level %llu nr_per_block %u desired_npb %u blocks %llu blocks_with_extra %llu", 3810 MAJOR(__entry->dev), MINOR(__entry->dev), 3811 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3812 __entry->level, 3813 __entry->nlevels, 3814 __entry->nr_this_level, 3815 __entry->nr_per_block, 3816 __entry->desired_npb, 3817 __entry->blocks, 3818 __entry->blocks_with_extra) 3819 ) 3820 3821 TRACE_EVENT(xfs_btree_bload_block, 3822 TP_PROTO(struct xfs_btree_cur *cur, unsigned int level, 3823 uint64_t block_idx, uint64_t nr_blocks, 3824 union xfs_btree_ptr *ptr, unsigned int nr_records), 3825 TP_ARGS(cur, level, block_idx, nr_blocks, ptr, nr_records), 3826 TP_STRUCT__entry( 3827 __field(dev_t, dev) 3828 __field(xfs_btnum_t, btnum) 3829 __field(unsigned int, level) 3830 __field(unsigned long long, block_idx) 3831 __field(unsigned long long, nr_blocks) 3832 __field(xfs_agnumber_t, agno) 3833 __field(xfs_agblock_t, agbno) 3834 __field(unsigned int, nr_records) 3835 ), 3836 TP_fast_assign( 3837 __entry->dev = cur->bc_mp->m_super->s_dev; 3838 __entry->btnum = cur->bc_btnum; 3839 __entry->level = level; 3840 __entry->block_idx = block_idx; 3841 __entry->nr_blocks = nr_blocks; 3842 if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { 3843 xfs_fsblock_t fsb = be64_to_cpu(ptr->l); 3844 3845 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsb); 3846 __entry->agbno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsb); 3847 } else { 3848 __entry->agno = cur->bc_ag.agno; 3849 __entry->agbno = be32_to_cpu(ptr->s); 3850 } 3851 __entry->nr_records = nr_records; 3852 ), 3853 TP_printk("dev %d:%d btree %s level %u block %llu/%llu fsb (%u/%u) recs %u", 3854 MAJOR(__entry->dev), MINOR(__entry->dev), 3855 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS), 3856 __entry->level, 3857 __entry->block_idx, 3858 __entry->nr_blocks, 3859 __entry->agno, 3860 __entry->agbno, 3861 __entry->nr_records) 3862 ) 3863 3864 DECLARE_EVENT_CLASS(xfs_timestamp_range_class, 3865 TP_PROTO(struct xfs_mount *mp, time64_t min, time64_t max), 3866 TP_ARGS(mp, min, max), 3867 TP_STRUCT__entry( 3868 __field(dev_t, dev) 3869 __field(long long, min) 3870 __field(long long, max) 3871 ), 3872 TP_fast_assign( 3873 __entry->dev = mp->m_super->s_dev; 3874 __entry->min = min; 3875 __entry->max = max; 3876 ), 3877 TP_printk("dev %d:%d min %lld max %lld", 3878 MAJOR(__entry->dev), MINOR(__entry->dev), 3879 __entry->min, 3880 __entry->max) 3881 ) 3882 3883 #define DEFINE_TIMESTAMP_RANGE_EVENT(name) \ 3884 DEFINE_EVENT(xfs_timestamp_range_class, name, \ 3885 TP_PROTO(struct xfs_mount *mp, long long min, long long max), \ 3886 TP_ARGS(mp, min, max)) 3887 DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range); 3888 DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range); 3889 3890 DECLARE_EVENT_CLASS(xfs_eofblocks_class, 3891 TP_PROTO(struct xfs_mount *mp, struct xfs_eofblocks *eofb, 3892 unsigned long caller_ip), 3893 TP_ARGS(mp, eofb, caller_ip), 3894 TP_STRUCT__entry( 3895 __field(dev_t, dev) 3896 __field(__u32, flags) 3897 __field(uint32_t, uid) 3898 __field(uint32_t, gid) 3899 __field(prid_t, prid) 3900 __field(__u64, min_file_size) 3901 __field(unsigned long, caller_ip) 3902 ), 3903 TP_fast_assign( 3904 __entry->dev = mp->m_super->s_dev; 3905 __entry->flags = eofb ? eofb->eof_flags : 0; 3906 __entry->uid = eofb ? from_kuid(mp->m_super->s_user_ns, 3907 eofb->eof_uid) : 0; 3908 __entry->gid = eofb ? from_kgid(mp->m_super->s_user_ns, 3909 eofb->eof_gid) : 0; 3910 __entry->prid = eofb ? eofb->eof_prid : 0; 3911 __entry->min_file_size = eofb ? eofb->eof_min_file_size : 0; 3912 __entry->caller_ip = caller_ip; 3913 ), 3914 TP_printk("dev %d:%d flags 0x%x uid %u gid %u prid %u minsize %llu caller %pS", 3915 MAJOR(__entry->dev), MINOR(__entry->dev), 3916 __entry->flags, 3917 __entry->uid, 3918 __entry->gid, 3919 __entry->prid, 3920 __entry->min_file_size, 3921 (char *)__entry->caller_ip) 3922 ); 3923 #define DEFINE_EOFBLOCKS_EVENT(name) \ 3924 DEFINE_EVENT(xfs_eofblocks_class, name, \ 3925 TP_PROTO(struct xfs_mount *mp, struct xfs_eofblocks *eofb, \ 3926 unsigned long caller_ip), \ 3927 TP_ARGS(mp, eofb, caller_ip)) 3928 DEFINE_EOFBLOCKS_EVENT(xfs_ioc_free_eofblocks); 3929 DEFINE_EOFBLOCKS_EVENT(xfs_blockgc_free_space); 3930 3931 #endif /* _TRACE_XFS_H */ 3932 3933 #undef TRACE_INCLUDE_PATH 3934 #define TRACE_INCLUDE_PATH . 3935 #define TRACE_INCLUDE_FILE xfs_trace 3936 #include <trace/define_trace.h> 3937