1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM f2fs
3
4#if !defined(_TRACE_F2FS_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_F2FS_H
6
7#include <linux/tracepoint.h>
8
9#define show_dev(entry)		MAJOR(entry->dev), MINOR(entry->dev)
10#define show_dev_ino(entry)	show_dev(entry), (unsigned long)entry->ino
11
12TRACE_DEFINE_ENUM(NODE);
13TRACE_DEFINE_ENUM(DATA);
14TRACE_DEFINE_ENUM(META);
15TRACE_DEFINE_ENUM(META_FLUSH);
16TRACE_DEFINE_ENUM(CURSEG_HOT_DATA);
17TRACE_DEFINE_ENUM(CURSEG_WARM_DATA);
18TRACE_DEFINE_ENUM(CURSEG_COLD_DATA);
19TRACE_DEFINE_ENUM(CURSEG_HOT_NODE);
20TRACE_DEFINE_ENUM(CURSEG_WARM_NODE);
21TRACE_DEFINE_ENUM(CURSEG_COLD_NODE);
22TRACE_DEFINE_ENUM(NO_CHECK_TYPE);
23TRACE_DEFINE_ENUM(GC_GREEDY);
24TRACE_DEFINE_ENUM(GC_CB);
25TRACE_DEFINE_ENUM(FG_GC);
26TRACE_DEFINE_ENUM(BG_GC);
27TRACE_DEFINE_ENUM(LFS);
28TRACE_DEFINE_ENUM(SSR);
29TRACE_DEFINE_ENUM(__REQ_RAHEAD);
30TRACE_DEFINE_ENUM(__REQ_WRITE);
31TRACE_DEFINE_ENUM(__REQ_SYNC);
32TRACE_DEFINE_ENUM(__REQ_NOIDLE);
33TRACE_DEFINE_ENUM(__REQ_FLUSH);
34TRACE_DEFINE_ENUM(__REQ_FUA);
35TRACE_DEFINE_ENUM(__REQ_PRIO);
36TRACE_DEFINE_ENUM(__REQ_META);
37TRACE_DEFINE_ENUM(CP_UMOUNT);
38TRACE_DEFINE_ENUM(CP_FASTBOOT);
39TRACE_DEFINE_ENUM(CP_SYNC);
40TRACE_DEFINE_ENUM(CP_DISCARD);
41
42#define show_block_type(type)						\
43	__print_symbolic(type,						\
44		{ NODE,		"NODE" },				\
45		{ DATA,		"DATA" },				\
46		{ META,		"META" },				\
47		{ META_FLUSH,	"META_FLUSH" },				\
48		{ INMEM,	"INMEM" },				\
49		{ INMEM_DROP,	"INMEM_DROP" },				\
50		{ IPU,		"IN-PLACE" },				\
51		{ OPU,		"OUT-OF-PLACE" })
52
53#define F2FS_BIO_MASK(t)	(t & (READA | WRITE_FLUSH_FUA))
54#define F2FS_BIO_EXTRA_MASK(t)	(t & (REQ_META | REQ_PRIO))
55
56#define show_bio_type(type)	show_bio_base(type), show_bio_extra(type)
57
58#define show_bio_base(type)						\
59	__print_symbolic(F2FS_BIO_MASK(type),				\
60		{ READ, 		"READ" },			\
61		{ READA, 		"READAHEAD" },			\
62		{ READ_SYNC, 		"READ_SYNC" },			\
63		{ WRITE, 		"WRITE" },			\
64		{ WRITE_SYNC, 		"WRITE_SYNC" },			\
65		{ WRITE_FLUSH,		"WRITE_FLUSH" },		\
66		{ WRITE_FUA, 		"WRITE_FUA" },			\
67		{ WRITE_FLUSH_FUA,	"WRITE_FLUSH_FUA" })
68
69#define show_bio_extra(type)						\
70	__print_symbolic(F2FS_BIO_EXTRA_MASK(type),			\
71		{ REQ_META, 		"(M)" },			\
72		{ REQ_PRIO, 		"(P)" },			\
73		{ REQ_META | REQ_PRIO,	"(MP)" },			\
74		{ 0, " \b" })
75
76#define show_data_type(type)						\
77	__print_symbolic(type,						\
78		{ CURSEG_HOT_DATA, 	"Hot DATA" },			\
79		{ CURSEG_WARM_DATA, 	"Warm DATA" },			\
80		{ CURSEG_COLD_DATA, 	"Cold DATA" },			\
81		{ CURSEG_HOT_NODE, 	"Hot NODE" },			\
82		{ CURSEG_WARM_NODE, 	"Warm NODE" },			\
83		{ CURSEG_COLD_NODE, 	"Cold NODE" },			\
84		{ NO_CHECK_TYPE, 	"No TYPE" })
85
86#define show_file_type(type)						\
87	__print_symbolic(type,						\
88		{ 0,		"FILE" },				\
89		{ 1,		"DIR" })
90
91#define show_gc_type(type)						\
92	__print_symbolic(type,						\
93		{ FG_GC,	"Foreground GC" },			\
94		{ BG_GC,	"Background GC" })
95
96#define show_alloc_mode(type)						\
97	__print_symbolic(type,						\
98		{ LFS,	"LFS-mode" },					\
99		{ SSR,	"SSR-mode" })
100
101#define show_victim_policy(type)					\
102	__print_symbolic(type,						\
103		{ GC_GREEDY,	"Greedy" },				\
104		{ GC_CB,	"Cost-Benefit" })
105
106#define show_cpreason(type)						\
107	__print_symbolic(type,						\
108		{ CP_UMOUNT,	"Umount" },				\
109		{ CP_FASTBOOT,	"Fastboot" },				\
110		{ CP_SYNC,	"Sync" },				\
111		{ CP_RECOVERY,	"Recovery" },				\
112		{ CP_DISCARD,	"Discard" })
113
114struct victim_sel_policy;
115
116DECLARE_EVENT_CLASS(f2fs__inode,
117
118	TP_PROTO(struct inode *inode),
119
120	TP_ARGS(inode),
121
122	TP_STRUCT__entry(
123		__field(dev_t,	dev)
124		__field(ino_t,	ino)
125		__field(ino_t,	pino)
126		__field(umode_t, mode)
127		__field(loff_t,	size)
128		__field(unsigned int, nlink)
129		__field(blkcnt_t, blocks)
130		__field(__u8,	advise)
131	),
132
133	TP_fast_assign(
134		__entry->dev	= inode->i_sb->s_dev;
135		__entry->ino	= inode->i_ino;
136		__entry->pino	= F2FS_I(inode)->i_pino;
137		__entry->mode	= inode->i_mode;
138		__entry->nlink	= inode->i_nlink;
139		__entry->size	= inode->i_size;
140		__entry->blocks	= inode->i_blocks;
141		__entry->advise	= F2FS_I(inode)->i_advise;
142	),
143
144	TP_printk("dev = (%d,%d), ino = %lu, pino = %lu, i_mode = 0x%hx, "
145		"i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = 0x%x",
146		show_dev_ino(__entry),
147		(unsigned long)__entry->pino,
148		__entry->mode,
149		__entry->size,
150		(unsigned int)__entry->nlink,
151		(unsigned long long)__entry->blocks,
152		(unsigned char)__entry->advise)
153);
154
155DECLARE_EVENT_CLASS(f2fs__inode_exit,
156
157	TP_PROTO(struct inode *inode, int ret),
158
159	TP_ARGS(inode, ret),
160
161	TP_STRUCT__entry(
162		__field(dev_t,	dev)
163		__field(ino_t,	ino)
164		__field(int,	ret)
165	),
166
167	TP_fast_assign(
168		__entry->dev	= inode->i_sb->s_dev;
169		__entry->ino	= inode->i_ino;
170		__entry->ret	= ret;
171	),
172
173	TP_printk("dev = (%d,%d), ino = %lu, ret = %d",
174		show_dev_ino(__entry),
175		__entry->ret)
176);
177
178DEFINE_EVENT(f2fs__inode, f2fs_sync_file_enter,
179
180	TP_PROTO(struct inode *inode),
181
182	TP_ARGS(inode)
183);
184
185TRACE_EVENT(f2fs_sync_file_exit,
186
187	TP_PROTO(struct inode *inode, int need_cp, int datasync, int ret),
188
189	TP_ARGS(inode, need_cp, datasync, ret),
190
191	TP_STRUCT__entry(
192		__field(dev_t,	dev)
193		__field(ino_t,	ino)
194		__field(int,	need_cp)
195		__field(int,	datasync)
196		__field(int,	ret)
197	),
198
199	TP_fast_assign(
200		__entry->dev		= inode->i_sb->s_dev;
201		__entry->ino		= inode->i_ino;
202		__entry->need_cp	= need_cp;
203		__entry->datasync	= datasync;
204		__entry->ret		= ret;
205	),
206
207	TP_printk("dev = (%d,%d), ino = %lu, checkpoint is %s, "
208		"datasync = %d, ret = %d",
209		show_dev_ino(__entry),
210		__entry->need_cp ? "needed" : "not needed",
211		__entry->datasync,
212		__entry->ret)
213);
214
215TRACE_EVENT(f2fs_sync_fs,
216
217	TP_PROTO(struct super_block *sb, int wait),
218
219	TP_ARGS(sb, wait),
220
221	TP_STRUCT__entry(
222		__field(dev_t,	dev)
223		__field(int,	dirty)
224		__field(int,	wait)
225	),
226
227	TP_fast_assign(
228		__entry->dev	= sb->s_dev;
229		__entry->dirty	= is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY);
230		__entry->wait	= wait;
231	),
232
233	TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
234		show_dev(__entry),
235		__entry->dirty ? "dirty" : "not dirty",
236		__entry->wait)
237);
238
239DEFINE_EVENT(f2fs__inode, f2fs_iget,
240
241	TP_PROTO(struct inode *inode),
242
243	TP_ARGS(inode)
244);
245
246DEFINE_EVENT(f2fs__inode_exit, f2fs_iget_exit,
247
248	TP_PROTO(struct inode *inode, int ret),
249
250	TP_ARGS(inode, ret)
251);
252
253DEFINE_EVENT(f2fs__inode, f2fs_evict_inode,
254
255	TP_PROTO(struct inode *inode),
256
257	TP_ARGS(inode)
258);
259
260DEFINE_EVENT(f2fs__inode_exit, f2fs_new_inode,
261
262	TP_PROTO(struct inode *inode, int ret),
263
264	TP_ARGS(inode, ret)
265);
266
267TRACE_EVENT(f2fs_unlink_enter,
268
269	TP_PROTO(struct inode *dir, struct dentry *dentry),
270
271	TP_ARGS(dir, dentry),
272
273	TP_STRUCT__entry(
274		__field(dev_t,	dev)
275		__field(ino_t,	ino)
276		__field(loff_t,	size)
277		__field(blkcnt_t, blocks)
278		__field(const char *,	name)
279	),
280
281	TP_fast_assign(
282		__entry->dev	= dir->i_sb->s_dev;
283		__entry->ino	= dir->i_ino;
284		__entry->size	= dir->i_size;
285		__entry->blocks	= dir->i_blocks;
286		__entry->name	= dentry->d_name.name;
287	),
288
289	TP_printk("dev = (%d,%d), dir ino = %lu, i_size = %lld, "
290		"i_blocks = %llu, name = %s",
291		show_dev_ino(__entry),
292		__entry->size,
293		(unsigned long long)__entry->blocks,
294		__entry->name)
295);
296
297DEFINE_EVENT(f2fs__inode_exit, f2fs_unlink_exit,
298
299	TP_PROTO(struct inode *inode, int ret),
300
301	TP_ARGS(inode, ret)
302);
303
304DEFINE_EVENT(f2fs__inode, f2fs_truncate,
305
306	TP_PROTO(struct inode *inode),
307
308	TP_ARGS(inode)
309);
310
311TRACE_EVENT(f2fs_truncate_data_blocks_range,
312
313	TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs, int free),
314
315	TP_ARGS(inode, nid,  ofs, free),
316
317	TP_STRUCT__entry(
318		__field(dev_t,	dev)
319		__field(ino_t,	ino)
320		__field(nid_t,	nid)
321		__field(unsigned int,	ofs)
322		__field(int,	free)
323	),
324
325	TP_fast_assign(
326		__entry->dev	= inode->i_sb->s_dev;
327		__entry->ino	= inode->i_ino;
328		__entry->nid	= nid;
329		__entry->ofs	= ofs;
330		__entry->free	= free;
331	),
332
333	TP_printk("dev = (%d,%d), ino = %lu, nid = %u, offset = %u, freed = %d",
334		show_dev_ino(__entry),
335		(unsigned int)__entry->nid,
336		__entry->ofs,
337		__entry->free)
338);
339
340DECLARE_EVENT_CLASS(f2fs__truncate_op,
341
342	TP_PROTO(struct inode *inode, u64 from),
343
344	TP_ARGS(inode, from),
345
346	TP_STRUCT__entry(
347		__field(dev_t,	dev)
348		__field(ino_t,	ino)
349		__field(loff_t,	size)
350		__field(blkcnt_t, blocks)
351		__field(u64,	from)
352	),
353
354	TP_fast_assign(
355		__entry->dev	= inode->i_sb->s_dev;
356		__entry->ino	= inode->i_ino;
357		__entry->size	= inode->i_size;
358		__entry->blocks	= inode->i_blocks;
359		__entry->from	= from;
360	),
361
362	TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld, i_blocks = %llu, "
363		"start file offset = %llu",
364		show_dev_ino(__entry),
365		__entry->size,
366		(unsigned long long)__entry->blocks,
367		(unsigned long long)__entry->from)
368);
369
370DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_blocks_enter,
371
372	TP_PROTO(struct inode *inode, u64 from),
373
374	TP_ARGS(inode, from)
375);
376
377DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_blocks_exit,
378
379	TP_PROTO(struct inode *inode, int ret),
380
381	TP_ARGS(inode, ret)
382);
383
384DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_inode_blocks_enter,
385
386	TP_PROTO(struct inode *inode, u64 from),
387
388	TP_ARGS(inode, from)
389);
390
391DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_inode_blocks_exit,
392
393	TP_PROTO(struct inode *inode, int ret),
394
395	TP_ARGS(inode, ret)
396);
397
398DECLARE_EVENT_CLASS(f2fs__truncate_node,
399
400	TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
401
402	TP_ARGS(inode, nid, blk_addr),
403
404	TP_STRUCT__entry(
405		__field(dev_t,	dev)
406		__field(ino_t,	ino)
407		__field(nid_t,	nid)
408		__field(block_t,	blk_addr)
409	),
410
411	TP_fast_assign(
412		__entry->dev		= inode->i_sb->s_dev;
413		__entry->ino		= inode->i_ino;
414		__entry->nid		= nid;
415		__entry->blk_addr	= blk_addr;
416	),
417
418	TP_printk("dev = (%d,%d), ino = %lu, nid = %u, block_address = 0x%llx",
419		show_dev_ino(__entry),
420		(unsigned int)__entry->nid,
421		(unsigned long long)__entry->blk_addr)
422);
423
424DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_nodes_enter,
425
426	TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
427
428	TP_ARGS(inode, nid, blk_addr)
429);
430
431DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_nodes_exit,
432
433	TP_PROTO(struct inode *inode, int ret),
434
435	TP_ARGS(inode, ret)
436);
437
438DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_node,
439
440	TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
441
442	TP_ARGS(inode, nid, blk_addr)
443);
444
445TRACE_EVENT(f2fs_truncate_partial_nodes,
446
447	TP_PROTO(struct inode *inode, nid_t nid[], int depth, int err),
448
449	TP_ARGS(inode, nid, depth, err),
450
451	TP_STRUCT__entry(
452		__field(dev_t,	dev)
453		__field(ino_t,	ino)
454		__field(nid_t,	nid[3])
455		__field(int,	depth)
456		__field(int,	err)
457	),
458
459	TP_fast_assign(
460		__entry->dev	= inode->i_sb->s_dev;
461		__entry->ino	= inode->i_ino;
462		__entry->nid[0]	= nid[0];
463		__entry->nid[1]	= nid[1];
464		__entry->nid[2]	= nid[2];
465		__entry->depth	= depth;
466		__entry->err	= err;
467	),
468
469	TP_printk("dev = (%d,%d), ino = %lu, "
470		"nid[0] = %u, nid[1] = %u, nid[2] = %u, depth = %d, err = %d",
471		show_dev_ino(__entry),
472		(unsigned int)__entry->nid[0],
473		(unsigned int)__entry->nid[1],
474		(unsigned int)__entry->nid[2],
475		__entry->depth,
476		__entry->err)
477);
478
479TRACE_EVENT(f2fs_get_data_block,
480	TP_PROTO(struct inode *inode, sector_t iblock,
481				struct buffer_head *bh, int ret),
482
483	TP_ARGS(inode, iblock, bh, ret),
484
485	TP_STRUCT__entry(
486		__field(dev_t,	dev)
487		__field(ino_t,	ino)
488		__field(sector_t,	iblock)
489		__field(sector_t,	bh_start)
490		__field(size_t,	bh_size)
491		__field(int,	ret)
492	),
493
494	TP_fast_assign(
495		__entry->dev		= inode->i_sb->s_dev;
496		__entry->ino		= inode->i_ino;
497		__entry->iblock		= iblock;
498		__entry->bh_start	= bh->b_blocknr;
499		__entry->bh_size	= bh->b_size;
500		__entry->ret		= ret;
501	),
502
503	TP_printk("dev = (%d,%d), ino = %lu, file offset = %llu, "
504		"start blkaddr = 0x%llx, len = 0x%llx bytes, err = %d",
505		show_dev_ino(__entry),
506		(unsigned long long)__entry->iblock,
507		(unsigned long long)__entry->bh_start,
508		(unsigned long long)__entry->bh_size,
509		__entry->ret)
510);
511
512TRACE_EVENT(f2fs_get_victim,
513
514	TP_PROTO(struct super_block *sb, int type, int gc_type,
515			struct victim_sel_policy *p, unsigned int pre_victim,
516			unsigned int prefree, unsigned int free),
517
518	TP_ARGS(sb, type, gc_type, p, pre_victim, prefree, free),
519
520	TP_STRUCT__entry(
521		__field(dev_t,	dev)
522		__field(int,	type)
523		__field(int,	gc_type)
524		__field(int,	alloc_mode)
525		__field(int,	gc_mode)
526		__field(unsigned int,	victim)
527		__field(unsigned int,	ofs_unit)
528		__field(unsigned int,	pre_victim)
529		__field(unsigned int,	prefree)
530		__field(unsigned int,	free)
531	),
532
533	TP_fast_assign(
534		__entry->dev		= sb->s_dev;
535		__entry->type		= type;
536		__entry->gc_type	= gc_type;
537		__entry->alloc_mode	= p->alloc_mode;
538		__entry->gc_mode	= p->gc_mode;
539		__entry->victim		= p->min_segno;
540		__entry->ofs_unit	= p->ofs_unit;
541		__entry->pre_victim	= pre_victim;
542		__entry->prefree	= prefree;
543		__entry->free		= free;
544	),
545
546	TP_printk("dev = (%d,%d), type = %s, policy = (%s, %s, %s), victim = %u "
547		"ofs_unit = %u, pre_victim_secno = %d, prefree = %u, free = %u",
548		show_dev(__entry),
549		show_data_type(__entry->type),
550		show_gc_type(__entry->gc_type),
551		show_alloc_mode(__entry->alloc_mode),
552		show_victim_policy(__entry->gc_mode),
553		__entry->victim,
554		__entry->ofs_unit,
555		(int)__entry->pre_victim,
556		__entry->prefree,
557		__entry->free)
558);
559
560TRACE_EVENT(f2fs_fallocate,
561
562	TP_PROTO(struct inode *inode, int mode,
563				loff_t offset, loff_t len, int ret),
564
565	TP_ARGS(inode, mode, offset, len, ret),
566
567	TP_STRUCT__entry(
568		__field(dev_t,	dev)
569		__field(ino_t,	ino)
570		__field(int,	mode)
571		__field(loff_t,	offset)
572		__field(loff_t,	len)
573		__field(loff_t, size)
574		__field(blkcnt_t, blocks)
575		__field(int,	ret)
576	),
577
578	TP_fast_assign(
579		__entry->dev	= inode->i_sb->s_dev;
580		__entry->ino	= inode->i_ino;
581		__entry->mode	= mode;
582		__entry->offset	= offset;
583		__entry->len	= len;
584		__entry->size	= inode->i_size;
585		__entry->blocks = inode->i_blocks;
586		__entry->ret	= ret;
587	),
588
589	TP_printk("dev = (%d,%d), ino = %lu, mode = %x, offset = %lld, "
590		"len = %lld,  i_size = %lld, i_blocks = %llu, ret = %d",
591		show_dev_ino(__entry),
592		__entry->mode,
593		(unsigned long long)__entry->offset,
594		(unsigned long long)__entry->len,
595		(unsigned long long)__entry->size,
596		(unsigned long long)__entry->blocks,
597		__entry->ret)
598);
599
600TRACE_EVENT(f2fs_direct_IO_enter,
601
602	TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw),
603
604	TP_ARGS(inode, offset, len, rw),
605
606	TP_STRUCT__entry(
607		__field(dev_t,	dev)
608		__field(ino_t,	ino)
609		__field(loff_t,	pos)
610		__field(unsigned long,	len)
611		__field(int,	rw)
612	),
613
614	TP_fast_assign(
615		__entry->dev	= inode->i_sb->s_dev;
616		__entry->ino	= inode->i_ino;
617		__entry->pos	= offset;
618		__entry->len	= len;
619		__entry->rw	= rw;
620	),
621
622	TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu rw = %d",
623		show_dev_ino(__entry),
624		__entry->pos,
625		__entry->len,
626		__entry->rw)
627);
628
629TRACE_EVENT(f2fs_direct_IO_exit,
630
631	TP_PROTO(struct inode *inode, loff_t offset, unsigned long len,
632		 int rw, int ret),
633
634	TP_ARGS(inode, offset, len, rw, ret),
635
636	TP_STRUCT__entry(
637		__field(dev_t,	dev)
638		__field(ino_t,	ino)
639		__field(loff_t,	pos)
640		__field(unsigned long,	len)
641		__field(int,	rw)
642		__field(int,	ret)
643	),
644
645	TP_fast_assign(
646		__entry->dev	= inode->i_sb->s_dev;
647		__entry->ino	= inode->i_ino;
648		__entry->pos	= offset;
649		__entry->len	= len;
650		__entry->rw	= rw;
651		__entry->ret	= ret;
652	),
653
654	TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu "
655		"rw = %d ret = %d",
656		show_dev_ino(__entry),
657		__entry->pos,
658		__entry->len,
659		__entry->rw,
660		__entry->ret)
661);
662
663TRACE_EVENT(f2fs_reserve_new_block,
664
665	TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs_in_node),
666
667	TP_ARGS(inode, nid, ofs_in_node),
668
669	TP_STRUCT__entry(
670		__field(dev_t,	dev)
671		__field(nid_t, nid)
672		__field(unsigned int, ofs_in_node)
673	),
674
675	TP_fast_assign(
676		__entry->dev	= inode->i_sb->s_dev;
677		__entry->nid	= nid;
678		__entry->ofs_in_node = ofs_in_node;
679	),
680
681	TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u",
682		show_dev(__entry),
683		(unsigned int)__entry->nid,
684		__entry->ofs_in_node)
685);
686
687DECLARE_EVENT_CLASS(f2fs__submit_page_bio,
688
689	TP_PROTO(struct page *page, struct f2fs_io_info *fio),
690
691	TP_ARGS(page, fio),
692
693	TP_STRUCT__entry(
694		__field(dev_t, dev)
695		__field(ino_t, ino)
696		__field(pgoff_t, index)
697		__field(block_t, blkaddr)
698		__field(int, rw)
699		__field(int, type)
700	),
701
702	TP_fast_assign(
703		__entry->dev		= page->mapping->host->i_sb->s_dev;
704		__entry->ino		= page->mapping->host->i_ino;
705		__entry->index		= page->index;
706		__entry->blkaddr	= fio->blk_addr;
707		__entry->rw		= fio->rw;
708		__entry->type		= fio->type;
709	),
710
711	TP_printk("dev = (%d,%d), ino = %lu, page_index = 0x%lx, "
712		"blkaddr = 0x%llx, rw = %s%s, type = %s",
713		show_dev_ino(__entry),
714		(unsigned long)__entry->index,
715		(unsigned long long)__entry->blkaddr,
716		show_bio_type(__entry->rw),
717		show_block_type(__entry->type))
718);
719
720DEFINE_EVENT_CONDITION(f2fs__submit_page_bio, f2fs_submit_page_bio,
721
722	TP_PROTO(struct page *page, struct f2fs_io_info *fio),
723
724	TP_ARGS(page, fio),
725
726	TP_CONDITION(page->mapping)
727);
728
729DEFINE_EVENT_CONDITION(f2fs__submit_page_bio, f2fs_submit_page_mbio,
730
731	TP_PROTO(struct page *page, struct f2fs_io_info *fio),
732
733	TP_ARGS(page, fio),
734
735	TP_CONDITION(page->mapping)
736);
737
738DECLARE_EVENT_CLASS(f2fs__submit_bio,
739
740	TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
741						struct bio *bio),
742
743	TP_ARGS(sb, fio, bio),
744
745	TP_STRUCT__entry(
746		__field(dev_t,	dev)
747		__field(int,	rw)
748		__field(int,	type)
749		__field(sector_t,	sector)
750		__field(unsigned int,	size)
751	),
752
753	TP_fast_assign(
754		__entry->dev		= sb->s_dev;
755		__entry->rw		= fio->rw;
756		__entry->type		= fio->type;
757		__entry->sector		= bio->bi_iter.bi_sector;
758		__entry->size		= bio->bi_iter.bi_size;
759	),
760
761	TP_printk("dev = (%d,%d), %s%s, %s, sector = %lld, size = %u",
762		show_dev(__entry),
763		show_bio_type(__entry->rw),
764		show_block_type(__entry->type),
765		(unsigned long long)__entry->sector,
766		__entry->size)
767);
768
769DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_write_bio,
770
771	TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
772							struct bio *bio),
773
774	TP_ARGS(sb, fio, bio),
775
776	TP_CONDITION(bio)
777);
778
779DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_read_bio,
780
781	TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
782							struct bio *bio),
783
784	TP_ARGS(sb, fio, bio),
785
786	TP_CONDITION(bio)
787);
788
789TRACE_EVENT(f2fs_write_begin,
790
791	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
792				unsigned int flags),
793
794	TP_ARGS(inode, pos, len, flags),
795
796	TP_STRUCT__entry(
797		__field(dev_t,	dev)
798		__field(ino_t,	ino)
799		__field(loff_t,	pos)
800		__field(unsigned int, len)
801		__field(unsigned int, flags)
802	),
803
804	TP_fast_assign(
805		__entry->dev	= inode->i_sb->s_dev;
806		__entry->ino	= inode->i_ino;
807		__entry->pos	= pos;
808		__entry->len	= len;
809		__entry->flags	= flags;
810	),
811
812	TP_printk("dev = (%d,%d), ino = %lu, pos = %llu, len = %u, flags = %u",
813		show_dev_ino(__entry),
814		(unsigned long long)__entry->pos,
815		__entry->len,
816		__entry->flags)
817);
818
819TRACE_EVENT(f2fs_write_end,
820
821	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
822				unsigned int copied),
823
824	TP_ARGS(inode, pos, len, copied),
825
826	TP_STRUCT__entry(
827		__field(dev_t,	dev)
828		__field(ino_t,	ino)
829		__field(loff_t,	pos)
830		__field(unsigned int, len)
831		__field(unsigned int, copied)
832	),
833
834	TP_fast_assign(
835		__entry->dev	= inode->i_sb->s_dev;
836		__entry->ino	= inode->i_ino;
837		__entry->pos	= pos;
838		__entry->len	= len;
839		__entry->copied	= copied;
840	),
841
842	TP_printk("dev = (%d,%d), ino = %lu, pos = %llu, len = %u, copied = %u",
843		show_dev_ino(__entry),
844		(unsigned long long)__entry->pos,
845		__entry->len,
846		__entry->copied)
847);
848
849DECLARE_EVENT_CLASS(f2fs__page,
850
851	TP_PROTO(struct page *page, int type),
852
853	TP_ARGS(page, type),
854
855	TP_STRUCT__entry(
856		__field(dev_t,	dev)
857		__field(ino_t,	ino)
858		__field(int, type)
859		__field(int, dir)
860		__field(pgoff_t, index)
861		__field(int, dirty)
862		__field(int, uptodate)
863	),
864
865	TP_fast_assign(
866		__entry->dev	= page->mapping->host->i_sb->s_dev;
867		__entry->ino	= page->mapping->host->i_ino;
868		__entry->type	= type;
869		__entry->dir	= S_ISDIR(page->mapping->host->i_mode);
870		__entry->index	= page->index;
871		__entry->dirty	= PageDirty(page);
872		__entry->uptodate = PageUptodate(page);
873	),
874
875	TP_printk("dev = (%d,%d), ino = %lu, %s, %s, index = %lu, "
876		"dirty = %d, uptodate = %d",
877		show_dev_ino(__entry),
878		show_block_type(__entry->type),
879		show_file_type(__entry->dir),
880		(unsigned long)__entry->index,
881		__entry->dirty,
882		__entry->uptodate)
883);
884
885DEFINE_EVENT(f2fs__page, f2fs_writepage,
886
887	TP_PROTO(struct page *page, int type),
888
889	TP_ARGS(page, type)
890);
891
892DEFINE_EVENT(f2fs__page, f2fs_do_write_data_page,
893
894	TP_PROTO(struct page *page, int type),
895
896	TP_ARGS(page, type)
897);
898
899DEFINE_EVENT(f2fs__page, f2fs_readpage,
900
901	TP_PROTO(struct page *page, int type),
902
903	TP_ARGS(page, type)
904);
905
906DEFINE_EVENT(f2fs__page, f2fs_set_page_dirty,
907
908	TP_PROTO(struct page *page, int type),
909
910	TP_ARGS(page, type)
911);
912
913DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite,
914
915	TP_PROTO(struct page *page, int type),
916
917	TP_ARGS(page, type)
918);
919
920DEFINE_EVENT(f2fs__page, f2fs_register_inmem_page,
921
922	TP_PROTO(struct page *page, int type),
923
924	TP_ARGS(page, type)
925);
926
927DEFINE_EVENT(f2fs__page, f2fs_commit_inmem_page,
928
929	TP_PROTO(struct page *page, int type),
930
931	TP_ARGS(page, type)
932);
933
934TRACE_EVENT(f2fs_writepages,
935
936	TP_PROTO(struct inode *inode, struct writeback_control *wbc, int type),
937
938	TP_ARGS(inode, wbc, type),
939
940	TP_STRUCT__entry(
941		__field(dev_t,	dev)
942		__field(ino_t,	ino)
943		__field(int,	type)
944		__field(int,	dir)
945		__field(long,	nr_to_write)
946		__field(long,	pages_skipped)
947		__field(loff_t,	range_start)
948		__field(loff_t,	range_end)
949		__field(pgoff_t, writeback_index)
950		__field(int,	sync_mode)
951		__field(char,	for_kupdate)
952		__field(char,	for_background)
953		__field(char,	tagged_writepages)
954		__field(char,	for_reclaim)
955		__field(char,	range_cyclic)
956		__field(char,	for_sync)
957	),
958
959	TP_fast_assign(
960		__entry->dev		= inode->i_sb->s_dev;
961		__entry->ino		= inode->i_ino;
962		__entry->type		= type;
963		__entry->dir		= S_ISDIR(inode->i_mode);
964		__entry->nr_to_write	= wbc->nr_to_write;
965		__entry->pages_skipped	= wbc->pages_skipped;
966		__entry->range_start	= wbc->range_start;
967		__entry->range_end	= wbc->range_end;
968		__entry->writeback_index = inode->i_mapping->writeback_index;
969		__entry->sync_mode	= wbc->sync_mode;
970		__entry->for_kupdate	= wbc->for_kupdate;
971		__entry->for_background	= wbc->for_background;
972		__entry->tagged_writepages	= wbc->tagged_writepages;
973		__entry->for_reclaim	= wbc->for_reclaim;
974		__entry->range_cyclic	= wbc->range_cyclic;
975		__entry->for_sync	= wbc->for_sync;
976	),
977
978	TP_printk("dev = (%d,%d), ino = %lu, %s, %s, nr_to_write %ld, "
979		"skipped %ld, start %lld, end %lld, wb_idx %lu, sync_mode %d, "
980		"kupdate %u background %u tagged %u reclaim %u cyclic %u sync %u",
981		show_dev_ino(__entry),
982		show_block_type(__entry->type),
983		show_file_type(__entry->dir),
984		__entry->nr_to_write,
985		__entry->pages_skipped,
986		__entry->range_start,
987		__entry->range_end,
988		(unsigned long)__entry->writeback_index,
989		__entry->sync_mode,
990		__entry->for_kupdate,
991		__entry->for_background,
992		__entry->tagged_writepages,
993		__entry->for_reclaim,
994		__entry->range_cyclic,
995		__entry->for_sync)
996);
997
998TRACE_EVENT(f2fs_write_checkpoint,
999
1000	TP_PROTO(struct super_block *sb, int reason, char *msg),
1001
1002	TP_ARGS(sb, reason, msg),
1003
1004	TP_STRUCT__entry(
1005		__field(dev_t,	dev)
1006		__field(int,	reason)
1007		__field(char *,	msg)
1008	),
1009
1010	TP_fast_assign(
1011		__entry->dev		= sb->s_dev;
1012		__entry->reason		= reason;
1013		__entry->msg		= msg;
1014	),
1015
1016	TP_printk("dev = (%d,%d), checkpoint for %s, state = %s",
1017		show_dev(__entry),
1018		show_cpreason(__entry->reason),
1019		__entry->msg)
1020);
1021
1022TRACE_EVENT(f2fs_issue_discard,
1023
1024	TP_PROTO(struct super_block *sb, block_t blkstart, block_t blklen),
1025
1026	TP_ARGS(sb, blkstart, blklen),
1027
1028	TP_STRUCT__entry(
1029		__field(dev_t,	dev)
1030		__field(block_t, blkstart)
1031		__field(block_t, blklen)
1032	),
1033
1034	TP_fast_assign(
1035		__entry->dev	= sb->s_dev;
1036		__entry->blkstart = blkstart;
1037		__entry->blklen = blklen;
1038	),
1039
1040	TP_printk("dev = (%d,%d), blkstart = 0x%llx, blklen = 0x%llx",
1041		show_dev(__entry),
1042		(unsigned long long)__entry->blkstart,
1043		(unsigned long long)__entry->blklen)
1044);
1045
1046TRACE_EVENT(f2fs_issue_flush,
1047
1048	TP_PROTO(struct super_block *sb, unsigned int nobarrier,
1049					unsigned int flush_merge),
1050
1051	TP_ARGS(sb, nobarrier, flush_merge),
1052
1053	TP_STRUCT__entry(
1054		__field(dev_t,	dev)
1055		__field(unsigned int, nobarrier)
1056		__field(unsigned int, flush_merge)
1057	),
1058
1059	TP_fast_assign(
1060		__entry->dev	= sb->s_dev;
1061		__entry->nobarrier = nobarrier;
1062		__entry->flush_merge = flush_merge;
1063	),
1064
1065	TP_printk("dev = (%d,%d), %s %s",
1066		show_dev(__entry),
1067		__entry->nobarrier ? "skip (nobarrier)" : "issue",
1068		__entry->flush_merge ? " with flush_merge" : "")
1069);
1070
1071TRACE_EVENT(f2fs_lookup_extent_tree_start,
1072
1073	TP_PROTO(struct inode *inode, unsigned int pgofs),
1074
1075	TP_ARGS(inode, pgofs),
1076
1077	TP_STRUCT__entry(
1078		__field(dev_t,	dev)
1079		__field(ino_t,	ino)
1080		__field(unsigned int, pgofs)
1081	),
1082
1083	TP_fast_assign(
1084		__entry->dev = inode->i_sb->s_dev;
1085		__entry->ino = inode->i_ino;
1086		__entry->pgofs = pgofs;
1087	),
1088
1089	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u",
1090		show_dev_ino(__entry),
1091		__entry->pgofs)
1092);
1093
1094TRACE_EVENT_CONDITION(f2fs_lookup_extent_tree_end,
1095
1096	TP_PROTO(struct inode *inode, unsigned int pgofs,
1097						struct extent_node *en),
1098
1099	TP_ARGS(inode, pgofs, en),
1100
1101	TP_CONDITION(en),
1102
1103	TP_STRUCT__entry(
1104		__field(dev_t,	dev)
1105		__field(ino_t,	ino)
1106		__field(unsigned int, pgofs)
1107		__field(unsigned int, fofs)
1108		__field(u32, blk)
1109		__field(unsigned int, len)
1110	),
1111
1112	TP_fast_assign(
1113		__entry->dev = inode->i_sb->s_dev;
1114		__entry->ino = inode->i_ino;
1115		__entry->pgofs = pgofs;
1116		__entry->fofs = en->ei.fofs;
1117		__entry->blk = en->ei.blk;
1118		__entry->len = en->ei.len;
1119	),
1120
1121	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, "
1122		"ext_info(fofs: %u, blk: %u, len: %u)",
1123		show_dev_ino(__entry),
1124		__entry->pgofs,
1125		__entry->fofs,
1126		__entry->blk,
1127		__entry->len)
1128);
1129
1130TRACE_EVENT(f2fs_update_extent_tree,
1131
1132	TP_PROTO(struct inode *inode, unsigned int pgofs, block_t blkaddr),
1133
1134	TP_ARGS(inode, pgofs, blkaddr),
1135
1136	TP_STRUCT__entry(
1137		__field(dev_t,	dev)
1138		__field(ino_t,	ino)
1139		__field(unsigned int, pgofs)
1140		__field(u32, blk)
1141	),
1142
1143	TP_fast_assign(
1144		__entry->dev = inode->i_sb->s_dev;
1145		__entry->ino = inode->i_ino;
1146		__entry->pgofs = pgofs;
1147		__entry->blk = blkaddr;
1148	),
1149
1150	TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, blkaddr = %u",
1151		show_dev_ino(__entry),
1152		__entry->pgofs,
1153		__entry->blk)
1154);
1155
1156TRACE_EVENT(f2fs_shrink_extent_tree,
1157
1158	TP_PROTO(struct f2fs_sb_info *sbi, unsigned int node_cnt,
1159						unsigned int tree_cnt),
1160
1161	TP_ARGS(sbi, node_cnt, tree_cnt),
1162
1163	TP_STRUCT__entry(
1164		__field(dev_t,	dev)
1165		__field(unsigned int, node_cnt)
1166		__field(unsigned int, tree_cnt)
1167	),
1168
1169	TP_fast_assign(
1170		__entry->dev = sbi->sb->s_dev;
1171		__entry->node_cnt = node_cnt;
1172		__entry->tree_cnt = tree_cnt;
1173	),
1174
1175	TP_printk("dev = (%d,%d), shrunk: node_cnt = %u, tree_cnt = %u",
1176		show_dev(__entry),
1177		__entry->node_cnt,
1178		__entry->tree_cnt)
1179);
1180
1181TRACE_EVENT(f2fs_destroy_extent_tree,
1182
1183	TP_PROTO(struct inode *inode, unsigned int node_cnt),
1184
1185	TP_ARGS(inode, node_cnt),
1186
1187	TP_STRUCT__entry(
1188		__field(dev_t,	dev)
1189		__field(ino_t,	ino)
1190		__field(unsigned int, node_cnt)
1191	),
1192
1193	TP_fast_assign(
1194		__entry->dev = inode->i_sb->s_dev;
1195		__entry->ino = inode->i_ino;
1196		__entry->node_cnt = node_cnt;
1197	),
1198
1199	TP_printk("dev = (%d,%d), ino = %lu, destroyed: node_cnt = %u",
1200		show_dev_ino(__entry),
1201		__entry->node_cnt)
1202);
1203
1204#endif /* _TRACE_F2FS_H */
1205
1206 /* This part must be outside protection */
1207#include <trace/define_trace.h>
1208