File Index
Files and directories
Sign in
FILE

f2fs.h

File preview with syntax highlighting.

linux-6.19.14/include/trace/events/f2fs.h C
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#undef TRACE_SYSTEM
   3#define TRACE_SYSTEM f2fs
   4
   5#if !defined(_TRACE_F2FS_H) || defined(TRACE_HEADER_MULTI_READ)
   6#define _TRACE_F2FS_H
   7
   8#include <linux/tracepoint.h>
   9#include <uapi/linux/f2fs.h>
  10
  11#define show_dev(dev)		MAJOR(dev), MINOR(dev)
  12#define show_dev_ino(entry)	show_dev(entry->dev), (unsigned long)entry->ino
  13
  14TRACE_DEFINE_ENUM(NODE);
  15TRACE_DEFINE_ENUM(DATA);
  16TRACE_DEFINE_ENUM(META);
  17TRACE_DEFINE_ENUM(META_FLUSH);
  18TRACE_DEFINE_ENUM(IPU);
  19TRACE_DEFINE_ENUM(OPU);
  20TRACE_DEFINE_ENUM(HOT);
  21TRACE_DEFINE_ENUM(WARM);
  22TRACE_DEFINE_ENUM(COLD);
  23TRACE_DEFINE_ENUM(CURSEG_HOT_DATA);
  24TRACE_DEFINE_ENUM(CURSEG_WARM_DATA);
  25TRACE_DEFINE_ENUM(CURSEG_COLD_DATA);
  26TRACE_DEFINE_ENUM(CURSEG_HOT_NODE);
  27TRACE_DEFINE_ENUM(CURSEG_WARM_NODE);
  28TRACE_DEFINE_ENUM(CURSEG_COLD_NODE);
  29TRACE_DEFINE_ENUM(NO_CHECK_TYPE);
  30TRACE_DEFINE_ENUM(GC_GREEDY);
  31TRACE_DEFINE_ENUM(GC_CB);
  32TRACE_DEFINE_ENUM(FG_GC);
  33TRACE_DEFINE_ENUM(BG_GC);
  34TRACE_DEFINE_ENUM(LFS);
  35TRACE_DEFINE_ENUM(SSR);
  36TRACE_DEFINE_ENUM(__REQ_RAHEAD);
  37TRACE_DEFINE_ENUM(__REQ_SYNC);
  38TRACE_DEFINE_ENUM(__REQ_IDLE);
  39TRACE_DEFINE_ENUM(__REQ_PREFLUSH);
  40TRACE_DEFINE_ENUM(__REQ_FUA);
  41TRACE_DEFINE_ENUM(__REQ_PRIO);
  42TRACE_DEFINE_ENUM(__REQ_META);
  43TRACE_DEFINE_ENUM(CP_UMOUNT);
  44TRACE_DEFINE_ENUM(CP_FASTBOOT);
  45TRACE_DEFINE_ENUM(CP_SYNC);
  46TRACE_DEFINE_ENUM(CP_RECOVERY);
  47TRACE_DEFINE_ENUM(CP_DISCARD);
  48TRACE_DEFINE_ENUM(CP_TRIMMED);
  49TRACE_DEFINE_ENUM(CP_PAUSE);
  50TRACE_DEFINE_ENUM(CP_RESIZE);
  51TRACE_DEFINE_ENUM(EX_READ);
  52TRACE_DEFINE_ENUM(EX_BLOCK_AGE);
  53TRACE_DEFINE_ENUM(CP_PHASE_START_BLOCK_OPS);
  54TRACE_DEFINE_ENUM(CP_PHASE_FINISH_BLOCK_OPS);
  55TRACE_DEFINE_ENUM(CP_PHASE_FINISH_CHECKPOINT);
  56
  57#define show_block_type(type)						\
  58	__print_symbolic(type,						\
  59		{ NODE,		"NODE" },				\
  60		{ DATA,		"DATA" },				\
  61		{ META,		"META" },				\
  62		{ META_FLUSH,	"META_FLUSH" },				\
  63		{ IPU,		"IN-PLACE" },				\
  64		{ OPU,		"OUT-OF-PLACE" })
  65
  66#define show_block_temp(temp)						\
  67	__print_symbolic(temp,						\
  68		{ HOT,		"HOT" },				\
  69		{ WARM,		"WARM" },				\
  70		{ COLD,		"COLD" })
  71
  72#define F2FS_OP_FLAGS (REQ_RAHEAD | REQ_SYNC | REQ_META | REQ_PRIO |	\
  73			REQ_PREFLUSH | REQ_FUA)
  74#define F2FS_BIO_FLAG_MASK(t) (__force u32)((t) & F2FS_OP_FLAGS)
  75
  76#define show_bio_type(op,op_flags)	show_bio_op(op),		\
  77						show_bio_op_flags(op_flags)
  78
  79#define show_bio_op(op)		blk_op_str(op)
  80
  81#define show_bio_op_flags(flags)					\
  82	__print_flags(F2FS_BIO_FLAG_MASK(flags), "|",			\
  83		{ (__force u32)REQ_RAHEAD,	"R" },			\
  84		{ (__force u32)REQ_SYNC,	"S" },			\
  85		{ (__force u32)REQ_META,	"M" },			\
  86		{ (__force u32)REQ_PRIO,	"P" },			\
  87		{ (__force u32)REQ_PREFLUSH,	"PF" },			\
  88		{ (__force u32)REQ_FUA,		"FUA" })
  89
  90#define show_data_type(type)						\
  91	__print_symbolic(type,						\
  92		{ CURSEG_HOT_DATA, 	"Hot DATA" },			\
  93		{ CURSEG_WARM_DATA, 	"Warm DATA" },			\
  94		{ CURSEG_COLD_DATA, 	"Cold DATA" },			\
  95		{ CURSEG_HOT_NODE, 	"Hot NODE" },			\
  96		{ CURSEG_WARM_NODE, 	"Warm NODE" },			\
  97		{ CURSEG_COLD_NODE, 	"Cold NODE" },			\
  98		{ NO_CHECK_TYPE, 	"No TYPE" })
  99
 100#define show_file_type(type)						\
 101	__print_symbolic(type,						\
 102		{ 0,		"FILE" },				\
 103		{ 1,		"DIR" })
 104
 105#define show_gc_type(type)						\
 106	__print_symbolic(type,						\
 107		{ FG_GC,	"Foreground GC" },			\
 108		{ BG_GC,	"Background GC" })
 109
 110#define show_alloc_mode(type)						\
 111	__print_symbolic(type,						\
 112		{ LFS,		"LFS-mode" },				\
 113		{ SSR,		"SSR-mode" },				\
 114		{ AT_SSR,	"AT_SSR-mode" })
 115
 116#define show_victim_policy(type)					\
 117	__print_symbolic(type,						\
 118		{ GC_GREEDY,	"Greedy" },				\
 119		{ GC_CB,	"Cost-Benefit" },			\
 120		{ GC_AT,	"Age-threshold" })
 121
 122#define show_cpreason(type)						\
 123	__print_flags(type, "|",					\
 124		{ CP_UMOUNT,	"Umount" },				\
 125		{ CP_FASTBOOT,	"Fastboot" },				\
 126		{ CP_SYNC,	"Sync" },				\
 127		{ CP_RECOVERY,	"Recovery" },				\
 128		{ CP_DISCARD,	"Discard" },				\
 129		{ CP_PAUSE,	"Pause" },				\
 130		{ CP_TRIMMED,	"Trimmed" },				\
 131		{ CP_RESIZE,	"Resize" })
 132
 133#define show_fsync_cpreason(type)					\
 134	__print_symbolic(type,						\
 135		{ CP_NO_NEEDED,		"no needed" },			\
 136		{ CP_NON_REGULAR,	"non regular" },		\
 137		{ CP_COMPRESSED,	"compressed" },			\
 138		{ CP_HARDLINK,		"hardlink" },			\
 139		{ CP_SB_NEED_CP,	"sb needs cp" },		\
 140		{ CP_WRONG_PINO,	"wrong pino" },			\
 141		{ CP_NO_SPC_ROLL,	"no space roll forward" },	\
 142		{ CP_NODE_NEED_CP,	"node needs cp" },		\
 143		{ CP_FASTBOOT_MODE,	"fastboot mode" },		\
 144		{ CP_SPEC_LOG_NUM,	"log type is 2" },		\
 145		{ CP_RECOVER_DIR,	"dir needs recovery" },		\
 146		{ CP_XATTR_DIR,		"dir's xattr updated" })
 147
 148#define show_shutdown_mode(type)					\
 149	__print_symbolic(type,						\
 150		{ F2FS_GOING_DOWN_FULLSYNC,	"full sync" },		\
 151		{ F2FS_GOING_DOWN_METASYNC,	"meta sync" },		\
 152		{ F2FS_GOING_DOWN_NOSYNC,	"no sync" },		\
 153		{ F2FS_GOING_DOWN_METAFLUSH,	"meta flush" },		\
 154		{ F2FS_GOING_DOWN_NEED_FSCK,	"need fsck" })
 155
 156#define show_compress_algorithm(type)					\
 157	__print_symbolic(type,						\
 158		{ COMPRESS_LZO,		"LZO" },			\
 159		{ COMPRESS_LZ4,		"LZ4" },			\
 160		{ COMPRESS_ZSTD,	"ZSTD" },			\
 161		{ COMPRESS_LZORLE,	"LZO-RLE" })
 162
 163#define show_extent_type(type)						\
 164	__print_symbolic(type,						\
 165		{ EX_READ,	"Read" },				\
 166		{ EX_BLOCK_AGE,	"Block Age" })
 167
 168#define show_inode_type(x) \
 169	__print_symbolic(x, \
 170		{ S_IFLNK,		"symbolic" }, \
 171		{ S_IFREG,		"regular" }, \
 172		{ S_IFDIR,		"directory" }, \
 173		{ S_IFCHR,		"character" }, \
 174		{ S_IFBLK,		"block" }, \
 175		{ S_IFIFO,		"fifo" }, \
 176		{ S_IFSOCK,		"sock" })
 177
 178#define S_ALL_PERM	(S_ISUID | S_ISGID | S_ISVTX |	\
 179			S_IRWXU | S_IRWXG | S_IRWXO)
 180
 181#define show_cp_phase(phase)					\
 182	__print_symbolic(phase,						\
 183		{ CP_PHASE_START_BLOCK_OPS,		"start block_ops" },			\
 184		{ CP_PHASE_FINISH_BLOCK_OPS,	"finish block_ops" },			\
 185		{ CP_PHASE_FINISH_CHECKPOINT,	"finish checkpoint" })
 186
 187struct f2fs_sb_info;
 188struct f2fs_io_info;
 189struct extent_info;
 190struct victim_sel_policy;
 191struct f2fs_map_blocks;
 192
 193DECLARE_EVENT_CLASS(f2fs__inode,
 194
 195	TP_PROTO(struct inode *inode),
 196
 197	TP_ARGS(inode),
 198
 199	TP_STRUCT__entry(
 200		__field(dev_t,	dev)
 201		__field(ino_t,	ino)
 202		__field(ino_t,	pino)
 203		__field(umode_t, mode)
 204		__field(loff_t,	size)
 205		__field(unsigned int, nlink)
 206		__field(blkcnt_t, blocks)
 207		__field(__u8,	advise)
 208	),
 209
 210	TP_fast_assign(
 211		__entry->dev	= inode->i_sb->s_dev;
 212		__entry->ino	= inode->i_ino;
 213		__entry->pino	= F2FS_I(inode)->i_pino;
 214		__entry->mode	= inode->i_mode;
 215		__entry->nlink	= inode->i_nlink;
 216		__entry->size	= i_size_read(inode);
 217		__entry->blocks	= inode->i_blocks;
 218		__entry->advise	= F2FS_I(inode)->i_advise;
 219	),
 220
 221	TP_printk("dev = (%d,%d), ino = %lu, pino = %lu, i_mode = 0x%hx, "
 222		"i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = 0x%x",
 223		show_dev_ino(__entry),
 224		(unsigned long)__entry->pino,
 225		__entry->mode,
 226		__entry->size,
 227		(unsigned int)__entry->nlink,
 228		(unsigned long long)__entry->blocks,
 229		(unsigned char)__entry->advise)
 230);
 231
 232DECLARE_EVENT_CLASS(f2fs__inode_exit,
 233
 234	TP_PROTO(struct inode *inode, int ret),
 235
 236	TP_ARGS(inode, ret),
 237
 238	TP_STRUCT__entry(
 239		__field(dev_t,	dev)
 240		__field(ino_t,	ino)
 241		__field(umode_t, mode)
 242		__field(int,	ret)
 243	),
 244
 245	TP_fast_assign(
 246		__entry->dev	= inode->i_sb->s_dev;
 247		__entry->ino	= inode->i_ino;
 248		__entry->mode	= inode->i_mode;
 249		__entry->ret	= ret;
 250	),
 251
 252	TP_printk("dev = (%d,%d), ino = %lu, type: %s, mode = 0%o, ret = %d",
 253		show_dev_ino(__entry),
 254		show_inode_type(__entry->mode & S_IFMT),
 255		__entry->mode & S_ALL_PERM,
 256		__entry->ret)
 257);
 258
 259DEFINE_EVENT(f2fs__inode, f2fs_sync_file_enter,
 260
 261	TP_PROTO(struct inode *inode),
 262
 263	TP_ARGS(inode)
 264);
 265
 266TRACE_EVENT(f2fs_sync_file_exit,
 267
 268	TP_PROTO(struct inode *inode, int cp_reason, int datasync, int ret),
 269
 270	TP_ARGS(inode, cp_reason, datasync, ret),
 271
 272	TP_STRUCT__entry(
 273		__field(dev_t,	dev)
 274		__field(ino_t,	ino)
 275		__field(int,	cp_reason)
 276		__field(int,	datasync)
 277		__field(int,	ret)
 278	),
 279
 280	TP_fast_assign(
 281		__entry->dev		= inode->i_sb->s_dev;
 282		__entry->ino		= inode->i_ino;
 283		__entry->cp_reason	= cp_reason;
 284		__entry->datasync	= datasync;
 285		__entry->ret		= ret;
 286	),
 287
 288	TP_printk("dev = (%d,%d), ino = %lu, cp_reason: %s, "
 289		"datasync = %d, ret = %d",
 290		show_dev_ino(__entry),
 291		show_fsync_cpreason(__entry->cp_reason),
 292		__entry->datasync,
 293		__entry->ret)
 294);
 295
 296TRACE_EVENT(f2fs_sync_fs,
 297
 298	TP_PROTO(struct super_block *sb, int wait),
 299
 300	TP_ARGS(sb, wait),
 301
 302	TP_STRUCT__entry(
 303		__field(dev_t,	dev)
 304		__field(int,	dirty)
 305		__field(int,	wait)
 306	),
 307
 308	TP_fast_assign(
 309		__entry->dev	= sb->s_dev;
 310		__entry->dirty	= is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY);
 311		__entry->wait	= wait;
 312	),
 313
 314	TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
 315		show_dev(__entry->dev),
 316		__entry->dirty ? "dirty" : "not dirty",
 317		__entry->wait)
 318);
 319
 320DEFINE_EVENT(f2fs__inode, f2fs_iget,
 321
 322	TP_PROTO(struct inode *inode),
 323
 324	TP_ARGS(inode)
 325);
 326
 327DEFINE_EVENT(f2fs__inode_exit, f2fs_iget_exit,
 328
 329	TP_PROTO(struct inode *inode, int ret),
 330
 331	TP_ARGS(inode, ret)
 332);
 333
 334DEFINE_EVENT(f2fs__inode, f2fs_evict_inode,
 335
 336	TP_PROTO(struct inode *inode),
 337
 338	TP_ARGS(inode)
 339);
 340
 341DEFINE_EVENT(f2fs__inode_exit, f2fs_new_inode,
 342
 343	TP_PROTO(struct inode *inode, int ret),
 344
 345	TP_ARGS(inode, ret)
 346);
 347
 348TRACE_EVENT(f2fs_unlink_enter,
 349
 350	TP_PROTO(struct inode *dir, struct dentry *dentry),
 351
 352	TP_ARGS(dir, dentry),
 353
 354	TP_STRUCT__entry(
 355		__field(dev_t,	dev)
 356		__field(ino_t,	ino)
 357		__field(loff_t,	size)
 358		__field(blkcnt_t, blocks)
 359		__string(name,  dentry->d_name.name)
 360	),
 361
 362	TP_fast_assign(
 363		__entry->dev	= dir->i_sb->s_dev;
 364		__entry->ino	= dir->i_ino;
 365		__entry->size	= i_size_read(dir);
 366		__entry->blocks	= dir->i_blocks;
 367		__assign_str(name);
 368	),
 369
 370	TP_printk("dev = (%d,%d), dir ino = %lu, i_size = %lld, "
 371		"i_blocks = %llu, name = %s",
 372		show_dev_ino(__entry),
 373		__entry->size,
 374		(unsigned long long)__entry->blocks,
 375		__get_str(name))
 376);
 377
 378DEFINE_EVENT(f2fs__inode_exit, f2fs_unlink_exit,
 379
 380	TP_PROTO(struct inode *inode, int ret),
 381
 382	TP_ARGS(inode, ret)
 383);
 384
 385DEFINE_EVENT(f2fs__inode_exit, f2fs_drop_inode,
 386
 387	TP_PROTO(struct inode *inode, int ret),
 388
 389	TP_ARGS(inode, ret)
 390);
 391
 392DEFINE_EVENT(f2fs__inode, f2fs_truncate,
 393
 394	TP_PROTO(struct inode *inode),
 395
 396	TP_ARGS(inode)
 397);
 398
 399TRACE_EVENT(f2fs_truncate_data_blocks_range,
 400
 401	TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs, int free),
 402
 403	TP_ARGS(inode, nid,  ofs, free),
 404
 405	TP_STRUCT__entry(
 406		__field(dev_t,	dev)
 407		__field(ino_t,	ino)
 408		__field(nid_t,	nid)
 409		__field(unsigned int,	ofs)
 410		__field(int,	free)
 411	),
 412
 413	TP_fast_assign(
 414		__entry->dev	= inode->i_sb->s_dev;
 415		__entry->ino	= inode->i_ino;
 416		__entry->nid	= nid;
 417		__entry->ofs	= ofs;
 418		__entry->free	= free;
 419	),
 420
 421	TP_printk("dev = (%d,%d), ino = %lu, nid = %u, offset = %u, freed = %d",
 422		show_dev_ino(__entry),
 423		(unsigned int)__entry->nid,
 424		__entry->ofs,
 425		__entry->free)
 426);
 427
 428DECLARE_EVENT_CLASS(f2fs__truncate_op,
 429
 430	TP_PROTO(struct inode *inode, u64 from),
 431
 432	TP_ARGS(inode, from),
 433
 434	TP_STRUCT__entry(
 435		__field(dev_t,	dev)
 436		__field(ino_t,	ino)
 437		__field(loff_t,	size)
 438		__field(blkcnt_t, blocks)
 439		__field(u64,	from)
 440	),
 441
 442	TP_fast_assign(
 443		__entry->dev	= inode->i_sb->s_dev;
 444		__entry->ino	= inode->i_ino;
 445		__entry->size	= i_size_read(inode);
 446		__entry->blocks	= inode->i_blocks;
 447		__entry->from	= from;
 448	),
 449
 450	TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld, i_blocks = %llu, "
 451		"start file offset = %llu",
 452		show_dev_ino(__entry),
 453		__entry->size,
 454		(unsigned long long)__entry->blocks,
 455		(unsigned long long)__entry->from)
 456);
 457
 458DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_blocks_enter,
 459
 460	TP_PROTO(struct inode *inode, u64 from),
 461
 462	TP_ARGS(inode, from)
 463);
 464
 465DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_blocks_exit,
 466
 467	TP_PROTO(struct inode *inode, int ret),
 468
 469	TP_ARGS(inode, ret)
 470);
 471
 472DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_inode_blocks_enter,
 473
 474	TP_PROTO(struct inode *inode, u64 from),
 475
 476	TP_ARGS(inode, from)
 477);
 478
 479DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_inode_blocks_exit,
 480
 481	TP_PROTO(struct inode *inode, int ret),
 482
 483	TP_ARGS(inode, ret)
 484);
 485
 486DECLARE_EVENT_CLASS(f2fs__truncate_node,
 487
 488	TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
 489
 490	TP_ARGS(inode, nid, blk_addr),
 491
 492	TP_STRUCT__entry(
 493		__field(dev_t,	dev)
 494		__field(ino_t,	ino)
 495		__field(nid_t,	nid)
 496		__field(block_t,	blk_addr)
 497	),
 498
 499	TP_fast_assign(
 500		__entry->dev		= inode->i_sb->s_dev;
 501		__entry->ino		= inode->i_ino;
 502		__entry->nid		= nid;
 503		__entry->blk_addr	= blk_addr;
 504	),
 505
 506	TP_printk("dev = (%d,%d), ino = %lu, nid = %u, block_address = 0x%llx",
 507		show_dev_ino(__entry),
 508		(unsigned int)__entry->nid,
 509		(unsigned long long)__entry->blk_addr)
 510);
 511
 512DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_nodes_enter,
 513
 514	TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
 515
 516	TP_ARGS(inode, nid, blk_addr)
 517);
 518
 519DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_nodes_exit,
 520
 521	TP_PROTO(struct inode *inode, int ret),
 522
 523	TP_ARGS(inode, ret)
 524);
 525
 526DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_node,
 527
 528	TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
 529
 530	TP_ARGS(inode, nid, blk_addr)
 531);
 532
 533TRACE_EVENT(f2fs_truncate_partial_nodes,
 534
 535	TP_PROTO(struct inode *inode, nid_t *nid, int depth, int err),
 536
 537	TP_ARGS(inode, nid, depth, err),
 538
 539	TP_STRUCT__entry(
 540		__field(dev_t,	dev)
 541		__field(ino_t,	ino)
 542		__array(nid_t,	nid, 3)
 543		__field(int,	depth)
 544		__field(int,	err)
 545	),
 546
 547	TP_fast_assign(
 548		__entry->dev	= inode->i_sb->s_dev;
 549		__entry->ino	= inode->i_ino;
 550		__entry->nid[0]	= nid[0];
 551		__entry->nid[1]	= nid[1];
 552		__entry->nid[2]	= nid[2];
 553		__entry->depth	= depth;
 554		__entry->err	= err;
 555	),
 556
 557	TP_printk("dev = (%d,%d), ino = %lu, "
 558		"nid[0] = %u, nid[1] = %u, nid[2] = %u, depth = %d, err = %d",
 559		show_dev_ino(__entry),
 560		(unsigned int)__entry->nid[0],
 561		(unsigned int)__entry->nid[1],
 562		(unsigned int)__entry->nid[2],
 563		__entry->depth,
 564		__entry->err)
 565);
 566
 567TRACE_EVENT(f2fs_file_write_iter,
 568
 569	TP_PROTO(struct inode *inode, loff_t offset, size_t length,
 570		 ssize_t ret),
 571
 572	TP_ARGS(inode, offset, length, ret),
 573
 574	TP_STRUCT__entry(
 575		__field(dev_t,	dev)
 576		__field(ino_t,	ino)
 577		__field(loff_t, offset)
 578		__field(size_t, length)
 579		__field(ssize_t, ret)
 580	),
 581
 582	TP_fast_assign(
 583		__entry->dev	= inode->i_sb->s_dev;
 584		__entry->ino	= inode->i_ino;
 585		__entry->offset	= offset;
 586		__entry->length	= length;
 587		__entry->ret	= ret;
 588	),
 589
 590	TP_printk("dev = (%d,%d), ino = %lu, "
 591		"offset = %lld, length = %zu, written(err) = %zd",
 592		show_dev_ino(__entry),
 593		__entry->offset,
 594		__entry->length,
 595		__entry->ret)
 596);
 597
 598TRACE_EVENT(f2fs_fadvise,
 599
 600	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int advice),
 601
 602	TP_ARGS(inode, offset, len, advice),
 603
 604	TP_STRUCT__entry(
 605		__field(dev_t,	dev)
 606		__field(ino_t,	ino)
 607		__field(loff_t, size)
 608		__field(loff_t,	offset)
 609		__field(loff_t,	len)
 610		__field(int,	advice)
 611	),
 612
 613	TP_fast_assign(
 614		__entry->dev	= inode->i_sb->s_dev;
 615		__entry->ino	= inode->i_ino;
 616		__entry->size	= i_size_read(inode);
 617		__entry->offset	= offset;
 618		__entry->len	= len;
 619		__entry->advice	= advice;
 620	),
 621
 622	TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld offset:%llu, len:%llu, advise:%d",
 623		show_dev_ino(__entry),
 624		(unsigned long long)__entry->size,
 625		__entry->offset,
 626		__entry->len,
 627		__entry->advice)
 628);
 629
 630TRACE_EVENT(f2fs_map_blocks,
 631	TP_PROTO(struct inode *inode, struct f2fs_map_blocks *map, int flag,
 632		 int ret),
 633
 634	TP_ARGS(inode, map, flag, ret),
 635
 636	TP_STRUCT__entry(
 637		__field(dev_t,	dev)
 638		__field(ino_t,	ino)
 639		__field(block_t,	m_lblk)
 640		__field(block_t,	m_pblk)
 641		__field(unsigned int,	m_len)
 642		__field(unsigned int,	m_flags)
 643		__field(int,	m_seg_type)
 644		__field(bool,	m_may_create)
 645		__field(bool,	m_multidev_dio)
 646		__field(int,	flag)
 647		__field(int,	ret)
 648	),
 649
 650	TP_fast_assign(
 651		__entry->dev		= map->m_bdev->bd_dev;
 652		__entry->ino		= inode->i_ino;
 653		__entry->m_lblk		= map->m_lblk;
 654		__entry->m_pblk		= map->m_pblk;
 655		__entry->m_len		= map->m_len;
 656		__entry->m_flags	= map->m_flags;
 657		__entry->m_seg_type	= map->m_seg_type;
 658		__entry->m_may_create	= map->m_may_create;
 659		__entry->m_multidev_dio	= map->m_multidev_dio;
 660		__entry->flag		= flag;
 661		__entry->ret		= ret;
 662	),
 663
 664	TP_printk("dev = (%d,%d), ino = %lu, file offset = %llu, "
 665		"start blkaddr = 0x%llx, len = 0x%llx, flags = %u, "
 666		"seg_type = %d, may_create = %d, multidevice = %d, "
 667		"flag = %d, err = %d",
 668		show_dev_ino(__entry),
 669		(unsigned long long)__entry->m_lblk,
 670		(unsigned long long)__entry->m_pblk,
 671		(unsigned long long)__entry->m_len,
 672		__entry->m_flags,
 673		__entry->m_seg_type,
 674		__entry->m_may_create,
 675		__entry->m_multidev_dio,
 676		__entry->flag,
 677		__entry->ret)
 678);
 679
 680TRACE_EVENT(f2fs_background_gc,
 681
 682	TP_PROTO(struct super_block *sb, unsigned int wait_ms,
 683			unsigned int prefree, unsigned int free),
 684
 685	TP_ARGS(sb, wait_ms, prefree, free),
 686
 687	TP_STRUCT__entry(
 688		__field(dev_t,	dev)
 689		__field(unsigned int,	wait_ms)
 690		__field(unsigned int,	prefree)
 691		__field(unsigned int,	free)
 692	),
 693
 694	TP_fast_assign(
 695		__entry->dev		= sb->s_dev;
 696		__entry->wait_ms	= wait_ms;
 697		__entry->prefree	= prefree;
 698		__entry->free		= free;
 699	),
 700
 701	TP_printk("dev = (%d,%d), wait_ms = %u, prefree = %u, free = %u",
 702		show_dev(__entry->dev),
 703		__entry->wait_ms,
 704		__entry->prefree,
 705		__entry->free)
 706);
 707
 708TRACE_EVENT(f2fs_gc_begin,
 709
 710	TP_PROTO(struct super_block *sb, int gc_type, bool no_bg_gc,
 711			unsigned int nr_free_secs,
 712			long long dirty_nodes, long long dirty_dents,
 713			long long dirty_imeta, unsigned int free_sec,
 714			unsigned int free_seg, int reserved_seg,
 715			unsigned int prefree_seg),
 716
 717	TP_ARGS(sb, gc_type, no_bg_gc, nr_free_secs, dirty_nodes,
 718		dirty_dents, dirty_imeta,
 719		free_sec, free_seg, reserved_seg, prefree_seg),
 720
 721	TP_STRUCT__entry(
 722		__field(dev_t,		dev)
 723		__field(int,		gc_type)
 724		__field(bool,		no_bg_gc)
 725		__field(unsigned int,	nr_free_secs)
 726		__field(long long,	dirty_nodes)
 727		__field(long long,	dirty_dents)
 728		__field(long long,	dirty_imeta)
 729		__field(unsigned int,	free_sec)
 730		__field(unsigned int,	free_seg)
 731		__field(int,		reserved_seg)
 732		__field(unsigned int,	prefree_seg)
 733	),
 734
 735	TP_fast_assign(
 736		__entry->dev		= sb->s_dev;
 737		__entry->gc_type	= gc_type;
 738		__entry->no_bg_gc	= no_bg_gc;
 739		__entry->nr_free_secs	= nr_free_secs;
 740		__entry->dirty_nodes	= dirty_nodes;
 741		__entry->dirty_dents	= dirty_dents;
 742		__entry->dirty_imeta	= dirty_imeta;
 743		__entry->free_sec	= free_sec;
 744		__entry->free_seg	= free_seg;
 745		__entry->reserved_seg	= reserved_seg;
 746		__entry->prefree_seg	= prefree_seg;
 747	),
 748
 749	TP_printk("dev = (%d,%d), gc_type = %s, no_background_GC = %d, nr_free_secs = %u, "
 750		"nodes = %lld, dents = %lld, imeta = %lld, free_sec:%u, free_seg:%u, "
 751		"rsv_seg:%d, prefree_seg:%u",
 752		show_dev(__entry->dev),
 753		show_gc_type(__entry->gc_type),
 754		(__entry->gc_type == BG_GC) ? __entry->no_bg_gc : -1,
 755		__entry->nr_free_secs,
 756		__entry->dirty_nodes,
 757		__entry->dirty_dents,
 758		__entry->dirty_imeta,
 759		__entry->free_sec,
 760		__entry->free_seg,
 761		__entry->reserved_seg,
 762		__entry->prefree_seg)
 763);
 764
 765TRACE_EVENT(f2fs_gc_end,
 766
 767	TP_PROTO(struct super_block *sb, int ret, int seg_freed,
 768			int sec_freed, long long dirty_nodes,
 769			long long dirty_dents, long long dirty_imeta,
 770			unsigned int free_sec, unsigned int free_seg,
 771			int reserved_seg, unsigned int prefree_seg),
 772
 773	TP_ARGS(sb, ret, seg_freed, sec_freed, dirty_nodes, dirty_dents,
 774		dirty_imeta, free_sec, free_seg, reserved_seg, prefree_seg),
 775
 776	TP_STRUCT__entry(
 777		__field(dev_t,		dev)
 778		__field(int,		ret)
 779		__field(int,		seg_freed)
 780		__field(int,		sec_freed)
 781		__field(long long,	dirty_nodes)
 782		__field(long long,	dirty_dents)
 783		__field(long long,	dirty_imeta)
 784		__field(unsigned int,	free_sec)
 785		__field(unsigned int,	free_seg)
 786		__field(int,		reserved_seg)
 787		__field(unsigned int,	prefree_seg)
 788	),
 789
 790	TP_fast_assign(
 791		__entry->dev		= sb->s_dev;
 792		__entry->ret		= ret;
 793		__entry->seg_freed	= seg_freed;
 794		__entry->sec_freed	= sec_freed;
 795		__entry->dirty_nodes	= dirty_nodes;
 796		__entry->dirty_dents	= dirty_dents;
 797		__entry->dirty_imeta	= dirty_imeta;
 798		__entry->free_sec	= free_sec;
 799		__entry->free_seg	= free_seg;
 800		__entry->reserved_seg	= reserved_seg;
 801		__entry->prefree_seg	= prefree_seg;
 802	),
 803
 804	TP_printk("dev = (%d,%d), ret = %d, seg_freed = %d, sec_freed = %d, "
 805		"nodes = %lld, dents = %lld, imeta = %lld, free_sec:%u, "
 806		"free_seg:%u, rsv_seg:%d, prefree_seg:%u",
 807		show_dev(__entry->dev),
 808		__entry->ret,
 809		__entry->seg_freed,
 810		__entry->sec_freed,
 811		__entry->dirty_nodes,
 812		__entry->dirty_dents,
 813		__entry->dirty_imeta,
 814		__entry->free_sec,
 815		__entry->free_seg,
 816		__entry->reserved_seg,
 817		__entry->prefree_seg)
 818);
 819
 820TRACE_EVENT(f2fs_get_victim,
 821
 822	TP_PROTO(struct super_block *sb, int type, int gc_type,
 823			struct victim_sel_policy *p, unsigned int pre_victim,
 824			unsigned int prefree, unsigned int free),
 825
 826	TP_ARGS(sb, type, gc_type, p, pre_victim, prefree, free),
 827
 828	TP_STRUCT__entry(
 829		__field(dev_t,	dev)
 830		__field(int,	type)
 831		__field(int,	gc_type)
 832		__field(int,	alloc_mode)
 833		__field(int,	gc_mode)
 834		__field(unsigned int,	victim)
 835		__field(unsigned int,	cost)
 836		__field(unsigned int,	ofs_unit)
 837		__field(unsigned int,	pre_victim)
 838		__field(unsigned int,	prefree)
 839		__field(unsigned int,	free)
 840	),
 841
 842	TP_fast_assign(
 843		__entry->dev		= sb->s_dev;
 844		__entry->type		= type;
 845		__entry->gc_type	= gc_type;
 846		__entry->alloc_mode	= p->alloc_mode;
 847		__entry->gc_mode	= p->gc_mode;
 848		__entry->victim		= p->min_segno;
 849		__entry->cost		= p->min_cost;
 850		__entry->ofs_unit	= p->ofs_unit;
 851		__entry->pre_victim	= pre_victim;
 852		__entry->prefree	= prefree;
 853		__entry->free		= free;
 854	),
 855
 856	TP_printk("dev = (%d,%d), type = %s, policy = (%s, %s, %s), "
 857		"victim = %u, cost = %u, ofs_unit = %u, "
 858		"pre_victim_secno = %d, prefree = %u, free = %u",
 859		show_dev(__entry->dev),
 860		show_data_type(__entry->type),
 861		show_gc_type(__entry->gc_type),
 862		show_alloc_mode(__entry->alloc_mode),
 863		show_victim_policy(__entry->gc_mode),
 864		__entry->victim,
 865		__entry->cost,
 866		__entry->ofs_unit,
 867		(int)__entry->pre_victim,
 868		__entry->prefree,
 869		__entry->free)
 870);
 871
 872TRACE_EVENT(f2fs_lookup_start,
 873
 874	TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags),
 875
 876	TP_ARGS(dir, dentry, flags),
 877
 878	TP_STRUCT__entry(
 879		__field(dev_t,	dev)
 880		__field(ino_t,	ino)
 881		__string(name,	dentry->d_name.name)
 882		__field(unsigned int, flags)
 883	),
 884
 885	TP_fast_assign(
 886		__entry->dev	= dir->i_sb->s_dev;
 887		__entry->ino	= dir->i_ino;
 888		__assign_str(name);
 889		__entry->flags	= flags;
 890	),
 891
 892	TP_printk("dev = (%d,%d), pino = %lu, name:%s, flags:%u",
 893		show_dev_ino(__entry),
 894		__get_str(name),
 895		__entry->flags)
 896);
 897
 898TRACE_EVENT(f2fs_lookup_end,
 899
 900	TP_PROTO(struct inode *dir, struct dentry *dentry, nid_t ino,
 901		int err),
 902
 903	TP_ARGS(dir, dentry, ino, err),
 904
 905	TP_STRUCT__entry(
 906		__field(dev_t,	dev)
 907		__field(ino_t,	ino)
 908		__string(name,	dentry->d_name.name)
 909		__field(nid_t,	cino)
 910		__field(int,	err)
 911	),
 912
 913	TP_fast_assign(
 914		__entry->dev	= dir->i_sb->s_dev;
 915		__entry->ino	= dir->i_ino;
 916		__assign_str(name);
 917		__entry->cino	= ino;
 918		__entry->err	= err;
 919	),
 920
 921	TP_printk("dev = (%d,%d), pino = %lu, name:%s, ino:%u, err:%d",
 922		show_dev_ino(__entry),
 923		__get_str(name),
 924		__entry->cino,
 925		__entry->err)
 926);
 927
 928TRACE_EVENT(f2fs_rename_start,
 929
 930	TP_PROTO(struct inode *old_dir, struct dentry *old_dentry,
 931			struct inode *new_dir, struct dentry *new_dentry,
 932			unsigned int flags),
 933
 934	TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, flags),
 935
 936	TP_STRUCT__entry(
 937		__field(dev_t,		dev)
 938		__field(ino_t,		ino)
 939		__string(old_name,	old_dentry->d_name.name)
 940		__field(ino_t,		new_pino)
 941		__string(new_name,	new_dentry->d_name.name)
 942		__field(unsigned int,	flags)
 943	),
 944
 945	TP_fast_assign(
 946		__entry->dev		= old_dir->i_sb->s_dev;
 947		__entry->ino		= old_dir->i_ino;
 948		__assign_str(old_name);
 949		__entry->new_pino	= new_dir->i_ino;
 950		__assign_str(new_name);
 951		__entry->flags		= flags;
 952	),
 953
 954	TP_printk("dev = (%d,%d), old_dir = %lu, old_name: %s, "
 955		"new_dir = %lu, new_name: %s, flags = %u",
 956		show_dev_ino(__entry),
 957		__get_str(old_name),
 958		__entry->new_pino,
 959		__get_str(new_name),
 960		__entry->flags)
 961);
 962
 963TRACE_EVENT(f2fs_rename_end,
 964
 965	TP_PROTO(struct dentry *old_dentry, struct dentry *new_dentry,
 966			unsigned int flags, int ret),
 967
 968	TP_ARGS(old_dentry, new_dentry, flags, ret),
 969
 970	TP_STRUCT__entry(
 971		__field(dev_t,		dev)
 972		__field(ino_t,		ino)
 973		__string(old_name,	old_dentry->d_name.name)
 974		__string(new_name,	new_dentry->d_name.name)
 975		__field(unsigned int,	flags)
 976		__field(int,		ret)
 977	),
 978
 979	TP_fast_assign(
 980		__entry->dev		= old_dentry->d_sb->s_dev;
 981		__entry->ino		= old_dentry->d_inode->i_ino;
 982		__assign_str(old_name);
 983		__assign_str(new_name);
 984		__entry->flags		= flags;
 985		__entry->ret		= ret;
 986	),
 987
 988	TP_printk("dev = (%d,%d), ino = %lu, old_name: %s, "
 989		"new_name: %s, flags = %u, ret = %d",
 990		show_dev_ino(__entry),
 991		__get_str(old_name),
 992		__get_str(new_name),
 993		__entry->flags,
 994		__entry->ret)
 995);
 996
 997TRACE_EVENT(f2fs_readdir,
 998
 999	TP_PROTO(struct inode *dir, loff_t start_pos, loff_t end_pos, int err),
1000
1001	TP_ARGS(dir, start_pos, end_pos, err),
1002
1003	TP_STRUCT__entry(
1004		__field(dev_t,	dev)
1005		__field(ino_t,	ino)
1006		__field(loff_t,	start)
1007		__field(loff_t,	end)
1008		__field(int,	err)
1009	),
1010
1011	TP_fast_assign(
1012		__entry->dev	= dir->i_sb->s_dev;
1013		__entry->ino	= dir->i_ino;
1014		__entry->start	= start_pos;
1015		__entry->end	= end_pos;
1016		__entry->err	= err;
1017	),
1018
1019	TP_printk("dev = (%d,%d), ino = %lu, start_pos:%llu, end_pos:%llu, err:%d",
1020		show_dev_ino(__entry),
1021		__entry->start,
1022		__entry->end,
1023		__entry->err)
1024);
1025
1026TRACE_EVENT(f2fs_fallocate,
1027
1028	TP_PROTO(struct inode *inode, int mode,
1029				loff_t offset, loff_t len, int ret),
1030
1031	TP_ARGS(inode, mode, offset, len, ret),
1032
1033	TP_STRUCT__entry(
1034		__field(dev_t,	dev)
1035		__field(ino_t,	ino)
1036		__field(int,	mode)
1037		__field(loff_t,	offset)
1038		__field(loff_t,	len)
1039		__field(loff_t, size)
1040		__field(blkcnt_t, blocks)
1041		__field(int,	ret)
1042	),
1043
1044	TP_fast_assign(
1045		__entry->dev	= inode->i_sb->s_dev;
1046		__entry->ino	= inode->i_ino;
1047		__entry->mode	= mode;
1048		__entry->offset	= offset;
1049		__entry->len	= len;
1050		__entry->size	= i_size_read(inode);
1051		__entry->blocks = inode->i_blocks;
1052		__entry->ret	= ret;
1053	),
1054
1055	TP_printk("dev = (%d,%d), ino = %lu, mode = %x, offset = %lld, "
1056		"len = %lld,  i_size = %lld, i_blocks = %llu, ret = %d",
1057		show_dev_ino(__entry),
1058		__entry->mode,
1059		(unsigned long long)__entry->offset,
1060		(unsigned long long)__entry->len,
1061		(unsigned long long)__entry->size,
1062		(unsigned long long)__entry->blocks,
1063		__entry->ret)
1064);
1065
1066TRACE_EVENT(f2fs_direct_IO_enter,
1067
1068	TP_PROTO(struct inode *inode, struct kiocb *iocb, long len, int rw),
1069
1070	TP_ARGS(inode, iocb, len, rw),
1071
1072	TP_STRUCT__entry(
1073		__field(dev_t,	dev)
1074		__field(ino_t,	ino)
1075		__field(loff_t,	ki_pos)
1076		__field(int,	ki_flags)
1077		__field(u16,	ki_ioprio)
1078		__field(unsigned long,	len)
1079		__field(int,	rw)
1080	),
1081
1082	TP_fast_assign(
1083		__entry->dev		= inode->i_sb->s_dev;
1084		__entry->ino		= inode->i_ino;
1085		__entry->ki_pos		= iocb->ki_pos;
1086		__entry->ki_flags	= iocb->ki_flags;
1087		__entry->ki_ioprio	= iocb->ki_ioprio;
1088		__entry->len		= len;
1089		__entry->rw		= rw;
1090	),
1091
1092	TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu ki_flags = %x ki_ioprio = %x rw = %d",
1093		show_dev_ino(__entry),
1094		__entry->ki_pos,
1095		__entry->len,
1096		__entry->ki_flags,
1097		__entry->ki_ioprio,
1098		__entry->rw)
1099);
1100
1101TRACE_EVENT(f2fs_direct_IO_exit,
1102
1103	TP_PROTO(struct inode *inode, loff_t offset, unsigned long len,
1104		 int rw, int ret),
1105
1106	TP_ARGS(inode, offset, len, rw, ret),
1107
1108	TP_STRUCT__entry(
1109		__field(dev_t,	dev)
1110		__field(ino_t,	ino)
1111		__field(loff_t,	pos)
1112		__field(unsigned long,	len)
1113		__field(int,	rw)
1114		__field(int,	ret)
1115	),
1116
1117	TP_fast_assign(
1118		__entry->dev	= inode->i_sb->s_dev;
1119		__entry->ino	= inode->i_ino;
1120		__entry->pos	= offset;
1121		__entry->len	= len;
1122		__entry->rw	= rw;
1123		__entry->ret	= ret;
1124	),
1125
1126	TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu "
1127		"rw = %d ret = %d",
1128		show_dev_ino(__entry),
1129		__entry->pos,
1130		__entry->len,
1131		__entry->rw,
1132		__entry->ret)
1133);
1134
1135TRACE_EVENT(f2fs_reserve_new_blocks,
1136
1137	TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs_in_node,
1138							blkcnt_t count),
1139
1140	TP_ARGS(inode, nid, ofs_in_node, count),
1141
1142	TP_STRUCT__entry(
1143		__field(dev_t,	dev)
1144		__field(nid_t, nid)
1145		__field(unsigned int, ofs_in_node)
1146		__field(blkcnt_t, count)
1147	),
1148
1149	TP_fast_assign(
1150		__entry->dev	= inode->i_sb->s_dev;
1151		__entry->nid	= nid;
1152		__entry->ofs_in_node = ofs_in_node;
1153		__entry->count = count;
1154	),
1155
1156	TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u, count = %llu",
1157		show_dev(__entry->dev),
1158		(unsigned int)__entry->nid,
1159		__entry->ofs_in_node,
1160		(unsigned long long)__entry->count)
1161);
1162
1163DECLARE_EVENT_CLASS(f2fs__submit_folio_bio,
1164
1165	TP_PROTO(struct folio *folio, struct f2fs_io_info *fio),
1166
1167	TP_ARGS(folio, fio),
1168
1169	TP_STRUCT__entry(
1170		__field(dev_t, dev)
1171		__field(ino_t, ino)
1172		__field(pgoff_t, index)
1173		__field(block_t, old_blkaddr)
1174		__field(block_t, new_blkaddr)
1175		__field(enum req_op, op)
1176		__field(blk_opf_t, op_flags)
1177		__field(int, temp)
1178		__field(int, type)
1179	),
1180
1181	TP_fast_assign(
1182		__entry->dev		= folio->mapping->host->i_sb->s_dev;
1183		__entry->ino		= folio->mapping->host->i_ino;
1184		__entry->index		= folio->index;
1185		__entry->old_blkaddr	= fio->old_blkaddr;
1186		__entry->new_blkaddr	= fio->new_blkaddr;
1187		__entry->op		= fio->op;
1188		__entry->op_flags	= fio->op_flags;
1189		__entry->temp		= fio->temp;
1190		__entry->type		= fio->type;
1191	),
1192
1193	TP_printk("dev = (%d,%d), ino = %lu, folio_index = 0x%lx, "
1194		"oldaddr = 0x%llx, newaddr = 0x%llx, rw = %s(%s), type = %s_%s",
1195		show_dev_ino(__entry),
1196		(unsigned long)__entry->index,
1197		(unsigned long long)__entry->old_blkaddr,
1198		(unsigned long long)__entry->new_blkaddr,
1199		show_bio_type(__entry->op, __entry->op_flags),
1200		show_block_temp(__entry->temp),
1201		show_block_type(__entry->type))
1202);
1203
1204DEFINE_EVENT_CONDITION(f2fs__submit_folio_bio, f2fs_submit_folio_bio,
1205
1206	TP_PROTO(struct folio *folio, struct f2fs_io_info *fio),
1207
1208	TP_ARGS(folio, fio),
1209
1210	TP_CONDITION(folio->mapping)
1211);
1212
1213DEFINE_EVENT_CONDITION(f2fs__submit_folio_bio, f2fs_submit_folio_write,
1214
1215	TP_PROTO(struct folio *folio, struct f2fs_io_info *fio),
1216
1217	TP_ARGS(folio, fio),
1218
1219	TP_CONDITION(folio->mapping)
1220);
1221
1222DECLARE_EVENT_CLASS(f2fs__bio,
1223
1224	TP_PROTO(struct super_block *sb, int type, struct bio *bio),
1225
1226	TP_ARGS(sb, type, bio),
1227
1228	TP_STRUCT__entry(
1229		__field(dev_t,	dev)
1230		__field(dev_t,	target)
1231		__field(enum req_op,	op)
1232		__field(blk_opf_t,	op_flags)
1233		__field(int,	type)
1234		__field(sector_t,	sector)
1235		__field(unsigned int,	size)
1236	),
1237
1238	TP_fast_assign(
1239		__entry->dev		= sb->s_dev;
1240		__entry->target		= bio_dev(bio);
1241		__entry->op		= bio_op(bio);
1242		__entry->op_flags	= bio->bi_opf;
1243		__entry->type		= type;
1244		__entry->sector		= bio->bi_iter.bi_sector;
1245		__entry->size		= bio->bi_iter.bi_size;
1246	),
1247
1248	TP_printk("dev = (%d,%d)/(%d,%d), rw = %s(%s), %s, sector = %lld, size = %u",
1249		show_dev(__entry->target),
1250		show_dev(__entry->dev),
1251		show_bio_type(__entry->op, __entry->op_flags),
1252		show_block_type(__entry->type),
1253		(unsigned long long)__entry->sector,
1254		__entry->size)
1255);
1256
1257DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_prepare_write_bio,
1258
1259	TP_PROTO(struct super_block *sb, int type, struct bio *bio),
1260
1261	TP_ARGS(sb, type, bio),
1262
1263	TP_CONDITION(bio)
1264);
1265
1266DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_prepare_read_bio,
1267
1268	TP_PROTO(struct super_block *sb, int type, struct bio *bio),
1269
1270	TP_ARGS(sb, type, bio),
1271
1272	TP_CONDITION(bio)
1273);
1274
1275DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_submit_read_bio,
1276
1277	TP_PROTO(struct super_block *sb, int type, struct bio *bio),
1278
1279	TP_ARGS(sb, type, bio),
1280
1281	TP_CONDITION(bio)
1282);
1283
1284DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_submit_write_bio,
1285
1286	TP_PROTO(struct super_block *sb, int type, struct bio *bio),
1287
1288	TP_ARGS(sb, type, bio),
1289
1290	TP_CONDITION(bio)
1291);
1292
1293TRACE_EVENT(f2fs_write_begin,
1294
1295	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
1296
1297	TP_ARGS(inode, pos, len),
1298
1299	TP_STRUCT__entry(
1300		__field(dev_t,	dev)
1301		__field(ino_t,	ino)
1302		__field(loff_t,	pos)
1303		__field(unsigned int, len)
1304	),
1305
1306	TP_fast_assign(
1307		__entry->dev	= inode->i_sb->s_dev;
1308		__entry->ino	= inode->i_ino;
1309		__entry->pos	= pos;
1310		__entry->len	= len;
1311	),
1312
1313	TP_printk("dev = (%d,%d), ino = %lu, pos = %llu, len = %u",
1314		show_dev_ino(__entry),
1315		(unsigned long long)__entry->pos,
1316		__entry->len)
1317);
1318
1319TRACE_EVENT(f2fs_write_end,
1320
1321	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
1322				unsigned int copied),
1323
1324	TP_ARGS(inode, pos, len, copied),
1325
1326	TP_STRUCT__entry(
1327		__field(dev_t,	dev)
1328		__field(ino_t,	ino)
1329		__field(loff_t,	pos)
1330		__field(unsigned int, len)
1331		__field(unsigned int, copied)
1332	),
1333
1334	TP_fast_assign(
1335		__entry->dev	= inode->i_sb->s_dev;
1336		__entry->ino	= inode->i_ino;
1337		__entry->pos	= pos;
1338		__entry->len	= len;
1339		__entry->copied	= copied;
1340	),
1341
1342	TP_printk("dev = (%d,%d), ino = %lu, pos = %llu, len = %u, copied = %u",
1343		show_dev_ino(__entry),
1344		(unsigned long long)__entry->pos,
1345		__entry->len,
1346		__entry->copied)
1347);
1348
1349DECLARE_EVENT_CLASS(f2fs__folio,
1350
1351	TP_PROTO(struct folio *folio, int type),
1352
1353	TP_ARGS(folio, type),
1354
1355	TP_STRUCT__entry(
1356		__field(dev_t,	dev)
1357		__field(ino_t,	ino)
1358		__field(int, type)
1359		__field(int, dir)
1360		__field(pgoff_t, index)
1361		__field(int, dirty)
1362		__field(int, uptodate)
1363	),
1364
1365	TP_fast_assign(
1366		__entry->dev	= folio->mapping->host->i_sb->s_dev;
1367		__entry->ino	= folio->mapping->host->i_ino;
1368		__entry->type	= type;
1369		__entry->dir	= S_ISDIR(folio->mapping->host->i_mode);
1370		__entry->index	= folio->index;
1371		__entry->dirty	= folio_test_dirty(folio);
1372		__entry->uptodate = folio_test_uptodate(folio);
1373	),
1374
1375	TP_printk("dev = (%d,%d), ino = %lu, %s, %s, index = %lu, "
1376		"dirty = %d, uptodate = %d",
1377		show_dev_ino(__entry),
1378		show_block_type(__entry->type),
1379		show_file_type(__entry->dir),
1380		(unsigned long)__entry->index,
1381		__entry->dirty,
1382		__entry->uptodate)
1383);
1384
1385DEFINE_EVENT(f2fs__folio, f2fs_writepage,
1386
1387	TP_PROTO(struct folio *folio, int type),
1388
1389	TP_ARGS(folio, type)
1390);
1391
1392DEFINE_EVENT(f2fs__folio, f2fs_do_write_data_page,
1393
1394	TP_PROTO(struct folio *folio, int type),
1395
1396	TP_ARGS(folio, type)
1397);
1398
1399DEFINE_EVENT(f2fs__folio, f2fs_readpage,
1400
1401	TP_PROTO(struct folio *folio, int type),
1402
1403	TP_ARGS(folio, type)
1404);
1405
1406DEFINE_EVENT(f2fs__folio, f2fs_set_page_dirty,
1407
1408	TP_PROTO(struct folio *folio, int type),
1409
1410	TP_ARGS(folio, type)
1411);
1412
1413TRACE_EVENT(f2fs_replace_atomic_write_block,
1414
1415	TP_PROTO(struct inode *inode, struct inode *cow_inode, pgoff_t index,
1416			block_t old_addr, block_t new_addr, bool recovery),
1417
1418	TP_ARGS(inode, cow_inode, index, old_addr, new_addr, recovery),
1419
1420	TP_STRUCT__entry(
1421		__field(dev_t,	dev)
1422		__field(ino_t,	ino)
1423		__field(ino_t,	cow_ino)
1424		__field(pgoff_t, index)
1425		__field(block_t, old_addr)
1426		__field(block_t, new_addr)
1427		__field(bool, recovery)
1428	),
1429
1430	TP_fast_assign(
1431		__entry->dev		= inode->i_sb->s_dev;
1432		__entry->ino		= inode->i_ino;
1433		__entry->cow_ino	= cow_inode->i_ino;
1434		__entry->index		= index;
1435		__entry->old_addr	= old_addr;
1436		__entry->new_addr	= new_addr;
1437		__entry->recovery	= recovery;
1438	),
1439
1440	TP_printk("dev = (%d,%d), ino = %lu, cow_ino = %lu, index = %lu, "
1441			"old_addr = 0x%llx, new_addr = 0x%llx, recovery = %d",
1442		show_dev_ino(__entry),
1443		__entry->cow_ino,
1444		(unsigned long)__entry->index,
1445		(unsigned long long)__entry->old_addr,
1446		(unsigned long long)__entry->new_addr,
1447		__entry->recovery)
1448);
1449
1450DECLARE_EVENT_CLASS(f2fs_mmap,
1451
1452	TP_PROTO(struct inode *inode, pgoff_t index,
1453			vm_flags_t flags, vm_fault_t ret),
1454
1455	TP_ARGS(inode, index, flags, ret),
1456
1457	TP_STRUCT__entry(
1458		__field(dev_t,	dev)
1459		__field(ino_t,	ino)
1460		__field(pgoff_t, index)
1461		__field(vm_flags_t, flags)
1462		__field(vm_fault_t, ret)
1463	),
1464
1465	TP_fast_assign(
1466		__entry->dev	= inode->i_sb->s_dev;
1467		__entry->ino	= inode->i_ino;
1468		__entry->index	= index;
1469		__entry->flags	= flags;
1470		__entry->ret	= ret;
1471	),
1472
1473	TP_printk("dev = (%d,%d), ino = %lu, index = %lu, flags: %s, ret: %s",
1474		show_dev_ino(__entry),
1475		(unsigned long)__entry->index,
1476		__print_flags(__entry->flags, "|", FAULT_FLAG_TRACE),
1477		__print_flags(__entry->ret, "|", VM_FAULT_RESULT_TRACE))
1478);
1479
1480DEFINE_EVENT(f2fs_mmap, f2fs_filemap_fault,
1481
1482	TP_PROTO(struct inode *inode, pgoff_t index,
1483			vm_flags_t flags, vm_fault_t ret),
1484
1485	TP_ARGS(inode, index, flags, ret)
1486);
1487
1488DEFINE_EVENT(f2fs_mmap, f2fs_vm_page_mkwrite,
1489
1490	TP_PROTO(struct inode *inode, pgoff_t index,
1491			vm_flags_t flags, vm_fault_t ret),
1492
1493	TP_ARGS(inode, index, flags, ret)
1494);
1495
1496TRACE_EVENT(f2fs_writepages,
1497
1498	TP_PROTO(struct inode *inode, struct writeback_control *wbc, int type),
1499
1500	TP_ARGS(inode, wbc, type),
1501
1502	TP_STRUCT__entry(
1503		__field(dev_t,	dev)
1504		__field(ino_t,	ino)
1505		__field(int,	type)
1506		__field(int,	dir)
1507		__field(long,	nr_to_write)
1508		__field(long,	pages_skipped)
1509		__field(loff_t,	range_start)
1510		__field(loff_t,	range_end)
1511		__field(pgoff_t, writeback_index)
1512		__field(int,	sync_mode)
1513		__field(char,	for_kupdate)
1514		__field(char,	for_background)
1515		__field(char,	tagged_writepages)
1516		__field(char,	range_cyclic)
1517		__field(char,	for_sync)
1518	),
1519
1520	TP_fast_assign(
1521		__entry->dev		= inode->i_sb->s_dev;
1522		__entry->ino		= inode->i_ino;
1523		__entry->type		= type;
1524		__entry->dir		= S_ISDIR(inode->i_mode);
1525		__entry->nr_to_write	= wbc->nr_to_write;
1526		__entry->pages_skipped	= wbc->pages_skipped;
1527		__entry->range_start	= wbc->range_start;
1528		__entry->range_end	= wbc->range_end;
1529		__entry->writeback_index = inode->i_mapping->writeback_index;
1530		__entry->sync_mode	= wbc->sync_mode;
1531		__entry->for_kupdate	= wbc->for_kupdate;
1532		__entry->for_background	= wbc->for_background;
1533		__entry->tagged_writepages	= wbc->tagged_writepages;
1534		__entry->range_cyclic	= wbc->range_cyclic;
1535		__entry->for_sync	= wbc->for_sync;
1536	),
1537
1538	TP_printk("dev = (%d,%d), ino = %lu, %s, %s, nr_to_write %ld, "
1539		"skipped %ld, start %lld, end %lld, wb_idx %lu, sync_mode %d, "
1540		"kupdate %u background %u tagged %u cyclic %u sync %u",
1541		show_dev_ino(__entry),
1542		show_block_type(__entry->type),
1543		show_file_type(__entry->dir),
1544		__entry->nr_to_write,
1545		__entry->pages_skipped,
1546		__entry->range_start,
1547		__entry->range_end,
1548		(unsigned long)__entry->writeback_index,
1549		__entry->sync_mode,
1550		__entry->for_kupdate,
1551		__entry->for_background,
1552		__entry->tagged_writepages,
1553		__entry->range_cyclic,
1554		__entry->for_sync)
1555);
1556
1557TRACE_EVENT(f2fs_readpages,
1558
1559	TP_PROTO(struct inode *inode, pgoff_t start, unsigned int nrpage),
1560
1561	TP_ARGS(inode, start, nrpage),
1562
1563	TP_STRUCT__entry(
1564		__field(dev_t,	dev)
1565		__field(ino_t,	ino)
1566		__field(pgoff_t,	start)
1567		__field(unsigned int,	nrpage)
1568	),
1569
1570	TP_fast_assign(
1571		__entry->dev	= inode->i_sb->s_dev;
1572		__entry->ino	= inode->i_ino;
1573		__entry->start	= start;
1574		__entry->nrpage	= nrpage;
1575	),
1576
1577	TP_printk("dev = (%d,%d), ino = %lu, start = %lu nrpage = %u",
1578		show_dev_ino(__entry),
1579		(unsigned long)__entry->start,
1580		__entry->nrpage)
1581);
1582
1583TRACE_EVENT(f2fs_write_checkpoint,
1584
1585	TP_PROTO(struct super_block *sb, int reason, u16 phase),
1586
1587	TP_ARGS(sb, reason, phase),
1588
1589	TP_STRUCT__entry(
1590		__field(dev_t,	dev)
1591		__field(int,	reason)
1592		__field(u16, phase)
1593	),
1594
1595	TP_fast_assign(
1596		__entry->dev		= sb->s_dev;
1597		__entry->reason		= reason;
1598		__entry->phase		= phase;
1599	),
1600
1601	TP_printk("dev = (%d,%d), checkpoint for %s, state = %s",
1602		show_dev(__entry->dev),
1603		show_cpreason(__entry->reason),
1604		show_cp_phase(__entry->phase))
1605);
1606
1607DECLARE_EVENT_CLASS(f2fs_discard,
1608
1609	TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
1610
1611	TP_ARGS(dev, blkstart, blklen),
1612
1613	TP_STRUCT__entry(
1614		__field(dev_t,	dev)
1615		__field(block_t, blkstart)
1616		__field(block_t, blklen)
1617	),
1618
1619	TP_fast_assign(
1620		__entry->dev	= dev->bd_dev;
1621		__entry->blkstart = blkstart;
1622		__entry->blklen = blklen;
1623	),
1624
1625	TP_printk("dev = (%d,%d), blkstart = 0x%llx, blklen = 0x%llx",
1626		show_dev(__entry->dev),
1627		(unsigned long long)__entry->blkstart,
1628		(unsigned long long)__entry->blklen)
1629);
1630
1631DEFINE_EVENT(f2fs_discard, f2fs_queue_discard,
1632
1633	TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
1634
1635	TP_ARGS(dev, blkstart, blklen)
1636);
1637
1638DEFINE_EVENT(f2fs_discard, f2fs_issue_discard,
1639
1640	TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
1641
1642	TP_ARGS(dev, blkstart, blklen)
1643);
1644
1645DEFINE_EVENT(f2fs_discard, f2fs_remove_discard,
1646
1647	TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
1648
1649	TP_ARGS(dev, blkstart, blklen)
1650);
1651
1652DECLARE_EVENT_CLASS(f2fs_reset_zone,
1653
1654	TP_PROTO(struct block_device *dev, block_t blkstart),
1655
1656	TP_ARGS(dev, blkstart),
1657
1658	TP_STRUCT__entry(
1659		__field(dev_t,	dev)
1660		__field(block_t, blkstart)
1661	),
1662
1663	TP_fast_assign(
1664		__entry->dev	= dev->bd_dev;
1665		__entry->blkstart = blkstart;
1666	),
1667
1668	TP_printk("dev = (%d,%d), zone at block = 0x%llx",
1669		show_dev(__entry->dev),
1670		(unsigned long long)__entry->blkstart)
1671);
1672
1673DEFINE_EVENT(f2fs_reset_zone, f2fs_queue_reset_zone,
1674
1675	TP_PROTO(struct block_device *dev, block_t blkstart),
1676
1677	TP_ARGS(dev, blkstart)
1678);
1679
1680DEFINE_EVENT(f2fs_reset_zone, f2fs_issue_reset_zone,
1681
1682	TP_PROTO(struct block_device *dev, block_t blkstart),
1683
1684	TP_ARGS(dev, blkstart)
1685);
1686
1687TRACE_EVENT(f2fs_issue_flush,
1688
1689	TP_PROTO(struct block_device *dev, unsigned int nobarrier,
1690				unsigned int flush_merge, int ret),
1691
1692	TP_ARGS(dev, nobarrier, flush_merge, ret),
1693
1694	TP_STRUCT__entry(
1695		__field(dev_t,	dev)
1696		__field(unsigned int, nobarrier)
1697		__field(unsigned int, flush_merge)
1698		__field(int,  ret)
1699	),
1700
1701	TP_fast_assign(
1702		__entry->dev	= dev->bd_dev;
1703		__entry->nobarrier = nobarrier;
1704		__entry->flush_merge = flush_merge;
1705		__entry->ret = ret;
1706	),
1707
1708	TP_printk("dev = (%d,%d), %s %s, ret = %d",
1709		show_dev(__entry->dev),
1710		__entry->nobarrier ? "skip (nobarrier)" : "issue",
1711		__entry->flush_merge ? " with flush_merge" : "",
1712		__entry->ret)
1713);
1714
1715TRACE_EVENT(f2fs_lookup_extent_tree_start,
1716
1717	TP_PROTO(struct inode *inode, unsigned int pgofs, enum extent_type type),
1718
1719	TP_ARGS(inode, pgofs, type),
1720
1721	TP_STRUCT__entry(
1722		__field(dev_t,	dev)
1723		__field(ino_t,	ino)
1724		__field(unsigned int, pgofs)
1725		__field(enum extent_type, type)
1726	),
1727
1728	TP_fast_assign(
1729		__entry->dev = inode->i_sb->s_dev;
1730		__entry->ino = inode->i_ino;
1731		__entry->pgofs = pgofs;
1732		__entry->type = type;
1733	),
1734
1735	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, type = %s",
1736		show_dev_ino(__entry),
1737		__entry->pgofs,
1738		show_extent_type(__entry->type))
1739);
1740
1741TRACE_EVENT_CONDITION(f2fs_lookup_read_extent_tree_end,
1742
1743	TP_PROTO(struct inode *inode, unsigned int pgofs,
1744						struct extent_info *ei),
1745
1746	TP_ARGS(inode, pgofs, ei),
1747
1748	TP_CONDITION(ei),
1749
1750	TP_STRUCT__entry(
1751		__field(dev_t,	dev)
1752		__field(ino_t,	ino)
1753		__field(unsigned int, pgofs)
1754		__field(unsigned int, fofs)
1755		__field(unsigned int, len)
1756		__field(u32, blk)
1757	),
1758
1759	TP_fast_assign(
1760		__entry->dev = inode->i_sb->s_dev;
1761		__entry->ino = inode->i_ino;
1762		__entry->pgofs = pgofs;
1763		__entry->fofs = ei->fofs;
1764		__entry->len = ei->len;
1765		__entry->blk = ei->blk;
1766	),
1767
1768	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, "
1769		"read_ext_info(fofs: %u, len: %u, blk: %u)",
1770		show_dev_ino(__entry),
1771		__entry->pgofs,
1772		__entry->fofs,
1773		__entry->len,
1774		__entry->blk)
1775);
1776
1777TRACE_EVENT_CONDITION(f2fs_lookup_age_extent_tree_end,
1778
1779	TP_PROTO(struct inode *inode, unsigned int pgofs,
1780						struct extent_info *ei),
1781
1782	TP_ARGS(inode, pgofs, ei),
1783
1784	TP_CONDITION(ei),
1785
1786	TP_STRUCT__entry(
1787		__field(dev_t,	dev)
1788		__field(ino_t,	ino)
1789		__field(unsigned int, pgofs)
1790		__field(unsigned int, fofs)
1791		__field(unsigned int, len)
1792		__field(unsigned long long, age)
1793		__field(unsigned long long, blocks)
1794	),
1795
1796	TP_fast_assign(
1797		__entry->dev = inode->i_sb->s_dev;
1798		__entry->ino = inode->i_ino;
1799		__entry->pgofs = pgofs;
1800		__entry->fofs = ei->fofs;
1801		__entry->len = ei->len;
1802		__entry->age = ei->age;
1803		__entry->blocks = ei->last_blocks;
1804	),
1805
1806	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, "
1807		"age_ext_info(fofs: %u, len: %u, age: %llu, blocks: %llu)",
1808		show_dev_ino(__entry),
1809		__entry->pgofs,
1810		__entry->fofs,
1811		__entry->len,
1812		__entry->age,
1813		__entry->blocks)
1814);
1815
1816TRACE_EVENT(f2fs_update_read_extent_tree_range,
1817
1818	TP_PROTO(struct inode *inode, unsigned int pgofs, unsigned int len,
1819						block_t blkaddr,
1820						unsigned int c_len),
1821
1822	TP_ARGS(inode, pgofs, len, blkaddr, c_len),
1823
1824	TP_STRUCT__entry(
1825		__field(dev_t,	dev)
1826		__field(ino_t,	ino)
1827		__field(unsigned int, pgofs)
1828		__field(u32, blk)
1829		__field(unsigned int, len)
1830		__field(unsigned int, c_len)
1831	),
1832
1833	TP_fast_assign(
1834		__entry->dev = inode->i_sb->s_dev;
1835		__entry->ino = inode->i_ino;
1836		__entry->pgofs = pgofs;
1837		__entry->len = len;
1838		__entry->blk = blkaddr;
1839		__entry->c_len = c_len;
1840	),
1841
1842	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, "
1843				"len = %u, blkaddr = %u, c_len = %u",
1844		show_dev_ino(__entry),
1845		__entry->pgofs,
1846		__entry->len,
1847		__entry->blk,
1848		__entry->c_len)
1849);
1850
1851TRACE_EVENT(f2fs_update_age_extent_tree_range,
1852
1853	TP_PROTO(struct inode *inode, unsigned int pgofs, unsigned int len,
1854					unsigned long long age,
1855					unsigned long long last_blks),
1856
1857	TP_ARGS(inode, pgofs, len, age, last_blks),
1858
1859	TP_STRUCT__entry(
1860		__field(dev_t,	dev)
1861		__field(ino_t,	ino)
1862		__field(unsigned int, pgofs)
1863		__field(unsigned int, len)
1864		__field(unsigned long long, age)
1865		__field(unsigned long long, blocks)
1866	),
1867
1868	TP_fast_assign(
1869		__entry->dev = inode->i_sb->s_dev;
1870		__entry->ino = inode->i_ino;
1871		__entry->pgofs = pgofs;
1872		__entry->len = len;
1873		__entry->age = age;
1874		__entry->blocks = last_blks;
1875	),
1876
1877	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, "
1878				"len = %u, age = %llu, blocks = %llu",
1879		show_dev_ino(__entry),
1880		__entry->pgofs,
1881		__entry->len,
1882		__entry->age,
1883		__entry->blocks)
1884);
1885
1886TRACE_EVENT(f2fs_shrink_extent_tree,
1887
1888	TP_PROTO(struct f2fs_sb_info *sbi, unsigned int node_cnt,
1889			unsigned int tree_cnt, enum extent_type type),
1890
1891	TP_ARGS(sbi, node_cnt, tree_cnt, type),
1892
1893	TP_STRUCT__entry(
1894		__field(dev_t,	dev)
1895		__field(unsigned int, node_cnt)
1896		__field(unsigned int, tree_cnt)
1897		__field(enum extent_type, type)
1898	),
1899
1900	TP_fast_assign(
1901		__entry->dev = sbi->sb->s_dev;
1902		__entry->node_cnt = node_cnt;
1903		__entry->tree_cnt = tree_cnt;
1904		__entry->type = type;
1905	),
1906
1907	TP_printk("dev = (%d,%d), shrunk: node_cnt = %u, tree_cnt = %u, type = %s",
1908		show_dev(__entry->dev),
1909		__entry->node_cnt,
1910		__entry->tree_cnt,
1911		show_extent_type(__entry->type))
1912);
1913
1914TRACE_EVENT(f2fs_destroy_extent_tree,
1915
1916	TP_PROTO(struct inode *inode, unsigned int node_cnt,
1917				enum extent_type type),
1918
1919	TP_ARGS(inode, node_cnt, type),
1920
1921	TP_STRUCT__entry(
1922		__field(dev_t,	dev)
1923		__field(ino_t,	ino)
1924		__field(unsigned int, node_cnt)
1925		__field(enum extent_type, type)
1926	),
1927
1928	TP_fast_assign(
1929		__entry->dev = inode->i_sb->s_dev;
1930		__entry->ino = inode->i_ino;
1931		__entry->node_cnt = node_cnt;
1932		__entry->type = type;
1933	),
1934
1935	TP_printk("dev = (%d,%d), ino = %lu, destroyed: node_cnt = %u, type = %s",
1936		show_dev_ino(__entry),
1937		__entry->node_cnt,
1938		show_extent_type(__entry->type))
1939);
1940
1941DECLARE_EVENT_CLASS(f2fs_sync_dirty_inodes,
1942
1943	TP_PROTO(struct super_block *sb, int type, s64 count),
1944
1945	TP_ARGS(sb, type, count),
1946
1947	TP_STRUCT__entry(
1948		__field(dev_t, dev)
1949		__field(int, type)
1950		__field(s64, count)
1951	),
1952
1953	TP_fast_assign(
1954		__entry->dev	= sb->s_dev;
1955		__entry->type	= type;
1956		__entry->count	= count;
1957	),
1958
1959	TP_printk("dev = (%d,%d), %s, dirty count = %lld",
1960		show_dev(__entry->dev),
1961		show_file_type(__entry->type),
1962		__entry->count)
1963);
1964
1965DEFINE_EVENT(f2fs_sync_dirty_inodes, f2fs_sync_dirty_inodes_enter,
1966
1967	TP_PROTO(struct super_block *sb, int type, s64 count),
1968
1969	TP_ARGS(sb, type, count)
1970);
1971
1972DEFINE_EVENT(f2fs_sync_dirty_inodes, f2fs_sync_dirty_inodes_exit,
1973
1974	TP_PROTO(struct super_block *sb, int type, s64 count),
1975
1976	TP_ARGS(sb, type, count)
1977);
1978
1979TRACE_EVENT(f2fs_shutdown,
1980
1981	TP_PROTO(struct f2fs_sb_info *sbi, unsigned int mode, int ret),
1982
1983	TP_ARGS(sbi, mode, ret),
1984
1985	TP_STRUCT__entry(
1986		__field(dev_t,	dev)
1987		__field(unsigned int, mode)
1988		__field(int, ret)
1989	),
1990
1991	TP_fast_assign(
1992		__entry->dev = sbi->sb->s_dev;
1993		__entry->mode = mode;
1994		__entry->ret = ret;
1995	),
1996
1997	TP_printk("dev = (%d,%d), mode: %s, ret:%d",
1998		show_dev(__entry->dev),
1999		show_shutdown_mode(__entry->mode),
2000		__entry->ret)
2001);
2002
2003DECLARE_EVENT_CLASS(f2fs_zip_start,
2004
2005	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
2006			unsigned int cluster_size, unsigned char algtype),
2007
2008	TP_ARGS(inode, cluster_idx, cluster_size, algtype),
2009
2010	TP_STRUCT__entry(
2011		__field(dev_t,	dev)
2012		__field(ino_t,	ino)
2013		__field(pgoff_t, idx)
2014		__field(unsigned int, size)
2015		__field(unsigned int, algtype)
2016	),
2017
2018	TP_fast_assign(
2019		__entry->dev = inode->i_sb->s_dev;
2020		__entry->ino = inode->i_ino;
2021		__entry->idx = cluster_idx;
2022		__entry->size = cluster_size;
2023		__entry->algtype = algtype;
2024	),
2025
2026	TP_printk("dev = (%d,%d), ino = %lu, cluster_idx:%lu, "
2027		"cluster_size = %u, algorithm = %s",
2028		show_dev_ino(__entry),
2029		__entry->idx,
2030		__entry->size,
2031		show_compress_algorithm(__entry->algtype))
2032);
2033
2034DECLARE_EVENT_CLASS(f2fs_zip_end,
2035
2036	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
2037			unsigned int compressed_size, int ret),
2038
2039	TP_ARGS(inode, cluster_idx, compressed_size, ret),
2040
2041	TP_STRUCT__entry(
2042		__field(dev_t,	dev)
2043		__field(ino_t,	ino)
2044		__field(pgoff_t, idx)
2045		__field(unsigned int, size)
2046		__field(unsigned int, ret)
2047	),
2048
2049	TP_fast_assign(
2050		__entry->dev = inode->i_sb->s_dev;
2051		__entry->ino = inode->i_ino;
2052		__entry->idx = cluster_idx;
2053		__entry->size = compressed_size;
2054		__entry->ret = ret;
2055	),
2056
2057	TP_printk("dev = (%d,%d), ino = %lu, cluster_idx:%lu, "
2058		"compressed_size = %u, ret = %d",
2059		show_dev_ino(__entry),
2060		__entry->idx,
2061		__entry->size,
2062		__entry->ret)
2063);
2064
2065DEFINE_EVENT(f2fs_zip_start, f2fs_compress_pages_start,
2066
2067	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
2068		unsigned int cluster_size, unsigned char algtype),
2069
2070	TP_ARGS(inode, cluster_idx, cluster_size, algtype)
2071);
2072
2073DEFINE_EVENT(f2fs_zip_start, f2fs_decompress_pages_start,
2074
2075	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
2076		unsigned int cluster_size, unsigned char algtype),
2077
2078	TP_ARGS(inode, cluster_idx, cluster_size, algtype)
2079);
2080
2081DEFINE_EVENT(f2fs_zip_end, f2fs_compress_pages_end,
2082
2083	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
2084			unsigned int compressed_size, int ret),
2085
2086	TP_ARGS(inode, cluster_idx, compressed_size, ret)
2087);
2088
2089DEFINE_EVENT(f2fs_zip_end, f2fs_decompress_pages_end,
2090
2091	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
2092			unsigned int compressed_size, int ret),
2093
2094	TP_ARGS(inode, cluster_idx, compressed_size, ret)
2095);
2096
2097#ifdef CONFIG_F2FS_IOSTAT
2098TRACE_EVENT(f2fs_iostat,
2099
2100	TP_PROTO(struct f2fs_sb_info *sbi, unsigned long long *iostat),
2101
2102	TP_ARGS(sbi, iostat),
2103
2104	TP_STRUCT__entry(
2105		__field(dev_t,	dev)
2106		__field(unsigned long long,	app_dio)
2107		__field(unsigned long long,	app_bio)
2108		__field(unsigned long long,	app_wio)
2109		__field(unsigned long long,	app_mio)
2110		__field(unsigned long long,	app_bcdio)
2111		__field(unsigned long long,	app_mcdio)
2112		__field(unsigned long long,	fs_dio)
2113		__field(unsigned long long,	fs_cdio)
2114		__field(unsigned long long,	fs_nio)
2115		__field(unsigned long long,	fs_mio)
2116		__field(unsigned long long,	fs_gc_dio)
2117		__field(unsigned long long,	fs_gc_nio)
2118		__field(unsigned long long,	fs_cp_dio)
2119		__field(unsigned long long,	fs_cp_nio)
2120		__field(unsigned long long,	fs_cp_mio)
2121		__field(unsigned long long,	app_drio)
2122		__field(unsigned long long,	app_brio)
2123		__field(unsigned long long,	app_rio)
2124		__field(unsigned long long,	app_mrio)
2125		__field(unsigned long long,	app_bcrio)
2126		__field(unsigned long long,	app_mcrio)
2127		__field(unsigned long long,	fs_drio)
2128		__field(unsigned long long,	fs_gdrio)
2129		__field(unsigned long long,	fs_cdrio)
2130		__field(unsigned long long,	fs_nrio)
2131		__field(unsigned long long,	fs_mrio)
2132		__field(unsigned long long,	fs_discard)
2133		__field(unsigned long long,	fs_reset_zone)
2134	),
2135
2136	TP_fast_assign(
2137		__entry->dev		= sbi->sb->s_dev;
2138		__entry->app_dio	= iostat[APP_DIRECT_IO];
2139		__entry->app_bio	= iostat[APP_BUFFERED_IO];
2140		__entry->app_wio	= iostat[APP_WRITE_IO];
2141		__entry->app_mio	= iostat[APP_MAPPED_IO];
2142		__entry->app_bcdio	= iostat[APP_BUFFERED_CDATA_IO];
2143		__entry->app_mcdio	= iostat[APP_MAPPED_CDATA_IO];
2144		__entry->fs_dio		= iostat[FS_DATA_IO];
2145		__entry->fs_cdio	= iostat[FS_CDATA_IO];
2146		__entry->fs_nio		= iostat[FS_NODE_IO];
2147		__entry->fs_mio		= iostat[FS_META_IO];
2148		__entry->fs_gc_dio	= iostat[FS_GC_DATA_IO];
2149		__entry->fs_gc_nio	= iostat[FS_GC_NODE_IO];
2150		__entry->fs_cp_dio	= iostat[FS_CP_DATA_IO];
2151		__entry->fs_cp_nio	= iostat[FS_CP_NODE_IO];
2152		__entry->fs_cp_mio	= iostat[FS_CP_META_IO];
2153		__entry->app_drio	= iostat[APP_DIRECT_READ_IO];
2154		__entry->app_brio	= iostat[APP_BUFFERED_READ_IO];
2155		__entry->app_rio	= iostat[APP_READ_IO];
2156		__entry->app_mrio	= iostat[APP_MAPPED_READ_IO];
2157		__entry->app_bcrio	= iostat[APP_BUFFERED_CDATA_READ_IO];
2158		__entry->app_mcrio	= iostat[APP_MAPPED_CDATA_READ_IO];
2159		__entry->fs_drio	= iostat[FS_DATA_READ_IO];
2160		__entry->fs_gdrio	= iostat[FS_GDATA_READ_IO];
2161		__entry->fs_cdrio	= iostat[FS_CDATA_READ_IO];
2162		__entry->fs_nrio	= iostat[FS_NODE_READ_IO];
2163		__entry->fs_mrio	= iostat[FS_META_READ_IO];
2164		__entry->fs_discard	= iostat[FS_DISCARD_IO];
2165		__entry->fs_reset_zone	= iostat[FS_ZONE_RESET_IO];
2166	),
2167
2168	TP_printk("dev = (%d,%d), "
2169		"app [write=%llu (direct=%llu, buffered=%llu), mapped=%llu, "
2170		"compr(buffered=%llu, mapped=%llu)], "
2171		"fs [data=%llu, cdata=%llu, node=%llu, meta=%llu, discard=%llu, "
2172		"reset_zone=%llu], "
2173		"gc [data=%llu, node=%llu], "
2174		"cp [data=%llu, node=%llu, meta=%llu], "
2175		"app [read=%llu (direct=%llu, buffered=%llu), mapped=%llu], "
2176		"compr(buffered=%llu, mapped=%llu)], "
2177		"fs [data=%llu, (gc_data=%llu, cdata=%llu), "
2178		"node=%llu, meta=%llu]",
2179		show_dev(__entry->dev), __entry->app_wio, __entry->app_dio,
2180		__entry->app_bio, __entry->app_mio, __entry->app_bcdio,
2181		__entry->app_mcdio, __entry->fs_dio, __entry->fs_cdio,
2182		__entry->fs_nio, __entry->fs_mio, __entry->fs_discard,
2183		__entry->fs_reset_zone,
2184		__entry->fs_gc_dio, __entry->fs_gc_nio, __entry->fs_cp_dio,
2185		__entry->fs_cp_nio, __entry->fs_cp_mio,
2186		__entry->app_rio, __entry->app_drio, __entry->app_brio,
2187		__entry->app_mrio, __entry->app_bcrio, __entry->app_mcrio,
2188		__entry->fs_drio, __entry->fs_gdrio,
2189		__entry->fs_cdrio, __entry->fs_nrio, __entry->fs_mrio)
2190);
2191
2192#ifndef __F2FS_IOSTAT_LATENCY_TYPE
2193#define __F2FS_IOSTAT_LATENCY_TYPE
2194struct f2fs_iostat_latency {
2195	unsigned int peak_lat;
2196	unsigned int avg_lat;
2197	unsigned int cnt;
2198};
2199#endif /* __F2FS_IOSTAT_LATENCY_TYPE */
2200
2201TRACE_EVENT(f2fs_iostat_latency,
2202
2203	TP_PROTO(struct f2fs_sb_info *sbi, struct f2fs_iostat_latency (*iostat_lat)[NR_PAGE_TYPE]),
2204
2205	TP_ARGS(sbi, iostat_lat),
2206
2207	TP_STRUCT__entry(
2208		__field(dev_t,	dev)
2209		__field(unsigned int,	d_rd_peak)
2210		__field(unsigned int,	d_rd_avg)
2211		__field(unsigned int,	d_rd_cnt)
2212		__field(unsigned int,	n_rd_peak)
2213		__field(unsigned int,	n_rd_avg)
2214		__field(unsigned int,	n_rd_cnt)
2215		__field(unsigned int,	m_rd_peak)
2216		__field(unsigned int,	m_rd_avg)
2217		__field(unsigned int,	m_rd_cnt)
2218		__field(unsigned int,	d_wr_s_peak)
2219		__field(unsigned int,	d_wr_s_avg)
2220		__field(unsigned int,	d_wr_s_cnt)
2221		__field(unsigned int,	n_wr_s_peak)
2222		__field(unsigned int,	n_wr_s_avg)
2223		__field(unsigned int,	n_wr_s_cnt)
2224		__field(unsigned int,	m_wr_s_peak)
2225		__field(unsigned int,	m_wr_s_avg)
2226		__field(unsigned int,	m_wr_s_cnt)
2227		__field(unsigned int,	d_wr_as_peak)
2228		__field(unsigned int,	d_wr_as_avg)
2229		__field(unsigned int,	d_wr_as_cnt)
2230		__field(unsigned int,	n_wr_as_peak)
2231		__field(unsigned int,	n_wr_as_avg)
2232		__field(unsigned int,	n_wr_as_cnt)
2233		__field(unsigned int,	m_wr_as_peak)
2234		__field(unsigned int,	m_wr_as_avg)
2235		__field(unsigned int,	m_wr_as_cnt)
2236	),
2237
2238	TP_fast_assign(
2239		__entry->dev		= sbi->sb->s_dev;
2240		__entry->d_rd_peak	= iostat_lat[READ_IO][DATA].peak_lat;
2241		__entry->d_rd_avg	= iostat_lat[READ_IO][DATA].avg_lat;
2242		__entry->d_rd_cnt	= iostat_lat[READ_IO][DATA].cnt;
2243		__entry->n_rd_peak	= iostat_lat[READ_IO][NODE].peak_lat;
2244		__entry->n_rd_avg	= iostat_lat[READ_IO][NODE].avg_lat;
2245		__entry->n_rd_cnt	= iostat_lat[READ_IO][NODE].cnt;
2246		__entry->m_rd_peak	= iostat_lat[READ_IO][META].peak_lat;
2247		__entry->m_rd_avg	= iostat_lat[READ_IO][META].avg_lat;
2248		__entry->m_rd_cnt	= iostat_lat[READ_IO][META].cnt;
2249		__entry->d_wr_s_peak	= iostat_lat[WRITE_SYNC_IO][DATA].peak_lat;
2250		__entry->d_wr_s_avg	= iostat_lat[WRITE_SYNC_IO][DATA].avg_lat;
2251		__entry->d_wr_s_cnt	= iostat_lat[WRITE_SYNC_IO][DATA].cnt;
2252		__entry->n_wr_s_peak	= iostat_lat[WRITE_SYNC_IO][NODE].peak_lat;
2253		__entry->n_wr_s_avg	= iostat_lat[WRITE_SYNC_IO][NODE].avg_lat;
2254		__entry->n_wr_s_cnt	= iostat_lat[WRITE_SYNC_IO][NODE].cnt;
2255		__entry->m_wr_s_peak	= iostat_lat[WRITE_SYNC_IO][META].peak_lat;
2256		__entry->m_wr_s_avg	= iostat_lat[WRITE_SYNC_IO][META].avg_lat;
2257		__entry->m_wr_s_cnt	= iostat_lat[WRITE_SYNC_IO][META].cnt;
2258		__entry->d_wr_as_peak	= iostat_lat[WRITE_ASYNC_IO][DATA].peak_lat;
2259		__entry->d_wr_as_avg	= iostat_lat[WRITE_ASYNC_IO][DATA].avg_lat;
2260		__entry->d_wr_as_cnt	= iostat_lat[WRITE_ASYNC_IO][DATA].cnt;
2261		__entry->n_wr_as_peak	= iostat_lat[WRITE_ASYNC_IO][NODE].peak_lat;
2262		__entry->n_wr_as_avg	= iostat_lat[WRITE_ASYNC_IO][NODE].avg_lat;
2263		__entry->n_wr_as_cnt	= iostat_lat[WRITE_ASYNC_IO][NODE].cnt;
2264		__entry->m_wr_as_peak	= iostat_lat[WRITE_ASYNC_IO][META].peak_lat;
2265		__entry->m_wr_as_avg	= iostat_lat[WRITE_ASYNC_IO][META].avg_lat;
2266		__entry->m_wr_as_cnt	= iostat_lat[WRITE_ASYNC_IO][META].cnt;
2267	),
2268
2269	TP_printk("dev = (%d,%d), "
2270		"iotype [peak lat.(ms)/avg lat.(ms)/count], "
2271		"rd_data [%u/%u/%u], rd_node [%u/%u/%u], rd_meta [%u/%u/%u], "
2272		"wr_sync_data [%u/%u/%u], wr_sync_node [%u/%u/%u], "
2273		"wr_sync_meta [%u/%u/%u], wr_async_data [%u/%u/%u], "
2274		"wr_async_node [%u/%u/%u], wr_async_meta [%u/%u/%u]",
2275		show_dev(__entry->dev),
2276		__entry->d_rd_peak, __entry->d_rd_avg, __entry->d_rd_cnt,
2277		__entry->n_rd_peak, __entry->n_rd_avg, __entry->n_rd_cnt,
2278		__entry->m_rd_peak, __entry->m_rd_avg, __entry->m_rd_cnt,
2279		__entry->d_wr_s_peak, __entry->d_wr_s_avg, __entry->d_wr_s_cnt,
2280		__entry->n_wr_s_peak, __entry->n_wr_s_avg, __entry->n_wr_s_cnt,
2281		__entry->m_wr_s_peak, __entry->m_wr_s_avg, __entry->m_wr_s_cnt,
2282		__entry->d_wr_as_peak, __entry->d_wr_as_avg, __entry->d_wr_as_cnt,
2283		__entry->n_wr_as_peak, __entry->n_wr_as_avg, __entry->n_wr_as_cnt,
2284		__entry->m_wr_as_peak, __entry->m_wr_as_avg, __entry->m_wr_as_cnt)
2285);
2286#endif
2287
2288TRACE_EVENT(f2fs_bmap,
2289
2290	TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock),
2291
2292	TP_ARGS(inode, lblock, pblock),
2293
2294	TP_STRUCT__entry(
2295		__field(dev_t, dev)
2296		__field(ino_t, ino)
2297		__field(sector_t, lblock)
2298		__field(sector_t, pblock)
2299	),
2300
2301	TP_fast_assign(
2302		__entry->dev		= inode->i_sb->s_dev;
2303		__entry->ino		= inode->i_ino;
2304		__entry->lblock		= lblock;
2305		__entry->pblock		= pblock;
2306	),
2307
2308	TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld",
2309		show_dev_ino(__entry),
2310		(unsigned long long)__entry->lblock,
2311		(unsigned long long)__entry->pblock)
2312);
2313
2314TRACE_EVENT(f2fs_fiemap,
2315
2316	TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock,
2317		unsigned long long len, unsigned int flags, int ret),
2318
2319	TP_ARGS(inode, lblock, pblock, len, flags, ret),
2320
2321	TP_STRUCT__entry(
2322		__field(dev_t, dev)
2323		__field(ino_t, ino)
2324		__field(sector_t, lblock)
2325		__field(sector_t, pblock)
2326		__field(unsigned long long, len)
2327		__field(unsigned int, flags)
2328		__field(int, ret)
2329	),
2330
2331	TP_fast_assign(
2332		__entry->dev		= inode->i_sb->s_dev;
2333		__entry->ino		= inode->i_ino;
2334		__entry->lblock		= lblock;
2335		__entry->pblock		= pblock;
2336		__entry->len		= len;
2337		__entry->flags		= flags;
2338		__entry->ret		= ret;
2339	),
2340
2341	TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld, "
2342		"len:%llu, flags:%u, ret:%d",
2343		show_dev_ino(__entry),
2344		(unsigned long long)__entry->lblock,
2345		(unsigned long long)__entry->pblock,
2346		__entry->len,
2347		__entry->flags,
2348		__entry->ret)
2349);
2350
2351DECLARE_EVENT_CLASS(f2fs__rw_start,
2352
2353	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
2354			pid_t pid, char *pathname, char *command),
2355
2356	TP_ARGS(inode, offset, bytes, pid, pathname, command),
2357
2358	TP_STRUCT__entry(
2359		__string(pathbuf, pathname)
2360		__field(loff_t, offset)
2361		__field(int, bytes)
2362		__field(loff_t, i_size)
2363		__string(cmdline, command)
2364		__field(pid_t, pid)
2365		__field(ino_t, ino)
2366	),
2367
2368	TP_fast_assign(
2369		/*
2370		 * Replace the spaces in filenames and cmdlines
2371		 * because this screws up the tooling that parses
2372		 * the traces.
2373		 */
2374		__assign_str(pathbuf);
2375		(void)strreplace(__get_str(pathbuf), ' ', '_');
2376		__entry->offset = offset;
2377		__entry->bytes = bytes;
2378		__entry->i_size = i_size_read(inode);
2379		__assign_str(cmdline);
2380		(void)strreplace(__get_str(cmdline), ' ', '_');
2381		__entry->pid = pid;
2382		__entry->ino = inode->i_ino;
2383	),
2384
2385	TP_printk("entry_name %s, offset %llu, bytes %d, cmdline %s,"
2386		" pid %d, i_size %llu, ino %lu",
2387		__get_str(pathbuf), __entry->offset, __entry->bytes,
2388		__get_str(cmdline), __entry->pid, __entry->i_size,
2389		(unsigned long) __entry->ino)
2390);
2391
2392DECLARE_EVENT_CLASS(f2fs__rw_end,
2393
2394	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
2395
2396	TP_ARGS(inode, offset, bytes),
2397
2398	TP_STRUCT__entry(
2399		__field(ino_t,	ino)
2400		__field(loff_t,	offset)
2401		__field(int,	bytes)
2402	),
2403
2404	TP_fast_assign(
2405		__entry->ino		= inode->i_ino;
2406		__entry->offset		= offset;
2407		__entry->bytes		= bytes;
2408	),
2409
2410	TP_printk("ino %lu, offset %llu, bytes %d",
2411		(unsigned long) __entry->ino,
2412		__entry->offset, __entry->bytes)
2413);
2414
2415DEFINE_EVENT(f2fs__rw_start, f2fs_dataread_start,
2416
2417	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
2418		pid_t pid, char *pathname, char *command),
2419
2420	TP_ARGS(inode, offset, bytes, pid, pathname, command)
2421);
2422
2423DEFINE_EVENT(f2fs__rw_end, f2fs_dataread_end,
2424
2425	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
2426
2427	TP_ARGS(inode, offset, bytes)
2428);
2429
2430DEFINE_EVENT(f2fs__rw_start, f2fs_datawrite_start,
2431
2432	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
2433		pid_t pid, char *pathname, char *command),
2434
2435	TP_ARGS(inode, offset, bytes, pid, pathname, command)
2436);
2437
2438DEFINE_EVENT(f2fs__rw_end, f2fs_datawrite_end,
2439
2440	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
2441
2442	TP_ARGS(inode, offset, bytes)
2443);
2444
2445#endif /* _TRACE_F2FS_H */
2446
2447 /* This part must be outside protection */
2448#include <trace/define_trace.h>
~/ Read-only file preview.