ext4.h 60.7 KB
Newer Older
1 2 3
#undef TRACE_SYSTEM
#define TRACE_SYSTEM ext4

4 5 6
#if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_EXT4_H

7 8 9
#include <linux/writeback.h>
#include <linux/tracepoint.h>

10 11
struct ext4_allocation_context;
struct ext4_allocation_request;
12
struct ext4_extent;
13
struct ext4_prealloc_space;
14
struct ext4_inode_info;
15
struct mpage_da_data;
16
struct ext4_map_blocks;
17
struct extent_status;
18 19

#define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
20

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#define show_mballoc_flags(flags) __print_flags(flags, "|",	\
	{ EXT4_MB_HINT_MERGE,		"HINT_MERGE" },		\
	{ EXT4_MB_HINT_RESERVED,	"HINT_RESV" },		\
	{ EXT4_MB_HINT_METADATA,	"HINT_MDATA" },		\
	{ EXT4_MB_HINT_FIRST,		"HINT_FIRST" },		\
	{ EXT4_MB_HINT_BEST,		"HINT_BEST" },		\
	{ EXT4_MB_HINT_DATA,		"HINT_DATA" },		\
	{ EXT4_MB_HINT_NOPREALLOC,	"HINT_NOPREALLOC" },	\
	{ EXT4_MB_HINT_GROUP_ALLOC,	"HINT_GRP_ALLOC" },	\
	{ EXT4_MB_HINT_GOAL_ONLY,	"HINT_GOAL_ONLY" },	\
	{ EXT4_MB_HINT_TRY_GOAL,	"HINT_TRY_GOAL" },	\
	{ EXT4_MB_DELALLOC_RESERVED,	"DELALLOC_RESV" },	\
	{ EXT4_MB_STREAM_ALLOC,		"STREAM_ALLOC" },	\
	{ EXT4_MB_USE_ROOT_BLOCKS,	"USE_ROOT_BLKS" },	\
	{ EXT4_MB_USE_RESERVED,		"USE_RESV" })

#define show_map_flags(flags) __print_flags(flags, "|",			\
	{ EXT4_GET_BLOCKS_CREATE,		"CREATE" },		\
	{ EXT4_GET_BLOCKS_UNINIT_EXT,		"UNINIT" },		\
	{ EXT4_GET_BLOCKS_DELALLOC_RESERVE,	"DELALLOC" },		\
	{ EXT4_GET_BLOCKS_PRE_IO,		"PRE_IO" },		\
	{ EXT4_GET_BLOCKS_CONVERT,		"CONVERT" },		\
	{ EXT4_GET_BLOCKS_METADATA_NOFAIL,	"METADATA_NOFAIL" },	\
	{ EXT4_GET_BLOCKS_NO_NORMALIZE,		"NO_NORMALIZE" },	\
	{ EXT4_GET_BLOCKS_KEEP_SIZE,		"KEEP_SIZE" },		\
	{ EXT4_GET_BLOCKS_NO_LOCK,		"NO_LOCK" },		\
	{ EXT4_GET_BLOCKS_NO_PUT_HOLE,		"NO_PUT_HOLE" })

#define show_mflags(flags) __print_flags(flags, "",	\
	{ EXT4_MAP_NEW,		"N" },			\
	{ EXT4_MAP_MAPPED,	"M" },			\
	{ EXT4_MAP_UNWRITTEN,	"U" },			\
	{ EXT4_MAP_BOUNDARY,	"B" },			\
	{ EXT4_MAP_UNINIT,	"u" },			\
	{ EXT4_MAP_FROM_CLUSTER, "C" })

#define show_free_flags(flags) __print_flags(flags, "|",	\
	{ EXT4_FREE_BLOCKS_METADATA,		"METADATA" },	\
	{ EXT4_FREE_BLOCKS_FORGET,		"FORGET" },	\
	{ EXT4_FREE_BLOCKS_VALIDATED,		"VALIDATED" },	\
	{ EXT4_FREE_BLOCKS_NO_QUOT_UPDATE,	"NO_QUOTA" },	\
	{ EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\
	{ EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER,	"LAST_CLUSTER" })

#define show_extent_status(status) __print_flags(status, "",	\
66 67 68 69
	{ EXTENT_STATUS_WRITTEN,	"W" },			\
	{ EXTENT_STATUS_UNWRITTEN,	"U" },			\
	{ EXTENT_STATUS_DELAYED,	"D" },			\
	{ EXTENT_STATUS_HOLE,		"H" })
70

71 72 73
#define show_falloc_mode(mode) __print_flags(mode, "|",		\
	{ FALLOC_FL_KEEP_SIZE,		"KEEP_SIZE"},		\
	{ FALLOC_FL_PUNCH_HOLE,		"PUNCH_HOLE"},		\
74
	{ FALLOC_FL_NO_HIDE_STALE,	"NO_HIDE_STALE"},	\
75 76
	{ FALLOC_FL_COLLAPSE_RANGE,	"COLLAPSE_RANGE"},	\
	{ FALLOC_FL_ZERO_RANGE,		"ZERO_RANGE"})
77

78

79 80 81 82 83 84
TRACE_EVENT(ext4_free_inode,
	TP_PROTO(struct inode *inode),

	TP_ARGS(inode),

	TP_STRUCT__entry(
85
		__field(	dev_t,	dev			)
86 87 88
		__field(	ino_t,	ino			)
		__field(	uid_t,	uid			)
		__field(	gid_t,	gid			)
L
Lukas Czerner 已提交
89
		__field(	__u64, blocks			)
90
		__field(	__u16, mode			)
91 92 93
	),

	TP_fast_assign(
94
		__entry->dev	= inode->i_sb->s_dev;
95
		__entry->ino	= inode->i_ino;
96 97
		__entry->uid	= i_uid_read(inode);
		__entry->gid	= i_gid_read(inode);
98
		__entry->blocks	= inode->i_blocks;
99
		__entry->mode	= inode->i_mode;
100 101
	),

102
	TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u blocks %llu",
103
		  MAJOR(__entry->dev), MINOR(__entry->dev),
L
Lukas Czerner 已提交
104 105
		  (unsigned long) __entry->ino, __entry->mode,
		  __entry->uid, __entry->gid, __entry->blocks)
106 107 108 109 110 111 112 113
);

TRACE_EVENT(ext4_request_inode,
	TP_PROTO(struct inode *dir, int mode),

	TP_ARGS(dir, mode),

	TP_STRUCT__entry(
114
		__field(	dev_t,	dev			)
115
		__field(	ino_t,	dir			)
116
		__field(	__u16, mode			)
117 118 119
	),

	TP_fast_assign(
120
		__entry->dev	= dir->i_sb->s_dev;
121 122 123 124
		__entry->dir	= dir->i_ino;
		__entry->mode	= mode;
	),

125
	TP_printk("dev %d,%d dir %lu mode 0%o",
126
		  MAJOR(__entry->dev), MINOR(__entry->dev),
127
		  (unsigned long) __entry->dir, __entry->mode)
128 129 130 131 132 133 134 135
);

TRACE_EVENT(ext4_allocate_inode,
	TP_PROTO(struct inode *inode, struct inode *dir, int mode),

	TP_ARGS(inode, dir, mode),

	TP_STRUCT__entry(
136
		__field(	dev_t,	dev			)
137 138
		__field(	ino_t,	ino			)
		__field(	ino_t,	dir			)
139
		__field(	__u16,	mode			)
140 141 142
	),

	TP_fast_assign(
143
		__entry->dev	= inode->i_sb->s_dev;
144 145 146 147 148
		__entry->ino	= inode->i_ino;
		__entry->dir	= dir->i_ino;
		__entry->mode	= mode;
	),

149
	TP_printk("dev %d,%d ino %lu dir %lu mode 0%o",
150
		  MAJOR(__entry->dev), MINOR(__entry->dev),
151
		  (unsigned long) __entry->ino,
152
		  (unsigned long) __entry->dir, __entry->mode)
153 154
);

155 156 157 158 159 160
TRACE_EVENT(ext4_evict_inode,
	TP_PROTO(struct inode *inode),

	TP_ARGS(inode),

	TP_STRUCT__entry(
161
		__field(	dev_t,	dev			)
162 163 164 165 166
		__field(	ino_t,	ino			)
		__field(	int,	nlink			)
	),

	TP_fast_assign(
167
		__entry->dev	= inode->i_sb->s_dev;
168 169 170 171 172
		__entry->ino	= inode->i_ino;
		__entry->nlink	= inode->i_nlink;
	),

	TP_printk("dev %d,%d ino %lu nlink %d",
173
		  MAJOR(__entry->dev), MINOR(__entry->dev),
174 175 176 177 178 179 180 181 182
		  (unsigned long) __entry->ino, __entry->nlink)
);

TRACE_EVENT(ext4_drop_inode,
	TP_PROTO(struct inode *inode, int drop),

	TP_ARGS(inode, drop),

	TP_STRUCT__entry(
183
		__field(	dev_t,	dev			)
184 185 186 187 188
		__field(	ino_t,	ino			)
		__field(	int,	drop			)
	),

	TP_fast_assign(
189
		__entry->dev	= inode->i_sb->s_dev;
190 191 192 193 194
		__entry->ino	= inode->i_ino;
		__entry->drop	= drop;
	),

	TP_printk("dev %d,%d ino %lu drop %d",
195
		  MAJOR(__entry->dev), MINOR(__entry->dev),
196 197 198 199 200 201 202 203 204
		  (unsigned long) __entry->ino, __entry->drop)
);

TRACE_EVENT(ext4_mark_inode_dirty,
	TP_PROTO(struct inode *inode, unsigned long IP),

	TP_ARGS(inode, IP),

	TP_STRUCT__entry(
205
		__field(	dev_t,	dev			)
206 207 208 209 210
		__field(	ino_t,	ino			)
		__field(unsigned long,	ip			)
	),

	TP_fast_assign(
211
		__entry->dev	= inode->i_sb->s_dev;
212 213 214 215 216
		__entry->ino	= inode->i_ino;
		__entry->ip	= IP;
	),

	TP_printk("dev %d,%d ino %lu caller %pF",
217
		  MAJOR(__entry->dev), MINOR(__entry->dev),
218 219 220 221 222 223 224 225 226
		  (unsigned long) __entry->ino, (void *)__entry->ip)
);

TRACE_EVENT(ext4_begin_ordered_truncate,
	TP_PROTO(struct inode *inode, loff_t new_size),

	TP_ARGS(inode, new_size),

	TP_STRUCT__entry(
227
		__field(	dev_t,	dev			)
228 229 230 231 232
		__field(	ino_t,	ino			)
		__field(	loff_t,	new_size		)
	),

	TP_fast_assign(
233
		__entry->dev		= inode->i_sb->s_dev;
234 235 236 237 238
		__entry->ino		= inode->i_ino;
		__entry->new_size	= new_size;
	),

	TP_printk("dev %d,%d ino %lu new_size %lld",
239
		  MAJOR(__entry->dev), MINOR(__entry->dev),
240
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
241
		  __entry->new_size)
242 243
);

244
DECLARE_EVENT_CLASS(ext4__write_begin,
245 246 247 248 249 250 251

	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
		 unsigned int flags),

	TP_ARGS(inode, pos, len, flags),

	TP_STRUCT__entry(
252
		__field(	dev_t,	dev			)
253 254 255 256 257 258 259
		__field(	ino_t,	ino			)
		__field(	loff_t,	pos			)
		__field(	unsigned int, len		)
		__field(	unsigned int, flags		)
	),

	TP_fast_assign(
260
		__entry->dev	= inode->i_sb->s_dev;
261 262 263 264 265 266
		__entry->ino	= inode->i_ino;
		__entry->pos	= pos;
		__entry->len	= len;
		__entry->flags	= flags;
	),

L
Lukas Czerner 已提交
267
	TP_printk("dev %d,%d ino %lu pos %lld len %u flags %u",
268
		  MAJOR(__entry->dev), MINOR(__entry->dev),
269
		  (unsigned long) __entry->ino,
270
		  __entry->pos, __entry->len, __entry->flags)
271 272
);

273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
DEFINE_EVENT(ext4__write_begin, ext4_write_begin,

	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
		 unsigned int flags),

	TP_ARGS(inode, pos, len, flags)
);

DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin,

	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
		 unsigned int flags),

	TP_ARGS(inode, pos, len, flags)
);

DECLARE_EVENT_CLASS(ext4__write_end,
290 291 292 293 294 295
	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
			unsigned int copied),

	TP_ARGS(inode, pos, len, copied),

	TP_STRUCT__entry(
296
		__field(	dev_t,	dev			)
297 298 299 300 301 302 303
		__field(	ino_t,	ino			)
		__field(	loff_t,	pos			)
		__field(	unsigned int, len		)
		__field(	unsigned int, copied		)
	),

	TP_fast_assign(
304
		__entry->dev	= inode->i_sb->s_dev;
305 306 307 308 309 310
		__entry->ino	= inode->i_ino;
		__entry->pos	= pos;
		__entry->len	= len;
		__entry->copied	= copied;
	),

L
Lukas Czerner 已提交
311
	TP_printk("dev %d,%d ino %lu pos %lld len %u copied %u",
312 313 314
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->pos, __entry->len, __entry->copied)
315 316
);

317
DEFINE_EVENT(ext4__write_end, ext4_write_end,
318

319 320
	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
		 unsigned int copied),
321

322
	TP_ARGS(inode, pos, len, copied)
323 324
);

325 326
DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end,

327 328 329
	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
		 unsigned int copied),

330 331
	TP_ARGS(inode, pos, len, copied)
);
332

333
DEFINE_EVENT(ext4__write_end, ext4_da_write_end,
334

335 336 337 338
	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
		 unsigned int copied),

	TP_ARGS(inode, pos, len, copied)
339 340
);

341
TRACE_EVENT(ext4_writepages,
342 343 344 345 346
	TP_PROTO(struct inode *inode, struct writeback_control *wbc),

	TP_ARGS(inode, wbc),

	TP_STRUCT__entry(
347
		__field(	dev_t,	dev			)
348 349 350 351 352
		__field(	ino_t,	ino			)
		__field(	long,	nr_to_write		)
		__field(	long,	pages_skipped		)
		__field(	loff_t,	range_start		)
		__field(	loff_t,	range_end		)
353
		__field(       pgoff_t,	writeback_index		)
354
		__field(	int,	sync_mode		)
355 356 357 358 359
		__field(	char,	for_kupdate		)
		__field(	char,	range_cyclic		)
	),

	TP_fast_assign(
360
		__entry->dev		= inode->i_sb->s_dev;
361 362 363 364 365
		__entry->ino		= inode->i_ino;
		__entry->nr_to_write	= wbc->nr_to_write;
		__entry->pages_skipped	= wbc->pages_skipped;
		__entry->range_start	= wbc->range_start;
		__entry->range_end	= wbc->range_end;
366
		__entry->writeback_index = inode->i_mapping->writeback_index;
367
		__entry->sync_mode	= wbc->sync_mode;
368 369 370 371
		__entry->for_kupdate	= wbc->for_kupdate;
		__entry->range_cyclic	= wbc->range_cyclic;
	),

372
	TP_printk("dev %d,%d ino %lu nr_to_write %ld pages_skipped %ld "
373
		  "range_start %lld range_end %lld sync_mode %d "
374 375
		  "for_kupdate %d range_cyclic %d writeback_index %lu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
376
		  (unsigned long) __entry->ino, __entry->nr_to_write,
377
		  __entry->pages_skipped, __entry->range_start,
378 379
		  __entry->range_end, __entry->sync_mode,
		  __entry->for_kupdate, __entry->range_cyclic,
380
		  (unsigned long) __entry->writeback_index)
381 382
);

383
TRACE_EVENT(ext4_da_write_pages,
J
Jan Kara 已提交
384 385
	TP_PROTO(struct inode *inode, pgoff_t first_page,
		 struct writeback_control *wbc),
386

J
Jan Kara 已提交
387
	TP_ARGS(inode, first_page, wbc),
388 389

	TP_STRUCT__entry(
390
		__field(	dev_t,	dev			)
391
		__field(	ino_t,	ino			)
J
Jan Kara 已提交
392 393 394
		__field(      pgoff_t,	first_page		)
		__field(	 long,	nr_to_write		)
		__field(	  int,	sync_mode		)
395 396 397
	),

	TP_fast_assign(
398
		__entry->dev		= inode->i_sb->s_dev;
399
		__entry->ino		= inode->i_ino;
J
Jan Kara 已提交
400 401 402
		__entry->first_page	= first_page;
		__entry->nr_to_write	= wbc->nr_to_write;
		__entry->sync_mode	= wbc->sync_mode;
403 404
	),

J
Jan Kara 已提交
405 406
	TP_printk("dev %d,%d ino %lu first_page %lu nr_to_write %ld "
		  "sync_mode %d",
407
		  MAJOR(__entry->dev), MINOR(__entry->dev),
J
Jan Kara 已提交
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432
		  (unsigned long) __entry->ino, __entry->first_page,
		  __entry->nr_to_write, __entry->sync_mode)
);

TRACE_EVENT(ext4_da_write_pages_extent,
	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map),

	TP_ARGS(inode, map),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
		__field(	ino_t,	ino			)
		__field(	__u64,	lblk			)
		__field(	__u32,	len			)
		__field(	__u32,	flags			)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
		__entry->ino		= inode->i_ino;
		__entry->lblk		= map->m_lblk;
		__entry->len		= map->m_len;
		__entry->flags		= map->m_flags;
	),

433
	TP_printk("dev %d,%d ino %lu lblk %llu len %u flags %s",
J
Jan Kara 已提交
434 435
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino, __entry->lblk, __entry->len,
436
		  show_mflags(__entry->flags))
437 438
);

439
TRACE_EVENT(ext4_writepages_result,
440 441 442 443 444 445
	TP_PROTO(struct inode *inode, struct writeback_control *wbc,
			int ret, int pages_written),

	TP_ARGS(inode, wbc, ret, pages_written),

	TP_STRUCT__entry(
446
		__field(	dev_t,	dev			)
447 448 449 450
		__field(	ino_t,	ino			)
		__field(	int,	ret			)
		__field(	int,	pages_written		)
		__field(	long,	pages_skipped		)
451
		__field(       pgoff_t,	writeback_index		)
452
		__field(	int,	sync_mode		)
453 454 455
	),

	TP_fast_assign(
456
		__entry->dev		= inode->i_sb->s_dev;
457 458 459 460
		__entry->ino		= inode->i_ino;
		__entry->ret		= ret;
		__entry->pages_written	= pages_written;
		__entry->pages_skipped	= wbc->pages_skipped;
461
		__entry->writeback_index = inode->i_mapping->writeback_index;
462
		__entry->sync_mode	= wbc->sync_mode;
463 464
	),

465
	TP_printk("dev %d,%d ino %lu ret %d pages_written %d pages_skipped %ld "
466
		  "sync_mode %d writeback_index %lu",
467
		  MAJOR(__entry->dev), MINOR(__entry->dev),
468
		  (unsigned long) __entry->ino, __entry->ret,
469
		  __entry->pages_written, __entry->pages_skipped,
470
		  __entry->sync_mode,
471
		  (unsigned long) __entry->writeback_index)
472 473
);

474 475 476 477 478 479 480
DECLARE_EVENT_CLASS(ext4__page_op,
	TP_PROTO(struct page *page),

	TP_ARGS(page),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
481 482
		__field(	ino_t,	ino			)
		__field(	pgoff_t, index			)
483 484 485 486 487

	),

	TP_fast_assign(
		__entry->dev	= page->mapping->host->i_sb->s_dev;
488 489
		__entry->ino	= page->mapping->host->i_ino;
		__entry->index	= page->index;
490 491 492 493 494
	),

	TP_printk("dev %d,%d ino %lu page_index %lu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
495 496 497 498 499 500 501 502
		  (unsigned long) __entry->index)
);

DEFINE_EVENT(ext4__page_op, ext4_writepage,

	TP_PROTO(struct page *page),

	TP_ARGS(page)
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
);

DEFINE_EVENT(ext4__page_op, ext4_readpage,

	TP_PROTO(struct page *page),

	TP_ARGS(page)
);

DEFINE_EVENT(ext4__page_op, ext4_releasepage,

	TP_PROTO(struct page *page),

	TP_ARGS(page)
);

519
DECLARE_EVENT_CLASS(ext4_invalidatepage_op,
520
	TP_PROTO(struct page *page, unsigned int offset, unsigned int length),
521

522
	TP_ARGS(page, offset, length),
523 524

	TP_STRUCT__entry(
525 526
		__field(	dev_t,	dev			)
		__field(	ino_t,	ino			)
527
		__field(	pgoff_t, index			)
528 529
		__field(	unsigned int, offset		)
		__field(	unsigned int, length		)
530 531 532
	),

	TP_fast_assign(
533 534
		__entry->dev	= page->mapping->host->i_sb->s_dev;
		__entry->ino	= page->mapping->host->i_ino;
535 536
		__entry->index	= page->index;
		__entry->offset	= offset;
537
		__entry->length	= length;
538 539
	),

540
	TP_printk("dev %d,%d ino %lu page_index %lu offset %u length %u",
541 542
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
543 544
		  (unsigned long) __entry->index,
		  __entry->offset, __entry->length)
545 546
);

547
DEFINE_EVENT(ext4_invalidatepage_op, ext4_invalidatepage,
548
	TP_PROTO(struct page *page, unsigned int offset, unsigned int length),
549

550
	TP_ARGS(page, offset, length)
551 552 553
);

DEFINE_EVENT(ext4_invalidatepage_op, ext4_journalled_invalidatepage,
554
	TP_PROTO(struct page *page, unsigned int offset, unsigned int length),
555

556
	TP_ARGS(page, offset, length)
557 558
);

559 560 561 562 563 564 565
TRACE_EVENT(ext4_discard_blocks,
	TP_PROTO(struct super_block *sb, unsigned long long blk,
			unsigned long long count),

	TP_ARGS(sb, blk, count),

	TP_STRUCT__entry(
566
		__field(	dev_t,	dev			)
567 568 569 570 571 572
		__field(	__u64,	blk			)
		__field(	__u64,	count			)

	),

	TP_fast_assign(
573
		__entry->dev	= sb->s_dev;
574 575 576 577
		__entry->blk	= blk;
		__entry->count	= count;
	),

578
	TP_printk("dev %d,%d blk %llu count %llu",
579
		  MAJOR(__entry->dev), MINOR(__entry->dev),
580
		  __entry->blk, __entry->count)
581 582
);

583
DECLARE_EVENT_CLASS(ext4__mb_new_pa,
584 585 586 587 588 589
	TP_PROTO(struct ext4_allocation_context *ac,
		 struct ext4_prealloc_space *pa),

	TP_ARGS(ac, pa),

	TP_STRUCT__entry(
590
		__field(	dev_t,	dev			)
591 592 593
		__field(	ino_t,	ino			)
		__field(	__u64,	pa_pstart		)
		__field(	__u64,	pa_lstart		)
594
		__field(	__u32,	pa_len			)
595 596 597 598

	),

	TP_fast_assign(
599
		__entry->dev		= ac->ac_sb->s_dev;
600 601 602
		__entry->ino		= ac->ac_inode->i_ino;
		__entry->pa_pstart	= pa->pa_pstart;
		__entry->pa_lstart	= pa->pa_lstart;
603
		__entry->pa_len		= pa->pa_len;
604 605
	),

606
	TP_printk("dev %d,%d ino %lu pstart %llu len %u lstart %llu",
607 608 609
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart)
610 611
);

612 613
DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_inode_pa,

614 615 616
	TP_PROTO(struct ext4_allocation_context *ac,
		 struct ext4_prealloc_space *pa),

617 618
	TP_ARGS(ac, pa)
);
619

620
DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_group_pa,
621

622 623
	TP_PROTO(struct ext4_allocation_context *ac,
		 struct ext4_prealloc_space *pa),
624

625
	TP_ARGS(ac, pa)
626 627 628
);

TRACE_EVENT(ext4_mb_release_inode_pa,
L
Lukas Czerner 已提交
629
	TP_PROTO(struct ext4_prealloc_space *pa,
630 631
		 unsigned long long block, unsigned int count),

L
Lukas Czerner 已提交
632
	TP_ARGS(pa, block, count),
633 634

	TP_STRUCT__entry(
635
		__field(	dev_t,	dev			)
636 637 638 639 640 641 642
		__field(	ino_t,	ino			)
		__field(	__u64,	block			)
		__field(	__u32,	count			)

	),

	TP_fast_assign(
L
Lukas Czerner 已提交
643 644
		__entry->dev		= pa->pa_inode->i_sb->s_dev;
		__entry->ino		= pa->pa_inode->i_ino;
645 646 647 648
		__entry->block		= block;
		__entry->count		= count;
	),

649
	TP_printk("dev %d,%d ino %lu block %llu count %u",
650 651 652
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->block, __entry->count)
653 654 655
);

TRACE_EVENT(ext4_mb_release_group_pa,
656
	TP_PROTO(struct super_block *sb, struct ext4_prealloc_space *pa),
657

658
	TP_ARGS(sb, pa),
659 660

	TP_STRUCT__entry(
661
		__field(	dev_t,	dev			)
662 663 664 665 666 667
		__field(	__u64,	pa_pstart		)
		__field(	__u32,	pa_len			)

	),

	TP_fast_assign(
668
		__entry->dev		= sb->s_dev;
669 670 671 672
		__entry->pa_pstart	= pa->pa_pstart;
		__entry->pa_len		= pa->pa_len;
	),

673
	TP_printk("dev %d,%d pstart %llu len %u",
674
		  MAJOR(__entry->dev), MINOR(__entry->dev),
675
		  __entry->pa_pstart, __entry->pa_len)
676 677 678 679 680 681 682 683
);

TRACE_EVENT(ext4_discard_preallocations,
	TP_PROTO(struct inode *inode),

	TP_ARGS(inode),

	TP_STRUCT__entry(
684
		__field(	dev_t,	dev			)
685 686 687 688 689
		__field(	ino_t,	ino			)

	),

	TP_fast_assign(
690
		__entry->dev	= inode->i_sb->s_dev;
691 692 693
		__entry->ino	= inode->i_ino;
	),

694
	TP_printk("dev %d,%d ino %lu",
695
		  MAJOR(__entry->dev), MINOR(__entry->dev),
696
		  (unsigned long) __entry->ino)
697 698 699 700 701 702 703 704
);

TRACE_EVENT(ext4_mb_discard_preallocations,
	TP_PROTO(struct super_block *sb, int needed),

	TP_ARGS(sb, needed),

	TP_STRUCT__entry(
705
		__field(	dev_t,	dev			)
706 707 708 709 710
		__field(	int,	needed			)

	),

	TP_fast_assign(
711
		__entry->dev	= sb->s_dev;
712 713 714
		__entry->needed	= needed;
	),

715
	TP_printk("dev %d,%d needed %d",
716 717
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->needed)
718 719 720 721 722 723 724 725
);

TRACE_EVENT(ext4_request_blocks,
	TP_PROTO(struct ext4_allocation_request *ar),

	TP_ARGS(ar),

	TP_STRUCT__entry(
726
		__field(	dev_t,	dev			)
727 728
		__field(	ino_t,	ino			)
		__field(	unsigned int, len		)
L
Lukas Czerner 已提交
729 730 731
		__field(	__u32,  logical			)
		__field(	__u32,	lleft			)
		__field(	__u32,	lright			)
732 733 734
		__field(	__u64,	goal			)
		__field(	__u64,	pleft			)
		__field(	__u64,	pright			)
735
		__field(	unsigned int, flags		)
736 737 738
	),

	TP_fast_assign(
739
		__entry->dev	= ar->inode->i_sb->s_dev;
740 741 742 743 744 745 746 747
		__entry->ino	= ar->inode->i_ino;
		__entry->len	= ar->len;
		__entry->logical = ar->logical;
		__entry->goal	= ar->goal;
		__entry->lleft	= ar->lleft;
		__entry->lright	= ar->lright;
		__entry->pleft	= ar->pleft;
		__entry->pright	= ar->pright;
748
		__entry->flags	= ar->flags;
749 750
	),

751
	TP_printk("dev %d,%d ino %lu flags %s len %u lblk %u goal %llu "
L
Lukas Czerner 已提交
752
		  "lleft %u lright %u pleft %llu pright %llu ",
753
		  MAJOR(__entry->dev), MINOR(__entry->dev),
754
		  (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags),
L
Lukas Czerner 已提交
755 756 757
		  __entry->len, __entry->logical, __entry->goal,
		  __entry->lleft, __entry->lright, __entry->pleft,
		  __entry->pright)
758 759 760 761 762 763 764 765
);

TRACE_EVENT(ext4_allocate_blocks,
	TP_PROTO(struct ext4_allocation_request *ar, unsigned long long block),

	TP_ARGS(ar, block),

	TP_STRUCT__entry(
766
		__field(	dev_t,	dev			)
767 768 769
		__field(	ino_t,	ino			)
		__field(	__u64,	block			)
		__field(	unsigned int, len		)
L
Lukas Czerner 已提交
770 771 772
		__field(	__u32,  logical			)
		__field(	__u32,	lleft			)
		__field(	__u32,	lright			)
773 774 775
		__field(	__u64,	goal			)
		__field(	__u64,	pleft			)
		__field(	__u64,	pright			)
776
		__field(	unsigned int, flags		)
777 778 779
	),

	TP_fast_assign(
780
		__entry->dev	= ar->inode->i_sb->s_dev;
781 782 783 784 785 786 787 788 789
		__entry->ino	= ar->inode->i_ino;
		__entry->block	= block;
		__entry->len	= ar->len;
		__entry->logical = ar->logical;
		__entry->goal	= ar->goal;
		__entry->lleft	= ar->lleft;
		__entry->lright	= ar->lright;
		__entry->pleft	= ar->pleft;
		__entry->pright	= ar->pright;
790
		__entry->flags	= ar->flags;
791 792
	),

793
	TP_printk("dev %d,%d ino %lu flags %s len %u block %llu lblk %u "
L
Lukas Czerner 已提交
794
		  "goal %llu lleft %u lright %u pleft %llu pright %llu",
795
		  MAJOR(__entry->dev), MINOR(__entry->dev),
796
		  (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags),
L
Lukas Czerner 已提交
797 798 799
		  __entry->len, __entry->block, __entry->logical,
		  __entry->goal,  __entry->lleft, __entry->lright,
		  __entry->pleft, __entry->pright)
800 801 802 803
);

TRACE_EVENT(ext4_free_blocks,
	TP_PROTO(struct inode *inode, __u64 block, unsigned long count,
804
		 int flags),
805

806
	TP_ARGS(inode, block, count, flags),
807 808

	TP_STRUCT__entry(
809
		__field(	dev_t,	dev			)
810 811 812
		__field(	ino_t,	ino			)
		__field(	__u64,	block			)
		__field(	unsigned long,	count		)
L
Lukas Czerner 已提交
813
		__field(	int,	flags			)
814
		__field(	__u16,	mode			)
815 816 817
	),

	TP_fast_assign(
818
		__entry->dev		= inode->i_sb->s_dev;
819 820 821
		__entry->ino		= inode->i_ino;
		__entry->block		= block;
		__entry->count		= count;
822
		__entry->flags		= flags;
823
		__entry->mode		= inode->i_mode;
824 825
	),

826
	TP_printk("dev %d,%d ino %lu mode 0%o block %llu count %lu flags %s",
827
		  MAJOR(__entry->dev), MINOR(__entry->dev),
828
		  (unsigned long) __entry->ino,
829
		  __entry->mode, __entry->block, __entry->count,
830
		  show_free_flags(__entry->flags))
831 832
);

833
TRACE_EVENT(ext4_sync_file_enter,
834
	TP_PROTO(struct file *file, int datasync),
835

836
	TP_ARGS(file, datasync),
837 838

	TP_STRUCT__entry(
839
		__field(	dev_t,	dev			)
840 841 842 843 844 845
		__field(	ino_t,	ino			)
		__field(	ino_t,	parent			)
		__field(	int,	datasync		)
	),

	TP_fast_assign(
846 847
		struct dentry *dentry = file->f_path.dentry;

848
		__entry->dev		= dentry->d_inode->i_sb->s_dev;
849 850 851 852 853
		__entry->ino		= dentry->d_inode->i_ino;
		__entry->datasync	= datasync;
		__entry->parent		= dentry->d_parent->d_inode->i_ino;
	),

L
Lukas Czerner 已提交
854
	TP_printk("dev %d,%d ino %lu parent %lu datasync %d ",
855
		  MAJOR(__entry->dev), MINOR(__entry->dev),
856
		  (unsigned long) __entry->ino,
857
		  (unsigned long) __entry->parent, __entry->datasync)
858 859
);

860 861 862 863 864 865 866
TRACE_EVENT(ext4_sync_file_exit,
	TP_PROTO(struct inode *inode, int ret),

	TP_ARGS(inode, ret),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
867 868
		__field(	ino_t,	ino			)
		__field(	int,	ret			)
869 870 871 872
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
873 874
		__entry->ino		= inode->i_ino;
		__entry->ret		= ret;
875 876
	),

L
Lukas Czerner 已提交
877
	TP_printk("dev %d,%d ino %lu ret %d",
878 879 880 881 882
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->ret)
);

883 884 885 886 887 888
TRACE_EVENT(ext4_sync_fs,
	TP_PROTO(struct super_block *sb, int wait),

	TP_ARGS(sb, wait),

	TP_STRUCT__entry(
889
		__field(	dev_t,	dev			)
890 891 892 893 894
		__field(	int,	wait			)

	),

	TP_fast_assign(
895
		__entry->dev	= sb->s_dev;
896 897 898
		__entry->wait	= wait;
	),

899 900 901
	TP_printk("dev %d,%d wait %d",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->wait)
902 903
);

904 905 906 907 908 909
TRACE_EVENT(ext4_alloc_da_blocks,
	TP_PROTO(struct inode *inode),

	TP_ARGS(inode),

	TP_STRUCT__entry(
910
		__field(	dev_t,	dev			)
911 912 913 914 915 916
		__field(	ino_t,	ino			)
		__field( unsigned int,	data_blocks	)
		__field( unsigned int,	meta_blocks	)
	),

	TP_fast_assign(
917
		__entry->dev	= inode->i_sb->s_dev;
918 919 920 921 922
		__entry->ino	= inode->i_ino;
		__entry->data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
		__entry->meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
	),

923
	TP_printk("dev %d,%d ino %lu data_blocks %u meta_blocks %u",
924
		  MAJOR(__entry->dev), MINOR(__entry->dev),
925
		  (unsigned long) __entry->ino,
926 927 928
		  __entry->data_blocks, __entry->meta_blocks)
);

929 930 931 932 933 934
TRACE_EVENT(ext4_mballoc_alloc,
	TP_PROTO(struct ext4_allocation_context *ac),

	TP_ARGS(ac),

	TP_STRUCT__entry(
935
		__field(	dev_t,	dev			)
936 937 938 939 940 941 942 943 944 945 946 947 948
		__field(	ino_t,	ino			)
		__field(	__u32, 	orig_logical		)
		__field(	  int,	orig_start		)
		__field(	__u32, 	orig_group		)
		__field(	  int,	orig_len		)
		__field(	__u32, 	goal_logical		)
		__field(	  int,	goal_start		)
		__field(	__u32, 	goal_group		)
		__field(	  int,	goal_len		)
		__field(	__u32, 	result_logical		)
		__field(	  int,	result_start		)
		__field(	__u32, 	result_group		)
		__field(	  int,	result_len		)
949 950 951 952 953 954
		__field(	__u16,	found			)
		__field(	__u16,	groups			)
		__field(	__u16,	buddy			)
		__field(	__u16,	flags			)
		__field(	__u16,	tail			)
		__field(	__u8,	cr			)
955 956 957
	),

	TP_fast_assign(
958
		__entry->dev		= ac->ac_inode->i_sb->s_dev;
959 960 961 962 963 964 965 966 967 968 969 970 971
		__entry->ino		= ac->ac_inode->i_ino;
		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
		__entry->orig_start	= ac->ac_o_ex.fe_start;
		__entry->orig_group	= ac->ac_o_ex.fe_group;
		__entry->orig_len	= ac->ac_o_ex.fe_len;
		__entry->goal_logical	= ac->ac_g_ex.fe_logical;
		__entry->goal_start	= ac->ac_g_ex.fe_start;
		__entry->goal_group	= ac->ac_g_ex.fe_group;
		__entry->goal_len	= ac->ac_g_ex.fe_len;
		__entry->result_logical	= ac->ac_f_ex.fe_logical;
		__entry->result_start	= ac->ac_f_ex.fe_start;
		__entry->result_group	= ac->ac_f_ex.fe_group;
		__entry->result_len	= ac->ac_f_ex.fe_len;
972 973 974 975 976 977
		__entry->found		= ac->ac_found;
		__entry->flags		= ac->ac_flags;
		__entry->groups		= ac->ac_groups_scanned;
		__entry->buddy		= ac->ac_buddy;
		__entry->tail		= ac->ac_tail;
		__entry->cr		= ac->ac_criteria;
978 979
	),

980
	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u "
981
		  "result %u/%d/%u@%u blks %u grps %u cr %u flags %s "
982
		  "tail %u broken %u",
983
		  MAJOR(__entry->dev), MINOR(__entry->dev),
984
		  (unsigned long) __entry->ino,
985 986 987 988 989 990 991
		  __entry->orig_group, __entry->orig_start,
		  __entry->orig_len, __entry->orig_logical,
		  __entry->goal_group, __entry->goal_start,
		  __entry->goal_len, __entry->goal_logical,
		  __entry->result_group, __entry->result_start,
		  __entry->result_len, __entry->result_logical,
		  __entry->found, __entry->groups, __entry->cr,
992
		  show_mballoc_flags(__entry->flags), __entry->tail,
993 994 995 996 997 998 999 1000 1001
		  __entry->buddy ? 1 << __entry->buddy : 0)
);

TRACE_EVENT(ext4_mballoc_prealloc,
	TP_PROTO(struct ext4_allocation_context *ac),

	TP_ARGS(ac),

	TP_STRUCT__entry(
1002
		__field(	dev_t,	dev			)
1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
		__field(	ino_t,	ino			)
		__field(	__u32, 	orig_logical		)
		__field(	  int,	orig_start		)
		__field(	__u32, 	orig_group		)
		__field(	  int,	orig_len		)
		__field(	__u32, 	result_logical		)
		__field(	  int,	result_start		)
		__field(	__u32, 	result_group		)
		__field(	  int,	result_len		)
	),

	TP_fast_assign(
1015
		__entry->dev		= ac->ac_inode->i_sb->s_dev;
1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026
		__entry->ino		= ac->ac_inode->i_ino;
		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
		__entry->orig_start	= ac->ac_o_ex.fe_start;
		__entry->orig_group	= ac->ac_o_ex.fe_group;
		__entry->orig_len	= ac->ac_o_ex.fe_len;
		__entry->result_logical	= ac->ac_b_ex.fe_logical;
		__entry->result_start	= ac->ac_b_ex.fe_start;
		__entry->result_group	= ac->ac_b_ex.fe_group;
		__entry->result_len	= ac->ac_b_ex.fe_len;
	),

1027
	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u",
1028
		  MAJOR(__entry->dev), MINOR(__entry->dev),
1029
		  (unsigned long) __entry->ino,
1030 1031 1032 1033 1034 1035
		  __entry->orig_group, __entry->orig_start,
		  __entry->orig_len, __entry->orig_logical,
		  __entry->result_group, __entry->result_start,
		  __entry->result_len, __entry->result_logical)
);

1036
DECLARE_EVENT_CLASS(ext4__mballoc,
1037 1038 1039 1040 1041
	TP_PROTO(struct super_block *sb,
		 struct inode *inode,
		 ext4_group_t group,
		 ext4_grpblk_t start,
		 ext4_grpblk_t len),
1042

1043
	TP_ARGS(sb, inode, group, start, len),
1044 1045

	TP_STRUCT__entry(
1046
		__field(	dev_t,	dev			)
1047 1048 1049 1050 1051 1052 1053
		__field(	ino_t,	ino			)
		__field(	  int,	result_start		)
		__field(	__u32, 	result_group		)
		__field(	  int,	result_len		)
	),

	TP_fast_assign(
1054
		__entry->dev		= sb->s_dev;
1055 1056 1057 1058
		__entry->ino		= inode ? inode->i_ino : 0;
		__entry->result_start	= start;
		__entry->result_group	= group;
		__entry->result_len	= len;
1059 1060
	),

L
Lukas Czerner 已提交
1061
	TP_printk("dev %d,%d inode %lu extent %u/%d/%d ",
1062
		  MAJOR(__entry->dev), MINOR(__entry->dev),
1063
		  (unsigned long) __entry->ino,
1064
		  __entry->result_group, __entry->result_start,
1065
		  __entry->result_len)
1066 1067
);

1068 1069
DEFINE_EVENT(ext4__mballoc, ext4_mballoc_discard,

1070 1071 1072 1073 1074
	TP_PROTO(struct super_block *sb,
		 struct inode *inode,
		 ext4_group_t group,
		 ext4_grpblk_t start,
		 ext4_grpblk_t len),
1075

1076
	TP_ARGS(sb, inode, group, start, len)
1077
);
1078

1079
DEFINE_EVENT(ext4__mballoc, ext4_mballoc_free,
1080

1081 1082 1083 1084 1085
	TP_PROTO(struct super_block *sb,
		 struct inode *inode,
		 ext4_group_t group,
		 ext4_grpblk_t start,
		 ext4_grpblk_t len),
1086

1087
	TP_ARGS(sb, inode, group, start, len)
1088 1089
);

1090 1091 1092 1093 1094 1095
TRACE_EVENT(ext4_forget,
	TP_PROTO(struct inode *inode, int is_metadata, __u64 block),

	TP_ARGS(inode, is_metadata, block),

	TP_STRUCT__entry(
1096
		__field(	dev_t,	dev			)
1097 1098
		__field(	ino_t,	ino			)
		__field(	__u64,	block			)
1099 1100
		__field(	int,	is_metadata		)
		__field(	__u16,	mode			)
1101 1102 1103
	),

	TP_fast_assign(
1104
		__entry->dev	= inode->i_sb->s_dev;
1105 1106
		__entry->ino	= inode->i_ino;
		__entry->block	= block;
1107 1108
		__entry->is_metadata = is_metadata;
		__entry->mode	= inode->i_mode;
1109 1110
	),

1111
	TP_printk("dev %d,%d ino %lu mode 0%o is_metadata %d block %llu",
1112 1113 1114
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->mode, __entry->is_metadata, __entry->block)
1115 1116
);

1117
TRACE_EVENT(ext4_da_update_reserve_space,
1118
	TP_PROTO(struct inode *inode, int used_blocks, int quota_claim),
1119

1120
	TP_ARGS(inode, used_blocks, quota_claim),
1121 1122

	TP_STRUCT__entry(
1123
		__field(	dev_t,	dev			)
1124 1125 1126 1127 1128 1129
		__field(	ino_t,	ino			)
		__field(	__u64,	i_blocks		)
		__field(	int,	used_blocks		)
		__field(	int,	reserved_data_blocks	)
		__field(	int,	reserved_meta_blocks	)
		__field(	int,	allocated_meta_blocks	)
1130
		__field(	int,	quota_claim		)
1131
		__field(	__u16,	mode			)
1132 1133 1134
	),

	TP_fast_assign(
1135
		__entry->dev	= inode->i_sb->s_dev;
1136 1137 1138
		__entry->ino	= inode->i_ino;
		__entry->i_blocks = inode->i_blocks;
		__entry->used_blocks = used_blocks;
1139 1140 1141 1142 1143 1144 1145
		__entry->reserved_data_blocks =
				EXT4_I(inode)->i_reserved_data_blocks;
		__entry->reserved_meta_blocks =
				EXT4_I(inode)->i_reserved_meta_blocks;
		__entry->allocated_meta_blocks =
				EXT4_I(inode)->i_allocated_meta_blocks;
		__entry->quota_claim = quota_claim;
1146
		__entry->mode	= inode->i_mode;
1147 1148
	),

1149 1150
	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu used_blocks %d "
		  "reserved_data_blocks %d reserved_meta_blocks %d "
1151
		  "allocated_meta_blocks %d quota_claim %d",
1152 1153
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1154
		  __entry->mode, __entry->i_blocks,
1155
		  __entry->used_blocks, __entry->reserved_data_blocks,
1156 1157
		  __entry->reserved_meta_blocks, __entry->allocated_meta_blocks,
		  __entry->quota_claim)
1158 1159 1160 1161 1162 1163 1164 1165
);

TRACE_EVENT(ext4_da_reserve_space,
	TP_PROTO(struct inode *inode, int md_needed),

	TP_ARGS(inode, md_needed),

	TP_STRUCT__entry(
1166
		__field(	dev_t,	dev			)
1167 1168 1169 1170 1171
		__field(	ino_t,	ino			)
		__field(	__u64,	i_blocks		)
		__field(	int,	md_needed		)
		__field(	int,	reserved_data_blocks	)
		__field(	int,	reserved_meta_blocks	)
1172
		__field(	__u16,  mode			)
1173 1174 1175
	),

	TP_fast_assign(
1176
		__entry->dev	= inode->i_sb->s_dev;
1177 1178 1179 1180 1181
		__entry->ino	= inode->i_ino;
		__entry->i_blocks = inode->i_blocks;
		__entry->md_needed = md_needed;
		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
		__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
1182
		__entry->mode	= inode->i_mode;
1183 1184
	),

1185 1186 1187
	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu md_needed %d "
		  "reserved_data_blocks %d reserved_meta_blocks %d",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
1188
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1189
		  __entry->mode, __entry->i_blocks,
1190 1191 1192 1193 1194 1195 1196 1197 1198 1199
		  __entry->md_needed, __entry->reserved_data_blocks,
		  __entry->reserved_meta_blocks)
);

TRACE_EVENT(ext4_da_release_space,
	TP_PROTO(struct inode *inode, int freed_blocks),

	TP_ARGS(inode, freed_blocks),

	TP_STRUCT__entry(
1200
		__field(	dev_t,	dev			)
1201 1202 1203 1204 1205 1206
		__field(	ino_t,	ino			)
		__field(	__u64,	i_blocks		)
		__field(	int,	freed_blocks		)
		__field(	int,	reserved_data_blocks	)
		__field(	int,	reserved_meta_blocks	)
		__field(	int,	allocated_meta_blocks	)
1207
		__field(	__u16,  mode			)
1208 1209 1210
	),

	TP_fast_assign(
1211
		__entry->dev	= inode->i_sb->s_dev;
1212 1213 1214 1215 1216 1217
		__entry->ino	= inode->i_ino;
		__entry->i_blocks = inode->i_blocks;
		__entry->freed_blocks = freed_blocks;
		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
		__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
		__entry->allocated_meta_blocks = EXT4_I(inode)->i_allocated_meta_blocks;
1218
		__entry->mode	= inode->i_mode;
1219 1220
	),

1221 1222 1223 1224
	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu freed_blocks %d "
		  "reserved_data_blocks %d reserved_meta_blocks %d "
		  "allocated_meta_blocks %d",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
1225
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1226
		  __entry->mode, __entry->i_blocks,
1227 1228 1229 1230
		  __entry->freed_blocks, __entry->reserved_data_blocks,
		  __entry->reserved_meta_blocks, __entry->allocated_meta_blocks)
);

1231 1232 1233 1234 1235 1236
DECLARE_EVENT_CLASS(ext4__bitmap_load,
	TP_PROTO(struct super_block *sb, unsigned long group),

	TP_ARGS(sb, group),

	TP_STRUCT__entry(
1237
		__field(	dev_t,	dev			)
1238 1239 1240 1241 1242
		__field(	__u32,	group			)

	),

	TP_fast_assign(
1243
		__entry->dev	= sb->s_dev;
1244 1245 1246
		__entry->group	= group;
	),

1247
	TP_printk("dev %d,%d group %u",
1248 1249
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->group)
1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264
);

DEFINE_EVENT(ext4__bitmap_load, ext4_mb_bitmap_load,

	TP_PROTO(struct super_block *sb, unsigned long group),

	TP_ARGS(sb, group)
);

DEFINE_EVENT(ext4__bitmap_load, ext4_mb_buddy_bitmap_load,

	TP_PROTO(struct super_block *sb, unsigned long group),

	TP_ARGS(sb, group)
);
1265

1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286
DEFINE_EVENT(ext4__bitmap_load, ext4_read_block_bitmap_load,

	TP_PROTO(struct super_block *sb, unsigned long group),

	TP_ARGS(sb, group)
);

DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap,

	TP_PROTO(struct super_block *sb, unsigned long group),

	TP_ARGS(sb, group)
);

TRACE_EVENT(ext4_direct_IO_enter,
	TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw),

	TP_ARGS(inode, offset, len, rw),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
1287
		__field(	ino_t,	ino			)
1288 1289 1290 1291 1292 1293 1294
		__field(	loff_t,	pos			)
		__field(	unsigned long,	len		)
		__field(	int,	rw			)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1295
		__entry->ino	= inode->i_ino;
1296 1297 1298 1299 1300
		__entry->pos	= offset;
		__entry->len	= len;
		__entry->rw	= rw;
	),

L
Lukas Czerner 已提交
1301
	TP_printk("dev %d,%d ino %lu pos %lld len %lu rw %d",
1302 1303
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1304
		  __entry->pos, __entry->len, __entry->rw)
1305 1306 1307
);

TRACE_EVENT(ext4_direct_IO_exit,
L
Lukas Czerner 已提交
1308 1309
	TP_PROTO(struct inode *inode, loff_t offset, unsigned long len,
		 int rw, int ret),
1310 1311 1312 1313 1314

	TP_ARGS(inode, offset, len, rw, ret),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
1315
		__field(	ino_t,	ino			)
1316 1317 1318 1319 1320 1321 1322 1323
		__field(	loff_t,	pos			)
		__field(	unsigned long,	len		)
		__field(	int,	rw			)
		__field(	int,	ret			)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1324
		__entry->ino	= inode->i_ino;
1325 1326 1327 1328 1329 1330
		__entry->pos	= offset;
		__entry->len	= len;
		__entry->rw	= rw;
		__entry->ret	= ret;
	),

L
Lukas Czerner 已提交
1331
	TP_printk("dev %d,%d ino %lu pos %lld len %lu rw %d ret %d",
1332 1333
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1334
		  __entry->pos, __entry->len,
1335 1336 1337
		  __entry->rw, __entry->ret)
);

1338
DECLARE_EVENT_CLASS(ext4__fallocate_mode,
1339 1340 1341 1342 1343 1344
	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),

	TP_ARGS(inode, offset, len, mode),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
1345
		__field(	ino_t,	ino			)
1346 1347
		__field(	loff_t,	offset			)
		__field(	loff_t, len			)
1348 1349 1350 1351 1352
		__field(	int,	mode			)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1353
		__entry->ino	= inode->i_ino;
1354
		__entry->offset	= offset;
1355 1356 1357 1358
		__entry->len	= len;
		__entry->mode	= mode;
	),

1359
	TP_printk("dev %d,%d ino %lu offset %lld len %lld mode %s",
1360
		  MAJOR(__entry->dev), MINOR(__entry->dev),
1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384
		  (unsigned long) __entry->ino,
		  __entry->offset, __entry->len,
		  show_falloc_mode(__entry->mode))
);

DEFINE_EVENT(ext4__fallocate_mode, ext4_fallocate_enter,

	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),

	TP_ARGS(inode, offset, len, mode)
);

DEFINE_EVENT(ext4__fallocate_mode, ext4_punch_hole,

	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),

	TP_ARGS(inode, offset, len, mode)
);

DEFINE_EVENT(ext4__fallocate_mode, ext4_zero_range,

	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),

	TP_ARGS(inode, offset, len, mode)
1385 1386 1387
);

TRACE_EVENT(ext4_fallocate_exit,
L
Lukas Czerner 已提交
1388 1389
	TP_PROTO(struct inode *inode, loff_t offset,
		 unsigned int max_blocks, int ret),
1390 1391 1392 1393 1394

	TP_ARGS(inode, offset, max_blocks, ret),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
1395
		__field(	ino_t,	ino			)
1396
		__field(	loff_t,	pos			)
L
Lukas Czerner 已提交
1397
		__field(	unsigned int,	blocks		)
1398 1399 1400 1401 1402
		__field(	int, 	ret			)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1403
		__entry->ino	= inode->i_ino;
1404 1405 1406 1407 1408
		__entry->pos	= offset;
		__entry->blocks	= max_blocks;
		__entry->ret	= ret;
	),

L
Lukas Czerner 已提交
1409
	TP_printk("dev %d,%d ino %lu pos %lld blocks %u ret %d",
1410 1411
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1412
		  __entry->pos, __entry->blocks,
1413 1414 1415 1416 1417 1418 1419 1420 1421
		  __entry->ret)
);

TRACE_EVENT(ext4_unlink_enter,
	TP_PROTO(struct inode *parent, struct dentry *dentry),

	TP_ARGS(parent, dentry),

	TP_STRUCT__entry(
1422
		__field(	dev_t,	dev			)
1423
		__field(	ino_t,	ino			)
1424
		__field(	ino_t,	parent			)
1425 1426 1427 1428
		__field(	loff_t,	size			)
	),

	TP_fast_assign(
1429
		__entry->dev		= dentry->d_inode->i_sb->s_dev;
1430
		__entry->ino		= dentry->d_inode->i_ino;
1431
		__entry->parent		= parent->i_ino;
1432 1433 1434
		__entry->size		= dentry->d_inode->i_size;
	),

L
Lukas Czerner 已提交
1435
	TP_printk("dev %d,%d ino %lu size %lld parent %lu",
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino, __entry->size,
		  (unsigned long) __entry->parent)
);

TRACE_EVENT(ext4_unlink_exit,
	TP_PROTO(struct dentry *dentry, int ret),

	TP_ARGS(dentry, ret),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
1448
		__field(	ino_t,	ino			)
1449 1450 1451 1452 1453
		__field(	int,	ret			)
	),

	TP_fast_assign(
		__entry->dev		= dentry->d_inode->i_sb->s_dev;
1454
		__entry->ino		= dentry->d_inode->i_ino;
1455 1456 1457
		__entry->ret		= ret;
	),

L
Lukas Czerner 已提交
1458
	TP_printk("dev %d,%d ino %lu ret %d",
1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->ret)
);

DECLARE_EVENT_CLASS(ext4__truncate,
	TP_PROTO(struct inode *inode),

	TP_ARGS(inode),

	TP_STRUCT__entry(
1470 1471
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
L
Lukas Czerner 已提交
1472
		__field(	__u64,		blocks		)
1473 1474 1475 1476
	),

	TP_fast_assign(
		__entry->dev    = inode->i_sb->s_dev;
1477
		__entry->ino    = inode->i_ino;
1478 1479 1480
		__entry->blocks	= inode->i_blocks;
	),

L
Lukas Czerner 已提交
1481
	TP_printk("dev %d,%d ino %lu blocks %llu",
1482
		  MAJOR(__entry->dev), MINOR(__entry->dev),
L
Lukas Czerner 已提交
1483
		  (unsigned long) __entry->ino, __entry->blocks)
1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499
);

DEFINE_EVENT(ext4__truncate, ext4_truncate_enter,

	TP_PROTO(struct inode *inode),

	TP_ARGS(inode)
);

DEFINE_EVENT(ext4__truncate, ext4_truncate_exit,

	TP_PROTO(struct inode *inode),

	TP_ARGS(inode)
);

1500 1501 1502 1503 1504 1505 1506 1507 1508
/* 'ux' is the uninitialized extent. */
TRACE_EVENT(ext4_ext_convert_to_initialized_enter,
	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
		 struct ext4_extent *ux),

	TP_ARGS(inode, map, ux),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
1509
		__field(	ino_t,		ino	)
1510 1511 1512 1513 1514 1515 1516 1517 1518
		__field(	ext4_lblk_t,	m_lblk	)
		__field(	unsigned,	m_len	)
		__field(	ext4_lblk_t,	u_lblk	)
		__field(	unsigned,	u_len	)
		__field(	ext4_fsblk_t,	u_pblk	)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
1519
		__entry->ino		= inode->i_ino;
1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546
		__entry->m_lblk		= map->m_lblk;
		__entry->m_len		= map->m_len;
		__entry->u_lblk		= le32_to_cpu(ux->ee_block);
		__entry->u_len		= ext4_ext_get_actual_len(ux);
		__entry->u_pblk		= ext4_ext_pblock(ux);
	),

	TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u u_lblk %u u_len %u "
		  "u_pblk %llu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->m_lblk, __entry->m_len,
		  __entry->u_lblk, __entry->u_len, __entry->u_pblk)
);

/*
 * 'ux' is the uninitialized extent.
 * 'ix' is the initialized extent to which blocks are transferred.
 */
TRACE_EVENT(ext4_ext_convert_to_initialized_fastpath,
	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
		 struct ext4_extent *ux, struct ext4_extent *ix),

	TP_ARGS(inode, map, ux, ix),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
1547
		__field(	ino_t,		ino	)
1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559
		__field(	ext4_lblk_t,	m_lblk	)
		__field(	unsigned,	m_len	)
		__field(	ext4_lblk_t,	u_lblk	)
		__field(	unsigned,	u_len	)
		__field(	ext4_fsblk_t,	u_pblk	)
		__field(	ext4_lblk_t,	i_lblk	)
		__field(	unsigned,	i_len	)
		__field(	ext4_fsblk_t,	i_pblk	)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
1560
		__entry->ino		= inode->i_ino;
1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580
		__entry->m_lblk		= map->m_lblk;
		__entry->m_len		= map->m_len;
		__entry->u_lblk		= le32_to_cpu(ux->ee_block);
		__entry->u_len		= ext4_ext_get_actual_len(ux);
		__entry->u_pblk		= ext4_ext_pblock(ux);
		__entry->i_lblk		= le32_to_cpu(ix->ee_block);
		__entry->i_len		= ext4_ext_get_actual_len(ix);
		__entry->i_pblk		= ext4_ext_pblock(ix);
	),

	TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u "
		  "u_lblk %u u_len %u u_pblk %llu "
		  "i_lblk %u i_len %u i_pblk %llu ",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->m_lblk, __entry->m_len,
		  __entry->u_lblk, __entry->u_len, __entry->u_pblk,
		  __entry->i_lblk, __entry->i_len, __entry->i_pblk)
);

1581 1582
DECLARE_EVENT_CLASS(ext4__map_blocks_enter,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
L
Lukas Czerner 已提交
1583
		 unsigned int len, unsigned int flags),
1584 1585 1586 1587

	TP_ARGS(inode, lblk, len, flags),

	TP_STRUCT__entry(
1588 1589
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
1590
		__field(	ext4_lblk_t,	lblk		)
L
Lukas Czerner 已提交
1591 1592
		__field(	unsigned int,	len		)
		__field(	unsigned int,	flags		)
1593 1594 1595 1596
	),

	TP_fast_assign(
		__entry->dev    = inode->i_sb->s_dev;
1597
		__entry->ino    = inode->i_ino;
1598 1599 1600 1601 1602
		__entry->lblk	= lblk;
		__entry->len	= len;
		__entry->flags	= flags;
	),

1603
	TP_printk("dev %d,%d ino %lu lblk %u len %u flags %s",
1604 1605
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
1606
		  __entry->lblk, __entry->len, show_map_flags(__entry->flags))
1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623
);

DEFINE_EVENT(ext4__map_blocks_enter, ext4_ext_map_blocks_enter,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
		 unsigned len, unsigned flags),

	TP_ARGS(inode, lblk, len, flags)
);

DEFINE_EVENT(ext4__map_blocks_enter, ext4_ind_map_blocks_enter,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
		 unsigned len, unsigned flags),

	TP_ARGS(inode, lblk, len, flags)
);

DECLARE_EVENT_CLASS(ext4__map_blocks_exit,
1624 1625
	TP_PROTO(struct inode *inode, unsigned flags, struct ext4_map_blocks *map,
		 int ret),
1626

1627
	TP_ARGS(inode, flags, map, ret),
1628 1629 1630

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
1631
		__field(	ino_t,		ino		)
1632
		__field(	unsigned int,	flags		)
1633
		__field(	ext4_fsblk_t,	pblk		)
1634
		__field(	ext4_lblk_t,	lblk		)
L
Lukas Czerner 已提交
1635
		__field(	unsigned int,	len		)
1636
		__field(	unsigned int,	mflags		)
1637 1638 1639 1640 1641
		__field(	int,		ret		)
	),

	TP_fast_assign(
		__entry->dev    = inode->i_sb->s_dev;
1642
		__entry->ino    = inode->i_ino;
1643
		__entry->flags	= flags;
1644 1645 1646
		__entry->pblk	= map->m_pblk;
		__entry->lblk	= map->m_lblk;
		__entry->len	= map->m_len;
1647
		__entry->mflags	= map->m_flags;
1648 1649 1650
		__entry->ret	= ret;
	),

1651 1652
	TP_printk("dev %d,%d ino %lu flags %s lblk %u pblk %llu len %u "
		  "mflags %s ret %d",
1653 1654
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
1655 1656
		  show_map_flags(__entry->flags), __entry->lblk, __entry->pblk,
		  __entry->len, show_mflags(__entry->mflags), __entry->ret)
1657 1658 1659
);

DEFINE_EVENT(ext4__map_blocks_exit, ext4_ext_map_blocks_exit,
1660 1661
	TP_PROTO(struct inode *inode, unsigned flags,
		 struct ext4_map_blocks *map, int ret),
1662

1663
	TP_ARGS(inode, flags, map, ret)
1664 1665 1666
);

DEFINE_EVENT(ext4__map_blocks_exit, ext4_ind_map_blocks_exit,
1667 1668
	TP_PROTO(struct inode *inode, unsigned flags,
		 struct ext4_map_blocks *map, int ret),
1669

1670
	TP_ARGS(inode, flags, map, ret)
1671 1672 1673 1674 1675 1676 1677 1678 1679
);

TRACE_EVENT(ext4_ext_load_extent,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk),

	TP_ARGS(inode, lblk, pblk),

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
1680
		__field(	ino_t,		ino		)
1681
		__field(	ext4_fsblk_t,	pblk		)
1682
		__field(	ext4_lblk_t,	lblk		)
1683 1684 1685 1686
	),

	TP_fast_assign(
		__entry->dev    = inode->i_sb->s_dev;
1687
		__entry->ino    = inode->i_ino;
1688
		__entry->pblk	= pblk;
1689
		__entry->lblk	= lblk;
1690 1691 1692 1693 1694
	),

	TP_printk("dev %d,%d ino %lu lblk %u pblk %llu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
L
Lukas Czerner 已提交
1695
		  __entry->lblk, __entry->pblk)
1696 1697 1698 1699 1700 1701 1702 1703 1704
);

TRACE_EVENT(ext4_load_inode,
	TP_PROTO(struct inode *inode),

	TP_ARGS(inode),

	TP_STRUCT__entry(
		__field(	dev_t,	dev		)
1705
		__field(	ino_t,	ino		)
1706 1707 1708 1709
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
1710
		__entry->ino		= inode->i_ino;
1711 1712 1713 1714 1715 1716 1717
	),

	TP_printk("dev %d,%d ino %ld",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino)
);

1718
TRACE_EVENT(ext4_journal_start,
1719 1720
	TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
		 unsigned long IP),
1721

1722
	TP_ARGS(sb, blocks, rsv_blocks, IP),
1723 1724 1725 1726

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
		__field(unsigned long,	ip			)
1727 1728
		__field(	  int,	blocks			)
		__field(	  int,	rsv_blocks		)
1729 1730 1731
	),

	TP_fast_assign(
1732 1733 1734 1735
		__entry->dev		 = sb->s_dev;
		__entry->ip		 = IP;
		__entry->blocks		 = blocks;
		__entry->rsv_blocks	 = rsv_blocks;
1736 1737
	),

1738
	TP_printk("dev %d,%d blocks, %d rsv_blocks, %d caller %pF",
1739
		  MAJOR(__entry->dev), MINOR(__entry->dev),
1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762
		  __entry->blocks, __entry->rsv_blocks, (void *)__entry->ip)
);

TRACE_EVENT(ext4_journal_start_reserved,
	TP_PROTO(struct super_block *sb, int blocks, unsigned long IP),

	TP_ARGS(sb, blocks, IP),

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
		__field(unsigned long,	ip			)
		__field(	  int,	blocks			)
	),

	TP_fast_assign(
		__entry->dev		 = sb->s_dev;
		__entry->ip		 = IP;
		__entry->blocks		 = blocks;
	),

	TP_printk("dev %d,%d blocks, %d caller %pF",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->blocks, (void *)__entry->ip)
1763 1764
);

T
Tao Ma 已提交
1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813
DECLARE_EVENT_CLASS(ext4__trim,
	TP_PROTO(struct super_block *sb,
		 ext4_group_t group,
		 ext4_grpblk_t start,
		 ext4_grpblk_t len),

	TP_ARGS(sb, group, start, len),

	TP_STRUCT__entry(
		__field(	int,	dev_major		)
		__field(	int,	dev_minor		)
		__field(	__u32, 	group			)
		__field(	int,	start			)
		__field(	int,	len			)
	),

	TP_fast_assign(
		__entry->dev_major	= MAJOR(sb->s_dev);
		__entry->dev_minor	= MINOR(sb->s_dev);
		__entry->group		= group;
		__entry->start		= start;
		__entry->len		= len;
	),

	TP_printk("dev %d,%d group %u, start %d, len %d",
		  __entry->dev_major, __entry->dev_minor,
		  __entry->group, __entry->start, __entry->len)
);

DEFINE_EVENT(ext4__trim, ext4_trim_extent,

	TP_PROTO(struct super_block *sb,
		 ext4_group_t group,
		 ext4_grpblk_t start,
		 ext4_grpblk_t len),

	TP_ARGS(sb, group, start, len)
);

DEFINE_EVENT(ext4__trim, ext4_trim_all_free,

	TP_PROTO(struct super_block *sb,
		 ext4_group_t group,
		 ext4_grpblk_t start,
		 ext4_grpblk_t len),

	TP_ARGS(sb, group, start, len)
);

1814
TRACE_EVENT(ext4_ext_handle_uninitialized_extents,
1815
	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int flags,
1816 1817
		 unsigned int allocated, ext4_fsblk_t newblock),

1818
	TP_ARGS(inode, map, flags, allocated, newblock),
1819 1820 1821

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
1822 1823
		__field(	ino_t,		ino		)
		__field(	int,		flags		)
1824 1825 1826 1827 1828 1829 1830 1831 1832
		__field(	ext4_lblk_t,	lblk		)
		__field(	ext4_fsblk_t,	pblk		)
		__field(	unsigned int,	len		)
		__field(	unsigned int,	allocated	)
		__field(	ext4_fsblk_t,	newblk		)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
1833
		__entry->ino		= inode->i_ino;
1834
		__entry->flags		= flags;
1835 1836 1837 1838 1839 1840 1841
		__entry->lblk		= map->m_lblk;
		__entry->pblk		= map->m_pblk;
		__entry->len		= map->m_len;
		__entry->allocated	= allocated;
		__entry->newblk		= newblock;
	),

1842
	TP_printk("dev %d,%d ino %lu m_lblk %u m_pblk %llu m_len %u flags %s "
1843 1844 1845 1846
		  "allocated %d newblock %llu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->lblk, (unsigned long long) __entry->pblk,
1847
		  __entry->len, show_map_flags(__entry->flags),
1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858
		  (unsigned int) __entry->allocated,
		  (unsigned long long) __entry->newblk)
);

TRACE_EVENT(ext4_get_implied_cluster_alloc_exit,
	TP_PROTO(struct super_block *sb, struct ext4_map_blocks *map, int ret),

	TP_ARGS(sb, map, ret),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
1859
		__field(	unsigned int,	flags	)
1860 1861 1862 1863 1864 1865 1866 1867
		__field(	ext4_lblk_t,	lblk	)
		__field(	ext4_fsblk_t,	pblk	)
		__field(	unsigned int,	len	)
		__field(	int,		ret	)
	),

	TP_fast_assign(
		__entry->dev	= sb->s_dev;
1868
		__entry->flags	= map->m_flags;
1869 1870 1871 1872 1873 1874
		__entry->lblk	= map->m_lblk;
		__entry->pblk	= map->m_pblk;
		__entry->len	= map->m_len;
		__entry->ret	= ret;
	),

1875
	TP_printk("dev %d,%d m_lblk %u m_pblk %llu m_len %u m_flags %s ret %d",
1876 1877
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->lblk, (unsigned long long) __entry->pblk,
1878
		  __entry->len, show_mflags(__entry->flags), __entry->ret)
1879 1880 1881 1882 1883 1884 1885 1886 1887 1888
);

TRACE_EVENT(ext4_ext_put_in_cache,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, unsigned int len,
		 ext4_fsblk_t start),

	TP_ARGS(inode, lblk, len, start),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
1889
		__field(	ino_t,		ino	)
1890 1891 1892 1893 1894 1895 1896
		__field(	ext4_lblk_t,	lblk	)
		__field(	unsigned int,	len	)
		__field(	ext4_fsblk_t,	start	)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1897
		__entry->ino	= inode->i_ino;
1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917
		__entry->lblk	= lblk;
		__entry->len	= len;
		__entry->start	= start;
	),

	TP_printk("dev %d,%d ino %lu lblk %u len %u start %llu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->lblk,
		  __entry->len,
		  (unsigned long long) __entry->start)
);

TRACE_EVENT(ext4_ext_in_cache,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, int ret),

	TP_ARGS(inode, lblk, ret),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
1918
		__field(	ino_t,		ino	)
1919 1920 1921 1922 1923 1924
		__field(	ext4_lblk_t,	lblk	)
		__field(	int,		ret	)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1925
		__entry->ino	= inode->i_ino;
1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945
		__entry->lblk	= lblk;
		__entry->ret	= ret;
	),

	TP_printk("dev %d,%d ino %lu lblk %u ret %d",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->lblk,
		  __entry->ret)

);

TRACE_EVENT(ext4_find_delalloc_range,
	TP_PROTO(struct inode *inode, ext4_lblk_t from, ext4_lblk_t to,
		int reverse, int found, ext4_lblk_t found_blk),

	TP_ARGS(inode, from, to, reverse, found, found_blk),

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
1946
		__field(	ino_t,		ino		)
1947 1948 1949 1950 1951 1952 1953 1954 1955
		__field(	ext4_lblk_t,	from		)
		__field(	ext4_lblk_t,	to		)
		__field(	int,		reverse		)
		__field(	int,		found		)
		__field(	ext4_lblk_t,	found_blk	)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
1956
		__entry->ino		= inode->i_ino;
1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979
		__entry->from		= from;
		__entry->to		= to;
		__entry->reverse	= reverse;
		__entry->found		= found;
		__entry->found_blk	= found_blk;
	),

	TP_printk("dev %d,%d ino %lu from %u to %u reverse %d found %d "
		  "(blk = %u)",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->from, (unsigned) __entry->to,
		  __entry->reverse, __entry->found,
		  (unsigned) __entry->found_blk)
);

TRACE_EVENT(ext4_get_reserved_cluster_alloc,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, unsigned int len),

	TP_ARGS(inode, lblk, len),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
1980
		__field(	ino_t,		ino	)
1981 1982 1983 1984 1985 1986
		__field(	ext4_lblk_t,	lblk	)
		__field(	unsigned int,	len	)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
1987
		__entry->ino	= inode->i_ino;
1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
		__entry->lblk	= lblk;
		__entry->len	= len;
	),

	TP_printk("dev %d,%d ino %lu lblk %u len %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->lblk,
		  __entry->len)
);

TRACE_EVENT(ext4_ext_show_extent,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk,
		 unsigned short len),

	TP_ARGS(inode, lblk, pblk, len),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
2007
		__field(	ino_t,		ino	)
2008
		__field(	ext4_fsblk_t,	pblk	)
2009
		__field(	ext4_lblk_t,	lblk	)
2010 2011 2012 2013 2014
		__field(	unsigned short,	len	)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
2015
		__entry->ino	= inode->i_ino;
2016
		__entry->pblk	= pblk;
2017
		__entry->lblk	= lblk;
2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031
		__entry->len	= len;
	),

	TP_printk("dev %d,%d ino %lu lblk %u pblk %llu len %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->lblk,
		  (unsigned long long) __entry->pblk,
		  (unsigned short) __entry->len)
);

TRACE_EVENT(ext4_remove_blocks,
	    TP_PROTO(struct inode *inode, struct ext4_extent *ex,
		ext4_lblk_t from, ext4_fsblk_t to,
2032
		long long partial_cluster),
2033 2034 2035 2036 2037

	TP_ARGS(inode, ex, from, to, partial_cluster),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
2038
		__field(	ino_t,		ino	)
2039 2040
		__field(	ext4_lblk_t,	from	)
		__field(	ext4_lblk_t,	to	)
2041
		__field(	long long,	partial	)
2042 2043 2044
		__field(	ext4_fsblk_t,	ee_pblk	)
		__field(	ext4_lblk_t,	ee_lblk	)
		__field(	unsigned short,	ee_len	)
2045 2046 2047 2048
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
2049
		__entry->ino		= inode->i_ino;
2050 2051 2052
		__entry->from		= from;
		__entry->to		= to;
		__entry->partial	= partial_cluster;
2053
		__entry->ee_pblk	= ext4_ext_pblock(ex);
2054
		__entry->ee_lblk	= le32_to_cpu(ex->ee_block);
2055
		__entry->ee_len		= ext4_ext_get_actual_len(ex);
2056 2057 2058
	),

	TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]"
2059
		  "from %u to %u partial_cluster %lld",
2060 2061 2062 2063 2064 2065 2066
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->ee_lblk,
		  (unsigned long long) __entry->ee_pblk,
		  (unsigned short) __entry->ee_len,
		  (unsigned) __entry->from,
		  (unsigned) __entry->to,
2067
		  (long long) __entry->partial)
2068 2069 2070 2071
);

TRACE_EVENT(ext4_ext_rm_leaf,
	TP_PROTO(struct inode *inode, ext4_lblk_t start,
2072 2073
		 struct ext4_extent *ex,
		 long long partial_cluster),
2074 2075 2076 2077 2078

	TP_ARGS(inode, start, ex, partial_cluster),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
2079
		__field(	ino_t,		ino	)
2080
		__field(	long long,	partial	)
2081 2082 2083 2084 2085 2086 2087 2088
		__field(	ext4_lblk_t,	start	)
		__field(	ext4_lblk_t,	ee_lblk	)
		__field(	ext4_fsblk_t,	ee_pblk	)
		__field(	short,		ee_len	)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
2089 2090
		__entry->ino		= inode->i_ino;
		__entry->partial	= partial_cluster;
2091 2092 2093 2094 2095 2096 2097
		__entry->start		= start;
		__entry->ee_lblk	= le32_to_cpu(ex->ee_block);
		__entry->ee_pblk	= ext4_ext_pblock(ex);
		__entry->ee_len		= ext4_ext_get_actual_len(ex);
	),

	TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]"
2098
		  "partial_cluster %lld",
2099 2100 2101 2102 2103 2104
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->start,
		  (unsigned) __entry->ee_lblk,
		  (unsigned long long) __entry->ee_pblk,
		  (unsigned short) __entry->ee_len,
2105
		  (long long) __entry->partial)
2106 2107 2108 2109 2110 2111 2112 2113 2114
);

TRACE_EVENT(ext4_ext_rm_idx,
	TP_PROTO(struct inode *inode, ext4_fsblk_t pblk),

	TP_ARGS(inode, pblk),

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
2115
		__field(	ino_t,		ino	)
2116 2117 2118 2119 2120
		__field(	ext4_fsblk_t,	pblk	)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
2121
		__entry->ino	= inode->i_ino;
2122 2123 2124 2125 2126 2127 2128 2129 2130 2131
		__entry->pblk	= pblk;
	),

	TP_printk("dev %d,%d ino %lu index_pblk %llu",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned long long) __entry->pblk)
);

TRACE_EVENT(ext4_ext_remove_space,
2132 2133
	TP_PROTO(struct inode *inode, ext4_lblk_t start,
		 ext4_lblk_t end, int depth),
2134

2135
	TP_ARGS(inode, start, end, depth),
2136 2137 2138

	TP_STRUCT__entry(
		__field(	dev_t,		dev	)
2139
		__field(	ino_t,		ino	)
2140
		__field(	ext4_lblk_t,	start	)
2141
		__field(	ext4_lblk_t,	end	)
2142 2143 2144 2145 2146
		__field(	int,		depth	)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
2147
		__entry->ino	= inode->i_ino;
2148
		__entry->start	= start;
2149
		__entry->end	= end;
2150 2151 2152
		__entry->depth	= depth;
	),

2153
	TP_printk("dev %d,%d ino %lu since %u end %u depth %d",
2154 2155 2156
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->start,
2157
		  (unsigned) __entry->end,
2158 2159 2160 2161
		  __entry->depth)
);

TRACE_EVENT(ext4_ext_remove_space_done,
2162
	TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end,
2163
		 int depth, long long partial, __le16 eh_entries),
2164

2165
	TP_ARGS(inode, start, end, depth, partial, eh_entries),
2166 2167 2168

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
2169
		__field(	ino_t,		ino		)
2170
		__field(	ext4_lblk_t,	start		)
2171
		__field(	ext4_lblk_t,	end		)
2172
		__field(	int,		depth		)
2173
		__field(	long long,	partial		)
2174 2175 2176 2177 2178
		__field(	unsigned short,	eh_entries	)
	),

	TP_fast_assign(
		__entry->dev		= inode->i_sb->s_dev;
2179
		__entry->ino		= inode->i_ino;
2180
		__entry->start		= start;
2181
		__entry->end		= end;
2182 2183
		__entry->depth		= depth;
		__entry->partial	= partial;
2184
		__entry->eh_entries	= le16_to_cpu(eh_entries);
2185 2186
	),

2187
	TP_printk("dev %d,%d ino %lu since %u end %u depth %d partial %lld "
2188 2189 2190 2191
		  "remaining_entries %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  (unsigned) __entry->start,
2192
		  (unsigned) __entry->end,
2193
		  __entry->depth,
2194
		  (long long) __entry->partial,
2195 2196 2197
		  (unsigned short) __entry->eh_entries)
);

2198
DECLARE_EVENT_CLASS(ext4__es_extent,
2199
	TP_PROTO(struct inode *inode, struct extent_status *es),
2200

2201
	TP_ARGS(inode, es),
2202 2203

	TP_STRUCT__entry(
2204 2205 2206 2207 2208
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
		__field(	ext4_lblk_t,	lblk		)
		__field(	ext4_lblk_t,	len		)
		__field(	ext4_fsblk_t,	pblk		)
2209
		__field(	char, status	)
2210 2211 2212 2213 2214
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
2215 2216 2217
		__entry->lblk	= es->es_lblk;
		__entry->len	= es->es_len;
		__entry->pblk	= ext4_es_pblock(es);
2218
		__entry->status	= ext4_es_status(es);
2219 2220
	),

2221
	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s",
2222 2223
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
2224
		  __entry->lblk, __entry->len,
2225
		  __entry->pblk, show_extent_status(__entry->status))
2226 2227
);

2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239
DEFINE_EVENT(ext4__es_extent, ext4_es_insert_extent,
	TP_PROTO(struct inode *inode, struct extent_status *es),

	TP_ARGS(inode, es)
);

DEFINE_EVENT(ext4__es_extent, ext4_es_cache_extent,
	TP_PROTO(struct inode *inode, struct extent_status *es),

	TP_ARGS(inode, es)
);

2240
TRACE_EVENT(ext4_es_remove_extent,
Z
Zheng Liu 已提交
2241
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len),
2242

Z
Zheng Liu 已提交
2243
	TP_ARGS(inode, lblk, len),
2244 2245 2246 2247

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
		__field(	ino_t,	ino			)
Z
Zheng Liu 已提交
2248
		__field(	loff_t,	lblk			)
2249 2250 2251 2252 2253 2254
		__field(	loff_t,	len			)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
Z
Zheng Liu 已提交
2255
		__entry->lblk	= lblk;
2256 2257 2258 2259 2260 2261
		__entry->len	= len;
	),

	TP_printk("dev %d,%d ino %lu es [%lld/%lld)",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
Z
Zheng Liu 已提交
2262
		  __entry->lblk, __entry->len)
2263 2264
);

Y
Yan, Zheng 已提交
2265
TRACE_EVENT(ext4_es_find_delayed_extent_range_enter,
Z
Zheng Liu 已提交
2266
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
2267

Z
Zheng Liu 已提交
2268
	TP_ARGS(inode, lblk),
2269 2270 2271 2272

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
Z
Zheng Liu 已提交
2273
		__field(	ext4_lblk_t,	lblk		)
2274 2275 2276 2277 2278
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
Z
Zheng Liu 已提交
2279
		__entry->lblk	= lblk;
2280 2281
	),

Z
Zheng Liu 已提交
2282
	TP_printk("dev %d,%d ino %lu lblk %u",
2283
		  MAJOR(__entry->dev), MINOR(__entry->dev),
Z
Zheng Liu 已提交
2284
		  (unsigned long) __entry->ino, __entry->lblk)
2285 2286
);

Y
Yan, Zheng 已提交
2287
TRACE_EVENT(ext4_es_find_delayed_extent_range_exit,
2288
	TP_PROTO(struct inode *inode, struct extent_status *es),
2289

2290
	TP_ARGS(inode, es),
2291 2292 2293 2294

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
Z
Zheng Liu 已提交
2295
		__field(	ext4_lblk_t,	lblk		)
2296
		__field(	ext4_lblk_t,	len		)
2297
		__field(	ext4_fsblk_t,	pblk		)
2298
		__field(	char, status	)
2299 2300 2301 2302 2303
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
Z
Zheng Liu 已提交
2304 2305
		__entry->lblk	= es->es_lblk;
		__entry->len	= es->es_len;
2306
		__entry->pblk	= ext4_es_pblock(es);
2307
		__entry->status	= ext4_es_status(es);
2308 2309
	),

2310
	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s",
2311 2312
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
2313
		  __entry->lblk, __entry->len,
2314
		  __entry->pblk, show_extent_status(__entry->status))
2315 2316
);

2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350
TRACE_EVENT(ext4_es_lookup_extent_enter,
	TP_PROTO(struct inode *inode, ext4_lblk_t lblk),

	TP_ARGS(inode, lblk),

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
		__field(	ext4_lblk_t,	lblk		)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
		__entry->lblk	= lblk;
	),

	TP_printk("dev %d,%d ino %lu lblk %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino, __entry->lblk)
);

TRACE_EVENT(ext4_es_lookup_extent_exit,
	TP_PROTO(struct inode *inode, struct extent_status *es,
		 int found),

	TP_ARGS(inode, es, found),

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
		__field(	ino_t,		ino		)
		__field(	ext4_lblk_t,	lblk		)
		__field(	ext4_lblk_t,	len		)
		__field(	ext4_fsblk_t,	pblk		)
2351
		__field(	char,		status		)
2352 2353 2354 2355 2356 2357 2358 2359 2360
		__field(	int,		found		)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
		__entry->lblk	= es->es_lblk;
		__entry->len	= es->es_len;
		__entry->pblk	= ext4_es_pblock(es);
2361
		__entry->status	= ext4_es_status(es);
2362 2363 2364
		__entry->found	= found;
	),

2365
	TP_printk("dev %d,%d ino %lu found %d [%u/%u) %llu %s",
2366 2367 2368 2369
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino, __entry->found,
		  __entry->lblk, __entry->len,
		  __entry->found ? __entry->pblk : 0,
2370
		  show_extent_status(__entry->found ? __entry->status : 0))
2371 2372
);

2373
TRACE_EVENT(ext4_es_shrink_enter,
T
Theodore Ts'o 已提交
2374
	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
2375

T
Theodore Ts'o 已提交
2376
	TP_ARGS(sb, nr_to_scan, cache_cnt),
2377 2378 2379 2380

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
		__field(	int,	nr_to_scan		)
T
Theodore Ts'o 已提交
2381
		__field(	int,	cache_cnt		)
2382 2383 2384 2385 2386
	),

	TP_fast_assign(
		__entry->dev		= sb->s_dev;
		__entry->nr_to_scan	= nr_to_scan;
T
Theodore Ts'o 已提交
2387
		__entry->cache_cnt	= cache_cnt;
2388 2389
	),

T
Theodore Ts'o 已提交
2390
	TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d",
2391
		  MAJOR(__entry->dev), MINOR(__entry->dev),
T
Theodore Ts'o 已提交
2392
		  __entry->nr_to_scan, __entry->cache_cnt)
2393 2394 2395
);

TRACE_EVENT(ext4_es_shrink_exit,
T
Theodore Ts'o 已提交
2396
	TP_PROTO(struct super_block *sb, int shrunk_nr, int cache_cnt),
2397

T
Theodore Ts'o 已提交
2398
	TP_ARGS(sb, shrunk_nr, cache_cnt),
2399 2400 2401 2402

	TP_STRUCT__entry(
		__field(	dev_t,	dev			)
		__field(	int,	shrunk_nr		)
T
Theodore Ts'o 已提交
2403
		__field(	int,	cache_cnt		)
2404 2405 2406 2407 2408
	),

	TP_fast_assign(
		__entry->dev		= sb->s_dev;
		__entry->shrunk_nr	= shrunk_nr;
T
Theodore Ts'o 已提交
2409
		__entry->cache_cnt	= cache_cnt;
2410 2411
	),

T
Theodore Ts'o 已提交
2412
	TP_printk("dev %d,%d shrunk_nr %d cache_cnt %d",
2413
		  MAJOR(__entry->dev), MINOR(__entry->dev),
T
Theodore Ts'o 已提交
2414
		  __entry->shrunk_nr, __entry->cache_cnt)
2415 2416
);

2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441
TRACE_EVENT(ext4_collapse_range,
	TP_PROTO(struct inode *inode, loff_t offset, loff_t len),

	TP_ARGS(inode, offset, len),

	TP_STRUCT__entry(
		__field(dev_t,	dev)
		__field(ino_t,	ino)
		__field(loff_t,	offset)
		__field(loff_t, len)
	),

	TP_fast_assign(
		__entry->dev	= inode->i_sb->s_dev;
		__entry->ino	= inode->i_ino;
		__entry->offset	= offset;
		__entry->len	= len;
	),

	TP_printk("dev %d,%d ino %lu offset %lld len %lld",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  (unsigned long) __entry->ino,
		  __entry->offset, __entry->len)
);

2442 2443 2444 2445
#endif /* _TRACE_EXT4_H */

/* This part must be outside protection */
#include <trace/define_trace.h>