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