1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM ext4 4 5 #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_EXT4_H 7 8 #include <linux/writeback.h> 9 #include <linux/tracepoint.h> 10 11 struct ext4_allocation_context; 12 struct ext4_allocation_request; 13 struct ext4_extent; 14 struct ext4_prealloc_space; 15 struct ext4_inode_info; 16 struct mpage_da_data; 17 struct ext4_map_blocks; 18 struct extent_status; 19 struct ext4_fsmap; 20 struct partial_cluster; 21 22 #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode)) 23 24 #define show_mballoc_flags(flags) __print_flags(flags, "|", \ 25 { EXT4_MB_HINT_MERGE, "HINT_MERGE" }, \ 26 { EXT4_MB_HINT_RESERVED, "HINT_RESV" }, \ 27 { EXT4_MB_HINT_METADATA, "HINT_MDATA" }, \ 28 { EXT4_MB_HINT_FIRST, "HINT_FIRST" }, \ 29 { EXT4_MB_HINT_BEST, "HINT_BEST" }, \ 30 { EXT4_MB_HINT_DATA, "HINT_DATA" }, \ 31 { EXT4_MB_HINT_NOPREALLOC, "HINT_NOPREALLOC" }, \ 32 { EXT4_MB_HINT_GROUP_ALLOC, "HINT_GRP_ALLOC" }, \ 33 { EXT4_MB_HINT_GOAL_ONLY, "HINT_GOAL_ONLY" }, \ 34 { EXT4_MB_HINT_TRY_GOAL, "HINT_TRY_GOAL" }, \ 35 { EXT4_MB_DELALLOC_RESERVED, "DELALLOC_RESV" }, \ 36 { EXT4_MB_STREAM_ALLOC, "STREAM_ALLOC" }, \ 37 { EXT4_MB_USE_ROOT_BLOCKS, "USE_ROOT_BLKS" }, \ 38 { EXT4_MB_USE_RESERVED, "USE_RESV" }, \ 39 { EXT4_MB_STRICT_CHECK, "STRICT_CHECK" }) 40 41 #define show_map_flags(flags) __print_flags(flags, "|", \ 42 { EXT4_GET_BLOCKS_CREATE, "CREATE" }, \ 43 { EXT4_GET_BLOCKS_UNWRIT_EXT, "UNWRIT" }, \ 44 { EXT4_GET_BLOCKS_DELALLOC_RESERVE, "DELALLOC" }, \ 45 { EXT4_GET_BLOCKS_PRE_IO, "PRE_IO" }, \ 46 { EXT4_GET_BLOCKS_CONVERT, "CONVERT" }, \ 47 { EXT4_GET_BLOCKS_METADATA_NOFAIL, "METADATA_NOFAIL" }, \ 48 { EXT4_GET_BLOCKS_NO_NORMALIZE, "NO_NORMALIZE" }, \ 49 { EXT4_GET_BLOCKS_CONVERT_UNWRITTEN, "CONVERT_UNWRITTEN" }, \ 50 { EXT4_GET_BLOCKS_ZERO, "ZERO" }, \ 51 { EXT4_GET_BLOCKS_IO_SUBMIT, "IO_SUBMIT" }, \ 52 { EXT4_EX_NOCACHE, "EX_NOCACHE" }) 53 54 /* 55 * __print_flags() requires that all enum values be wrapped in the 56 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace 57 * ring buffer. 58 */ 59 TRACE_DEFINE_ENUM(BH_New); 60 TRACE_DEFINE_ENUM(BH_Mapped); 61 TRACE_DEFINE_ENUM(BH_Unwritten); 62 TRACE_DEFINE_ENUM(BH_Boundary); 63 64 #define show_mflags(flags) __print_flags(flags, "", \ 65 { EXT4_MAP_NEW, "N" }, \ 66 { EXT4_MAP_MAPPED, "M" }, \ 67 { EXT4_MAP_UNWRITTEN, "U" }, \ 68 { EXT4_MAP_BOUNDARY, "B" }) 69 70 #define show_free_flags(flags) __print_flags(flags, "|", \ 71 { EXT4_FREE_BLOCKS_METADATA, "METADATA" }, \ 72 { EXT4_FREE_BLOCKS_FORGET, "FORGET" }, \ 73 { EXT4_FREE_BLOCKS_VALIDATED, "VALIDATED" }, \ 74 { EXT4_FREE_BLOCKS_NO_QUOT_UPDATE, "NO_QUOTA" }, \ 75 { EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\ 76 { EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER, "LAST_CLUSTER" }) 77 78 TRACE_DEFINE_ENUM(ES_WRITTEN_B); 79 TRACE_DEFINE_ENUM(ES_UNWRITTEN_B); 80 TRACE_DEFINE_ENUM(ES_DELAYED_B); 81 TRACE_DEFINE_ENUM(ES_HOLE_B); 82 TRACE_DEFINE_ENUM(ES_REFERENCED_B); 83 84 #define show_extent_status(status) __print_flags(status, "", \ 85 { EXTENT_STATUS_WRITTEN, "W" }, \ 86 { EXTENT_STATUS_UNWRITTEN, "U" }, \ 87 { EXTENT_STATUS_DELAYED, "D" }, \ 88 { EXTENT_STATUS_HOLE, "H" }, \ 89 { EXTENT_STATUS_REFERENCED, "R" }) 90 91 #define show_falloc_mode(mode) __print_flags(mode, "|", \ 92 { FALLOC_FL_KEEP_SIZE, "KEEP_SIZE"}, \ 93 { FALLOC_FL_PUNCH_HOLE, "PUNCH_HOLE"}, \ 94 { FALLOC_FL_NO_HIDE_STALE, "NO_HIDE_STALE"}, \ 95 { FALLOC_FL_COLLAPSE_RANGE, "COLLAPSE_RANGE"}, \ 96 { FALLOC_FL_ZERO_RANGE, "ZERO_RANGE"}) 97 98 TRACE_DEFINE_ENUM(EXT4_FC_REASON_XATTR); 99 TRACE_DEFINE_ENUM(EXT4_FC_REASON_CROSS_RENAME); 100 TRACE_DEFINE_ENUM(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE); 101 TRACE_DEFINE_ENUM(EXT4_FC_REASON_NOMEM); 102 TRACE_DEFINE_ENUM(EXT4_FC_REASON_SWAP_BOOT); 103 TRACE_DEFINE_ENUM(EXT4_FC_REASON_RESIZE); 104 TRACE_DEFINE_ENUM(EXT4_FC_REASON_RENAME_DIR); 105 TRACE_DEFINE_ENUM(EXT4_FC_REASON_FALLOC_RANGE); 106 TRACE_DEFINE_ENUM(EXT4_FC_REASON_INODE_JOURNAL_DATA); 107 TRACE_DEFINE_ENUM(EXT4_FC_REASON_ENCRYPTED_FILENAME); 108 TRACE_DEFINE_ENUM(EXT4_FC_REASON_MAX); 109 110 #define show_fc_reason(reason) \ 111 __print_symbolic(reason, \ 112 { EXT4_FC_REASON_XATTR, "XATTR"}, \ 113 { EXT4_FC_REASON_CROSS_RENAME, "CROSS_RENAME"}, \ 114 { EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, "JOURNAL_FLAG_CHANGE"}, \ 115 { EXT4_FC_REASON_NOMEM, "NO_MEM"}, \ 116 { EXT4_FC_REASON_SWAP_BOOT, "SWAP_BOOT"}, \ 117 { EXT4_FC_REASON_RESIZE, "RESIZE"}, \ 118 { EXT4_FC_REASON_RENAME_DIR, "RENAME_DIR"}, \ 119 { EXT4_FC_REASON_FALLOC_RANGE, "FALLOC_RANGE"}, \ 120 { EXT4_FC_REASON_INODE_JOURNAL_DATA, "INODE_JOURNAL_DATA"}, \ 121 { EXT4_FC_REASON_ENCRYPTED_FILENAME, "ENCRYPTED_FILENAME"}) 122 123 TRACE_EVENT(ext4_other_inode_update_time, 124 TP_PROTO(struct inode *inode, ino_t orig_ino), 125 126 TP_ARGS(inode, orig_ino), 127 128 TP_STRUCT__entry( 129 __field( dev_t, dev ) 130 __field( ino_t, ino ) 131 __field( ino_t, orig_ino ) 132 __field( uid_t, uid ) 133 __field( gid_t, gid ) 134 __field( __u16, mode ) 135 ), 136 137 TP_fast_assign( 138 __entry->orig_ino = orig_ino; 139 __entry->dev = inode->i_sb->s_dev; 140 __entry->ino = inode->i_ino; 141 __entry->uid = i_uid_read(inode); 142 __entry->gid = i_gid_read(inode); 143 __entry->mode = inode->i_mode; 144 ), 145 146 TP_printk("dev %d,%d orig_ino %lu ino %lu mode 0%o uid %u gid %u", 147 MAJOR(__entry->dev), MINOR(__entry->dev), 148 (unsigned long) __entry->orig_ino, 149 (unsigned long) __entry->ino, __entry->mode, 150 __entry->uid, __entry->gid) 151 ); 152 153 TRACE_EVENT(ext4_free_inode, 154 TP_PROTO(struct inode *inode), 155 156 TP_ARGS(inode), 157 158 TP_STRUCT__entry( 159 __field( dev_t, dev ) 160 __field( ino_t, ino ) 161 __field( uid_t, uid ) 162 __field( gid_t, gid ) 163 __field( __u64, blocks ) 164 __field( __u16, mode ) 165 ), 166 167 TP_fast_assign( 168 __entry->dev = inode->i_sb->s_dev; 169 __entry->ino = inode->i_ino; 170 __entry->uid = i_uid_read(inode); 171 __entry->gid = i_gid_read(inode); 172 __entry->blocks = inode->i_blocks; 173 __entry->mode = inode->i_mode; 174 ), 175 176 TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u blocks %llu", 177 MAJOR(__entry->dev), MINOR(__entry->dev), 178 (unsigned long) __entry->ino, __entry->mode, 179 __entry->uid, __entry->gid, __entry->blocks) 180 ); 181 182 TRACE_EVENT(ext4_request_inode, 183 TP_PROTO(struct inode *dir, int mode), 184 185 TP_ARGS(dir, mode), 186 187 TP_STRUCT__entry( 188 __field( dev_t, dev ) 189 __field( ino_t, dir ) 190 __field( __u16, mode ) 191 ), 192 193 TP_fast_assign( 194 __entry->dev = dir->i_sb->s_dev; 195 __entry->dir = dir->i_ino; 196 __entry->mode = mode; 197 ), 198 199 TP_printk("dev %d,%d dir %lu mode 0%o", 200 MAJOR(__entry->dev), MINOR(__entry->dev), 201 (unsigned long) __entry->dir, __entry->mode) 202 ); 203 204 TRACE_EVENT(ext4_allocate_inode, 205 TP_PROTO(struct inode *inode, struct inode *dir, int mode), 206 207 TP_ARGS(inode, dir, mode), 208 209 TP_STRUCT__entry( 210 __field( dev_t, dev ) 211 __field( ino_t, ino ) 212 __field( ino_t, dir ) 213 __field( __u16, mode ) 214 ), 215 216 TP_fast_assign( 217 __entry->dev = inode->i_sb->s_dev; 218 __entry->ino = inode->i_ino; 219 __entry->dir = dir->i_ino; 220 __entry->mode = mode; 221 ), 222 223 TP_printk("dev %d,%d ino %lu dir %lu mode 0%o", 224 MAJOR(__entry->dev), MINOR(__entry->dev), 225 (unsigned long) __entry->ino, 226 (unsigned long) __entry->dir, __entry->mode) 227 ); 228 229 TRACE_EVENT(ext4_evict_inode, 230 TP_PROTO(struct inode *inode), 231 232 TP_ARGS(inode), 233 234 TP_STRUCT__entry( 235 __field( dev_t, dev ) 236 __field( ino_t, ino ) 237 __field( int, nlink ) 238 ), 239 240 TP_fast_assign( 241 __entry->dev = inode->i_sb->s_dev; 242 __entry->ino = inode->i_ino; 243 __entry->nlink = inode->i_nlink; 244 ), 245 246 TP_printk("dev %d,%d ino %lu nlink %d", 247 MAJOR(__entry->dev), MINOR(__entry->dev), 248 (unsigned long) __entry->ino, __entry->nlink) 249 ); 250 251 TRACE_EVENT(ext4_drop_inode, 252 TP_PROTO(struct inode *inode, int drop), 253 254 TP_ARGS(inode, drop), 255 256 TP_STRUCT__entry( 257 __field( dev_t, dev ) 258 __field( ino_t, ino ) 259 __field( int, drop ) 260 ), 261 262 TP_fast_assign( 263 __entry->dev = inode->i_sb->s_dev; 264 __entry->ino = inode->i_ino; 265 __entry->drop = drop; 266 ), 267 268 TP_printk("dev %d,%d ino %lu drop %d", 269 MAJOR(__entry->dev), MINOR(__entry->dev), 270 (unsigned long) __entry->ino, __entry->drop) 271 ); 272 273 TRACE_EVENT(ext4_nfs_commit_metadata, 274 TP_PROTO(struct inode *inode), 275 276 TP_ARGS(inode), 277 278 TP_STRUCT__entry( 279 __field( dev_t, dev ) 280 __field( ino_t, ino ) 281 ), 282 283 TP_fast_assign( 284 __entry->dev = inode->i_sb->s_dev; 285 __entry->ino = inode->i_ino; 286 ), 287 288 TP_printk("dev %d,%d ino %lu", 289 MAJOR(__entry->dev), MINOR(__entry->dev), 290 (unsigned long) __entry->ino) 291 ); 292 293 TRACE_EVENT(ext4_mark_inode_dirty, 294 TP_PROTO(struct inode *inode, unsigned long IP), 295 296 TP_ARGS(inode, IP), 297 298 TP_STRUCT__entry( 299 __field( dev_t, dev ) 300 __field( ino_t, ino ) 301 __field(unsigned long, ip ) 302 ), 303 304 TP_fast_assign( 305 __entry->dev = inode->i_sb->s_dev; 306 __entry->ino = inode->i_ino; 307 __entry->ip = IP; 308 ), 309 310 TP_printk("dev %d,%d ino %lu caller %pS", 311 MAJOR(__entry->dev), MINOR(__entry->dev), 312 (unsigned long) __entry->ino, (void *)__entry->ip) 313 ); 314 315 TRACE_EVENT(ext4_begin_ordered_truncate, 316 TP_PROTO(struct inode *inode, loff_t new_size), 317 318 TP_ARGS(inode, new_size), 319 320 TP_STRUCT__entry( 321 __field( dev_t, dev ) 322 __field( ino_t, ino ) 323 __field( loff_t, new_size ) 324 ), 325 326 TP_fast_assign( 327 __entry->dev = inode->i_sb->s_dev; 328 __entry->ino = inode->i_ino; 329 __entry->new_size = new_size; 330 ), 331 332 TP_printk("dev %d,%d ino %lu new_size %lld", 333 MAJOR(__entry->dev), MINOR(__entry->dev), 334 (unsigned long) __entry->ino, 335 __entry->new_size) 336 ); 337 338 DECLARE_EVENT_CLASS(ext4__write_begin, 339 340 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 341 unsigned int flags), 342 343 TP_ARGS(inode, pos, len, flags), 344 345 TP_STRUCT__entry( 346 __field( dev_t, dev ) 347 __field( ino_t, ino ) 348 __field( loff_t, pos ) 349 __field( unsigned int, len ) 350 __field( unsigned int, flags ) 351 ), 352 353 TP_fast_assign( 354 __entry->dev = inode->i_sb->s_dev; 355 __entry->ino = inode->i_ino; 356 __entry->pos = pos; 357 __entry->len = len; 358 __entry->flags = flags; 359 ), 360 361 TP_printk("dev %d,%d ino %lu pos %lld len %u flags %u", 362 MAJOR(__entry->dev), MINOR(__entry->dev), 363 (unsigned long) __entry->ino, 364 __entry->pos, __entry->len, __entry->flags) 365 ); 366 367 DEFINE_EVENT(ext4__write_begin, ext4_write_begin, 368 369 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 370 unsigned int flags), 371 372 TP_ARGS(inode, pos, len, flags) 373 ); 374 375 DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin, 376 377 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 378 unsigned int flags), 379 380 TP_ARGS(inode, pos, len, flags) 381 ); 382 383 DECLARE_EVENT_CLASS(ext4__write_end, 384 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 385 unsigned int copied), 386 387 TP_ARGS(inode, pos, len, copied), 388 389 TP_STRUCT__entry( 390 __field( dev_t, dev ) 391 __field( ino_t, ino ) 392 __field( loff_t, pos ) 393 __field( unsigned int, len ) 394 __field( unsigned int, copied ) 395 ), 396 397 TP_fast_assign( 398 __entry->dev = inode->i_sb->s_dev; 399 __entry->ino = inode->i_ino; 400 __entry->pos = pos; 401 __entry->len = len; 402 __entry->copied = copied; 403 ), 404 405 TP_printk("dev %d,%d ino %lu pos %lld len %u copied %u", 406 MAJOR(__entry->dev), MINOR(__entry->dev), 407 (unsigned long) __entry->ino, 408 __entry->pos, __entry->len, __entry->copied) 409 ); 410 411 DEFINE_EVENT(ext4__write_end, ext4_write_end, 412 413 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 414 unsigned int copied), 415 416 TP_ARGS(inode, pos, len, copied) 417 ); 418 419 DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end, 420 421 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 422 unsigned int copied), 423 424 TP_ARGS(inode, pos, len, copied) 425 ); 426 427 DEFINE_EVENT(ext4__write_end, ext4_da_write_end, 428 429 TP_PROTO(struct inode *inode, loff_t pos, unsigned int len, 430 unsigned int copied), 431 432 TP_ARGS(inode, pos, len, copied) 433 ); 434 435 TRACE_EVENT(ext4_writepages, 436 TP_PROTO(struct inode *inode, struct writeback_control *wbc), 437 438 TP_ARGS(inode, wbc), 439 440 TP_STRUCT__entry( 441 __field( dev_t, dev ) 442 __field( ino_t, ino ) 443 __field( long, nr_to_write ) 444 __field( long, pages_skipped ) 445 __field( loff_t, range_start ) 446 __field( loff_t, range_end ) 447 __field( pgoff_t, writeback_index ) 448 __field( int, sync_mode ) 449 __field( char, for_kupdate ) 450 __field( char, range_cyclic ) 451 ), 452 453 TP_fast_assign( 454 __entry->dev = inode->i_sb->s_dev; 455 __entry->ino = inode->i_ino; 456 __entry->nr_to_write = wbc->nr_to_write; 457 __entry->pages_skipped = wbc->pages_skipped; 458 __entry->range_start = wbc->range_start; 459 __entry->range_end = wbc->range_end; 460 __entry->writeback_index = inode->i_mapping->writeback_index; 461 __entry->sync_mode = wbc->sync_mode; 462 __entry->for_kupdate = wbc->for_kupdate; 463 __entry->range_cyclic = wbc->range_cyclic; 464 ), 465 466 TP_printk("dev %d,%d ino %lu nr_to_write %ld pages_skipped %ld " 467 "range_start %lld range_end %lld sync_mode %d " 468 "for_kupdate %d range_cyclic %d writeback_index %lu", 469 MAJOR(__entry->dev), MINOR(__entry->dev), 470 (unsigned long) __entry->ino, __entry->nr_to_write, 471 __entry->pages_skipped, __entry->range_start, 472 __entry->range_end, __entry->sync_mode, 473 __entry->for_kupdate, __entry->range_cyclic, 474 (unsigned long) __entry->writeback_index) 475 ); 476 477 TRACE_EVENT(ext4_da_write_pages, 478 TP_PROTO(struct inode *inode, pgoff_t first_page, 479 struct writeback_control *wbc), 480 481 TP_ARGS(inode, first_page, wbc), 482 483 TP_STRUCT__entry( 484 __field( dev_t, dev ) 485 __field( ino_t, ino ) 486 __field( pgoff_t, first_page ) 487 __field( long, nr_to_write ) 488 __field( int, sync_mode ) 489 ), 490 491 TP_fast_assign( 492 __entry->dev = inode->i_sb->s_dev; 493 __entry->ino = inode->i_ino; 494 __entry->first_page = first_page; 495 __entry->nr_to_write = wbc->nr_to_write; 496 __entry->sync_mode = wbc->sync_mode; 497 ), 498 499 TP_printk("dev %d,%d ino %lu first_page %lu nr_to_write %ld " 500 "sync_mode %d", 501 MAJOR(__entry->dev), MINOR(__entry->dev), 502 (unsigned long) __entry->ino, __entry->first_page, 503 __entry->nr_to_write, __entry->sync_mode) 504 ); 505 506 TRACE_EVENT(ext4_da_write_pages_extent, 507 TP_PROTO(struct inode *inode, struct ext4_map_blocks *map), 508 509 TP_ARGS(inode, map), 510 511 TP_STRUCT__entry( 512 __field( dev_t, dev ) 513 __field( ino_t, ino ) 514 __field( __u64, lblk ) 515 __field( __u32, len ) 516 __field( __u32, flags ) 517 ), 518 519 TP_fast_assign( 520 __entry->dev = inode->i_sb->s_dev; 521 __entry->ino = inode->i_ino; 522 __entry->lblk = map->m_lblk; 523 __entry->len = map->m_len; 524 __entry->flags = map->m_flags; 525 ), 526 527 TP_printk("dev %d,%d ino %lu lblk %llu len %u flags %s", 528 MAJOR(__entry->dev), MINOR(__entry->dev), 529 (unsigned long) __entry->ino, __entry->lblk, __entry->len, 530 show_mflags(__entry->flags)) 531 ); 532 533 TRACE_EVENT(ext4_writepages_result, 534 TP_PROTO(struct inode *inode, struct writeback_control *wbc, 535 int ret, int pages_written), 536 537 TP_ARGS(inode, wbc, ret, pages_written), 538 539 TP_STRUCT__entry( 540 __field( dev_t, dev ) 541 __field( ino_t, ino ) 542 __field( int, ret ) 543 __field( int, pages_written ) 544 __field( long, pages_skipped ) 545 __field( pgoff_t, writeback_index ) 546 __field( int, sync_mode ) 547 ), 548 549 TP_fast_assign( 550 __entry->dev = inode->i_sb->s_dev; 551 __entry->ino = inode->i_ino; 552 __entry->ret = ret; 553 __entry->pages_written = pages_written; 554 __entry->pages_skipped = wbc->pages_skipped; 555 __entry->writeback_index = inode->i_mapping->writeback_index; 556 __entry->sync_mode = wbc->sync_mode; 557 ), 558 559 TP_printk("dev %d,%d ino %lu ret %d pages_written %d pages_skipped %ld " 560 "sync_mode %d writeback_index %lu", 561 MAJOR(__entry->dev), MINOR(__entry->dev), 562 (unsigned long) __entry->ino, __entry->ret, 563 __entry->pages_written, __entry->pages_skipped, 564 __entry->sync_mode, 565 (unsigned long) __entry->writeback_index) 566 ); 567 568 DECLARE_EVENT_CLASS(ext4__page_op, 569 TP_PROTO(struct page *page), 570 571 TP_ARGS(page), 572 573 TP_STRUCT__entry( 574 __field( dev_t, dev ) 575 __field( ino_t, ino ) 576 __field( pgoff_t, index ) 577 578 ), 579 580 TP_fast_assign( 581 __entry->dev = page->mapping->host->i_sb->s_dev; 582 __entry->ino = page->mapping->host->i_ino; 583 __entry->index = page->index; 584 ), 585 586 TP_printk("dev %d,%d ino %lu page_index %lu", 587 MAJOR(__entry->dev), MINOR(__entry->dev), 588 (unsigned long) __entry->ino, 589 (unsigned long) __entry->index) 590 ); 591 592 DEFINE_EVENT(ext4__page_op, ext4_writepage, 593 594 TP_PROTO(struct page *page), 595 596 TP_ARGS(page) 597 ); 598 599 DEFINE_EVENT(ext4__page_op, ext4_readpage, 600 601 TP_PROTO(struct page *page), 602 603 TP_ARGS(page) 604 ); 605 606 DEFINE_EVENT(ext4__page_op, ext4_releasepage, 607 608 TP_PROTO(struct page *page), 609 610 TP_ARGS(page) 611 ); 612 613 DECLARE_EVENT_CLASS(ext4_invalidatepage_op, 614 TP_PROTO(struct page *page, unsigned int offset, unsigned int length), 615 616 TP_ARGS(page, offset, length), 617 618 TP_STRUCT__entry( 619 __field( dev_t, dev ) 620 __field( ino_t, ino ) 621 __field( pgoff_t, index ) 622 __field( unsigned int, offset ) 623 __field( unsigned int, length ) 624 ), 625 626 TP_fast_assign( 627 __entry->dev = page->mapping->host->i_sb->s_dev; 628 __entry->ino = page->mapping->host->i_ino; 629 __entry->index = page->index; 630 __entry->offset = offset; 631 __entry->length = length; 632 ), 633 634 TP_printk("dev %d,%d ino %lu page_index %lu offset %u length %u", 635 MAJOR(__entry->dev), MINOR(__entry->dev), 636 (unsigned long) __entry->ino, 637 (unsigned long) __entry->index, 638 __entry->offset, __entry->length) 639 ); 640 641 DEFINE_EVENT(ext4_invalidatepage_op, ext4_invalidatepage, 642 TP_PROTO(struct page *page, unsigned int offset, unsigned int length), 643 644 TP_ARGS(page, offset, length) 645 ); 646 647 DEFINE_EVENT(ext4_invalidatepage_op, ext4_journalled_invalidatepage, 648 TP_PROTO(struct page *page, unsigned int offset, unsigned int length), 649 650 TP_ARGS(page, offset, length) 651 ); 652 653 TRACE_EVENT(ext4_discard_blocks, 654 TP_PROTO(struct super_block *sb, unsigned long long blk, 655 unsigned long long count), 656 657 TP_ARGS(sb, blk, count), 658 659 TP_STRUCT__entry( 660 __field( dev_t, dev ) 661 __field( __u64, blk ) 662 __field( __u64, count ) 663 664 ), 665 666 TP_fast_assign( 667 __entry->dev = sb->s_dev; 668 __entry->blk = blk; 669 __entry->count = count; 670 ), 671 672 TP_printk("dev %d,%d blk %llu count %llu", 673 MAJOR(__entry->dev), MINOR(__entry->dev), 674 __entry->blk, __entry->count) 675 ); 676 677 DECLARE_EVENT_CLASS(ext4__mb_new_pa, 678 TP_PROTO(struct ext4_allocation_context *ac, 679 struct ext4_prealloc_space *pa), 680 681 TP_ARGS(ac, pa), 682 683 TP_STRUCT__entry( 684 __field( dev_t, dev ) 685 __field( ino_t, ino ) 686 __field( __u64, pa_pstart ) 687 __field( __u64, pa_lstart ) 688 __field( __u32, pa_len ) 689 690 ), 691 692 TP_fast_assign( 693 __entry->dev = ac->ac_sb->s_dev; 694 __entry->ino = ac->ac_inode->i_ino; 695 __entry->pa_pstart = pa->pa_pstart; 696 __entry->pa_lstart = pa->pa_lstart; 697 __entry->pa_len = pa->pa_len; 698 ), 699 700 TP_printk("dev %d,%d ino %lu pstart %llu len %u lstart %llu", 701 MAJOR(__entry->dev), MINOR(__entry->dev), 702 (unsigned long) __entry->ino, 703 __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart) 704 ); 705 706 DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_inode_pa, 707 708 TP_PROTO(struct ext4_allocation_context *ac, 709 struct ext4_prealloc_space *pa), 710 711 TP_ARGS(ac, pa) 712 ); 713 714 DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_group_pa, 715 716 TP_PROTO(struct ext4_allocation_context *ac, 717 struct ext4_prealloc_space *pa), 718 719 TP_ARGS(ac, pa) 720 ); 721 722 TRACE_EVENT(ext4_mb_release_inode_pa, 723 TP_PROTO(struct ext4_prealloc_space *pa, 724 unsigned long long block, unsigned int count), 725 726 TP_ARGS(pa, block, count), 727 728 TP_STRUCT__entry( 729 __field( dev_t, dev ) 730 __field( ino_t, ino ) 731 __field( __u64, block ) 732 __field( __u32, count ) 733 734 ), 735 736 TP_fast_assign( 737 __entry->dev = pa->pa_inode->i_sb->s_dev; 738 __entry->ino = pa->pa_inode->i_ino; 739 __entry->block = block; 740 __entry->count = count; 741 ), 742 743 TP_printk("dev %d,%d ino %lu block %llu count %u", 744 MAJOR(__entry->dev), MINOR(__entry->dev), 745 (unsigned long) __entry->ino, 746 __entry->block, __entry->count) 747 ); 748 749 TRACE_EVENT(ext4_mb_release_group_pa, 750 TP_PROTO(struct super_block *sb, struct ext4_prealloc_space *pa), 751 752 TP_ARGS(sb, pa), 753 754 TP_STRUCT__entry( 755 __field( dev_t, dev ) 756 __field( __u64, pa_pstart ) 757 __field( __u32, pa_len ) 758 759 ), 760 761 TP_fast_assign( 762 __entry->dev = sb->s_dev; 763 __entry->pa_pstart = pa->pa_pstart; 764 __entry->pa_len = pa->pa_len; 765 ), 766 767 TP_printk("dev %d,%d pstart %llu len %u", 768 MAJOR(__entry->dev), MINOR(__entry->dev), 769 __entry->pa_pstart, __entry->pa_len) 770 ); 771 772 TRACE_EVENT(ext4_discard_preallocations, 773 TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed), 774 775 TP_ARGS(inode, len, needed), 776 777 TP_STRUCT__entry( 778 __field( dev_t, dev ) 779 __field( ino_t, ino ) 780 __field( unsigned int, len ) 781 __field( unsigned int, needed ) 782 783 ), 784 785 TP_fast_assign( 786 __entry->dev = inode->i_sb->s_dev; 787 __entry->ino = inode->i_ino; 788 __entry->len = len; 789 __entry->needed = needed; 790 ), 791 792 TP_printk("dev %d,%d ino %lu len: %u needed %u", 793 MAJOR(__entry->dev), MINOR(__entry->dev), 794 (unsigned long) __entry->ino, __entry->len, 795 __entry->needed) 796 ); 797 798 TRACE_EVENT(ext4_mb_discard_preallocations, 799 TP_PROTO(struct super_block *sb, int needed), 800 801 TP_ARGS(sb, needed), 802 803 TP_STRUCT__entry( 804 __field( dev_t, dev ) 805 __field( int, needed ) 806 807 ), 808 809 TP_fast_assign( 810 __entry->dev = sb->s_dev; 811 __entry->needed = needed; 812 ), 813 814 TP_printk("dev %d,%d needed %d", 815 MAJOR(__entry->dev), MINOR(__entry->dev), 816 __entry->needed) 817 ); 818 819 TRACE_EVENT(ext4_request_blocks, 820 TP_PROTO(struct ext4_allocation_request *ar), 821 822 TP_ARGS(ar), 823 824 TP_STRUCT__entry( 825 __field( dev_t, dev ) 826 __field( ino_t, ino ) 827 __field( unsigned int, len ) 828 __field( __u32, logical ) 829 __field( __u32, lleft ) 830 __field( __u32, lright ) 831 __field( __u64, goal ) 832 __field( __u64, pleft ) 833 __field( __u64, pright ) 834 __field( unsigned int, flags ) 835 ), 836 837 TP_fast_assign( 838 __entry->dev = ar->inode->i_sb->s_dev; 839 __entry->ino = ar->inode->i_ino; 840 __entry->len = ar->len; 841 __entry->logical = ar->logical; 842 __entry->goal = ar->goal; 843 __entry->lleft = ar->lleft; 844 __entry->lright = ar->lright; 845 __entry->pleft = ar->pleft; 846 __entry->pright = ar->pright; 847 __entry->flags = ar->flags; 848 ), 849 850 TP_printk("dev %d,%d ino %lu flags %s len %u lblk %u goal %llu " 851 "lleft %u lright %u pleft %llu pright %llu ", 852 MAJOR(__entry->dev), MINOR(__entry->dev), 853 (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags), 854 __entry->len, __entry->logical, __entry->goal, 855 __entry->lleft, __entry->lright, __entry->pleft, 856 __entry->pright) 857 ); 858 859 TRACE_EVENT(ext4_allocate_blocks, 860 TP_PROTO(struct ext4_allocation_request *ar, unsigned long long block), 861 862 TP_ARGS(ar, block), 863 864 TP_STRUCT__entry( 865 __field( dev_t, dev ) 866 __field( ino_t, ino ) 867 __field( __u64, block ) 868 __field( unsigned int, len ) 869 __field( __u32, logical ) 870 __field( __u32, lleft ) 871 __field( __u32, lright ) 872 __field( __u64, goal ) 873 __field( __u64, pleft ) 874 __field( __u64, pright ) 875 __field( unsigned int, flags ) 876 ), 877 878 TP_fast_assign( 879 __entry->dev = ar->inode->i_sb->s_dev; 880 __entry->ino = ar->inode->i_ino; 881 __entry->block = block; 882 __entry->len = ar->len; 883 __entry->logical = ar->logical; 884 __entry->goal = ar->goal; 885 __entry->lleft = ar->lleft; 886 __entry->lright = ar->lright; 887 __entry->pleft = ar->pleft; 888 __entry->pright = ar->pright; 889 __entry->flags = ar->flags; 890 ), 891 892 TP_printk("dev %d,%d ino %lu flags %s len %u block %llu lblk %u " 893 "goal %llu lleft %u lright %u pleft %llu pright %llu", 894 MAJOR(__entry->dev), MINOR(__entry->dev), 895 (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags), 896 __entry->len, __entry->block, __entry->logical, 897 __entry->goal, __entry->lleft, __entry->lright, 898 __entry->pleft, __entry->pright) 899 ); 900 901 TRACE_EVENT(ext4_free_blocks, 902 TP_PROTO(struct inode *inode, __u64 block, unsigned long count, 903 int flags), 904 905 TP_ARGS(inode, block, count, flags), 906 907 TP_STRUCT__entry( 908 __field( dev_t, dev ) 909 __field( ino_t, ino ) 910 __field( __u64, block ) 911 __field( unsigned long, count ) 912 __field( int, flags ) 913 __field( __u16, mode ) 914 ), 915 916 TP_fast_assign( 917 __entry->dev = inode->i_sb->s_dev; 918 __entry->ino = inode->i_ino; 919 __entry->block = block; 920 __entry->count = count; 921 __entry->flags = flags; 922 __entry->mode = inode->i_mode; 923 ), 924 925 TP_printk("dev %d,%d ino %lu mode 0%o block %llu count %lu flags %s", 926 MAJOR(__entry->dev), MINOR(__entry->dev), 927 (unsigned long) __entry->ino, 928 __entry->mode, __entry->block, __entry->count, 929 show_free_flags(__entry->flags)) 930 ); 931 932 TRACE_EVENT(ext4_sync_file_enter, 933 TP_PROTO(struct file *file, int datasync), 934 935 TP_ARGS(file, datasync), 936 937 TP_STRUCT__entry( 938 __field( dev_t, dev ) 939 __field( ino_t, ino ) 940 __field( ino_t, parent ) 941 __field( int, datasync ) 942 ), 943 944 TP_fast_assign( 945 struct dentry *dentry = file->f_path.dentry; 946 947 __entry->dev = dentry->d_sb->s_dev; 948 __entry->ino = d_inode(dentry)->i_ino; 949 __entry->datasync = datasync; 950 __entry->parent = d_inode(dentry->d_parent)->i_ino; 951 ), 952 953 TP_printk("dev %d,%d ino %lu parent %lu datasync %d ", 954 MAJOR(__entry->dev), MINOR(__entry->dev), 955 (unsigned long) __entry->ino, 956 (unsigned long) __entry->parent, __entry->datasync) 957 ); 958 959 TRACE_EVENT(ext4_sync_file_exit, 960 TP_PROTO(struct inode *inode, int ret), 961 962 TP_ARGS(inode, ret), 963 964 TP_STRUCT__entry( 965 __field( dev_t, dev ) 966 __field( ino_t, ino ) 967 __field( int, ret ) 968 ), 969 970 TP_fast_assign( 971 __entry->dev = inode->i_sb->s_dev; 972 __entry->ino = inode->i_ino; 973 __entry->ret = ret; 974 ), 975 976 TP_printk("dev %d,%d ino %lu ret %d", 977 MAJOR(__entry->dev), MINOR(__entry->dev), 978 (unsigned long) __entry->ino, 979 __entry->ret) 980 ); 981 982 TRACE_EVENT(ext4_sync_fs, 983 TP_PROTO(struct super_block *sb, int wait), 984 985 TP_ARGS(sb, wait), 986 987 TP_STRUCT__entry( 988 __field( dev_t, dev ) 989 __field( int, wait ) 990 991 ), 992 993 TP_fast_assign( 994 __entry->dev = sb->s_dev; 995 __entry->wait = wait; 996 ), 997 998 TP_printk("dev %d,%d wait %d", 999 MAJOR(__entry->dev), MINOR(__entry->dev), 1000 __entry->wait) 1001 ); 1002 1003 TRACE_EVENT(ext4_alloc_da_blocks, 1004 TP_PROTO(struct inode *inode), 1005 1006 TP_ARGS(inode), 1007 1008 TP_STRUCT__entry( 1009 __field( dev_t, dev ) 1010 __field( ino_t, ino ) 1011 __field( unsigned int, data_blocks ) 1012 ), 1013 1014 TP_fast_assign( 1015 __entry->dev = inode->i_sb->s_dev; 1016 __entry->ino = inode->i_ino; 1017 __entry->data_blocks = EXT4_I(inode)->i_reserved_data_blocks; 1018 ), 1019 1020 TP_printk("dev %d,%d ino %lu reserved_data_blocks %u", 1021 MAJOR(__entry->dev), MINOR(__entry->dev), 1022 (unsigned long) __entry->ino, 1023 __entry->data_blocks) 1024 ); 1025 1026 TRACE_EVENT(ext4_mballoc_alloc, 1027 TP_PROTO(struct ext4_allocation_context *ac), 1028 1029 TP_ARGS(ac), 1030 1031 TP_STRUCT__entry( 1032 __field( dev_t, dev ) 1033 __field( ino_t, ino ) 1034 __field( __u32, orig_logical ) 1035 __field( int, orig_start ) 1036 __field( __u32, orig_group ) 1037 __field( int, orig_len ) 1038 __field( __u32, goal_logical ) 1039 __field( int, goal_start ) 1040 __field( __u32, goal_group ) 1041 __field( int, goal_len ) 1042 __field( __u32, result_logical ) 1043 __field( int, result_start ) 1044 __field( __u32, result_group ) 1045 __field( int, result_len ) 1046 __field( __u16, found ) 1047 __field( __u16, groups ) 1048 __field( __u16, buddy ) 1049 __field( __u16, flags ) 1050 __field( __u16, tail ) 1051 __field( __u8, cr ) 1052 ), 1053 1054 TP_fast_assign( 1055 __entry->dev = ac->ac_inode->i_sb->s_dev; 1056 __entry->ino = ac->ac_inode->i_ino; 1057 __entry->orig_logical = ac->ac_o_ex.fe_logical; 1058 __entry->orig_start = ac->ac_o_ex.fe_start; 1059 __entry->orig_group = ac->ac_o_ex.fe_group; 1060 __entry->orig_len = ac->ac_o_ex.fe_len; 1061 __entry->goal_logical = ac->ac_g_ex.fe_logical; 1062 __entry->goal_start = ac->ac_g_ex.fe_start; 1063 __entry->goal_group = ac->ac_g_ex.fe_group; 1064 __entry->goal_len = ac->ac_g_ex.fe_len; 1065 __entry->result_logical = ac->ac_f_ex.fe_logical; 1066 __entry->result_start = ac->ac_f_ex.fe_start; 1067 __entry->result_group = ac->ac_f_ex.fe_group; 1068 __entry->result_len = ac->ac_f_ex.fe_len; 1069 __entry->found = ac->ac_found; 1070 __entry->flags = ac->ac_flags; 1071 __entry->groups = ac->ac_groups_scanned; 1072 __entry->buddy = ac->ac_buddy; 1073 __entry->tail = ac->ac_tail; 1074 __entry->cr = ac->ac_criteria; 1075 ), 1076 1077 TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u " 1078 "result %u/%d/%u@%u blks %u grps %u cr %u flags %s " 1079 "tail %u broken %u", 1080 MAJOR(__entry->dev), MINOR(__entry->dev), 1081 (unsigned long) __entry->ino, 1082 __entry->orig_group, __entry->orig_start, 1083 __entry->orig_len, __entry->orig_logical, 1084 __entry->goal_group, __entry->goal_start, 1085 __entry->goal_len, __entry->goal_logical, 1086 __entry->result_group, __entry->result_start, 1087 __entry->result_len, __entry->result_logical, 1088 __entry->found, __entry->groups, __entry->cr, 1089 show_mballoc_flags(__entry->flags), __entry->tail, 1090 __entry->buddy ? 1 << __entry->buddy : 0) 1091 ); 1092 1093 TRACE_EVENT(ext4_mballoc_prealloc, 1094 TP_PROTO(struct ext4_allocation_context *ac), 1095 1096 TP_ARGS(ac), 1097 1098 TP_STRUCT__entry( 1099 __field( dev_t, dev ) 1100 __field( ino_t, ino ) 1101 __field( __u32, orig_logical ) 1102 __field( int, orig_start ) 1103 __field( __u32, orig_group ) 1104 __field( int, orig_len ) 1105 __field( __u32, result_logical ) 1106 __field( int, result_start ) 1107 __field( __u32, result_group ) 1108 __field( int, result_len ) 1109 ), 1110 1111 TP_fast_assign( 1112 __entry->dev = ac->ac_inode->i_sb->s_dev; 1113 __entry->ino = ac->ac_inode->i_ino; 1114 __entry->orig_logical = ac->ac_o_ex.fe_logical; 1115 __entry->orig_start = ac->ac_o_ex.fe_start; 1116 __entry->orig_group = ac->ac_o_ex.fe_group; 1117 __entry->orig_len = ac->ac_o_ex.fe_len; 1118 __entry->result_logical = ac->ac_b_ex.fe_logical; 1119 __entry->result_start = ac->ac_b_ex.fe_start; 1120 __entry->result_group = ac->ac_b_ex.fe_group; 1121 __entry->result_len = ac->ac_b_ex.fe_len; 1122 ), 1123 1124 TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u", 1125 MAJOR(__entry->dev), MINOR(__entry->dev), 1126 (unsigned long) __entry->ino, 1127 __entry->orig_group, __entry->orig_start, 1128 __entry->orig_len, __entry->orig_logical, 1129 __entry->result_group, __entry->result_start, 1130 __entry->result_len, __entry->result_logical) 1131 ); 1132 1133 DECLARE_EVENT_CLASS(ext4__mballoc, 1134 TP_PROTO(struct super_block *sb, 1135 struct inode *inode, 1136 ext4_group_t group, 1137 ext4_grpblk_t start, 1138 ext4_grpblk_t len), 1139 1140 TP_ARGS(sb, inode, group, start, len), 1141 1142 TP_STRUCT__entry( 1143 __field( dev_t, dev ) 1144 __field( ino_t, ino ) 1145 __field( int, result_start ) 1146 __field( __u32, result_group ) 1147 __field( int, result_len ) 1148 ), 1149 1150 TP_fast_assign( 1151 __entry->dev = sb->s_dev; 1152 __entry->ino = inode ? inode->i_ino : 0; 1153 __entry->result_start = start; 1154 __entry->result_group = group; 1155 __entry->result_len = len; 1156 ), 1157 1158 TP_printk("dev %d,%d inode %lu extent %u/%d/%d ", 1159 MAJOR(__entry->dev), MINOR(__entry->dev), 1160 (unsigned long) __entry->ino, 1161 __entry->result_group, __entry->result_start, 1162 __entry->result_len) 1163 ); 1164 1165 DEFINE_EVENT(ext4__mballoc, ext4_mballoc_discard, 1166 1167 TP_PROTO(struct super_block *sb, 1168 struct inode *inode, 1169 ext4_group_t group, 1170 ext4_grpblk_t start, 1171 ext4_grpblk_t len), 1172 1173 TP_ARGS(sb, inode, group, start, len) 1174 ); 1175 1176 DEFINE_EVENT(ext4__mballoc, ext4_mballoc_free, 1177 1178 TP_PROTO(struct super_block *sb, 1179 struct inode *inode, 1180 ext4_group_t group, 1181 ext4_grpblk_t start, 1182 ext4_grpblk_t len), 1183 1184 TP_ARGS(sb, inode, group, start, len) 1185 ); 1186 1187 TRACE_EVENT(ext4_forget, 1188 TP_PROTO(struct inode *inode, int is_metadata, __u64 block), 1189 1190 TP_ARGS(inode, is_metadata, block), 1191 1192 TP_STRUCT__entry( 1193 __field( dev_t, dev ) 1194 __field( ino_t, ino ) 1195 __field( __u64, block ) 1196 __field( int, is_metadata ) 1197 __field( __u16, mode ) 1198 ), 1199 1200 TP_fast_assign( 1201 __entry->dev = inode->i_sb->s_dev; 1202 __entry->ino = inode->i_ino; 1203 __entry->block = block; 1204 __entry->is_metadata = is_metadata; 1205 __entry->mode = inode->i_mode; 1206 ), 1207 1208 TP_printk("dev %d,%d ino %lu mode 0%o is_metadata %d block %llu", 1209 MAJOR(__entry->dev), MINOR(__entry->dev), 1210 (unsigned long) __entry->ino, 1211 __entry->mode, __entry->is_metadata, __entry->block) 1212 ); 1213 1214 TRACE_EVENT(ext4_da_update_reserve_space, 1215 TP_PROTO(struct inode *inode, int used_blocks, int quota_claim), 1216 1217 TP_ARGS(inode, used_blocks, quota_claim), 1218 1219 TP_STRUCT__entry( 1220 __field( dev_t, dev ) 1221 __field( ino_t, ino ) 1222 __field( __u64, i_blocks ) 1223 __field( int, used_blocks ) 1224 __field( int, reserved_data_blocks ) 1225 __field( int, quota_claim ) 1226 __field( __u16, mode ) 1227 ), 1228 1229 TP_fast_assign( 1230 __entry->dev = inode->i_sb->s_dev; 1231 __entry->ino = inode->i_ino; 1232 __entry->i_blocks = inode->i_blocks; 1233 __entry->used_blocks = used_blocks; 1234 __entry->reserved_data_blocks = 1235 EXT4_I(inode)->i_reserved_data_blocks; 1236 __entry->quota_claim = quota_claim; 1237 __entry->mode = inode->i_mode; 1238 ), 1239 1240 TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu used_blocks %d " 1241 "reserved_data_blocks %d quota_claim %d", 1242 MAJOR(__entry->dev), MINOR(__entry->dev), 1243 (unsigned long) __entry->ino, 1244 __entry->mode, __entry->i_blocks, 1245 __entry->used_blocks, __entry->reserved_data_blocks, 1246 __entry->quota_claim) 1247 ); 1248 1249 TRACE_EVENT(ext4_da_reserve_space, 1250 TP_PROTO(struct inode *inode), 1251 1252 TP_ARGS(inode), 1253 1254 TP_STRUCT__entry( 1255 __field( dev_t, dev ) 1256 __field( ino_t, ino ) 1257 __field( __u64, i_blocks ) 1258 __field( int, reserved_data_blocks ) 1259 __field( __u16, mode ) 1260 ), 1261 1262 TP_fast_assign( 1263 __entry->dev = inode->i_sb->s_dev; 1264 __entry->ino = inode->i_ino; 1265 __entry->i_blocks = inode->i_blocks; 1266 __entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks; 1267 __entry->mode = inode->i_mode; 1268 ), 1269 1270 TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu " 1271 "reserved_data_blocks %d", 1272 MAJOR(__entry->dev), MINOR(__entry->dev), 1273 (unsigned long) __entry->ino, 1274 __entry->mode, __entry->i_blocks, 1275 __entry->reserved_data_blocks) 1276 ); 1277 1278 TRACE_EVENT(ext4_da_release_space, 1279 TP_PROTO(struct inode *inode, int freed_blocks), 1280 1281 TP_ARGS(inode, freed_blocks), 1282 1283 TP_STRUCT__entry( 1284 __field( dev_t, dev ) 1285 __field( ino_t, ino ) 1286 __field( __u64, i_blocks ) 1287 __field( int, freed_blocks ) 1288 __field( int, reserved_data_blocks ) 1289 __field( __u16, mode ) 1290 ), 1291 1292 TP_fast_assign( 1293 __entry->dev = inode->i_sb->s_dev; 1294 __entry->ino = inode->i_ino; 1295 __entry->i_blocks = inode->i_blocks; 1296 __entry->freed_blocks = freed_blocks; 1297 __entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks; 1298 __entry->mode = inode->i_mode; 1299 ), 1300 1301 TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu freed_blocks %d " 1302 "reserved_data_blocks %d", 1303 MAJOR(__entry->dev), MINOR(__entry->dev), 1304 (unsigned long) __entry->ino, 1305 __entry->mode, __entry->i_blocks, 1306 __entry->freed_blocks, __entry->reserved_data_blocks) 1307 ); 1308 1309 DECLARE_EVENT_CLASS(ext4__bitmap_load, 1310 TP_PROTO(struct super_block *sb, unsigned long group), 1311 1312 TP_ARGS(sb, group), 1313 1314 TP_STRUCT__entry( 1315 __field( dev_t, dev ) 1316 __field( __u32, group ) 1317 1318 ), 1319 1320 TP_fast_assign( 1321 __entry->dev = sb->s_dev; 1322 __entry->group = group; 1323 ), 1324 1325 TP_printk("dev %d,%d group %u", 1326 MAJOR(__entry->dev), MINOR(__entry->dev), 1327 __entry->group) 1328 ); 1329 1330 DEFINE_EVENT(ext4__bitmap_load, ext4_mb_bitmap_load, 1331 1332 TP_PROTO(struct super_block *sb, unsigned long group), 1333 1334 TP_ARGS(sb, group) 1335 ); 1336 1337 DEFINE_EVENT(ext4__bitmap_load, ext4_mb_buddy_bitmap_load, 1338 1339 TP_PROTO(struct super_block *sb, unsigned long group), 1340 1341 TP_ARGS(sb, group) 1342 ); 1343 1344 DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap, 1345 1346 TP_PROTO(struct super_block *sb, unsigned long group), 1347 1348 TP_ARGS(sb, group) 1349 ); 1350 1351 TRACE_EVENT(ext4_read_block_bitmap_load, 1352 TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch), 1353 1354 TP_ARGS(sb, group, prefetch), 1355 1356 TP_STRUCT__entry( 1357 __field( dev_t, dev ) 1358 __field( __u32, group ) 1359 __field( bool, prefetch ) 1360 1361 ), 1362 1363 TP_fast_assign( 1364 __entry->dev = sb->s_dev; 1365 __entry->group = group; 1366 __entry->prefetch = prefetch; 1367 ), 1368 1369 TP_printk("dev %d,%d group %u prefetch %d", 1370 MAJOR(__entry->dev), MINOR(__entry->dev), 1371 __entry->group, __entry->prefetch) 1372 ); 1373 1374 TRACE_EVENT(ext4_direct_IO_enter, 1375 TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw), 1376 1377 TP_ARGS(inode, offset, len, rw), 1378 1379 TP_STRUCT__entry( 1380 __field( dev_t, dev ) 1381 __field( ino_t, ino ) 1382 __field( loff_t, pos ) 1383 __field( unsigned long, len ) 1384 __field( int, rw ) 1385 ), 1386 1387 TP_fast_assign( 1388 __entry->dev = inode->i_sb->s_dev; 1389 __entry->ino = inode->i_ino; 1390 __entry->pos = offset; 1391 __entry->len = len; 1392 __entry->rw = rw; 1393 ), 1394 1395 TP_printk("dev %d,%d ino %lu pos %lld len %lu rw %d", 1396 MAJOR(__entry->dev), MINOR(__entry->dev), 1397 (unsigned long) __entry->ino, 1398 __entry->pos, __entry->len, __entry->rw) 1399 ); 1400 1401 TRACE_EVENT(ext4_direct_IO_exit, 1402 TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, 1403 int rw, int ret), 1404 1405 TP_ARGS(inode, offset, len, rw, ret), 1406 1407 TP_STRUCT__entry( 1408 __field( dev_t, dev ) 1409 __field( ino_t, ino ) 1410 __field( loff_t, pos ) 1411 __field( unsigned long, len ) 1412 __field( int, rw ) 1413 __field( int, ret ) 1414 ), 1415 1416 TP_fast_assign( 1417 __entry->dev = inode->i_sb->s_dev; 1418 __entry->ino = inode->i_ino; 1419 __entry->pos = offset; 1420 __entry->len = len; 1421 __entry->rw = rw; 1422 __entry->ret = ret; 1423 ), 1424 1425 TP_printk("dev %d,%d ino %lu pos %lld len %lu rw %d ret %d", 1426 MAJOR(__entry->dev), MINOR(__entry->dev), 1427 (unsigned long) __entry->ino, 1428 __entry->pos, __entry->len, 1429 __entry->rw, __entry->ret) 1430 ); 1431 1432 DECLARE_EVENT_CLASS(ext4__fallocate_mode, 1433 TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), 1434 1435 TP_ARGS(inode, offset, len, mode), 1436 1437 TP_STRUCT__entry( 1438 __field( dev_t, dev ) 1439 __field( ino_t, ino ) 1440 __field( loff_t, offset ) 1441 __field( loff_t, len ) 1442 __field( int, mode ) 1443 ), 1444 1445 TP_fast_assign( 1446 __entry->dev = inode->i_sb->s_dev; 1447 __entry->ino = inode->i_ino; 1448 __entry->offset = offset; 1449 __entry->len = len; 1450 __entry->mode = mode; 1451 ), 1452 1453 TP_printk("dev %d,%d ino %lu offset %lld len %lld mode %s", 1454 MAJOR(__entry->dev), MINOR(__entry->dev), 1455 (unsigned long) __entry->ino, 1456 __entry->offset, __entry->len, 1457 show_falloc_mode(__entry->mode)) 1458 ); 1459 1460 DEFINE_EVENT(ext4__fallocate_mode, ext4_fallocate_enter, 1461 1462 TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), 1463 1464 TP_ARGS(inode, offset, len, mode) 1465 ); 1466 1467 DEFINE_EVENT(ext4__fallocate_mode, ext4_punch_hole, 1468 1469 TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), 1470 1471 TP_ARGS(inode, offset, len, mode) 1472 ); 1473 1474 DEFINE_EVENT(ext4__fallocate_mode, ext4_zero_range, 1475 1476 TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode), 1477 1478 TP_ARGS(inode, offset, len, mode) 1479 ); 1480 1481 TRACE_EVENT(ext4_fallocate_exit, 1482 TP_PROTO(struct inode *inode, loff_t offset, 1483 unsigned int max_blocks, int ret), 1484 1485 TP_ARGS(inode, offset, max_blocks, ret), 1486 1487 TP_STRUCT__entry( 1488 __field( dev_t, dev ) 1489 __field( ino_t, ino ) 1490 __field( loff_t, pos ) 1491 __field( unsigned int, blocks ) 1492 __field( int, ret ) 1493 ), 1494 1495 TP_fast_assign( 1496 __entry->dev = inode->i_sb->s_dev; 1497 __entry->ino = inode->i_ino; 1498 __entry->pos = offset; 1499 __entry->blocks = max_blocks; 1500 __entry->ret = ret; 1501 ), 1502 1503 TP_printk("dev %d,%d ino %lu pos %lld blocks %u ret %d", 1504 MAJOR(__entry->dev), MINOR(__entry->dev), 1505 (unsigned long) __entry->ino, 1506 __entry->pos, __entry->blocks, 1507 __entry->ret) 1508 ); 1509 1510 TRACE_EVENT(ext4_unlink_enter, 1511 TP_PROTO(struct inode *parent, struct dentry *dentry), 1512 1513 TP_ARGS(parent, dentry), 1514 1515 TP_STRUCT__entry( 1516 __field( dev_t, dev ) 1517 __field( ino_t, ino ) 1518 __field( ino_t, parent ) 1519 __field( loff_t, size ) 1520 ), 1521 1522 TP_fast_assign( 1523 __entry->dev = dentry->d_sb->s_dev; 1524 __entry->ino = d_inode(dentry)->i_ino; 1525 __entry->parent = parent->i_ino; 1526 __entry->size = d_inode(dentry)->i_size; 1527 ), 1528 1529 TP_printk("dev %d,%d ino %lu size %lld parent %lu", 1530 MAJOR(__entry->dev), MINOR(__entry->dev), 1531 (unsigned long) __entry->ino, __entry->size, 1532 (unsigned long) __entry->parent) 1533 ); 1534 1535 TRACE_EVENT(ext4_unlink_exit, 1536 TP_PROTO(struct dentry *dentry, int ret), 1537 1538 TP_ARGS(dentry, ret), 1539 1540 TP_STRUCT__entry( 1541 __field( dev_t, dev ) 1542 __field( ino_t, ino ) 1543 __field( int, ret ) 1544 ), 1545 1546 TP_fast_assign( 1547 __entry->dev = dentry->d_sb->s_dev; 1548 __entry->ino = d_inode(dentry)->i_ino; 1549 __entry->ret = ret; 1550 ), 1551 1552 TP_printk("dev %d,%d ino %lu ret %d", 1553 MAJOR(__entry->dev), MINOR(__entry->dev), 1554 (unsigned long) __entry->ino, 1555 __entry->ret) 1556 ); 1557 1558 DECLARE_EVENT_CLASS(ext4__truncate, 1559 TP_PROTO(struct inode *inode), 1560 1561 TP_ARGS(inode), 1562 1563 TP_STRUCT__entry( 1564 __field( dev_t, dev ) 1565 __field( ino_t, ino ) 1566 __field( __u64, blocks ) 1567 ), 1568 1569 TP_fast_assign( 1570 __entry->dev = inode->i_sb->s_dev; 1571 __entry->ino = inode->i_ino; 1572 __entry->blocks = inode->i_blocks; 1573 ), 1574 1575 TP_printk("dev %d,%d ino %lu blocks %llu", 1576 MAJOR(__entry->dev), MINOR(__entry->dev), 1577 (unsigned long) __entry->ino, __entry->blocks) 1578 ); 1579 1580 DEFINE_EVENT(ext4__truncate, ext4_truncate_enter, 1581 1582 TP_PROTO(struct inode *inode), 1583 1584 TP_ARGS(inode) 1585 ); 1586 1587 DEFINE_EVENT(ext4__truncate, ext4_truncate_exit, 1588 1589 TP_PROTO(struct inode *inode), 1590 1591 TP_ARGS(inode) 1592 ); 1593 1594 /* 'ux' is the unwritten extent. */ 1595 TRACE_EVENT(ext4_ext_convert_to_initialized_enter, 1596 TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, 1597 struct ext4_extent *ux), 1598 1599 TP_ARGS(inode, map, ux), 1600 1601 TP_STRUCT__entry( 1602 __field( dev_t, dev ) 1603 __field( ino_t, ino ) 1604 __field( ext4_lblk_t, m_lblk ) 1605 __field( unsigned, m_len ) 1606 __field( ext4_lblk_t, u_lblk ) 1607 __field( unsigned, u_len ) 1608 __field( ext4_fsblk_t, u_pblk ) 1609 ), 1610 1611 TP_fast_assign( 1612 __entry->dev = inode->i_sb->s_dev; 1613 __entry->ino = inode->i_ino; 1614 __entry->m_lblk = map->m_lblk; 1615 __entry->m_len = map->m_len; 1616 __entry->u_lblk = le32_to_cpu(ux->ee_block); 1617 __entry->u_len = ext4_ext_get_actual_len(ux); 1618 __entry->u_pblk = ext4_ext_pblock(ux); 1619 ), 1620 1621 TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u u_lblk %u u_len %u " 1622 "u_pblk %llu", 1623 MAJOR(__entry->dev), MINOR(__entry->dev), 1624 (unsigned long) __entry->ino, 1625 __entry->m_lblk, __entry->m_len, 1626 __entry->u_lblk, __entry->u_len, __entry->u_pblk) 1627 ); 1628 1629 /* 1630 * 'ux' is the unwritten extent. 1631 * 'ix' is the initialized extent to which blocks are transferred. 1632 */ 1633 TRACE_EVENT(ext4_ext_convert_to_initialized_fastpath, 1634 TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, 1635 struct ext4_extent *ux, struct ext4_extent *ix), 1636 1637 TP_ARGS(inode, map, ux, ix), 1638 1639 TP_STRUCT__entry( 1640 __field( dev_t, dev ) 1641 __field( ino_t, ino ) 1642 __field( ext4_lblk_t, m_lblk ) 1643 __field( unsigned, m_len ) 1644 __field( ext4_lblk_t, u_lblk ) 1645 __field( unsigned, u_len ) 1646 __field( ext4_fsblk_t, u_pblk ) 1647 __field( ext4_lblk_t, i_lblk ) 1648 __field( unsigned, i_len ) 1649 __field( ext4_fsblk_t, i_pblk ) 1650 ), 1651 1652 TP_fast_assign( 1653 __entry->dev = inode->i_sb->s_dev; 1654 __entry->ino = inode->i_ino; 1655 __entry->m_lblk = map->m_lblk; 1656 __entry->m_len = map->m_len; 1657 __entry->u_lblk = le32_to_cpu(ux->ee_block); 1658 __entry->u_len = ext4_ext_get_actual_len(ux); 1659 __entry->u_pblk = ext4_ext_pblock(ux); 1660 __entry->i_lblk = le32_to_cpu(ix->ee_block); 1661 __entry->i_len = ext4_ext_get_actual_len(ix); 1662 __entry->i_pblk = ext4_ext_pblock(ix); 1663 ), 1664 1665 TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u " 1666 "u_lblk %u u_len %u u_pblk %llu " 1667 "i_lblk %u i_len %u i_pblk %llu ", 1668 MAJOR(__entry->dev), MINOR(__entry->dev), 1669 (unsigned long) __entry->ino, 1670 __entry->m_lblk, __entry->m_len, 1671 __entry->u_lblk, __entry->u_len, __entry->u_pblk, 1672 __entry->i_lblk, __entry->i_len, __entry->i_pblk) 1673 ); 1674 1675 DECLARE_EVENT_CLASS(ext4__map_blocks_enter, 1676 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, 1677 unsigned int len, unsigned int flags), 1678 1679 TP_ARGS(inode, lblk, len, flags), 1680 1681 TP_STRUCT__entry( 1682 __field( dev_t, dev ) 1683 __field( ino_t, ino ) 1684 __field( ext4_lblk_t, lblk ) 1685 __field( unsigned int, len ) 1686 __field( unsigned int, flags ) 1687 ), 1688 1689 TP_fast_assign( 1690 __entry->dev = inode->i_sb->s_dev; 1691 __entry->ino = inode->i_ino; 1692 __entry->lblk = lblk; 1693 __entry->len = len; 1694 __entry->flags = flags; 1695 ), 1696 1697 TP_printk("dev %d,%d ino %lu lblk %u len %u flags %s", 1698 MAJOR(__entry->dev), MINOR(__entry->dev), 1699 (unsigned long) __entry->ino, 1700 __entry->lblk, __entry->len, show_map_flags(__entry->flags)) 1701 ); 1702 1703 DEFINE_EVENT(ext4__map_blocks_enter, ext4_ext_map_blocks_enter, 1704 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, 1705 unsigned len, unsigned flags), 1706 1707 TP_ARGS(inode, lblk, len, flags) 1708 ); 1709 1710 DEFINE_EVENT(ext4__map_blocks_enter, ext4_ind_map_blocks_enter, 1711 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, 1712 unsigned len, unsigned flags), 1713 1714 TP_ARGS(inode, lblk, len, flags) 1715 ); 1716 1717 DECLARE_EVENT_CLASS(ext4__map_blocks_exit, 1718 TP_PROTO(struct inode *inode, unsigned flags, struct ext4_map_blocks *map, 1719 int ret), 1720 1721 TP_ARGS(inode, flags, map, ret), 1722 1723 TP_STRUCT__entry( 1724 __field( dev_t, dev ) 1725 __field( ino_t, ino ) 1726 __field( unsigned int, flags ) 1727 __field( ext4_fsblk_t, pblk ) 1728 __field( ext4_lblk_t, lblk ) 1729 __field( unsigned int, len ) 1730 __field( unsigned int, mflags ) 1731 __field( int, ret ) 1732 ), 1733 1734 TP_fast_assign( 1735 __entry->dev = inode->i_sb->s_dev; 1736 __entry->ino = inode->i_ino; 1737 __entry->flags = flags; 1738 __entry->pblk = map->m_pblk; 1739 __entry->lblk = map->m_lblk; 1740 __entry->len = map->m_len; 1741 __entry->mflags = map->m_flags; 1742 __entry->ret = ret; 1743 ), 1744 1745 TP_printk("dev %d,%d ino %lu flags %s lblk %u pblk %llu len %u " 1746 "mflags %s ret %d", 1747 MAJOR(__entry->dev), MINOR(__entry->dev), 1748 (unsigned long) __entry->ino, 1749 show_map_flags(__entry->flags), __entry->lblk, __entry->pblk, 1750 __entry->len, show_mflags(__entry->mflags), __entry->ret) 1751 ); 1752 1753 DEFINE_EVENT(ext4__map_blocks_exit, ext4_ext_map_blocks_exit, 1754 TP_PROTO(struct inode *inode, unsigned flags, 1755 struct ext4_map_blocks *map, int ret), 1756 1757 TP_ARGS(inode, flags, map, ret) 1758 ); 1759 1760 DEFINE_EVENT(ext4__map_blocks_exit, ext4_ind_map_blocks_exit, 1761 TP_PROTO(struct inode *inode, unsigned flags, 1762 struct ext4_map_blocks *map, int ret), 1763 1764 TP_ARGS(inode, flags, map, ret) 1765 ); 1766 1767 TRACE_EVENT(ext4_ext_load_extent, 1768 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk), 1769 1770 TP_ARGS(inode, lblk, pblk), 1771 1772 TP_STRUCT__entry( 1773 __field( dev_t, dev ) 1774 __field( ino_t, ino ) 1775 __field( ext4_fsblk_t, pblk ) 1776 __field( ext4_lblk_t, lblk ) 1777 ), 1778 1779 TP_fast_assign( 1780 __entry->dev = inode->i_sb->s_dev; 1781 __entry->ino = inode->i_ino; 1782 __entry->pblk = pblk; 1783 __entry->lblk = lblk; 1784 ), 1785 1786 TP_printk("dev %d,%d ino %lu lblk %u pblk %llu", 1787 MAJOR(__entry->dev), MINOR(__entry->dev), 1788 (unsigned long) __entry->ino, 1789 __entry->lblk, __entry->pblk) 1790 ); 1791 1792 TRACE_EVENT(ext4_load_inode, 1793 TP_PROTO(struct super_block *sb, unsigned long ino), 1794 1795 TP_ARGS(sb, ino), 1796 1797 TP_STRUCT__entry( 1798 __field( dev_t, dev ) 1799 __field( ino_t, ino ) 1800 ), 1801 1802 TP_fast_assign( 1803 __entry->dev = sb->s_dev; 1804 __entry->ino = ino; 1805 ), 1806 1807 TP_printk("dev %d,%d ino %ld", 1808 MAJOR(__entry->dev), MINOR(__entry->dev), 1809 (unsigned long) __entry->ino) 1810 ); 1811 1812 TRACE_EVENT(ext4_journal_start, 1813 TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks, 1814 int revoke_creds, unsigned long IP), 1815 1816 TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP), 1817 1818 TP_STRUCT__entry( 1819 __field( dev_t, dev ) 1820 __field(unsigned long, ip ) 1821 __field( int, blocks ) 1822 __field( int, rsv_blocks ) 1823 __field( int, revoke_creds ) 1824 ), 1825 1826 TP_fast_assign( 1827 __entry->dev = sb->s_dev; 1828 __entry->ip = IP; 1829 __entry->blocks = blocks; 1830 __entry->rsv_blocks = rsv_blocks; 1831 __entry->revoke_creds = revoke_creds; 1832 ), 1833 1834 TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d, " 1835 "caller %pS", MAJOR(__entry->dev), MINOR(__entry->dev), 1836 __entry->blocks, __entry->rsv_blocks, __entry->revoke_creds, 1837 (void *)__entry->ip) 1838 ); 1839 1840 TRACE_EVENT(ext4_journal_start_reserved, 1841 TP_PROTO(struct super_block *sb, int blocks, unsigned long IP), 1842 1843 TP_ARGS(sb, blocks, IP), 1844 1845 TP_STRUCT__entry( 1846 __field( dev_t, dev ) 1847 __field(unsigned long, ip ) 1848 __field( int, blocks ) 1849 ), 1850 1851 TP_fast_assign( 1852 __entry->dev = sb->s_dev; 1853 __entry->ip = IP; 1854 __entry->blocks = blocks; 1855 ), 1856 1857 TP_printk("dev %d,%d blocks, %d caller %pS", 1858 MAJOR(__entry->dev), MINOR(__entry->dev), 1859 __entry->blocks, (void *)__entry->ip) 1860 ); 1861 1862 DECLARE_EVENT_CLASS(ext4__trim, 1863 TP_PROTO(struct super_block *sb, 1864 ext4_group_t group, 1865 ext4_grpblk_t start, 1866 ext4_grpblk_t len), 1867 1868 TP_ARGS(sb, group, start, len), 1869 1870 TP_STRUCT__entry( 1871 __field( int, dev_major ) 1872 __field( int, dev_minor ) 1873 __field( __u32, group ) 1874 __field( int, start ) 1875 __field( int, len ) 1876 ), 1877 1878 TP_fast_assign( 1879 __entry->dev_major = MAJOR(sb->s_dev); 1880 __entry->dev_minor = MINOR(sb->s_dev); 1881 __entry->group = group; 1882 __entry->start = start; 1883 __entry->len = len; 1884 ), 1885 1886 TP_printk("dev %d,%d group %u, start %d, len %d", 1887 __entry->dev_major, __entry->dev_minor, 1888 __entry->group, __entry->start, __entry->len) 1889 ); 1890 1891 DEFINE_EVENT(ext4__trim, ext4_trim_extent, 1892 1893 TP_PROTO(struct super_block *sb, 1894 ext4_group_t group, 1895 ext4_grpblk_t start, 1896 ext4_grpblk_t len), 1897 1898 TP_ARGS(sb, group, start, len) 1899 ); 1900 1901 DEFINE_EVENT(ext4__trim, ext4_trim_all_free, 1902 1903 TP_PROTO(struct super_block *sb, 1904 ext4_group_t group, 1905 ext4_grpblk_t start, 1906 ext4_grpblk_t len), 1907 1908 TP_ARGS(sb, group, start, len) 1909 ); 1910 1911 TRACE_EVENT(ext4_ext_handle_unwritten_extents, 1912 TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int flags, 1913 unsigned int allocated, ext4_fsblk_t newblock), 1914 1915 TP_ARGS(inode, map, flags, allocated, newblock), 1916 1917 TP_STRUCT__entry( 1918 __field( dev_t, dev ) 1919 __field( ino_t, ino ) 1920 __field( int, flags ) 1921 __field( ext4_lblk_t, lblk ) 1922 __field( ext4_fsblk_t, pblk ) 1923 __field( unsigned int, len ) 1924 __field( unsigned int, allocated ) 1925 __field( ext4_fsblk_t, newblk ) 1926 ), 1927 1928 TP_fast_assign( 1929 __entry->dev = inode->i_sb->s_dev; 1930 __entry->ino = inode->i_ino; 1931 __entry->flags = flags; 1932 __entry->lblk = map->m_lblk; 1933 __entry->pblk = map->m_pblk; 1934 __entry->len = map->m_len; 1935 __entry->allocated = allocated; 1936 __entry->newblk = newblock; 1937 ), 1938 1939 TP_printk("dev %d,%d ino %lu m_lblk %u m_pblk %llu m_len %u flags %s " 1940 "allocated %d newblock %llu", 1941 MAJOR(__entry->dev), MINOR(__entry->dev), 1942 (unsigned long) __entry->ino, 1943 (unsigned) __entry->lblk, (unsigned long long) __entry->pblk, 1944 __entry->len, show_map_flags(__entry->flags), 1945 (unsigned int) __entry->allocated, 1946 (unsigned long long) __entry->newblk) 1947 ); 1948 1949 TRACE_EVENT(ext4_get_implied_cluster_alloc_exit, 1950 TP_PROTO(struct super_block *sb, struct ext4_map_blocks *map, int ret), 1951 1952 TP_ARGS(sb, map, ret), 1953 1954 TP_STRUCT__entry( 1955 __field( dev_t, dev ) 1956 __field( unsigned int, flags ) 1957 __field( ext4_lblk_t, lblk ) 1958 __field( ext4_fsblk_t, pblk ) 1959 __field( unsigned int, len ) 1960 __field( int, ret ) 1961 ), 1962 1963 TP_fast_assign( 1964 __entry->dev = sb->s_dev; 1965 __entry->flags = map->m_flags; 1966 __entry->lblk = map->m_lblk; 1967 __entry->pblk = map->m_pblk; 1968 __entry->len = map->m_len; 1969 __entry->ret = ret; 1970 ), 1971 1972 TP_printk("dev %d,%d m_lblk %u m_pblk %llu m_len %u m_flags %s ret %d", 1973 MAJOR(__entry->dev), MINOR(__entry->dev), 1974 __entry->lblk, (unsigned long long) __entry->pblk, 1975 __entry->len, show_mflags(__entry->flags), __entry->ret) 1976 ); 1977 1978 TRACE_EVENT(ext4_ext_put_in_cache, 1979 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, unsigned int len, 1980 ext4_fsblk_t start), 1981 1982 TP_ARGS(inode, lblk, len, start), 1983 1984 TP_STRUCT__entry( 1985 __field( dev_t, dev ) 1986 __field( ino_t, ino ) 1987 __field( ext4_lblk_t, lblk ) 1988 __field( unsigned int, len ) 1989 __field( ext4_fsblk_t, start ) 1990 ), 1991 1992 TP_fast_assign( 1993 __entry->dev = inode->i_sb->s_dev; 1994 __entry->ino = inode->i_ino; 1995 __entry->lblk = lblk; 1996 __entry->len = len; 1997 __entry->start = start; 1998 ), 1999 2000 TP_printk("dev %d,%d ino %lu lblk %u len %u start %llu", 2001 MAJOR(__entry->dev), MINOR(__entry->dev), 2002 (unsigned long) __entry->ino, 2003 (unsigned) __entry->lblk, 2004 __entry->len, 2005 (unsigned long long) __entry->start) 2006 ); 2007 2008 TRACE_EVENT(ext4_ext_in_cache, 2009 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, int ret), 2010 2011 TP_ARGS(inode, lblk, ret), 2012 2013 TP_STRUCT__entry( 2014 __field( dev_t, dev ) 2015 __field( ino_t, ino ) 2016 __field( ext4_lblk_t, lblk ) 2017 __field( int, ret ) 2018 ), 2019 2020 TP_fast_assign( 2021 __entry->dev = inode->i_sb->s_dev; 2022 __entry->ino = inode->i_ino; 2023 __entry->lblk = lblk; 2024 __entry->ret = ret; 2025 ), 2026 2027 TP_printk("dev %d,%d ino %lu lblk %u ret %d", 2028 MAJOR(__entry->dev), MINOR(__entry->dev), 2029 (unsigned long) __entry->ino, 2030 (unsigned) __entry->lblk, 2031 __entry->ret) 2032 2033 ); 2034 2035 TRACE_EVENT(ext4_find_delalloc_range, 2036 TP_PROTO(struct inode *inode, ext4_lblk_t from, ext4_lblk_t to, 2037 int reverse, int found, ext4_lblk_t found_blk), 2038 2039 TP_ARGS(inode, from, to, reverse, found, found_blk), 2040 2041 TP_STRUCT__entry( 2042 __field( dev_t, dev ) 2043 __field( ino_t, ino ) 2044 __field( ext4_lblk_t, from ) 2045 __field( ext4_lblk_t, to ) 2046 __field( int, reverse ) 2047 __field( int, found ) 2048 __field( ext4_lblk_t, found_blk ) 2049 ), 2050 2051 TP_fast_assign( 2052 __entry->dev = inode->i_sb->s_dev; 2053 __entry->ino = inode->i_ino; 2054 __entry->from = from; 2055 __entry->to = to; 2056 __entry->reverse = reverse; 2057 __entry->found = found; 2058 __entry->found_blk = found_blk; 2059 ), 2060 2061 TP_printk("dev %d,%d ino %lu from %u to %u reverse %d found %d " 2062 "(blk = %u)", 2063 MAJOR(__entry->dev), MINOR(__entry->dev), 2064 (unsigned long) __entry->ino, 2065 (unsigned) __entry->from, (unsigned) __entry->to, 2066 __entry->reverse, __entry->found, 2067 (unsigned) __entry->found_blk) 2068 ); 2069 2070 TRACE_EVENT(ext4_get_reserved_cluster_alloc, 2071 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, unsigned int len), 2072 2073 TP_ARGS(inode, lblk, len), 2074 2075 TP_STRUCT__entry( 2076 __field( dev_t, dev ) 2077 __field( ino_t, ino ) 2078 __field( ext4_lblk_t, lblk ) 2079 __field( unsigned int, len ) 2080 ), 2081 2082 TP_fast_assign( 2083 __entry->dev = inode->i_sb->s_dev; 2084 __entry->ino = inode->i_ino; 2085 __entry->lblk = lblk; 2086 __entry->len = len; 2087 ), 2088 2089 TP_printk("dev %d,%d ino %lu lblk %u len %u", 2090 MAJOR(__entry->dev), MINOR(__entry->dev), 2091 (unsigned long) __entry->ino, 2092 (unsigned) __entry->lblk, 2093 __entry->len) 2094 ); 2095 2096 TRACE_EVENT(ext4_ext_show_extent, 2097 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk, 2098 unsigned short len), 2099 2100 TP_ARGS(inode, lblk, pblk, len), 2101 2102 TP_STRUCT__entry( 2103 __field( dev_t, dev ) 2104 __field( ino_t, ino ) 2105 __field( ext4_fsblk_t, pblk ) 2106 __field( ext4_lblk_t, lblk ) 2107 __field( unsigned short, len ) 2108 ), 2109 2110 TP_fast_assign( 2111 __entry->dev = inode->i_sb->s_dev; 2112 __entry->ino = inode->i_ino; 2113 __entry->pblk = pblk; 2114 __entry->lblk = lblk; 2115 __entry->len = len; 2116 ), 2117 2118 TP_printk("dev %d,%d ino %lu lblk %u pblk %llu len %u", 2119 MAJOR(__entry->dev), MINOR(__entry->dev), 2120 (unsigned long) __entry->ino, 2121 (unsigned) __entry->lblk, 2122 (unsigned long long) __entry->pblk, 2123 (unsigned short) __entry->len) 2124 ); 2125 2126 TRACE_EVENT(ext4_remove_blocks, 2127 TP_PROTO(struct inode *inode, struct ext4_extent *ex, 2128 ext4_lblk_t from, ext4_fsblk_t to, 2129 struct partial_cluster *pc), 2130 2131 TP_ARGS(inode, ex, from, to, pc), 2132 2133 TP_STRUCT__entry( 2134 __field( dev_t, dev ) 2135 __field( ino_t, ino ) 2136 __field( ext4_lblk_t, from ) 2137 __field( ext4_lblk_t, to ) 2138 __field( ext4_fsblk_t, ee_pblk ) 2139 __field( ext4_lblk_t, ee_lblk ) 2140 __field( unsigned short, ee_len ) 2141 __field( ext4_fsblk_t, pc_pclu ) 2142 __field( ext4_lblk_t, pc_lblk ) 2143 __field( int, pc_state) 2144 ), 2145 2146 TP_fast_assign( 2147 __entry->dev = inode->i_sb->s_dev; 2148 __entry->ino = inode->i_ino; 2149 __entry->from = from; 2150 __entry->to = to; 2151 __entry->ee_pblk = ext4_ext_pblock(ex); 2152 __entry->ee_lblk = le32_to_cpu(ex->ee_block); 2153 __entry->ee_len = ext4_ext_get_actual_len(ex); 2154 __entry->pc_pclu = pc->pclu; 2155 __entry->pc_lblk = pc->lblk; 2156 __entry->pc_state = pc->state; 2157 ), 2158 2159 TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]" 2160 "from %u to %u partial [pclu %lld lblk %u state %d]", 2161 MAJOR(__entry->dev), MINOR(__entry->dev), 2162 (unsigned long) __entry->ino, 2163 (unsigned) __entry->ee_lblk, 2164 (unsigned long long) __entry->ee_pblk, 2165 (unsigned short) __entry->ee_len, 2166 (unsigned) __entry->from, 2167 (unsigned) __entry->to, 2168 (long long) __entry->pc_pclu, 2169 (unsigned int) __entry->pc_lblk, 2170 (int) __entry->pc_state) 2171 ); 2172 2173 TRACE_EVENT(ext4_ext_rm_leaf, 2174 TP_PROTO(struct inode *inode, ext4_lblk_t start, 2175 struct ext4_extent *ex, 2176 struct partial_cluster *pc), 2177 2178 TP_ARGS(inode, start, ex, pc), 2179 2180 TP_STRUCT__entry( 2181 __field( dev_t, dev ) 2182 __field( ino_t, ino ) 2183 __field( ext4_lblk_t, start ) 2184 __field( ext4_lblk_t, ee_lblk ) 2185 __field( ext4_fsblk_t, ee_pblk ) 2186 __field( short, ee_len ) 2187 __field( ext4_fsblk_t, pc_pclu ) 2188 __field( ext4_lblk_t, pc_lblk ) 2189 __field( int, pc_state) 2190 ), 2191 2192 TP_fast_assign( 2193 __entry->dev = inode->i_sb->s_dev; 2194 __entry->ino = inode->i_ino; 2195 __entry->start = start; 2196 __entry->ee_lblk = le32_to_cpu(ex->ee_block); 2197 __entry->ee_pblk = ext4_ext_pblock(ex); 2198 __entry->ee_len = ext4_ext_get_actual_len(ex); 2199 __entry->pc_pclu = pc->pclu; 2200 __entry->pc_lblk = pc->lblk; 2201 __entry->pc_state = pc->state; 2202 ), 2203 2204 TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]" 2205 "partial [pclu %lld lblk %u state %d]", 2206 MAJOR(__entry->dev), MINOR(__entry->dev), 2207 (unsigned long) __entry->ino, 2208 (unsigned) __entry->start, 2209 (unsigned) __entry->ee_lblk, 2210 (unsigned long long) __entry->ee_pblk, 2211 (unsigned short) __entry->ee_len, 2212 (long long) __entry->pc_pclu, 2213 (unsigned int) __entry->pc_lblk, 2214 (int) __entry->pc_state) 2215 ); 2216 2217 TRACE_EVENT(ext4_ext_rm_idx, 2218 TP_PROTO(struct inode *inode, ext4_fsblk_t pblk), 2219 2220 TP_ARGS(inode, pblk), 2221 2222 TP_STRUCT__entry( 2223 __field( dev_t, dev ) 2224 __field( ino_t, ino ) 2225 __field( ext4_fsblk_t, pblk ) 2226 ), 2227 2228 TP_fast_assign( 2229 __entry->dev = inode->i_sb->s_dev; 2230 __entry->ino = inode->i_ino; 2231 __entry->pblk = pblk; 2232 ), 2233 2234 TP_printk("dev %d,%d ino %lu index_pblk %llu", 2235 MAJOR(__entry->dev), MINOR(__entry->dev), 2236 (unsigned long) __entry->ino, 2237 (unsigned long long) __entry->pblk) 2238 ); 2239 2240 TRACE_EVENT(ext4_ext_remove_space, 2241 TP_PROTO(struct inode *inode, ext4_lblk_t start, 2242 ext4_lblk_t end, int depth), 2243 2244 TP_ARGS(inode, start, end, depth), 2245 2246 TP_STRUCT__entry( 2247 __field( dev_t, dev ) 2248 __field( ino_t, ino ) 2249 __field( ext4_lblk_t, start ) 2250 __field( ext4_lblk_t, end ) 2251 __field( int, depth ) 2252 ), 2253 2254 TP_fast_assign( 2255 __entry->dev = inode->i_sb->s_dev; 2256 __entry->ino = inode->i_ino; 2257 __entry->start = start; 2258 __entry->end = end; 2259 __entry->depth = depth; 2260 ), 2261 2262 TP_printk("dev %d,%d ino %lu since %u end %u depth %d", 2263 MAJOR(__entry->dev), MINOR(__entry->dev), 2264 (unsigned long) __entry->ino, 2265 (unsigned) __entry->start, 2266 (unsigned) __entry->end, 2267 __entry->depth) 2268 ); 2269 2270 TRACE_EVENT(ext4_ext_remove_space_done, 2271 TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end, 2272 int depth, struct partial_cluster *pc, __le16 eh_entries), 2273 2274 TP_ARGS(inode, start, end, depth, pc, eh_entries), 2275 2276 TP_STRUCT__entry( 2277 __field( dev_t, dev ) 2278 __field( ino_t, ino ) 2279 __field( ext4_lblk_t, start ) 2280 __field( ext4_lblk_t, end ) 2281 __field( int, depth ) 2282 __field( ext4_fsblk_t, pc_pclu ) 2283 __field( ext4_lblk_t, pc_lblk ) 2284 __field( int, pc_state ) 2285 __field( unsigned short, eh_entries ) 2286 ), 2287 2288 TP_fast_assign( 2289 __entry->dev = inode->i_sb->s_dev; 2290 __entry->ino = inode->i_ino; 2291 __entry->start = start; 2292 __entry->end = end; 2293 __entry->depth = depth; 2294 __entry->pc_pclu = pc->pclu; 2295 __entry->pc_lblk = pc->lblk; 2296 __entry->pc_state = pc->state; 2297 __entry->eh_entries = le16_to_cpu(eh_entries); 2298 ), 2299 2300 TP_printk("dev %d,%d ino %lu since %u end %u depth %d " 2301 "partial [pclu %lld lblk %u state %d] " 2302 "remaining_entries %u", 2303 MAJOR(__entry->dev), MINOR(__entry->dev), 2304 (unsigned long) __entry->ino, 2305 (unsigned) __entry->start, 2306 (unsigned) __entry->end, 2307 __entry->depth, 2308 (long long) __entry->pc_pclu, 2309 (unsigned int) __entry->pc_lblk, 2310 (int) __entry->pc_state, 2311 (unsigned short) __entry->eh_entries) 2312 ); 2313 2314 DECLARE_EVENT_CLASS(ext4__es_extent, 2315 TP_PROTO(struct inode *inode, struct extent_status *es), 2316 2317 TP_ARGS(inode, es), 2318 2319 TP_STRUCT__entry( 2320 __field( dev_t, dev ) 2321 __field( ino_t, ino ) 2322 __field( ext4_lblk_t, lblk ) 2323 __field( ext4_lblk_t, len ) 2324 __field( ext4_fsblk_t, pblk ) 2325 __field( char, status ) 2326 ), 2327 2328 TP_fast_assign( 2329 __entry->dev = inode->i_sb->s_dev; 2330 __entry->ino = inode->i_ino; 2331 __entry->lblk = es->es_lblk; 2332 __entry->len = es->es_len; 2333 __entry->pblk = ext4_es_show_pblock(es); 2334 __entry->status = ext4_es_status(es); 2335 ), 2336 2337 TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s", 2338 MAJOR(__entry->dev), MINOR(__entry->dev), 2339 (unsigned long) __entry->ino, 2340 __entry->lblk, __entry->len, 2341 __entry->pblk, show_extent_status(__entry->status)) 2342 ); 2343 2344 DEFINE_EVENT(ext4__es_extent, ext4_es_insert_extent, 2345 TP_PROTO(struct inode *inode, struct extent_status *es), 2346 2347 TP_ARGS(inode, es) 2348 ); 2349 2350 DEFINE_EVENT(ext4__es_extent, ext4_es_cache_extent, 2351 TP_PROTO(struct inode *inode, struct extent_status *es), 2352 2353 TP_ARGS(inode, es) 2354 ); 2355 2356 TRACE_EVENT(ext4_es_remove_extent, 2357 TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len), 2358 2359 TP_ARGS(inode, lblk, len), 2360 2361 TP_STRUCT__entry( 2362 __field( dev_t, dev ) 2363 __field( ino_t, ino ) 2364 __field( loff_t, lblk ) 2365 __field( loff_t, len ) 2366 ), 2367 2368 TP_fast_assign( 2369 __entry->dev = inode->i_sb->s_dev; 2370 __entry->ino = inode->i_ino; 2371 __entry->lblk = lblk; 2372 __entry->len = len; 2373 ), 2374 2375 TP_printk("dev %d,%d ino %lu es [%lld/%lld)", 2376 MAJOR(__entry->dev), MINOR(__entry->dev), 2377 (unsigned long) __entry->ino, 2378 __entry->lblk, __entry->len) 2379 ); 2380 2381 TRACE_EVENT(ext4_es_find_extent_range_enter, 2382 TP_PROTO(struct inode *inode, ext4_lblk_t lblk), 2383 2384 TP_ARGS(inode, lblk), 2385 2386 TP_STRUCT__entry( 2387 __field( dev_t, dev ) 2388 __field( ino_t, ino ) 2389 __field( ext4_lblk_t, lblk ) 2390 ), 2391 2392 TP_fast_assign( 2393 __entry->dev = inode->i_sb->s_dev; 2394 __entry->ino = inode->i_ino; 2395 __entry->lblk = lblk; 2396 ), 2397 2398 TP_printk("dev %d,%d ino %lu lblk %u", 2399 MAJOR(__entry->dev), MINOR(__entry->dev), 2400 (unsigned long) __entry->ino, __entry->lblk) 2401 ); 2402 2403 TRACE_EVENT(ext4_es_find_extent_range_exit, 2404 TP_PROTO(struct inode *inode, struct extent_status *es), 2405 2406 TP_ARGS(inode, es), 2407 2408 TP_STRUCT__entry( 2409 __field( dev_t, dev ) 2410 __field( ino_t, ino ) 2411 __field( ext4_lblk_t, lblk ) 2412 __field( ext4_lblk_t, len ) 2413 __field( ext4_fsblk_t, pblk ) 2414 __field( char, status ) 2415 ), 2416 2417 TP_fast_assign( 2418 __entry->dev = inode->i_sb->s_dev; 2419 __entry->ino = inode->i_ino; 2420 __entry->lblk = es->es_lblk; 2421 __entry->len = es->es_len; 2422 __entry->pblk = ext4_es_show_pblock(es); 2423 __entry->status = ext4_es_status(es); 2424 ), 2425 2426 TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s", 2427 MAJOR(__entry->dev), MINOR(__entry->dev), 2428 (unsigned long) __entry->ino, 2429 __entry->lblk, __entry->len, 2430 __entry->pblk, show_extent_status(__entry->status)) 2431 ); 2432 2433 TRACE_EVENT(ext4_es_lookup_extent_enter, 2434 TP_PROTO(struct inode *inode, ext4_lblk_t lblk), 2435 2436 TP_ARGS(inode, lblk), 2437 2438 TP_STRUCT__entry( 2439 __field( dev_t, dev ) 2440 __field( ino_t, ino ) 2441 __field( ext4_lblk_t, lblk ) 2442 ), 2443 2444 TP_fast_assign( 2445 __entry->dev = inode->i_sb->s_dev; 2446 __entry->ino = inode->i_ino; 2447 __entry->lblk = lblk; 2448 ), 2449 2450 TP_printk("dev %d,%d ino %lu lblk %u", 2451 MAJOR(__entry->dev), MINOR(__entry->dev), 2452 (unsigned long) __entry->ino, __entry->lblk) 2453 ); 2454 2455 TRACE_EVENT(ext4_es_lookup_extent_exit, 2456 TP_PROTO(struct inode *inode, struct extent_status *es, 2457 int found), 2458 2459 TP_ARGS(inode, es, found), 2460 2461 TP_STRUCT__entry( 2462 __field( dev_t, dev ) 2463 __field( ino_t, ino ) 2464 __field( ext4_lblk_t, lblk ) 2465 __field( ext4_lblk_t, len ) 2466 __field( ext4_fsblk_t, pblk ) 2467 __field( char, status ) 2468 __field( int, found ) 2469 ), 2470 2471 TP_fast_assign( 2472 __entry->dev = inode->i_sb->s_dev; 2473 __entry->ino = inode->i_ino; 2474 __entry->lblk = es->es_lblk; 2475 __entry->len = es->es_len; 2476 __entry->pblk = ext4_es_show_pblock(es); 2477 __entry->status = ext4_es_status(es); 2478 __entry->found = found; 2479 ), 2480 2481 TP_printk("dev %d,%d ino %lu found %d [%u/%u) %llu %s", 2482 MAJOR(__entry->dev), MINOR(__entry->dev), 2483 (unsigned long) __entry->ino, __entry->found, 2484 __entry->lblk, __entry->len, 2485 __entry->found ? __entry->pblk : 0, 2486 show_extent_status(__entry->found ? __entry->status : 0)) 2487 ); 2488 2489 DECLARE_EVENT_CLASS(ext4__es_shrink_enter, 2490 TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), 2491 2492 TP_ARGS(sb, nr_to_scan, cache_cnt), 2493 2494 TP_STRUCT__entry( 2495 __field( dev_t, dev ) 2496 __field( int, nr_to_scan ) 2497 __field( int, cache_cnt ) 2498 ), 2499 2500 TP_fast_assign( 2501 __entry->dev = sb->s_dev; 2502 __entry->nr_to_scan = nr_to_scan; 2503 __entry->cache_cnt = cache_cnt; 2504 ), 2505 2506 TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d", 2507 MAJOR(__entry->dev), MINOR(__entry->dev), 2508 __entry->nr_to_scan, __entry->cache_cnt) 2509 ); 2510 2511 DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_count, 2512 TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), 2513 2514 TP_ARGS(sb, nr_to_scan, cache_cnt) 2515 ); 2516 2517 DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_scan_enter, 2518 TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), 2519 2520 TP_ARGS(sb, nr_to_scan, cache_cnt) 2521 ); 2522 2523 TRACE_EVENT(ext4_es_shrink_scan_exit, 2524 TP_PROTO(struct super_block *sb, int nr_shrunk, int cache_cnt), 2525 2526 TP_ARGS(sb, nr_shrunk, cache_cnt), 2527 2528 TP_STRUCT__entry( 2529 __field( dev_t, dev ) 2530 __field( int, nr_shrunk ) 2531 __field( int, cache_cnt ) 2532 ), 2533 2534 TP_fast_assign( 2535 __entry->dev = sb->s_dev; 2536 __entry->nr_shrunk = nr_shrunk; 2537 __entry->cache_cnt = cache_cnt; 2538 ), 2539 2540 TP_printk("dev %d,%d nr_shrunk %d cache_cnt %d", 2541 MAJOR(__entry->dev), MINOR(__entry->dev), 2542 __entry->nr_shrunk, __entry->cache_cnt) 2543 ); 2544 2545 TRACE_EVENT(ext4_collapse_range, 2546 TP_PROTO(struct inode *inode, loff_t offset, loff_t len), 2547 2548 TP_ARGS(inode, offset, len), 2549 2550 TP_STRUCT__entry( 2551 __field(dev_t, dev) 2552 __field(ino_t, ino) 2553 __field(loff_t, offset) 2554 __field(loff_t, len) 2555 ), 2556 2557 TP_fast_assign( 2558 __entry->dev = inode->i_sb->s_dev; 2559 __entry->ino = inode->i_ino; 2560 __entry->offset = offset; 2561 __entry->len = len; 2562 ), 2563 2564 TP_printk("dev %d,%d ino %lu offset %lld len %lld", 2565 MAJOR(__entry->dev), MINOR(__entry->dev), 2566 (unsigned long) __entry->ino, 2567 __entry->offset, __entry->len) 2568 ); 2569 2570 TRACE_EVENT(ext4_insert_range, 2571 TP_PROTO(struct inode *inode, loff_t offset, loff_t len), 2572 2573 TP_ARGS(inode, offset, len), 2574 2575 TP_STRUCT__entry( 2576 __field(dev_t, dev) 2577 __field(ino_t, ino) 2578 __field(loff_t, offset) 2579 __field(loff_t, len) 2580 ), 2581 2582 TP_fast_assign( 2583 __entry->dev = inode->i_sb->s_dev; 2584 __entry->ino = inode->i_ino; 2585 __entry->offset = offset; 2586 __entry->len = len; 2587 ), 2588 2589 TP_printk("dev %d,%d ino %lu offset %lld len %lld", 2590 MAJOR(__entry->dev), MINOR(__entry->dev), 2591 (unsigned long) __entry->ino, 2592 __entry->offset, __entry->len) 2593 ); 2594 2595 TRACE_EVENT(ext4_es_shrink, 2596 TP_PROTO(struct super_block *sb, int nr_shrunk, u64 scan_time, 2597 int nr_skipped, int retried), 2598 2599 TP_ARGS(sb, nr_shrunk, scan_time, nr_skipped, retried), 2600 2601 TP_STRUCT__entry( 2602 __field( dev_t, dev ) 2603 __field( int, nr_shrunk ) 2604 __field( unsigned long long, scan_time ) 2605 __field( int, nr_skipped ) 2606 __field( int, retried ) 2607 ), 2608 2609 TP_fast_assign( 2610 __entry->dev = sb->s_dev; 2611 __entry->nr_shrunk = nr_shrunk; 2612 __entry->scan_time = div_u64(scan_time, 1000); 2613 __entry->nr_skipped = nr_skipped; 2614 __entry->retried = retried; 2615 ), 2616 2617 TP_printk("dev %d,%d nr_shrunk %d, scan_time %llu " 2618 "nr_skipped %d retried %d", 2619 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->nr_shrunk, 2620 __entry->scan_time, __entry->nr_skipped, __entry->retried) 2621 ); 2622 2623 TRACE_EVENT(ext4_es_insert_delayed_block, 2624 TP_PROTO(struct inode *inode, struct extent_status *es, 2625 bool allocated), 2626 2627 TP_ARGS(inode, es, allocated), 2628 2629 TP_STRUCT__entry( 2630 __field( dev_t, dev ) 2631 __field( ino_t, ino ) 2632 __field( ext4_lblk_t, lblk ) 2633 __field( ext4_lblk_t, len ) 2634 __field( ext4_fsblk_t, pblk ) 2635 __field( char, status ) 2636 __field( bool, allocated ) 2637 ), 2638 2639 TP_fast_assign( 2640 __entry->dev = inode->i_sb->s_dev; 2641 __entry->ino = inode->i_ino; 2642 __entry->lblk = es->es_lblk; 2643 __entry->len = es->es_len; 2644 __entry->pblk = ext4_es_show_pblock(es); 2645 __entry->status = ext4_es_status(es); 2646 __entry->allocated = allocated; 2647 ), 2648 2649 TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s " 2650 "allocated %d", 2651 MAJOR(__entry->dev), MINOR(__entry->dev), 2652 (unsigned long) __entry->ino, 2653 __entry->lblk, __entry->len, 2654 __entry->pblk, show_extent_status(__entry->status), 2655 __entry->allocated) 2656 ); 2657 2658 /* fsmap traces */ 2659 DECLARE_EVENT_CLASS(ext4_fsmap_class, 2660 TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len, 2661 u64 owner), 2662 TP_ARGS(sb, keydev, agno, bno, len, owner), 2663 TP_STRUCT__entry( 2664 __field(dev_t, dev) 2665 __field(dev_t, keydev) 2666 __field(u32, agno) 2667 __field(u64, bno) 2668 __field(u64, len) 2669 __field(u64, owner) 2670 ), 2671 TP_fast_assign( 2672 __entry->dev = sb->s_bdev->bd_dev; 2673 __entry->keydev = new_decode_dev(keydev); 2674 __entry->agno = agno; 2675 __entry->bno = bno; 2676 __entry->len = len; 2677 __entry->owner = owner; 2678 ), 2679 TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld\n", 2680 MAJOR(__entry->dev), MINOR(__entry->dev), 2681 MAJOR(__entry->keydev), MINOR(__entry->keydev), 2682 __entry->agno, 2683 __entry->bno, 2684 __entry->len, 2685 __entry->owner) 2686 ) 2687 #define DEFINE_FSMAP_EVENT(name) \ 2688 DEFINE_EVENT(ext4_fsmap_class, name, \ 2689 TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len, \ 2690 u64 owner), \ 2691 TP_ARGS(sb, keydev, agno, bno, len, owner)) 2692 DEFINE_FSMAP_EVENT(ext4_fsmap_low_key); 2693 DEFINE_FSMAP_EVENT(ext4_fsmap_high_key); 2694 DEFINE_FSMAP_EVENT(ext4_fsmap_mapping); 2695 2696 DECLARE_EVENT_CLASS(ext4_getfsmap_class, 2697 TP_PROTO(struct super_block *sb, struct ext4_fsmap *fsmap), 2698 TP_ARGS(sb, fsmap), 2699 TP_STRUCT__entry( 2700 __field(dev_t, dev) 2701 __field(dev_t, keydev) 2702 __field(u64, block) 2703 __field(u64, len) 2704 __field(u64, owner) 2705 __field(u64, flags) 2706 ), 2707 TP_fast_assign( 2708 __entry->dev = sb->s_bdev->bd_dev; 2709 __entry->keydev = new_decode_dev(fsmap->fmr_device); 2710 __entry->block = fsmap->fmr_physical; 2711 __entry->len = fsmap->fmr_length; 2712 __entry->owner = fsmap->fmr_owner; 2713 __entry->flags = fsmap->fmr_flags; 2714 ), 2715 TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld flags 0x%llx\n", 2716 MAJOR(__entry->dev), MINOR(__entry->dev), 2717 MAJOR(__entry->keydev), MINOR(__entry->keydev), 2718 __entry->block, 2719 __entry->len, 2720 __entry->owner, 2721 __entry->flags) 2722 ) 2723 #define DEFINE_GETFSMAP_EVENT(name) \ 2724 DEFINE_EVENT(ext4_getfsmap_class, name, \ 2725 TP_PROTO(struct super_block *sb, struct ext4_fsmap *fsmap), \ 2726 TP_ARGS(sb, fsmap)) 2727 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_low_key); 2728 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_high_key); 2729 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_mapping); 2730 2731 TRACE_EVENT(ext4_shutdown, 2732 TP_PROTO(struct super_block *sb, unsigned long flags), 2733 2734 TP_ARGS(sb, flags), 2735 2736 TP_STRUCT__entry( 2737 __field( dev_t, dev ) 2738 __field( unsigned, flags ) 2739 ), 2740 2741 TP_fast_assign( 2742 __entry->dev = sb->s_dev; 2743 __entry->flags = flags; 2744 ), 2745 2746 TP_printk("dev %d,%d flags %u", 2747 MAJOR(__entry->dev), MINOR(__entry->dev), 2748 __entry->flags) 2749 ); 2750 2751 TRACE_EVENT(ext4_error, 2752 TP_PROTO(struct super_block *sb, const char *function, 2753 unsigned int line), 2754 2755 TP_ARGS(sb, function, line), 2756 2757 TP_STRUCT__entry( 2758 __field( dev_t, dev ) 2759 __field( const char *, function ) 2760 __field( unsigned, line ) 2761 ), 2762 2763 TP_fast_assign( 2764 __entry->dev = sb->s_dev; 2765 __entry->function = function; 2766 __entry->line = line; 2767 ), 2768 2769 TP_printk("dev %d,%d function %s line %u", 2770 MAJOR(__entry->dev), MINOR(__entry->dev), 2771 __entry->function, __entry->line) 2772 ); 2773 2774 TRACE_EVENT(ext4_prefetch_bitmaps, 2775 TP_PROTO(struct super_block *sb, ext4_group_t group, 2776 ext4_group_t next, unsigned int prefetch_ios), 2777 2778 TP_ARGS(sb, group, next, prefetch_ios), 2779 2780 TP_STRUCT__entry( 2781 __field( dev_t, dev ) 2782 __field( __u32, group ) 2783 __field( __u32, next ) 2784 __field( __u32, ios ) 2785 ), 2786 2787 TP_fast_assign( 2788 __entry->dev = sb->s_dev; 2789 __entry->group = group; 2790 __entry->next = next; 2791 __entry->ios = prefetch_ios; 2792 ), 2793 2794 TP_printk("dev %d,%d group %u next %u ios %u", 2795 MAJOR(__entry->dev), MINOR(__entry->dev), 2796 __entry->group, __entry->next, __entry->ios) 2797 ); 2798 2799 TRACE_EVENT(ext4_lazy_itable_init, 2800 TP_PROTO(struct super_block *sb, ext4_group_t group), 2801 2802 TP_ARGS(sb, group), 2803 2804 TP_STRUCT__entry( 2805 __field( dev_t, dev ) 2806 __field( __u32, group ) 2807 ), 2808 2809 TP_fast_assign( 2810 __entry->dev = sb->s_dev; 2811 __entry->group = group; 2812 ), 2813 2814 TP_printk("dev %d,%d group %u", 2815 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->group) 2816 ); 2817 2818 TRACE_EVENT(ext4_fc_replay_scan, 2819 TP_PROTO(struct super_block *sb, int error, int off), 2820 2821 TP_ARGS(sb, error, off), 2822 2823 TP_STRUCT__entry( 2824 __field(dev_t, dev) 2825 __field(int, error) 2826 __field(int, off) 2827 ), 2828 2829 TP_fast_assign( 2830 __entry->dev = sb->s_dev; 2831 __entry->error = error; 2832 __entry->off = off; 2833 ), 2834 2835 TP_printk("FC scan pass on dev %d,%d: error %d, off %d", 2836 MAJOR(__entry->dev), MINOR(__entry->dev), 2837 __entry->error, __entry->off) 2838 ); 2839 2840 TRACE_EVENT(ext4_fc_replay, 2841 TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2), 2842 2843 TP_ARGS(sb, tag, ino, priv1, priv2), 2844 2845 TP_STRUCT__entry( 2846 __field(dev_t, dev) 2847 __field(int, tag) 2848 __field(int, ino) 2849 __field(int, priv1) 2850 __field(int, priv2) 2851 ), 2852 2853 TP_fast_assign( 2854 __entry->dev = sb->s_dev; 2855 __entry->tag = tag; 2856 __entry->ino = ino; 2857 __entry->priv1 = priv1; 2858 __entry->priv2 = priv2; 2859 ), 2860 2861 TP_printk("FC Replay %d,%d: tag %d, ino %d, data1 %d, data2 %d", 2862 MAJOR(__entry->dev), MINOR(__entry->dev), 2863 __entry->tag, __entry->ino, __entry->priv1, __entry->priv2) 2864 ); 2865 2866 TRACE_EVENT(ext4_fc_commit_start, 2867 TP_PROTO(struct super_block *sb), 2868 2869 TP_ARGS(sb), 2870 2871 TP_STRUCT__entry( 2872 __field(dev_t, dev) 2873 ), 2874 2875 TP_fast_assign( 2876 __entry->dev = sb->s_dev; 2877 ), 2878 2879 TP_printk("fast_commit started on dev %d,%d", 2880 MAJOR(__entry->dev), MINOR(__entry->dev)) 2881 ); 2882 2883 TRACE_EVENT(ext4_fc_commit_stop, 2884 TP_PROTO(struct super_block *sb, int nblks, int reason), 2885 2886 TP_ARGS(sb, nblks, reason), 2887 2888 TP_STRUCT__entry( 2889 __field(dev_t, dev) 2890 __field(int, nblks) 2891 __field(int, reason) 2892 __field(int, num_fc) 2893 __field(int, num_fc_ineligible) 2894 __field(int, nblks_agg) 2895 ), 2896 2897 TP_fast_assign( 2898 __entry->dev = sb->s_dev; 2899 __entry->nblks = nblks; 2900 __entry->reason = reason; 2901 __entry->num_fc = EXT4_SB(sb)->s_fc_stats.fc_num_commits; 2902 __entry->num_fc_ineligible = 2903 EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits; 2904 __entry->nblks_agg = EXT4_SB(sb)->s_fc_stats.fc_numblks; 2905 ), 2906 2907 TP_printk("fc on [%d,%d] nblks %d, reason %d, fc = %d, ineligible = %d, agg_nblks %d", 2908 MAJOR(__entry->dev), MINOR(__entry->dev), 2909 __entry->nblks, __entry->reason, __entry->num_fc, 2910 __entry->num_fc_ineligible, __entry->nblks_agg) 2911 ); 2912 2913 #define FC_REASON_NAME_STAT(reason) \ 2914 show_fc_reason(reason), \ 2915 __entry->fc_ineligible_rc[reason] 2916 2917 TRACE_EVENT(ext4_fc_stats, 2918 TP_PROTO(struct super_block *sb), 2919 2920 TP_ARGS(sb), 2921 2922 TP_STRUCT__entry( 2923 __field(dev_t, dev) 2924 __array(unsigned int, fc_ineligible_rc, EXT4_FC_REASON_MAX) 2925 __field(unsigned long, fc_commits) 2926 __field(unsigned long, fc_ineligible_commits) 2927 __field(unsigned long, fc_numblks) 2928 ), 2929 2930 TP_fast_assign( 2931 int i; 2932 2933 __entry->dev = sb->s_dev; 2934 for (i = 0; i < EXT4_FC_REASON_MAX; i++) { 2935 __entry->fc_ineligible_rc[i] = 2936 EXT4_SB(sb)->s_fc_stats.fc_ineligible_reason_count[i]; 2937 } 2938 __entry->fc_commits = EXT4_SB(sb)->s_fc_stats.fc_num_commits; 2939 __entry->fc_ineligible_commits = 2940 EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits; 2941 __entry->fc_numblks = EXT4_SB(sb)->s_fc_stats.fc_numblks; 2942 ), 2943 2944 TP_printk("dev %d,%d fc ineligible reasons:\n" 2945 "%s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u" 2946 "num_commits:%lu, ineligible: %lu, numblks: %lu", 2947 MAJOR(__entry->dev), MINOR(__entry->dev), 2948 FC_REASON_NAME_STAT(EXT4_FC_REASON_XATTR), 2949 FC_REASON_NAME_STAT(EXT4_FC_REASON_CROSS_RENAME), 2950 FC_REASON_NAME_STAT(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE), 2951 FC_REASON_NAME_STAT(EXT4_FC_REASON_NOMEM), 2952 FC_REASON_NAME_STAT(EXT4_FC_REASON_SWAP_BOOT), 2953 FC_REASON_NAME_STAT(EXT4_FC_REASON_RESIZE), 2954 FC_REASON_NAME_STAT(EXT4_FC_REASON_RENAME_DIR), 2955 FC_REASON_NAME_STAT(EXT4_FC_REASON_FALLOC_RANGE), 2956 FC_REASON_NAME_STAT(EXT4_FC_REASON_INODE_JOURNAL_DATA), 2957 FC_REASON_NAME_STAT(EXT4_FC_REASON_ENCRYPTED_FILENAME), 2958 __entry->fc_commits, __entry->fc_ineligible_commits, 2959 __entry->fc_numblks) 2960 ); 2961 2962 #define DEFINE_TRACE_DENTRY_EVENT(__type) \ 2963 TRACE_EVENT(ext4_fc_track_##__type, \ 2964 TP_PROTO(struct inode *inode, struct dentry *dentry, int ret), \ 2965 \ 2966 TP_ARGS(inode, dentry, ret), \ 2967 \ 2968 TP_STRUCT__entry( \ 2969 __field(dev_t, dev) \ 2970 __field(int, ino) \ 2971 __field(int, error) \ 2972 ), \ 2973 \ 2974 TP_fast_assign( \ 2975 __entry->dev = inode->i_sb->s_dev; \ 2976 __entry->ino = inode->i_ino; \ 2977 __entry->error = ret; \ 2978 ), \ 2979 \ 2980 TP_printk("dev %d:%d, inode %d, error %d, fc_%s", \ 2981 MAJOR(__entry->dev), MINOR(__entry->dev), \ 2982 __entry->ino, __entry->error, \ 2983 #__type) \ 2984 ) 2985 2986 DEFINE_TRACE_DENTRY_EVENT(create); 2987 DEFINE_TRACE_DENTRY_EVENT(link); 2988 DEFINE_TRACE_DENTRY_EVENT(unlink); 2989 2990 TRACE_EVENT(ext4_fc_track_inode, 2991 TP_PROTO(struct inode *inode, int ret), 2992 2993 TP_ARGS(inode, ret), 2994 2995 TP_STRUCT__entry( 2996 __field(dev_t, dev) 2997 __field(int, ino) 2998 __field(int, error) 2999 ), 3000 3001 TP_fast_assign( 3002 __entry->dev = inode->i_sb->s_dev; 3003 __entry->ino = inode->i_ino; 3004 __entry->error = ret; 3005 ), 3006 3007 TP_printk("dev %d:%d, inode %d, error %d", 3008 MAJOR(__entry->dev), MINOR(__entry->dev), 3009 __entry->ino, __entry->error) 3010 ); 3011 3012 TRACE_EVENT(ext4_fc_track_range, 3013 TP_PROTO(struct inode *inode, long start, long end, int ret), 3014 3015 TP_ARGS(inode, start, end, ret), 3016 3017 TP_STRUCT__entry( 3018 __field(dev_t, dev) 3019 __field(int, ino) 3020 __field(long, start) 3021 __field(long, end) 3022 __field(int, error) 3023 ), 3024 3025 TP_fast_assign( 3026 __entry->dev = inode->i_sb->s_dev; 3027 __entry->ino = inode->i_ino; 3028 __entry->start = start; 3029 __entry->end = end; 3030 __entry->error = ret; 3031 ), 3032 3033 TP_printk("dev %d:%d, inode %d, error %d, start %ld, end %ld", 3034 MAJOR(__entry->dev), MINOR(__entry->dev), 3035 __entry->ino, __entry->error, __entry->start, 3036 __entry->end) 3037 ); 3038 3039 #endif /* _TRACE_EXT4_H */ 3040 3041 /* This part must be outside protection */ 3042 #include <trace/define_trace.h> 3043