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