xref: /openbmc/linux/include/trace/events/ext4.h (revision f52f3d2b)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29bffad1eSTheodore Ts'o #undef TRACE_SYSTEM
39bffad1eSTheodore Ts'o #define TRACE_SYSTEM ext4
49bffad1eSTheodore Ts'o 
5d0b6e04aSLi Zefan #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ)
6d0b6e04aSLi Zefan #define _TRACE_EXT4_H
7d0b6e04aSLi Zefan 
89bffad1eSTheodore Ts'o #include <linux/writeback.h>
99bffad1eSTheodore Ts'o #include <linux/tracepoint.h>
109bffad1eSTheodore Ts'o 
113661d286STheodore Ts'o struct ext4_allocation_context;
123661d286STheodore Ts'o struct ext4_allocation_request;
136f91bc5fSEric Gouriou struct ext4_extent;
143661d286STheodore Ts'o struct ext4_prealloc_space;
15fb40ba0dSTheodore Ts'o struct ext4_inode_info;
160ef12249SJosh Stone struct mpage_da_data;
17d8990240SAditya Kali struct ext4_map_blocks;
18992e9fddSZheng Liu struct extent_status;
190c9ec4beSDarrick J. Wong struct ext4_fsmap;
209fe67149SEric Whitney struct partial_cluster;
21fb40ba0dSTheodore Ts'o 
22fb40ba0dSTheodore Ts'o #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
233661d286STheodore Ts'o 
2421ddd568STheodore Ts'o #define show_mballoc_flags(flags) __print_flags(flags, "|",	\
2521ddd568STheodore Ts'o 	{ EXT4_MB_HINT_MERGE,		"HINT_MERGE" },		\
2621ddd568STheodore Ts'o 	{ EXT4_MB_HINT_RESERVED,	"HINT_RESV" },		\
2721ddd568STheodore Ts'o 	{ EXT4_MB_HINT_METADATA,	"HINT_MDATA" },		\
2821ddd568STheodore Ts'o 	{ EXT4_MB_HINT_FIRST,		"HINT_FIRST" },		\
2921ddd568STheodore Ts'o 	{ EXT4_MB_HINT_BEST,		"HINT_BEST" },		\
3021ddd568STheodore Ts'o 	{ EXT4_MB_HINT_DATA,		"HINT_DATA" },		\
3121ddd568STheodore Ts'o 	{ EXT4_MB_HINT_NOPREALLOC,	"HINT_NOPREALLOC" },	\
3221ddd568STheodore Ts'o 	{ EXT4_MB_HINT_GROUP_ALLOC,	"HINT_GRP_ALLOC" },	\
3321ddd568STheodore Ts'o 	{ EXT4_MB_HINT_GOAL_ONLY,	"HINT_GOAL_ONLY" },	\
3421ddd568STheodore Ts'o 	{ EXT4_MB_HINT_TRY_GOAL,	"HINT_TRY_GOAL" },	\
3521ddd568STheodore Ts'o 	{ EXT4_MB_DELALLOC_RESERVED,	"DELALLOC_RESV" },	\
3621ddd568STheodore Ts'o 	{ EXT4_MB_STREAM_ALLOC,		"STREAM_ALLOC" },	\
3721ddd568STheodore Ts'o 	{ EXT4_MB_USE_ROOT_BLOCKS,	"USE_ROOT_BLKS" },	\
3899377830SRitesh Harjani 	{ EXT4_MB_USE_RESERVED,		"USE_RESV" },		\
3999377830SRitesh Harjani 	{ EXT4_MB_STRICT_CHECK,		"STRICT_CHECK" })
4021ddd568STheodore Ts'o 
4121ddd568STheodore Ts'o #define show_map_flags(flags) __print_flags(flags, "|",			\
4221ddd568STheodore Ts'o 	{ EXT4_GET_BLOCKS_CREATE,		"CREATE" },		\
43556615dcSLukas Czerner 	{ EXT4_GET_BLOCKS_UNWRIT_EXT,		"UNWRIT" },		\
4421ddd568STheodore Ts'o 	{ EXT4_GET_BLOCKS_DELALLOC_RESERVE,	"DELALLOC" },		\
4521ddd568STheodore Ts'o 	{ EXT4_GET_BLOCKS_PRE_IO,		"PRE_IO" },		\
4621ddd568STheodore Ts'o 	{ EXT4_GET_BLOCKS_CONVERT,		"CONVERT" },		\
4721ddd568STheodore Ts'o 	{ EXT4_GET_BLOCKS_METADATA_NOFAIL,	"METADATA_NOFAIL" },	\
4821ddd568STheodore Ts'o 	{ EXT4_GET_BLOCKS_NO_NORMALIZE,		"NO_NORMALIZE" },	\
49493e83aaSEric Whitney 	{ EXT4_GET_BLOCKS_CONVERT_UNWRITTEN,	"CONVERT_UNWRITTEN" },  \
50493e83aaSEric Whitney 	{ EXT4_GET_BLOCKS_ZERO,			"ZERO" },		\
51493e83aaSEric Whitney 	{ EXT4_GET_BLOCKS_IO_SUBMIT,		"IO_SUBMIT" },		\
52493e83aaSEric Whitney 	{ EXT4_EX_NOCACHE,			"EX_NOCACHE" })
5321ddd568STheodore Ts'o 
54459c8074SDmitry Monakhov /*
55459c8074SDmitry Monakhov  * __print_flags() requires that all enum values be wrapped in the
56459c8074SDmitry Monakhov  * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
57459c8074SDmitry Monakhov  * ring buffer.
58459c8074SDmitry Monakhov  */
59459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(BH_New);
60459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(BH_Mapped);
61459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(BH_Unwritten);
62459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(BH_Boundary);
63459c8074SDmitry Monakhov 
6421ddd568STheodore Ts'o #define show_mflags(flags) __print_flags(flags, "",	\
6521ddd568STheodore Ts'o 	{ EXT4_MAP_NEW,		"N" },			\
6621ddd568STheodore Ts'o 	{ EXT4_MAP_MAPPED,	"M" },			\
6721ddd568STheodore Ts'o 	{ EXT4_MAP_UNWRITTEN,	"U" },			\
68cbd7584eSJan Kara 	{ EXT4_MAP_BOUNDARY,	"B" })
6921ddd568STheodore Ts'o 
7021ddd568STheodore Ts'o #define show_free_flags(flags) __print_flags(flags, "|",	\
7121ddd568STheodore Ts'o 	{ EXT4_FREE_BLOCKS_METADATA,		"METADATA" },	\
7221ddd568STheodore Ts'o 	{ EXT4_FREE_BLOCKS_FORGET,		"FORGET" },	\
7321ddd568STheodore Ts'o 	{ EXT4_FREE_BLOCKS_VALIDATED,		"VALIDATED" },	\
7421ddd568STheodore Ts'o 	{ EXT4_FREE_BLOCKS_NO_QUOT_UPDATE,	"NO_QUOTA" },	\
7521ddd568STheodore Ts'o 	{ EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\
7621ddd568STheodore Ts'o 	{ EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER,	"LAST_CLUSTER" })
7721ddd568STheodore Ts'o 
78459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(ES_WRITTEN_B);
79459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(ES_UNWRITTEN_B);
80459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(ES_DELAYED_B);
81459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(ES_HOLE_B);
82459c8074SDmitry Monakhov TRACE_DEFINE_ENUM(ES_REFERENCED_B);
83459c8074SDmitry Monakhov 
8421ddd568STheodore Ts'o #define show_extent_status(status) __print_flags(status, "",	\
853be78c73STheodore Ts'o 	{ EXTENT_STATUS_WRITTEN,	"W" },			\
863be78c73STheodore Ts'o 	{ EXTENT_STATUS_UNWRITTEN,	"U" },			\
873be78c73STheodore Ts'o 	{ EXTENT_STATUS_DELAYED,	"D" },			\
88459c8074SDmitry Monakhov 	{ EXTENT_STATUS_HOLE,		"H" },			\
89459c8074SDmitry Monakhov 	{ EXTENT_STATUS_REFERENCED,	"R" })
9021ddd568STheodore Ts'o 
91a633f5a3SLukas Czerner #define show_falloc_mode(mode) __print_flags(mode, "|",		\
92a633f5a3SLukas Czerner 	{ FALLOC_FL_KEEP_SIZE,		"KEEP_SIZE"},		\
93a633f5a3SLukas Czerner 	{ FALLOC_FL_PUNCH_HOLE,		"PUNCH_HOLE"},		\
949eb79482SNamjae Jeon 	{ FALLOC_FL_NO_HIDE_STALE,	"NO_HIDE_STALE"},	\
95b8a86845SLukas Czerner 	{ FALLOC_FL_COLLAPSE_RANGE,	"COLLAPSE_RANGE"},	\
96b8a86845SLukas Czerner 	{ FALLOC_FL_ZERO_RANGE,		"ZERO_RANGE"})
97a633f5a3SLukas Czerner 
987af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_XATTR);
997af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_CROSS_RENAME);
1007af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE);
1017af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_NOMEM);
1027af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_SWAP_BOOT);
1037af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_RESIZE);
1047af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_RENAME_DIR);
1057af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_FALLOC_RANGE);
1067af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_INODE_JOURNAL_DATA);
1070fbcb525SEric Biggers TRACE_DEFINE_ENUM(EXT4_FC_REASON_ENCRYPTED_FILENAME);
1087af1974aSRitesh Harjani TRACE_DEFINE_ENUM(EXT4_FC_REASON_MAX);
1097af1974aSRitesh Harjani 
110aa75f4d3SHarshad Shirwadkar #define show_fc_reason(reason)						\
111aa75f4d3SHarshad Shirwadkar 	__print_symbolic(reason,					\
112aa75f4d3SHarshad Shirwadkar 		{ EXT4_FC_REASON_XATTR,		"XATTR"},		\
113aa75f4d3SHarshad Shirwadkar 		{ EXT4_FC_REASON_CROSS_RENAME,	"CROSS_RENAME"},	\
114aa75f4d3SHarshad Shirwadkar 		{ EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, "JOURNAL_FLAG_CHANGE"}, \
115b21ebf14SHarshad Shirwadkar 		{ EXT4_FC_REASON_NOMEM,	"NO_MEM"},			\
116aa75f4d3SHarshad Shirwadkar 		{ EXT4_FC_REASON_SWAP_BOOT,	"SWAP_BOOT"},		\
117aa75f4d3SHarshad Shirwadkar 		{ EXT4_FC_REASON_RESIZE,	"RESIZE"},		\
118aa75f4d3SHarshad Shirwadkar 		{ EXT4_FC_REASON_RENAME_DIR,	"RENAME_DIR"},		\
119556e0319SHarshad Shirwadkar 		{ EXT4_FC_REASON_FALLOC_RANGE,	"FALLOC_RANGE"},	\
1200fbcb525SEric Biggers 		{ EXT4_FC_REASON_INODE_JOURNAL_DATA,	"INODE_JOURNAL_DATA"}, \
1210fbcb525SEric Biggers 		{ EXT4_FC_REASON_ENCRYPTED_FILENAME,	"ENCRYPTED_FILENAME"})
12221ddd568STheodore Ts'o 
123*f52f3d2bSOjaswin Mujoo TRACE_DEFINE_ENUM(CR_POWER2_ALIGNED);
124*f52f3d2bSOjaswin Mujoo TRACE_DEFINE_ENUM(CR_GOAL_LEN_FAST);
125*f52f3d2bSOjaswin Mujoo TRACE_DEFINE_ENUM(CR_BEST_AVAIL_LEN);
126*f52f3d2bSOjaswin Mujoo TRACE_DEFINE_ENUM(CR_GOAL_LEN_SLOW);
127*f52f3d2bSOjaswin Mujoo TRACE_DEFINE_ENUM(CR_ANY_FREE);
1284eb7a4a1SOjaswin Mujoo 
1294eb7a4a1SOjaswin Mujoo #define show_criteria(cr)                                               \
1304eb7a4a1SOjaswin Mujoo 	__print_symbolic(cr,                                            \
131*f52f3d2bSOjaswin Mujoo 			 { CR_POWER2_ALIGNED, "CR_POWER2_ALIGNED" },	\
132*f52f3d2bSOjaswin Mujoo 			 { CR_GOAL_LEN_FAST, "CR_GOAL_LEN_FAST" },      \
133*f52f3d2bSOjaswin Mujoo 			 { CR_BEST_AVAIL_LEN, "CR_BEST_AVAIL_LEN" },    \
134*f52f3d2bSOjaswin Mujoo 			 { CR_GOAL_LEN_SLOW, "CR_GOAL_LEN_SLOW" },      \
135*f52f3d2bSOjaswin Mujoo 			 { CR_ANY_FREE, "CR_ANY_FREE" })
1364eb7a4a1SOjaswin Mujoo 
137a26f4992STheodore Ts'o TRACE_EVENT(ext4_other_inode_update_time,
138a26f4992STheodore Ts'o 	TP_PROTO(struct inode *inode, ino_t orig_ino),
139a26f4992STheodore Ts'o 
140a26f4992STheodore Ts'o 	TP_ARGS(inode, orig_ino),
141a26f4992STheodore Ts'o 
142a26f4992STheodore Ts'o 	TP_STRUCT__entry(
143a26f4992STheodore Ts'o 		__field(	dev_t,	dev			)
144a26f4992STheodore Ts'o 		__field(	ino_t,	ino			)
145a26f4992STheodore Ts'o 		__field(	ino_t,	orig_ino		)
146a26f4992STheodore Ts'o 		__field(	uid_t,	uid			)
147a26f4992STheodore Ts'o 		__field(	gid_t,	gid			)
148a26f4992STheodore Ts'o 		__field(	__u16, mode			)
149a26f4992STheodore Ts'o 	),
150a26f4992STheodore Ts'o 
151a26f4992STheodore Ts'o 	TP_fast_assign(
152a26f4992STheodore Ts'o 		__entry->orig_ino = orig_ino;
153a26f4992STheodore Ts'o 		__entry->dev	= inode->i_sb->s_dev;
154a26f4992STheodore Ts'o 		__entry->ino	= inode->i_ino;
155a26f4992STheodore Ts'o 		__entry->uid	= i_uid_read(inode);
156a26f4992STheodore Ts'o 		__entry->gid	= i_gid_read(inode);
157a26f4992STheodore Ts'o 		__entry->mode	= inode->i_mode;
158a26f4992STheodore Ts'o 	),
159a26f4992STheodore Ts'o 
160a26f4992STheodore Ts'o 	TP_printk("dev %d,%d orig_ino %lu ino %lu mode 0%o uid %u gid %u",
161a26f4992STheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev),
162a26f4992STheodore Ts'o 		  (unsigned long) __entry->orig_ino,
163a26f4992STheodore Ts'o 		  (unsigned long) __entry->ino, __entry->mode,
164a26f4992STheodore Ts'o 		  __entry->uid, __entry->gid)
165a26f4992STheodore Ts'o );
166a26f4992STheodore Ts'o 
1679bffad1eSTheodore Ts'o TRACE_EVENT(ext4_free_inode,
1689bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode),
1699bffad1eSTheodore Ts'o 
1709bffad1eSTheodore Ts'o 	TP_ARGS(inode),
1719bffad1eSTheodore Ts'o 
1729bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
1730562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1749bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
1759bffad1eSTheodore Ts'o 		__field(	uid_t,	uid			)
1769bffad1eSTheodore Ts'o 		__field(	gid_t,	gid			)
177a9c667f8SLukas Czerner 		__field(	__u64, blocks			)
178210c0526SAnatol Pomozov 		__field(	__u16, mode			)
1799bffad1eSTheodore Ts'o 	),
1809bffad1eSTheodore Ts'o 
1819bffad1eSTheodore Ts'o 	TP_fast_assign(
1820562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1839bffad1eSTheodore Ts'o 		__entry->ino	= inode->i_ino;
18408cefc7aSEric W. Biederman 		__entry->uid	= i_uid_read(inode);
18508cefc7aSEric W. Biederman 		__entry->gid	= i_gid_read(inode);
1869bffad1eSTheodore Ts'o 		__entry->blocks	= inode->i_blocks;
187210c0526SAnatol Pomozov 		__entry->mode	= inode->i_mode;
1889bffad1eSTheodore Ts'o 	),
1899bffad1eSTheodore Ts'o 
190a269029dSTheodore Ts'o 	TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u blocks %llu",
1910562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
192a9c667f8SLukas Czerner 		  (unsigned long) __entry->ino, __entry->mode,
193a9c667f8SLukas Czerner 		  __entry->uid, __entry->gid, __entry->blocks)
1949bffad1eSTheodore Ts'o );
1959bffad1eSTheodore Ts'o 
1969bffad1eSTheodore Ts'o TRACE_EVENT(ext4_request_inode,
1979bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *dir, int mode),
1989bffad1eSTheodore Ts'o 
1999bffad1eSTheodore Ts'o 	TP_ARGS(dir, mode),
2009bffad1eSTheodore Ts'o 
2019bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
2020562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
2039bffad1eSTheodore Ts'o 		__field(	ino_t,	dir			)
20459be8e72STheodore Ts'o 		__field(	__u16, mode			)
2059bffad1eSTheodore Ts'o 	),
2069bffad1eSTheodore Ts'o 
2079bffad1eSTheodore Ts'o 	TP_fast_assign(
2080562e0baSJiaying Zhang 		__entry->dev	= dir->i_sb->s_dev;
2099bffad1eSTheodore Ts'o 		__entry->dir	= dir->i_ino;
2109bffad1eSTheodore Ts'o 		__entry->mode	= mode;
2119bffad1eSTheodore Ts'o 	),
2129bffad1eSTheodore Ts'o 
213a269029dSTheodore Ts'o 	TP_printk("dev %d,%d dir %lu mode 0%o",
2140562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
215a269029dSTheodore Ts'o 		  (unsigned long) __entry->dir, __entry->mode)
2169bffad1eSTheodore Ts'o );
2179bffad1eSTheodore Ts'o 
2189bffad1eSTheodore Ts'o TRACE_EVENT(ext4_allocate_inode,
2199bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode, struct inode *dir, int mode),
2209bffad1eSTheodore Ts'o 
2219bffad1eSTheodore Ts'o 	TP_ARGS(inode, dir, mode),
2229bffad1eSTheodore Ts'o 
2239bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
2240562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
2259bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
2269bffad1eSTheodore Ts'o 		__field(	ino_t,	dir			)
22759be8e72STheodore Ts'o 		__field(	__u16,	mode			)
2289bffad1eSTheodore Ts'o 	),
2299bffad1eSTheodore Ts'o 
2309bffad1eSTheodore Ts'o 	TP_fast_assign(
2310562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
2329bffad1eSTheodore Ts'o 		__entry->ino	= inode->i_ino;
2339bffad1eSTheodore Ts'o 		__entry->dir	= dir->i_ino;
2349bffad1eSTheodore Ts'o 		__entry->mode	= mode;
2359bffad1eSTheodore Ts'o 	),
2369bffad1eSTheodore Ts'o 
237a269029dSTheodore Ts'o 	TP_printk("dev %d,%d ino %lu dir %lu mode 0%o",
2380562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
239a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
240a3710fd1STheodore Ts'o 		  (unsigned long) __entry->dir, __entry->mode)
2419bffad1eSTheodore Ts'o );
2429bffad1eSTheodore Ts'o 
2437ff9c073STheodore Ts'o TRACE_EVENT(ext4_evict_inode,
2447ff9c073STheodore Ts'o 	TP_PROTO(struct inode *inode),
2457ff9c073STheodore Ts'o 
2467ff9c073STheodore Ts'o 	TP_ARGS(inode),
2477ff9c073STheodore Ts'o 
2487ff9c073STheodore Ts'o 	TP_STRUCT__entry(
2490562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
2507ff9c073STheodore Ts'o 		__field(	ino_t,	ino			)
2517ff9c073STheodore Ts'o 		__field(	int,	nlink			)
2527ff9c073STheodore Ts'o 	),
2537ff9c073STheodore Ts'o 
2547ff9c073STheodore Ts'o 	TP_fast_assign(
2550562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
2567ff9c073STheodore Ts'o 		__entry->ino	= inode->i_ino;
2577ff9c073STheodore Ts'o 		__entry->nlink	= inode->i_nlink;
2587ff9c073STheodore Ts'o 	),
2597ff9c073STheodore Ts'o 
2607ff9c073STheodore Ts'o 	TP_printk("dev %d,%d ino %lu nlink %d",
2610562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2627ff9c073STheodore Ts'o 		  (unsigned long) __entry->ino, __entry->nlink)
2637ff9c073STheodore Ts'o );
2647ff9c073STheodore Ts'o 
2657ff9c073STheodore Ts'o TRACE_EVENT(ext4_drop_inode,
2667ff9c073STheodore Ts'o 	TP_PROTO(struct inode *inode, int drop),
2677ff9c073STheodore Ts'o 
2687ff9c073STheodore Ts'o 	TP_ARGS(inode, drop),
2697ff9c073STheodore Ts'o 
2707ff9c073STheodore Ts'o 	TP_STRUCT__entry(
2710562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
2727ff9c073STheodore Ts'o 		__field(	ino_t,	ino			)
2737ff9c073STheodore Ts'o 		__field(	int,	drop			)
2747ff9c073STheodore Ts'o 	),
2757ff9c073STheodore Ts'o 
2767ff9c073STheodore Ts'o 	TP_fast_assign(
2770562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
2787ff9c073STheodore Ts'o 		__entry->ino	= inode->i_ino;
2797ff9c073STheodore Ts'o 		__entry->drop	= drop;
2807ff9c073STheodore Ts'o 	),
2817ff9c073STheodore Ts'o 
2827ff9c073STheodore Ts'o 	TP_printk("dev %d,%d ino %lu drop %d",
2830562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2847ff9c073STheodore Ts'o 		  (unsigned long) __entry->ino, __entry->drop)
2857ff9c073STheodore Ts'o );
2867ff9c073STheodore Ts'o 
287fde87268STheodore Ts'o TRACE_EVENT(ext4_nfs_commit_metadata,
288fde87268STheodore Ts'o 	TP_PROTO(struct inode *inode),
289fde87268STheodore Ts'o 
290fde87268STheodore Ts'o 	TP_ARGS(inode),
291fde87268STheodore Ts'o 
292fde87268STheodore Ts'o 	TP_STRUCT__entry(
293fde87268STheodore Ts'o 		__field(	dev_t,	dev			)
294fde87268STheodore Ts'o 		__field(	ino_t,	ino			)
295fde87268STheodore Ts'o 	),
296fde87268STheodore Ts'o 
297fde87268STheodore Ts'o 	TP_fast_assign(
298fde87268STheodore Ts'o 		__entry->dev	= inode->i_sb->s_dev;
299fde87268STheodore Ts'o 		__entry->ino	= inode->i_ino;
300fde87268STheodore Ts'o 	),
301fde87268STheodore Ts'o 
302fde87268STheodore Ts'o 	TP_printk("dev %d,%d ino %lu",
303fde87268STheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev),
304fde87268STheodore Ts'o 		  (unsigned long) __entry->ino)
305fde87268STheodore Ts'o );
306fde87268STheodore Ts'o 
3077ff9c073STheodore Ts'o TRACE_EVENT(ext4_mark_inode_dirty,
3087ff9c073STheodore Ts'o 	TP_PROTO(struct inode *inode, unsigned long IP),
3097ff9c073STheodore Ts'o 
3107ff9c073STheodore Ts'o 	TP_ARGS(inode, IP),
3117ff9c073STheodore Ts'o 
3127ff9c073STheodore Ts'o 	TP_STRUCT__entry(
3130562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
3147ff9c073STheodore Ts'o 		__field(	ino_t,	ino			)
3157ff9c073STheodore Ts'o 		__field(unsigned long,	ip			)
3167ff9c073STheodore Ts'o 	),
3177ff9c073STheodore Ts'o 
3187ff9c073STheodore Ts'o 	TP_fast_assign(
3190562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
3207ff9c073STheodore Ts'o 		__entry->ino	= inode->i_ino;
3217ff9c073STheodore Ts'o 		__entry->ip	= IP;
3227ff9c073STheodore Ts'o 	),
3237ff9c073STheodore Ts'o 
324bbedb179SScott Wood 	TP_printk("dev %d,%d ino %lu caller %pS",
3250562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3267ff9c073STheodore Ts'o 		  (unsigned long) __entry->ino, (void *)__entry->ip)
3277ff9c073STheodore Ts'o );
3287ff9c073STheodore Ts'o 
3297ff9c073STheodore Ts'o TRACE_EVENT(ext4_begin_ordered_truncate,
3307ff9c073STheodore Ts'o 	TP_PROTO(struct inode *inode, loff_t new_size),
3317ff9c073STheodore Ts'o 
3327ff9c073STheodore Ts'o 	TP_ARGS(inode, new_size),
3337ff9c073STheodore Ts'o 
3347ff9c073STheodore Ts'o 	TP_STRUCT__entry(
3350562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
3367ff9c073STheodore Ts'o 		__field(	ino_t,	ino			)
3377ff9c073STheodore Ts'o 		__field(	loff_t,	new_size		)
3387ff9c073STheodore Ts'o 	),
3397ff9c073STheodore Ts'o 
3407ff9c073STheodore Ts'o 	TP_fast_assign(
3410562e0baSJiaying Zhang 		__entry->dev		= inode->i_sb->s_dev;
3427ff9c073STheodore Ts'o 		__entry->ino		= inode->i_ino;
3437ff9c073STheodore Ts'o 		__entry->new_size	= new_size;
3447ff9c073STheodore Ts'o 	),
3457ff9c073STheodore Ts'o 
3467ff9c073STheodore Ts'o 	TP_printk("dev %d,%d ino %lu new_size %lld",
3470562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3487ff9c073STheodore Ts'o 		  (unsigned long) __entry->ino,
349a9c667f8SLukas Czerner 		  __entry->new_size)
3507ff9c073STheodore Ts'o );
3517ff9c073STheodore Ts'o 
352b5eb34c3SLi Zefan DECLARE_EVENT_CLASS(ext4__write_begin,
3539bffad1eSTheodore Ts'o 
3549d6b0cd7SMatthew Wilcox (Oracle) 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
3559bffad1eSTheodore Ts'o 
3569d6b0cd7SMatthew Wilcox (Oracle) 	TP_ARGS(inode, pos, len),
3579bffad1eSTheodore Ts'o 
3589bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
3590562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
3609bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
3619bffad1eSTheodore Ts'o 		__field(	loff_t,	pos			)
3629bffad1eSTheodore Ts'o 		__field(	unsigned int, len		)
3639bffad1eSTheodore Ts'o 	),
3649bffad1eSTheodore Ts'o 
3659bffad1eSTheodore Ts'o 	TP_fast_assign(
3660562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
3679bffad1eSTheodore Ts'o 		__entry->ino	= inode->i_ino;
3689bffad1eSTheodore Ts'o 		__entry->pos	= pos;
3699bffad1eSTheodore Ts'o 		__entry->len	= len;
3709bffad1eSTheodore Ts'o 	),
3719bffad1eSTheodore Ts'o 
3729d6b0cd7SMatthew Wilcox (Oracle) 	TP_printk("dev %d,%d ino %lu pos %lld len %u",
3730562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
374a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
3759d6b0cd7SMatthew Wilcox (Oracle) 		  __entry->pos, __entry->len)
3769bffad1eSTheodore Ts'o );
3779bffad1eSTheodore Ts'o 
378b5eb34c3SLi Zefan DEFINE_EVENT(ext4__write_begin, ext4_write_begin,
379b5eb34c3SLi Zefan 
3809d6b0cd7SMatthew Wilcox (Oracle) 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
381b5eb34c3SLi Zefan 
3829d6b0cd7SMatthew Wilcox (Oracle) 	TP_ARGS(inode, pos, len)
383b5eb34c3SLi Zefan );
384b5eb34c3SLi Zefan 
385b5eb34c3SLi Zefan DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin,
386b5eb34c3SLi Zefan 
3879d6b0cd7SMatthew Wilcox (Oracle) 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
388b5eb34c3SLi Zefan 
3899d6b0cd7SMatthew Wilcox (Oracle) 	TP_ARGS(inode, pos, len)
390b5eb34c3SLi Zefan );
391b5eb34c3SLi Zefan 
392b5eb34c3SLi Zefan DECLARE_EVENT_CLASS(ext4__write_end,
3939bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
3949bffad1eSTheodore Ts'o 			unsigned int copied),
3959bffad1eSTheodore Ts'o 
3969bffad1eSTheodore Ts'o 	TP_ARGS(inode, pos, len, copied),
3979bffad1eSTheodore Ts'o 
3989bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
3990562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
4009bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
4019bffad1eSTheodore Ts'o 		__field(	loff_t,	pos			)
4029bffad1eSTheodore Ts'o 		__field(	unsigned int, len		)
4039bffad1eSTheodore Ts'o 		__field(	unsigned int, copied		)
4049bffad1eSTheodore Ts'o 	),
4059bffad1eSTheodore Ts'o 
4069bffad1eSTheodore Ts'o 	TP_fast_assign(
4070562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
4089bffad1eSTheodore Ts'o 		__entry->ino	= inode->i_ino;
4099bffad1eSTheodore Ts'o 		__entry->pos	= pos;
4109bffad1eSTheodore Ts'o 		__entry->len	= len;
4119bffad1eSTheodore Ts'o 		__entry->copied	= copied;
4129bffad1eSTheodore Ts'o 	),
4139bffad1eSTheodore Ts'o 
414a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu pos %lld len %u copied %u",
4150562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
4160562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
4170562e0baSJiaying Zhang 		  __entry->pos, __entry->len, __entry->copied)
4189bffad1eSTheodore Ts'o );
4199bffad1eSTheodore Ts'o 
42074d553aaSTheodore Ts'o DEFINE_EVENT(ext4__write_end, ext4_write_end,
421b5eb34c3SLi Zefan 
4229bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
4239bffad1eSTheodore Ts'o 		 unsigned int copied),
4249bffad1eSTheodore Ts'o 
425b5eb34c3SLi Zefan 	TP_ARGS(inode, pos, len, copied)
426b5eb34c3SLi Zefan );
4279bffad1eSTheodore Ts'o 
428b5eb34c3SLi Zefan DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end,
4299bffad1eSTheodore Ts'o 
430b5eb34c3SLi Zefan 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
431b5eb34c3SLi Zefan 		 unsigned int copied),
432b5eb34c3SLi Zefan 
433b5eb34c3SLi Zefan 	TP_ARGS(inode, pos, len, copied)
434b5eb34c3SLi Zefan );
435b5eb34c3SLi Zefan 
436b5eb34c3SLi Zefan DEFINE_EVENT(ext4__write_end, ext4_da_write_end,
437b5eb34c3SLi Zefan 
438b5eb34c3SLi Zefan 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
439b5eb34c3SLi Zefan 		 unsigned int copied),
440b5eb34c3SLi Zefan 
441b5eb34c3SLi Zefan 	TP_ARGS(inode, pos, len, copied)
4429bffad1eSTheodore Ts'o );
4439bffad1eSTheodore Ts'o 
44420970ba6STheodore Ts'o TRACE_EVENT(ext4_writepages,
4459bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode, struct writeback_control *wbc),
4469bffad1eSTheodore Ts'o 
4479bffad1eSTheodore Ts'o 	TP_ARGS(inode, wbc),
4489bffad1eSTheodore Ts'o 
4499bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
4500562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
4519bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
4529bffad1eSTheodore Ts'o 		__field(	long,	nr_to_write		)
4539bffad1eSTheodore Ts'o 		__field(	long,	pages_skipped		)
4549bffad1eSTheodore Ts'o 		__field(	loff_t,	range_start		)
4559bffad1eSTheodore Ts'o 		__field(	loff_t,	range_end		)
456210c0526SAnatol Pomozov 		__field(       pgoff_t,	writeback_index		)
4570562e0baSJiaying Zhang 		__field(	int,	sync_mode		)
4589bffad1eSTheodore Ts'o 		__field(	char,	for_kupdate		)
4599bffad1eSTheodore Ts'o 		__field(	char,	range_cyclic		)
4609bffad1eSTheodore Ts'o 	),
4619bffad1eSTheodore Ts'o 
4629bffad1eSTheodore Ts'o 	TP_fast_assign(
4630562e0baSJiaying Zhang 		__entry->dev		= inode->i_sb->s_dev;
4649bffad1eSTheodore Ts'o 		__entry->ino		= inode->i_ino;
4659bffad1eSTheodore Ts'o 		__entry->nr_to_write	= wbc->nr_to_write;
4669bffad1eSTheodore Ts'o 		__entry->pages_skipped	= wbc->pages_skipped;
4679bffad1eSTheodore Ts'o 		__entry->range_start	= wbc->range_start;
4689bffad1eSTheodore Ts'o 		__entry->range_end	= wbc->range_end;
469210c0526SAnatol Pomozov 		__entry->writeback_index = inode->i_mapping->writeback_index;
4700562e0baSJiaying Zhang 		__entry->sync_mode	= wbc->sync_mode;
4719bffad1eSTheodore Ts'o 		__entry->for_kupdate	= wbc->for_kupdate;
4729bffad1eSTheodore Ts'o 		__entry->range_cyclic	= wbc->range_cyclic;
4739bffad1eSTheodore Ts'o 	),
4749bffad1eSTheodore Ts'o 
475a107e5a3STheodore Ts'o 	TP_printk("dev %d,%d ino %lu nr_to_write %ld pages_skipped %ld "
476a9c667f8SLukas Czerner 		  "range_start %lld range_end %lld sync_mode %d "
4770562e0baSJiaying Zhang 		  "for_kupdate %d range_cyclic %d writeback_index %lu",
4780562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
479a3710fd1STheodore Ts'o 		  (unsigned long) __entry->ino, __entry->nr_to_write,
4809bffad1eSTheodore Ts'o 		  __entry->pages_skipped, __entry->range_start,
4810562e0baSJiaying Zhang 		  __entry->range_end, __entry->sync_mode,
4820562e0baSJiaying Zhang 		  __entry->for_kupdate, __entry->range_cyclic,
48355138e0bSTheodore Ts'o 		  (unsigned long) __entry->writeback_index)
4849bffad1eSTheodore Ts'o );
4859bffad1eSTheodore Ts'o 
486b3a3ca8cSTheodore Ts'o TRACE_EVENT(ext4_da_write_pages,
4874e7ea81dSJan Kara 	TP_PROTO(struct inode *inode, pgoff_t first_page,
4884e7ea81dSJan Kara 		 struct writeback_control *wbc),
489b3a3ca8cSTheodore Ts'o 
4904e7ea81dSJan Kara 	TP_ARGS(inode, first_page, wbc),
491b3a3ca8cSTheodore Ts'o 
492b3a3ca8cSTheodore Ts'o 	TP_STRUCT__entry(
4930562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
494b3a3ca8cSTheodore Ts'o 		__field(	ino_t,	ino			)
4954e7ea81dSJan Kara 		__field(      pgoff_t,	first_page		)
4964e7ea81dSJan Kara 		__field(	 long,	nr_to_write		)
4970562e0baSJiaying Zhang 		__field(	  int,	sync_mode		)
498b3a3ca8cSTheodore Ts'o 	),
499b3a3ca8cSTheodore Ts'o 
500b3a3ca8cSTheodore Ts'o 	TP_fast_assign(
5010562e0baSJiaying Zhang 		__entry->dev		= inode->i_sb->s_dev;
502b3a3ca8cSTheodore Ts'o 		__entry->ino		= inode->i_ino;
5034e7ea81dSJan Kara 		__entry->first_page	= first_page;
5044e7ea81dSJan Kara 		__entry->nr_to_write	= wbc->nr_to_write;
5054e7ea81dSJan Kara 		__entry->sync_mode	= wbc->sync_mode;
506b3a3ca8cSTheodore Ts'o 	),
507b3a3ca8cSTheodore Ts'o 
5084e7ea81dSJan Kara 	TP_printk("dev %d,%d ino %lu first_page %lu nr_to_write %ld "
5094e7ea81dSJan Kara 		  "sync_mode %d",
5100562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
5114e7ea81dSJan Kara 		  (unsigned long) __entry->ino, __entry->first_page,
5124e7ea81dSJan Kara 		  __entry->nr_to_write, __entry->sync_mode)
5134e7ea81dSJan Kara );
5144e7ea81dSJan Kara 
5154e7ea81dSJan Kara TRACE_EVENT(ext4_da_write_pages_extent,
5164e7ea81dSJan Kara 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map),
5174e7ea81dSJan Kara 
5184e7ea81dSJan Kara 	TP_ARGS(inode, map),
5194e7ea81dSJan Kara 
5204e7ea81dSJan Kara 	TP_STRUCT__entry(
5214e7ea81dSJan Kara 		__field(	dev_t,	dev			)
5224e7ea81dSJan Kara 		__field(	ino_t,	ino			)
5234e7ea81dSJan Kara 		__field(	__u64,	lblk			)
5244e7ea81dSJan Kara 		__field(	__u32,	len			)
5254e7ea81dSJan Kara 		__field(	__u32,	flags			)
5264e7ea81dSJan Kara 	),
5274e7ea81dSJan Kara 
5284e7ea81dSJan Kara 	TP_fast_assign(
5294e7ea81dSJan Kara 		__entry->dev		= inode->i_sb->s_dev;
5304e7ea81dSJan Kara 		__entry->ino		= inode->i_ino;
5314e7ea81dSJan Kara 		__entry->lblk		= map->m_lblk;
5324e7ea81dSJan Kara 		__entry->len		= map->m_len;
5334e7ea81dSJan Kara 		__entry->flags		= map->m_flags;
5344e7ea81dSJan Kara 	),
5354e7ea81dSJan Kara 
53621ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu lblk %llu len %u flags %s",
5374e7ea81dSJan Kara 		  MAJOR(__entry->dev), MINOR(__entry->dev),
5384e7ea81dSJan Kara 		  (unsigned long) __entry->ino, __entry->lblk, __entry->len,
53921ddd568STheodore Ts'o 		  show_mflags(__entry->flags))
540b3a3ca8cSTheodore Ts'o );
541b3a3ca8cSTheodore Ts'o 
54220970ba6STheodore Ts'o TRACE_EVENT(ext4_writepages_result,
5439bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode, struct writeback_control *wbc,
5449bffad1eSTheodore Ts'o 			int ret, int pages_written),
5459bffad1eSTheodore Ts'o 
5469bffad1eSTheodore Ts'o 	TP_ARGS(inode, wbc, ret, pages_written),
5479bffad1eSTheodore Ts'o 
5489bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
5490562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
5509bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
5519bffad1eSTheodore Ts'o 		__field(	int,	ret			)
5529bffad1eSTheodore Ts'o 		__field(	int,	pages_written		)
5539bffad1eSTheodore Ts'o 		__field(	long,	pages_skipped		)
55455138e0bSTheodore Ts'o 		__field(       pgoff_t,	writeback_index		)
555210c0526SAnatol Pomozov 		__field(	int,	sync_mode		)
5569bffad1eSTheodore Ts'o 	),
5579bffad1eSTheodore Ts'o 
5589bffad1eSTheodore Ts'o 	TP_fast_assign(
5590562e0baSJiaying Zhang 		__entry->dev		= inode->i_sb->s_dev;
5609bffad1eSTheodore Ts'o 		__entry->ino		= inode->i_ino;
5619bffad1eSTheodore Ts'o 		__entry->ret		= ret;
5629bffad1eSTheodore Ts'o 		__entry->pages_written	= pages_written;
5639bffad1eSTheodore Ts'o 		__entry->pages_skipped	= wbc->pages_skipped;
56455138e0bSTheodore Ts'o 		__entry->writeback_index = inode->i_mapping->writeback_index;
565210c0526SAnatol Pomozov 		__entry->sync_mode	= wbc->sync_mode;
5669bffad1eSTheodore Ts'o 	),
5679bffad1eSTheodore Ts'o 
5680562e0baSJiaying Zhang 	TP_printk("dev %d,%d ino %lu ret %d pages_written %d pages_skipped %ld "
569b7a2441fSWu Fengguang 		  "sync_mode %d writeback_index %lu",
5700562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
571a3710fd1STheodore Ts'o 		  (unsigned long) __entry->ino, __entry->ret,
5729bffad1eSTheodore Ts'o 		  __entry->pages_written, __entry->pages_skipped,
573b7a2441fSWu Fengguang 		  __entry->sync_mode,
57455138e0bSTheodore Ts'o 		  (unsigned long) __entry->writeback_index)
5759bffad1eSTheodore Ts'o );
5769bffad1eSTheodore Ts'o 
57736c9b450SRitesh Harjani DECLARE_EVENT_CLASS(ext4__folio_op,
57836c9b450SRitesh Harjani 	TP_PROTO(struct inode *inode, struct folio *folio),
5790562e0baSJiaying Zhang 
58036c9b450SRitesh Harjani 	TP_ARGS(inode, folio),
5810562e0baSJiaying Zhang 
5820562e0baSJiaying Zhang 	TP_STRUCT__entry(
5830562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
584210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
585210c0526SAnatol Pomozov 		__field(	pgoff_t, index			)
5860562e0baSJiaying Zhang 
5870562e0baSJiaying Zhang 	),
5880562e0baSJiaying Zhang 
5890562e0baSJiaying Zhang 	TP_fast_assign(
59036c9b450SRitesh Harjani 		__entry->dev	= inode->i_sb->s_dev;
59136c9b450SRitesh Harjani 		__entry->ino	= inode->i_ino;
59236c9b450SRitesh Harjani 		__entry->index	= folio->index;
5930562e0baSJiaying Zhang 	),
5940562e0baSJiaying Zhang 
59536c9b450SRitesh Harjani 	TP_printk("dev %d,%d ino %lu folio_index %lu",
5960562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
5970562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
598a9c667f8SLukas Czerner 		  (unsigned long) __entry->index)
599a9c667f8SLukas Czerner );
600a9c667f8SLukas Czerner 
60136c9b450SRitesh Harjani DEFINE_EVENT(ext4__folio_op, ext4_read_folio,
6020562e0baSJiaying Zhang 
60336c9b450SRitesh Harjani 	TP_PROTO(struct inode *inode, struct folio *folio),
6040562e0baSJiaying Zhang 
60536c9b450SRitesh Harjani 	TP_ARGS(inode, folio)
6060562e0baSJiaying Zhang );
6070562e0baSJiaying Zhang 
60836c9b450SRitesh Harjani DEFINE_EVENT(ext4__folio_op, ext4_release_folio,
6090562e0baSJiaying Zhang 
61036c9b450SRitesh Harjani 	TP_PROTO(struct inode *inode, struct folio *folio),
6110562e0baSJiaying Zhang 
61236c9b450SRitesh Harjani 	TP_ARGS(inode, folio)
6130562e0baSJiaying Zhang );
6140562e0baSJiaying Zhang 
615ccd16945SMatthew Wilcox (Oracle) DECLARE_EVENT_CLASS(ext4_invalidate_folio_op,
616ccd16945SMatthew Wilcox (Oracle) 	TP_PROTO(struct folio *folio, size_t offset, size_t length),
6170562e0baSJiaying Zhang 
618ccd16945SMatthew Wilcox (Oracle) 	TP_ARGS(folio, offset, length),
6190562e0baSJiaying Zhang 
6200562e0baSJiaying Zhang 	TP_STRUCT__entry(
621210c0526SAnatol Pomozov 		__field(	dev_t,	dev			)
622210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
6230562e0baSJiaying Zhang 		__field(	pgoff_t, index			)
624ccd16945SMatthew Wilcox (Oracle) 		__field(	size_t, offset			)
625ccd16945SMatthew Wilcox (Oracle) 		__field(	size_t, length			)
6260562e0baSJiaying Zhang 	),
6270562e0baSJiaying Zhang 
6280562e0baSJiaying Zhang 	TP_fast_assign(
629ccd16945SMatthew Wilcox (Oracle) 		__entry->dev	= folio->mapping->host->i_sb->s_dev;
630ccd16945SMatthew Wilcox (Oracle) 		__entry->ino	= folio->mapping->host->i_ino;
631ccd16945SMatthew Wilcox (Oracle) 		__entry->index	= folio->index;
6320562e0baSJiaying Zhang 		__entry->offset	= offset;
633ca99fdd2SLukas Czerner 		__entry->length	= length;
6340562e0baSJiaying Zhang 	),
6350562e0baSJiaying Zhang 
636ccd16945SMatthew Wilcox (Oracle) 	TP_printk("dev %d,%d ino %lu folio_index %lu offset %zu length %zu",
6370562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
6380562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
639ca99fdd2SLukas Czerner 		  (unsigned long) __entry->index,
640ca99fdd2SLukas Czerner 		  __entry->offset, __entry->length)
6410562e0baSJiaying Zhang );
6420562e0baSJiaying Zhang 
643ccd16945SMatthew Wilcox (Oracle) DEFINE_EVENT(ext4_invalidate_folio_op, ext4_invalidate_folio,
644ccd16945SMatthew Wilcox (Oracle) 	TP_PROTO(struct folio *folio, size_t offset, size_t length),
6454520fb3cSJan Kara 
646ccd16945SMatthew Wilcox (Oracle) 	TP_ARGS(folio, offset, length)
6474520fb3cSJan Kara );
6484520fb3cSJan Kara 
649ccd16945SMatthew Wilcox (Oracle) DEFINE_EVENT(ext4_invalidate_folio_op, ext4_journalled_invalidate_folio,
650ccd16945SMatthew Wilcox (Oracle) 	TP_PROTO(struct folio *folio, size_t offset, size_t length),
6514520fb3cSJan Kara 
652ccd16945SMatthew Wilcox (Oracle) 	TP_ARGS(folio, offset, length)
6534520fb3cSJan Kara );
6544520fb3cSJan Kara 
6559bffad1eSTheodore Ts'o TRACE_EVENT(ext4_discard_blocks,
6569bffad1eSTheodore Ts'o 	TP_PROTO(struct super_block *sb, unsigned long long blk,
6579bffad1eSTheodore Ts'o 			unsigned long long count),
6589bffad1eSTheodore Ts'o 
6599bffad1eSTheodore Ts'o 	TP_ARGS(sb, blk, count),
6609bffad1eSTheodore Ts'o 
6619bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
6620562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
6639bffad1eSTheodore Ts'o 		__field(	__u64,	blk			)
6649bffad1eSTheodore Ts'o 		__field(	__u64,	count			)
6659bffad1eSTheodore Ts'o 
6669bffad1eSTheodore Ts'o 	),
6679bffad1eSTheodore Ts'o 
6689bffad1eSTheodore Ts'o 	TP_fast_assign(
6690562e0baSJiaying Zhang 		__entry->dev	= sb->s_dev;
6709bffad1eSTheodore Ts'o 		__entry->blk	= blk;
6719bffad1eSTheodore Ts'o 		__entry->count	= count;
6729bffad1eSTheodore Ts'o 	),
6739bffad1eSTheodore Ts'o 
674a269029dSTheodore Ts'o 	TP_printk("dev %d,%d blk %llu count %llu",
6750562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
676a269029dSTheodore Ts'o 		  __entry->blk, __entry->count)
6779bffad1eSTheodore Ts'o );
6789bffad1eSTheodore Ts'o 
679f084db93SLi Zefan DECLARE_EVENT_CLASS(ext4__mb_new_pa,
6809bffad1eSTheodore Ts'o 	TP_PROTO(struct ext4_allocation_context *ac,
6819bffad1eSTheodore Ts'o 		 struct ext4_prealloc_space *pa),
6829bffad1eSTheodore Ts'o 
6839bffad1eSTheodore Ts'o 	TP_ARGS(ac, pa),
6849bffad1eSTheodore Ts'o 
6859bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
6860562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
6879bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
6889bffad1eSTheodore Ts'o 		__field(	__u64,	pa_pstart		)
6899bffad1eSTheodore Ts'o 		__field(	__u64,	pa_lstart		)
690210c0526SAnatol Pomozov 		__field(	__u32,	pa_len			)
6919bffad1eSTheodore Ts'o 
6929bffad1eSTheodore Ts'o 	),
6939bffad1eSTheodore Ts'o 
6949bffad1eSTheodore Ts'o 	TP_fast_assign(
6950562e0baSJiaying Zhang 		__entry->dev		= ac->ac_sb->s_dev;
6969bffad1eSTheodore Ts'o 		__entry->ino		= ac->ac_inode->i_ino;
6979bffad1eSTheodore Ts'o 		__entry->pa_pstart	= pa->pa_pstart;
6989bffad1eSTheodore Ts'o 		__entry->pa_lstart	= pa->pa_lstart;
699210c0526SAnatol Pomozov 		__entry->pa_len		= pa->pa_len;
7009bffad1eSTheodore Ts'o 	),
7019bffad1eSTheodore Ts'o 
702a269029dSTheodore Ts'o 	TP_printk("dev %d,%d ino %lu pstart %llu len %u lstart %llu",
7030562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
7040562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
7050562e0baSJiaying Zhang 		  __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart)
7069bffad1eSTheodore Ts'o );
7079bffad1eSTheodore Ts'o 
708f084db93SLi Zefan DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_inode_pa,
709f084db93SLi Zefan 
7109bffad1eSTheodore Ts'o 	TP_PROTO(struct ext4_allocation_context *ac,
7119bffad1eSTheodore Ts'o 		 struct ext4_prealloc_space *pa),
7129bffad1eSTheodore Ts'o 
713f084db93SLi Zefan 	TP_ARGS(ac, pa)
714f084db93SLi Zefan );
7159bffad1eSTheodore Ts'o 
716f084db93SLi Zefan DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_group_pa,
7179bffad1eSTheodore Ts'o 
718f084db93SLi Zefan 	TP_PROTO(struct ext4_allocation_context *ac,
719f084db93SLi Zefan 		 struct ext4_prealloc_space *pa),
7209bffad1eSTheodore Ts'o 
721f084db93SLi Zefan 	TP_ARGS(ac, pa)
7229bffad1eSTheodore Ts'o );
7239bffad1eSTheodore Ts'o 
7249bffad1eSTheodore Ts'o TRACE_EVENT(ext4_mb_release_inode_pa,
725a9c667f8SLukas Czerner 	TP_PROTO(struct ext4_prealloc_space *pa,
7269bffad1eSTheodore Ts'o 		 unsigned long long block, unsigned int count),
7279bffad1eSTheodore Ts'o 
728a9c667f8SLukas Czerner 	TP_ARGS(pa, block, count),
7299bffad1eSTheodore Ts'o 
7309bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
7310562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
7329bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
7339bffad1eSTheodore Ts'o 		__field(	__u64,	block			)
7349bffad1eSTheodore Ts'o 		__field(	__u32,	count			)
7359bffad1eSTheodore Ts'o 
7369bffad1eSTheodore Ts'o 	),
7379bffad1eSTheodore Ts'o 
7389bffad1eSTheodore Ts'o 	TP_fast_assign(
739a9c667f8SLukas Czerner 		__entry->dev		= pa->pa_inode->i_sb->s_dev;
740a9c667f8SLukas Czerner 		__entry->ino		= pa->pa_inode->i_ino;
7419bffad1eSTheodore Ts'o 		__entry->block		= block;
7429bffad1eSTheodore Ts'o 		__entry->count		= count;
7439bffad1eSTheodore Ts'o 	),
7449bffad1eSTheodore Ts'o 
745a269029dSTheodore Ts'o 	TP_printk("dev %d,%d ino %lu block %llu count %u",
7460562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
7470562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
7480562e0baSJiaying Zhang 		  __entry->block, __entry->count)
7499bffad1eSTheodore Ts'o );
7509bffad1eSTheodore Ts'o 
7519bffad1eSTheodore Ts'o TRACE_EVENT(ext4_mb_release_group_pa,
75260e07cf5SYongqiang Yang 	TP_PROTO(struct super_block *sb, struct ext4_prealloc_space *pa),
7539bffad1eSTheodore Ts'o 
75460e07cf5SYongqiang Yang 	TP_ARGS(sb, pa),
7559bffad1eSTheodore Ts'o 
7569bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
7570562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
7589bffad1eSTheodore Ts'o 		__field(	__u64,	pa_pstart		)
7599bffad1eSTheodore Ts'o 		__field(	__u32,	pa_len			)
7609bffad1eSTheodore Ts'o 
7619bffad1eSTheodore Ts'o 	),
7629bffad1eSTheodore Ts'o 
7639bffad1eSTheodore Ts'o 	TP_fast_assign(
76460e07cf5SYongqiang Yang 		__entry->dev		= sb->s_dev;
7659bffad1eSTheodore Ts'o 		__entry->pa_pstart	= pa->pa_pstart;
7669bffad1eSTheodore Ts'o 		__entry->pa_len		= pa->pa_len;
7679bffad1eSTheodore Ts'o 	),
7689bffad1eSTheodore Ts'o 
769a269029dSTheodore Ts'o 	TP_printk("dev %d,%d pstart %llu len %u",
7700562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
771a269029dSTheodore Ts'o 		  __entry->pa_pstart, __entry->pa_len)
7729bffad1eSTheodore Ts'o );
7739bffad1eSTheodore Ts'o 
7749bffad1eSTheodore Ts'o TRACE_EVENT(ext4_discard_preallocations,
77527bc446eSbrookxu 	TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed),
7769bffad1eSTheodore Ts'o 
77727bc446eSbrookxu 	TP_ARGS(inode, len, needed),
7789bffad1eSTheodore Ts'o 
7799bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
7800562e0baSJiaying Zhang 		__field(	dev_t,		dev		)
7819bffad1eSTheodore Ts'o 		__field(	ino_t,		ino		)
78227bc446eSbrookxu 		__field(	unsigned int,	len		)
78327bc446eSbrookxu 		__field(	unsigned int,	needed		)
7849bffad1eSTheodore Ts'o 
7859bffad1eSTheodore Ts'o 	),
7869bffad1eSTheodore Ts'o 
7879bffad1eSTheodore Ts'o 	TP_fast_assign(
7880562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
7899bffad1eSTheodore Ts'o 		__entry->ino	= inode->i_ino;
79027bc446eSbrookxu 		__entry->len	= len;
79127bc446eSbrookxu 		__entry->needed	= needed;
7929bffad1eSTheodore Ts'o 	),
7939bffad1eSTheodore Ts'o 
79427bc446eSbrookxu 	TP_printk("dev %d,%d ino %lu len: %u needed %u",
7950562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
79627bc446eSbrookxu 		  (unsigned long) __entry->ino, __entry->len,
79727bc446eSbrookxu 		  __entry->needed)
7989bffad1eSTheodore Ts'o );
7999bffad1eSTheodore Ts'o 
8009bffad1eSTheodore Ts'o TRACE_EVENT(ext4_mb_discard_preallocations,
8019bffad1eSTheodore Ts'o 	TP_PROTO(struct super_block *sb, int needed),
8029bffad1eSTheodore Ts'o 
8039bffad1eSTheodore Ts'o 	TP_ARGS(sb, needed),
8049bffad1eSTheodore Ts'o 
8059bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
8060562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
8079bffad1eSTheodore Ts'o 		__field(	int,	needed			)
8089bffad1eSTheodore Ts'o 
8099bffad1eSTheodore Ts'o 	),
8109bffad1eSTheodore Ts'o 
8119bffad1eSTheodore Ts'o 	TP_fast_assign(
8120562e0baSJiaying Zhang 		__entry->dev	= sb->s_dev;
8139bffad1eSTheodore Ts'o 		__entry->needed	= needed;
8149bffad1eSTheodore Ts'o 	),
8159bffad1eSTheodore Ts'o 
816a269029dSTheodore Ts'o 	TP_printk("dev %d,%d needed %d",
8170562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
8180562e0baSJiaying Zhang 		  __entry->needed)
8199bffad1eSTheodore Ts'o );
8209bffad1eSTheodore Ts'o 
8219bffad1eSTheodore Ts'o TRACE_EVENT(ext4_request_blocks,
8229bffad1eSTheodore Ts'o 	TP_PROTO(struct ext4_allocation_request *ar),
8239bffad1eSTheodore Ts'o 
8249bffad1eSTheodore Ts'o 	TP_ARGS(ar),
8259bffad1eSTheodore Ts'o 
8269bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
8270562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
8289bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
8299bffad1eSTheodore Ts'o 		__field(	unsigned int, len		)
830a9c667f8SLukas Czerner 		__field(	__u32,  logical			)
831a9c667f8SLukas Czerner 		__field(	__u32,	lleft			)
832a9c667f8SLukas Czerner 		__field(	__u32,	lright			)
8339bffad1eSTheodore Ts'o 		__field(	__u64,	goal			)
8349bffad1eSTheodore Ts'o 		__field(	__u64,	pleft			)
8359bffad1eSTheodore Ts'o 		__field(	__u64,	pright			)
836210c0526SAnatol Pomozov 		__field(	unsigned int, flags		)
8379bffad1eSTheodore Ts'o 	),
8389bffad1eSTheodore Ts'o 
8399bffad1eSTheodore Ts'o 	TP_fast_assign(
8400562e0baSJiaying Zhang 		__entry->dev	= ar->inode->i_sb->s_dev;
8419bffad1eSTheodore Ts'o 		__entry->ino	= ar->inode->i_ino;
8429bffad1eSTheodore Ts'o 		__entry->len	= ar->len;
8439bffad1eSTheodore Ts'o 		__entry->logical = ar->logical;
8449bffad1eSTheodore Ts'o 		__entry->goal	= ar->goal;
8459bffad1eSTheodore Ts'o 		__entry->lleft	= ar->lleft;
8469bffad1eSTheodore Ts'o 		__entry->lright	= ar->lright;
8479bffad1eSTheodore Ts'o 		__entry->pleft	= ar->pleft;
8489bffad1eSTheodore Ts'o 		__entry->pright	= ar->pright;
849210c0526SAnatol Pomozov 		__entry->flags	= ar->flags;
8509bffad1eSTheodore Ts'o 	),
8519bffad1eSTheodore Ts'o 
85221ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu flags %s len %u lblk %u goal %llu "
853a9c667f8SLukas Czerner 		  "lleft %u lright %u pleft %llu pright %llu ",
8540562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
85521ddd568STheodore Ts'o 		  (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags),
856a9c667f8SLukas Czerner 		  __entry->len, __entry->logical, __entry->goal,
857a9c667f8SLukas Czerner 		  __entry->lleft, __entry->lright, __entry->pleft,
858a9c667f8SLukas Czerner 		  __entry->pright)
8599bffad1eSTheodore Ts'o );
8609bffad1eSTheodore Ts'o 
8619bffad1eSTheodore Ts'o TRACE_EVENT(ext4_allocate_blocks,
8629bffad1eSTheodore Ts'o 	TP_PROTO(struct ext4_allocation_request *ar, unsigned long long block),
8639bffad1eSTheodore Ts'o 
8649bffad1eSTheodore Ts'o 	TP_ARGS(ar, block),
8659bffad1eSTheodore Ts'o 
8669bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
8670562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
8689bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
8699bffad1eSTheodore Ts'o 		__field(	__u64,	block			)
8709bffad1eSTheodore Ts'o 		__field(	unsigned int, len		)
871a9c667f8SLukas Czerner 		__field(	__u32,  logical			)
872a9c667f8SLukas Czerner 		__field(	__u32,	lleft			)
873a9c667f8SLukas Czerner 		__field(	__u32,	lright			)
8749bffad1eSTheodore Ts'o 		__field(	__u64,	goal			)
8759bffad1eSTheodore Ts'o 		__field(	__u64,	pleft			)
8769bffad1eSTheodore Ts'o 		__field(	__u64,	pright			)
877210c0526SAnatol Pomozov 		__field(	unsigned int, flags		)
8789bffad1eSTheodore Ts'o 	),
8799bffad1eSTheodore Ts'o 
8809bffad1eSTheodore Ts'o 	TP_fast_assign(
8810562e0baSJiaying Zhang 		__entry->dev	= ar->inode->i_sb->s_dev;
8829bffad1eSTheodore Ts'o 		__entry->ino	= ar->inode->i_ino;
8839bffad1eSTheodore Ts'o 		__entry->block	= block;
8849bffad1eSTheodore Ts'o 		__entry->len	= ar->len;
8859bffad1eSTheodore Ts'o 		__entry->logical = ar->logical;
8869bffad1eSTheodore Ts'o 		__entry->goal	= ar->goal;
8879bffad1eSTheodore Ts'o 		__entry->lleft	= ar->lleft;
8889bffad1eSTheodore Ts'o 		__entry->lright	= ar->lright;
8899bffad1eSTheodore Ts'o 		__entry->pleft	= ar->pleft;
8909bffad1eSTheodore Ts'o 		__entry->pright	= ar->pright;
891210c0526SAnatol Pomozov 		__entry->flags	= ar->flags;
8929bffad1eSTheodore Ts'o 	),
8939bffad1eSTheodore Ts'o 
89421ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu flags %s len %u block %llu lblk %u "
895a9c667f8SLukas Czerner 		  "goal %llu lleft %u lright %u pleft %llu pright %llu",
8960562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
89721ddd568STheodore Ts'o 		  (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags),
898a9c667f8SLukas Czerner 		  __entry->len, __entry->block, __entry->logical,
899a9c667f8SLukas Czerner 		  __entry->goal,  __entry->lleft, __entry->lright,
900a9c667f8SLukas Czerner 		  __entry->pleft, __entry->pright)
9019bffad1eSTheodore Ts'o );
9029bffad1eSTheodore Ts'o 
9039bffad1eSTheodore Ts'o TRACE_EVENT(ext4_free_blocks,
9049bffad1eSTheodore Ts'o 	TP_PROTO(struct inode *inode, __u64 block, unsigned long count,
905e6362609STheodore Ts'o 		 int flags),
9069bffad1eSTheodore Ts'o 
907e6362609STheodore Ts'o 	TP_ARGS(inode, block, count, flags),
9089bffad1eSTheodore Ts'o 
9099bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
9100562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
9119bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
9129bffad1eSTheodore Ts'o 		__field(	__u64,	block			)
9139bffad1eSTheodore Ts'o 		__field(	unsigned long,	count		)
914e6362609STheodore Ts'o 		__field(	int,	flags			)
915210c0526SAnatol Pomozov 		__field(	__u16,	mode			)
9169bffad1eSTheodore Ts'o 	),
9179bffad1eSTheodore Ts'o 
9189bffad1eSTheodore Ts'o 	TP_fast_assign(
9190562e0baSJiaying Zhang 		__entry->dev		= inode->i_sb->s_dev;
9209bffad1eSTheodore Ts'o 		__entry->ino		= inode->i_ino;
9219bffad1eSTheodore Ts'o 		__entry->block		= block;
9229bffad1eSTheodore Ts'o 		__entry->count		= count;
923e6362609STheodore Ts'o 		__entry->flags		= flags;
924210c0526SAnatol Pomozov 		__entry->mode		= inode->i_mode;
9259bffad1eSTheodore Ts'o 	),
9269bffad1eSTheodore Ts'o 
92721ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu mode 0%o block %llu count %lu flags %s",
9280562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
929a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
930e6362609STheodore Ts'o 		  __entry->mode, __entry->block, __entry->count,
93121ddd568STheodore Ts'o 		  show_free_flags(__entry->flags))
9329bffad1eSTheodore Ts'o );
9339bffad1eSTheodore Ts'o 
9340562e0baSJiaying Zhang TRACE_EVENT(ext4_sync_file_enter,
9357ea80859SChristoph Hellwig 	TP_PROTO(struct file *file, int datasync),
9369bffad1eSTheodore Ts'o 
9377ea80859SChristoph Hellwig 	TP_ARGS(file, datasync),
9389bffad1eSTheodore Ts'o 
9399bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
9400562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
9419bffad1eSTheodore Ts'o 		__field(	ino_t,	ino			)
9429bffad1eSTheodore Ts'o 		__field(	ino_t,	parent			)
9439bffad1eSTheodore Ts'o 		__field(	int,	datasync		)
9449bffad1eSTheodore Ts'o 	),
9459bffad1eSTheodore Ts'o 
9469bffad1eSTheodore Ts'o 	TP_fast_assign(
9477ea80859SChristoph Hellwig 		struct dentry *dentry = file->f_path.dentry;
9487ea80859SChristoph Hellwig 
949fc64005cSAl Viro 		__entry->dev		= dentry->d_sb->s_dev;
9502b0143b5SDavid Howells 		__entry->ino		= d_inode(dentry)->i_ino;
9519bffad1eSTheodore Ts'o 		__entry->datasync	= datasync;
9522b0143b5SDavid Howells 		__entry->parent		= d_inode(dentry->d_parent)->i_ino;
9539bffad1eSTheodore Ts'o 	),
9549bffad1eSTheodore Ts'o 
955a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu parent %lu datasync %d ",
9560562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
957a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
958a3710fd1STheodore Ts'o 		  (unsigned long) __entry->parent, __entry->datasync)
9599bffad1eSTheodore Ts'o );
9609bffad1eSTheodore Ts'o 
9610562e0baSJiaying Zhang TRACE_EVENT(ext4_sync_file_exit,
9620562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode, int ret),
9630562e0baSJiaying Zhang 
9640562e0baSJiaying Zhang 	TP_ARGS(inode, ret),
9650562e0baSJiaying Zhang 
9660562e0baSJiaying Zhang 	TP_STRUCT__entry(
9670562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
968210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
969210c0526SAnatol Pomozov 		__field(	int,	ret			)
9700562e0baSJiaying Zhang 	),
9710562e0baSJiaying Zhang 
9720562e0baSJiaying Zhang 	TP_fast_assign(
9730562e0baSJiaying Zhang 		__entry->dev		= inode->i_sb->s_dev;
974210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
975210c0526SAnatol Pomozov 		__entry->ret		= ret;
9760562e0baSJiaying Zhang 	),
9770562e0baSJiaying Zhang 
978a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu ret %d",
9790562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
9800562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
9810562e0baSJiaying Zhang 		  __entry->ret)
9820562e0baSJiaying Zhang );
9830562e0baSJiaying Zhang 
9849bffad1eSTheodore Ts'o TRACE_EVENT(ext4_sync_fs,
9859bffad1eSTheodore Ts'o 	TP_PROTO(struct super_block *sb, int wait),
9869bffad1eSTheodore Ts'o 
9879bffad1eSTheodore Ts'o 	TP_ARGS(sb, wait),
9889bffad1eSTheodore Ts'o 
9899bffad1eSTheodore Ts'o 	TP_STRUCT__entry(
9900562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
9919bffad1eSTheodore Ts'o 		__field(	int,	wait			)
9929bffad1eSTheodore Ts'o 
9939bffad1eSTheodore Ts'o 	),
9949bffad1eSTheodore Ts'o 
9959bffad1eSTheodore Ts'o 	TP_fast_assign(
9960562e0baSJiaying Zhang 		__entry->dev	= sb->s_dev;
9979bffad1eSTheodore Ts'o 		__entry->wait	= wait;
9989bffad1eSTheodore Ts'o 	),
9999bffad1eSTheodore Ts'o 
10000562e0baSJiaying Zhang 	TP_printk("dev %d,%d wait %d",
10010562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
10020562e0baSJiaying Zhang 		  __entry->wait)
10039bffad1eSTheodore Ts'o );
10049bffad1eSTheodore Ts'o 
1005fb40ba0dSTheodore Ts'o TRACE_EVENT(ext4_alloc_da_blocks,
1006fb40ba0dSTheodore Ts'o 	TP_PROTO(struct inode *inode),
1007fb40ba0dSTheodore Ts'o 
1008fb40ba0dSTheodore Ts'o 	TP_ARGS(inode),
1009fb40ba0dSTheodore Ts'o 
1010fb40ba0dSTheodore Ts'o 	TP_STRUCT__entry(
10110562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1012fb40ba0dSTheodore Ts'o 		__field(	ino_t,	ino			)
1013fb40ba0dSTheodore Ts'o 		__field( unsigned int,	data_blocks		)
1014fb40ba0dSTheodore Ts'o 	),
1015fb40ba0dSTheodore Ts'o 
1016fb40ba0dSTheodore Ts'o 	TP_fast_assign(
10170562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1018fb40ba0dSTheodore Ts'o 		__entry->ino	= inode->i_ino;
1019fb40ba0dSTheodore Ts'o 		__entry->data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1020fb40ba0dSTheodore Ts'o 	),
1021fb40ba0dSTheodore Ts'o 
1022a627b0a7SEric Whitney 	TP_printk("dev %d,%d ino %lu reserved_data_blocks %u",
10230562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1024a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
1025a627b0a7SEric Whitney 		  __entry->data_blocks)
1026fb40ba0dSTheodore Ts'o );
1027fb40ba0dSTheodore Ts'o 
1028296c355cSTheodore Ts'o TRACE_EVENT(ext4_mballoc_alloc,
1029296c355cSTheodore Ts'o 	TP_PROTO(struct ext4_allocation_context *ac),
1030296c355cSTheodore Ts'o 
1031296c355cSTheodore Ts'o 	TP_ARGS(ac),
1032296c355cSTheodore Ts'o 
1033296c355cSTheodore Ts'o 	TP_STRUCT__entry(
10340562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1035296c355cSTheodore Ts'o 		__field(	ino_t,	ino			)
1036296c355cSTheodore Ts'o 		__field(	__u32, 	orig_logical		)
1037296c355cSTheodore Ts'o 		__field(	  int,	orig_start		)
1038296c355cSTheodore Ts'o 		__field(	__u32, 	orig_group		)
1039296c355cSTheodore Ts'o 		__field(	  int,	orig_len		)
1040296c355cSTheodore Ts'o 		__field(	__u32, 	goal_logical		)
1041296c355cSTheodore Ts'o 		__field(	  int,	goal_start		)
1042296c355cSTheodore Ts'o 		__field(	__u32, 	goal_group		)
1043296c355cSTheodore Ts'o 		__field(	  int,	goal_len		)
1044296c355cSTheodore Ts'o 		__field(	__u32, 	result_logical		)
1045296c355cSTheodore Ts'o 		__field(	  int,	result_start		)
1046296c355cSTheodore Ts'o 		__field(	__u32, 	result_group		)
1047296c355cSTheodore Ts'o 		__field(	  int,	result_len		)
1048210c0526SAnatol Pomozov 		__field(	__u16,	found			)
1049210c0526SAnatol Pomozov 		__field(	__u16,	groups			)
1050210c0526SAnatol Pomozov 		__field(	__u16,	buddy			)
1051210c0526SAnatol Pomozov 		__field(	__u16,	flags			)
1052210c0526SAnatol Pomozov 		__field(	__u16,	tail			)
1053210c0526SAnatol Pomozov 		__field(	__u8,	cr			)
1054296c355cSTheodore Ts'o 	),
1055296c355cSTheodore Ts'o 
1056296c355cSTheodore Ts'o 	TP_fast_assign(
10570562e0baSJiaying Zhang 		__entry->dev		= ac->ac_inode->i_sb->s_dev;
1058296c355cSTheodore Ts'o 		__entry->ino		= ac->ac_inode->i_ino;
1059296c355cSTheodore Ts'o 		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
1060296c355cSTheodore Ts'o 		__entry->orig_start	= ac->ac_o_ex.fe_start;
1061296c355cSTheodore Ts'o 		__entry->orig_group	= ac->ac_o_ex.fe_group;
1062296c355cSTheodore Ts'o 		__entry->orig_len	= ac->ac_o_ex.fe_len;
1063296c355cSTheodore Ts'o 		__entry->goal_logical	= ac->ac_g_ex.fe_logical;
1064296c355cSTheodore Ts'o 		__entry->goal_start	= ac->ac_g_ex.fe_start;
1065296c355cSTheodore Ts'o 		__entry->goal_group	= ac->ac_g_ex.fe_group;
1066296c355cSTheodore Ts'o 		__entry->goal_len	= ac->ac_g_ex.fe_len;
1067296c355cSTheodore Ts'o 		__entry->result_logical	= ac->ac_f_ex.fe_logical;
1068296c355cSTheodore Ts'o 		__entry->result_start	= ac->ac_f_ex.fe_start;
1069296c355cSTheodore Ts'o 		__entry->result_group	= ac->ac_f_ex.fe_group;
1070296c355cSTheodore Ts'o 		__entry->result_len	= ac->ac_f_ex.fe_len;
1071210c0526SAnatol Pomozov 		__entry->found		= ac->ac_found;
1072210c0526SAnatol Pomozov 		__entry->flags		= ac->ac_flags;
1073210c0526SAnatol Pomozov 		__entry->groups		= ac->ac_groups_scanned;
1074210c0526SAnatol Pomozov 		__entry->buddy		= ac->ac_buddy;
1075210c0526SAnatol Pomozov 		__entry->tail		= ac->ac_tail;
1076210c0526SAnatol Pomozov 		__entry->cr		= ac->ac_criteria;
1077296c355cSTheodore Ts'o 	),
1078296c355cSTheodore Ts'o 
1079a269029dSTheodore Ts'o 	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u "
10804eb7a4a1SOjaswin Mujoo 		  "result %u/%d/%u@%u blks %u grps %u cr %s flags %s "
1081296c355cSTheodore Ts'o 		  "tail %u broken %u",
10820562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1083a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
1084296c355cSTheodore Ts'o 		  __entry->orig_group, __entry->orig_start,
1085296c355cSTheodore Ts'o 		  __entry->orig_len, __entry->orig_logical,
1086296c355cSTheodore Ts'o 		  __entry->goal_group, __entry->goal_start,
1087296c355cSTheodore Ts'o 		  __entry->goal_len, __entry->goal_logical,
1088296c355cSTheodore Ts'o 		  __entry->result_group, __entry->result_start,
1089296c355cSTheodore Ts'o 		  __entry->result_len, __entry->result_logical,
10904eb7a4a1SOjaswin Mujoo 		  __entry->found, __entry->groups, show_criteria(__entry->cr),
109121ddd568STheodore Ts'o 		  show_mballoc_flags(__entry->flags), __entry->tail,
1092296c355cSTheodore Ts'o 		  __entry->buddy ? 1 << __entry->buddy : 0)
1093296c355cSTheodore Ts'o );
1094296c355cSTheodore Ts'o 
1095296c355cSTheodore Ts'o TRACE_EVENT(ext4_mballoc_prealloc,
1096296c355cSTheodore Ts'o 	TP_PROTO(struct ext4_allocation_context *ac),
1097296c355cSTheodore Ts'o 
1098296c355cSTheodore Ts'o 	TP_ARGS(ac),
1099296c355cSTheodore Ts'o 
1100296c355cSTheodore Ts'o 	TP_STRUCT__entry(
11010562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1102296c355cSTheodore Ts'o 		__field(	ino_t,	ino			)
1103296c355cSTheodore Ts'o 		__field(	__u32, 	orig_logical		)
1104296c355cSTheodore Ts'o 		__field(	  int,	orig_start		)
1105296c355cSTheodore Ts'o 		__field(	__u32, 	orig_group		)
1106296c355cSTheodore Ts'o 		__field(	  int,	orig_len		)
1107296c355cSTheodore Ts'o 		__field(	__u32, 	result_logical		)
1108296c355cSTheodore Ts'o 		__field(	  int,	result_start		)
1109296c355cSTheodore Ts'o 		__field(	__u32, 	result_group		)
1110296c355cSTheodore Ts'o 		__field(	  int,	result_len		)
1111296c355cSTheodore Ts'o 	),
1112296c355cSTheodore Ts'o 
1113296c355cSTheodore Ts'o 	TP_fast_assign(
11140562e0baSJiaying Zhang 		__entry->dev		= ac->ac_inode->i_sb->s_dev;
1115296c355cSTheodore Ts'o 		__entry->ino		= ac->ac_inode->i_ino;
1116296c355cSTheodore Ts'o 		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
1117296c355cSTheodore Ts'o 		__entry->orig_start	= ac->ac_o_ex.fe_start;
1118296c355cSTheodore Ts'o 		__entry->orig_group	= ac->ac_o_ex.fe_group;
1119296c355cSTheodore Ts'o 		__entry->orig_len	= ac->ac_o_ex.fe_len;
1120296c355cSTheodore Ts'o 		__entry->result_logical	= ac->ac_b_ex.fe_logical;
1121296c355cSTheodore Ts'o 		__entry->result_start	= ac->ac_b_ex.fe_start;
1122296c355cSTheodore Ts'o 		__entry->result_group	= ac->ac_b_ex.fe_group;
1123296c355cSTheodore Ts'o 		__entry->result_len	= ac->ac_b_ex.fe_len;
1124296c355cSTheodore Ts'o 	),
1125296c355cSTheodore Ts'o 
1126a269029dSTheodore Ts'o 	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u",
11270562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1128a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
1129296c355cSTheodore Ts'o 		  __entry->orig_group, __entry->orig_start,
1130296c355cSTheodore Ts'o 		  __entry->orig_len, __entry->orig_logical,
1131296c355cSTheodore Ts'o 		  __entry->result_group, __entry->result_start,
1132296c355cSTheodore Ts'o 		  __entry->result_len, __entry->result_logical)
1133296c355cSTheodore Ts'o );
1134296c355cSTheodore Ts'o 
1135f084db93SLi Zefan DECLARE_EVENT_CLASS(ext4__mballoc,
11363e1e5f50SEric Sandeen 	TP_PROTO(struct super_block *sb,
11373e1e5f50SEric Sandeen 		 struct inode *inode,
11383e1e5f50SEric Sandeen 		 ext4_group_t group,
11393e1e5f50SEric Sandeen 		 ext4_grpblk_t start,
11403e1e5f50SEric Sandeen 		 ext4_grpblk_t len),
1141296c355cSTheodore Ts'o 
11423e1e5f50SEric Sandeen 	TP_ARGS(sb, inode, group, start, len),
1143296c355cSTheodore Ts'o 
1144296c355cSTheodore Ts'o 	TP_STRUCT__entry(
11450562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1146296c355cSTheodore Ts'o 		__field(	ino_t,	ino			)
1147296c355cSTheodore Ts'o 		__field(	  int,	result_start		)
1148296c355cSTheodore Ts'o 		__field(	__u32, 	result_group		)
1149296c355cSTheodore Ts'o 		__field(	  int,	result_len		)
1150296c355cSTheodore Ts'o 	),
1151296c355cSTheodore Ts'o 
1152296c355cSTheodore Ts'o 	TP_fast_assign(
11530562e0baSJiaying Zhang 		__entry->dev		= sb->s_dev;
11543e1e5f50SEric Sandeen 		__entry->ino		= inode ? inode->i_ino : 0;
11553e1e5f50SEric Sandeen 		__entry->result_start	= start;
11563e1e5f50SEric Sandeen 		__entry->result_group	= group;
11573e1e5f50SEric Sandeen 		__entry->result_len	= len;
1158296c355cSTheodore Ts'o 	),
1159296c355cSTheodore Ts'o 
1160a9c667f8SLukas Czerner 	TP_printk("dev %d,%d inode %lu extent %u/%d/%d ",
11610562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1162a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
1163296c355cSTheodore Ts'o 		  __entry->result_group, __entry->result_start,
11643e1e5f50SEric Sandeen 		  __entry->result_len)
1165296c355cSTheodore Ts'o );
1166296c355cSTheodore Ts'o 
1167f084db93SLi Zefan DEFINE_EVENT(ext4__mballoc, ext4_mballoc_discard,
1168f084db93SLi Zefan 
11693e1e5f50SEric Sandeen 	TP_PROTO(struct super_block *sb,
11703e1e5f50SEric Sandeen 		 struct inode *inode,
11713e1e5f50SEric Sandeen 		 ext4_group_t group,
11723e1e5f50SEric Sandeen 		 ext4_grpblk_t start,
11733e1e5f50SEric Sandeen 		 ext4_grpblk_t len),
1174296c355cSTheodore Ts'o 
11753e1e5f50SEric Sandeen 	TP_ARGS(sb, inode, group, start, len)
1176f084db93SLi Zefan );
1177296c355cSTheodore Ts'o 
1178f084db93SLi Zefan DEFINE_EVENT(ext4__mballoc, ext4_mballoc_free,
1179296c355cSTheodore Ts'o 
11803e1e5f50SEric Sandeen 	TP_PROTO(struct super_block *sb,
11813e1e5f50SEric Sandeen 		 struct inode *inode,
11823e1e5f50SEric Sandeen 		 ext4_group_t group,
11833e1e5f50SEric Sandeen 		 ext4_grpblk_t start,
11843e1e5f50SEric Sandeen 		 ext4_grpblk_t len),
1185296c355cSTheodore Ts'o 
11863e1e5f50SEric Sandeen 	TP_ARGS(sb, inode, group, start, len)
1187296c355cSTheodore Ts'o );
1188296c355cSTheodore Ts'o 
1189beac2da7STheodore Ts'o TRACE_EVENT(ext4_forget,
1190beac2da7STheodore Ts'o 	TP_PROTO(struct inode *inode, int is_metadata, __u64 block),
1191beac2da7STheodore Ts'o 
1192beac2da7STheodore Ts'o 	TP_ARGS(inode, is_metadata, block),
1193beac2da7STheodore Ts'o 
1194beac2da7STheodore Ts'o 	TP_STRUCT__entry(
11950562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1196beac2da7STheodore Ts'o 		__field(	ino_t,	ino			)
1197beac2da7STheodore Ts'o 		__field(	__u64,	block			)
1198210c0526SAnatol Pomozov 		__field(	int,	is_metadata		)
1199210c0526SAnatol Pomozov 		__field(	__u16,	mode			)
1200beac2da7STheodore Ts'o 	),
1201beac2da7STheodore Ts'o 
1202beac2da7STheodore Ts'o 	TP_fast_assign(
12030562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1204beac2da7STheodore Ts'o 		__entry->ino	= inode->i_ino;
1205beac2da7STheodore Ts'o 		__entry->block	= block;
1206210c0526SAnatol Pomozov 		__entry->is_metadata = is_metadata;
1207210c0526SAnatol Pomozov 		__entry->mode	= inode->i_mode;
1208beac2da7STheodore Ts'o 	),
1209beac2da7STheodore Ts'o 
1210a269029dSTheodore Ts'o 	TP_printk("dev %d,%d ino %lu mode 0%o is_metadata %d block %llu",
12110562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
12120562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
12130562e0baSJiaying Zhang 		  __entry->mode, __entry->is_metadata, __entry->block)
1214beac2da7STheodore Ts'o );
1215beac2da7STheodore Ts'o 
1216f8ec9d68STheodore Ts'o TRACE_EVENT(ext4_da_update_reserve_space,
1217d8990240SAditya Kali 	TP_PROTO(struct inode *inode, int used_blocks, int quota_claim),
1218f8ec9d68STheodore Ts'o 
1219d8990240SAditya Kali 	TP_ARGS(inode, used_blocks, quota_claim),
1220f8ec9d68STheodore Ts'o 
1221f8ec9d68STheodore Ts'o 	TP_STRUCT__entry(
12220562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1223f8ec9d68STheodore Ts'o 		__field(	ino_t,	ino			)
1224f8ec9d68STheodore Ts'o 		__field(	__u64,	i_blocks		)
1225f8ec9d68STheodore Ts'o 		__field(	int,	used_blocks		)
1226f8ec9d68STheodore Ts'o 		__field(	int,	reserved_data_blocks	)
1227d8990240SAditya Kali 		__field(	int,	quota_claim		)
1228210c0526SAnatol Pomozov 		__field(	__u16,	mode			)
1229f8ec9d68STheodore Ts'o 	),
1230f8ec9d68STheodore Ts'o 
1231f8ec9d68STheodore Ts'o 	TP_fast_assign(
12320562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1233f8ec9d68STheodore Ts'o 		__entry->ino	= inode->i_ino;
1234f8ec9d68STheodore Ts'o 		__entry->i_blocks = inode->i_blocks;
1235f8ec9d68STheodore Ts'o 		__entry->used_blocks = used_blocks;
1236d8990240SAditya Kali 		__entry->reserved_data_blocks =
1237d8990240SAditya Kali 				EXT4_I(inode)->i_reserved_data_blocks;
1238d8990240SAditya Kali 		__entry->quota_claim = quota_claim;
1239210c0526SAnatol Pomozov 		__entry->mode	= inode->i_mode;
1240f8ec9d68STheodore Ts'o 	),
1241f8ec9d68STheodore Ts'o 
12420562e0baSJiaying Zhang 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu used_blocks %d "
1243a627b0a7SEric Whitney 		  "reserved_data_blocks %d quota_claim %d",
12440562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
12450562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
1246a9c667f8SLukas Czerner 		  __entry->mode, __entry->i_blocks,
1247f8ec9d68STheodore Ts'o 		  __entry->used_blocks, __entry->reserved_data_blocks,
1248d8990240SAditya Kali 		  __entry->quota_claim)
1249f8ec9d68STheodore Ts'o );
1250f8ec9d68STheodore Ts'o 
1251f8ec9d68STheodore Ts'o TRACE_EVENT(ext4_da_reserve_space,
1252c27e43a1SEric Whitney 	TP_PROTO(struct inode *inode),
1253f8ec9d68STheodore Ts'o 
1254c27e43a1SEric Whitney 	TP_ARGS(inode),
1255f8ec9d68STheodore Ts'o 
1256f8ec9d68STheodore Ts'o 	TP_STRUCT__entry(
12570562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1258f8ec9d68STheodore Ts'o 		__field(	ino_t,	ino			)
1259f8ec9d68STheodore Ts'o 		__field(	__u64,	i_blocks		)
1260f8ec9d68STheodore Ts'o 		__field(	int,	reserved_data_blocks	)
1261210c0526SAnatol Pomozov 		__field(	__u16,  mode			)
1262f8ec9d68STheodore Ts'o 	),
1263f8ec9d68STheodore Ts'o 
1264f8ec9d68STheodore Ts'o 	TP_fast_assign(
12650562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1266f8ec9d68STheodore Ts'o 		__entry->ino	= inode->i_ino;
1267f8ec9d68STheodore Ts'o 		__entry->i_blocks = inode->i_blocks;
1268f8ec9d68STheodore Ts'o 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1269210c0526SAnatol Pomozov 		__entry->mode	= inode->i_mode;
1270f8ec9d68STheodore Ts'o 	),
1271f8ec9d68STheodore Ts'o 
1272c27e43a1SEric Whitney 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu "
1273a627b0a7SEric Whitney 		  "reserved_data_blocks %d",
12740562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1275a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
1276a9c667f8SLukas Czerner 		  __entry->mode, __entry->i_blocks,
1277a627b0a7SEric Whitney 		  __entry->reserved_data_blocks)
1278f8ec9d68STheodore Ts'o );
1279f8ec9d68STheodore Ts'o 
1280f8ec9d68STheodore Ts'o TRACE_EVENT(ext4_da_release_space,
1281f8ec9d68STheodore Ts'o 	TP_PROTO(struct inode *inode, int freed_blocks),
1282f8ec9d68STheodore Ts'o 
1283f8ec9d68STheodore Ts'o 	TP_ARGS(inode, freed_blocks),
1284f8ec9d68STheodore Ts'o 
1285f8ec9d68STheodore Ts'o 	TP_STRUCT__entry(
12860562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1287f8ec9d68STheodore Ts'o 		__field(	ino_t,	ino			)
1288f8ec9d68STheodore Ts'o 		__field(	__u64,	i_blocks		)
1289f8ec9d68STheodore Ts'o 		__field(	int,	freed_blocks		)
1290f8ec9d68STheodore Ts'o 		__field(	int,	reserved_data_blocks	)
1291210c0526SAnatol Pomozov 		__field(	__u16,  mode			)
1292f8ec9d68STheodore Ts'o 	),
1293f8ec9d68STheodore Ts'o 
1294f8ec9d68STheodore Ts'o 	TP_fast_assign(
12950562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1296f8ec9d68STheodore Ts'o 		__entry->ino	= inode->i_ino;
1297f8ec9d68STheodore Ts'o 		__entry->i_blocks = inode->i_blocks;
1298f8ec9d68STheodore Ts'o 		__entry->freed_blocks = freed_blocks;
1299f8ec9d68STheodore Ts'o 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1300210c0526SAnatol Pomozov 		__entry->mode	= inode->i_mode;
1301f8ec9d68STheodore Ts'o 	),
1302f8ec9d68STheodore Ts'o 
13030562e0baSJiaying Zhang 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu freed_blocks %d "
1304a627b0a7SEric Whitney 		  "reserved_data_blocks %d",
13050562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1306a269029dSTheodore Ts'o 		  (unsigned long) __entry->ino,
1307a9c667f8SLukas Czerner 		  __entry->mode, __entry->i_blocks,
1308a627b0a7SEric Whitney 		  __entry->freed_blocks, __entry->reserved_data_blocks)
1309f8ec9d68STheodore Ts'o );
1310f8ec9d68STheodore Ts'o 
1311f307333eSTheodore Ts'o DECLARE_EVENT_CLASS(ext4__bitmap_load,
1312f307333eSTheodore Ts'o 	TP_PROTO(struct super_block *sb, unsigned long group),
1313f307333eSTheodore Ts'o 
1314f307333eSTheodore Ts'o 	TP_ARGS(sb, group),
1315f307333eSTheodore Ts'o 
1316f307333eSTheodore Ts'o 	TP_STRUCT__entry(
13170562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1318f307333eSTheodore Ts'o 		__field(	__u32,	group			)
1319f307333eSTheodore Ts'o 
1320f307333eSTheodore Ts'o 	),
1321f307333eSTheodore Ts'o 
1322f307333eSTheodore Ts'o 	TP_fast_assign(
13230562e0baSJiaying Zhang 		__entry->dev	= sb->s_dev;
1324f307333eSTheodore Ts'o 		__entry->group	= group;
1325f307333eSTheodore Ts'o 	),
1326f307333eSTheodore Ts'o 
1327a269029dSTheodore Ts'o 	TP_printk("dev %d,%d group %u",
13280562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
13290562e0baSJiaying Zhang 		  __entry->group)
1330f307333eSTheodore Ts'o );
1331f307333eSTheodore Ts'o 
1332f307333eSTheodore Ts'o DEFINE_EVENT(ext4__bitmap_load, ext4_mb_bitmap_load,
1333f307333eSTheodore Ts'o 
1334f307333eSTheodore Ts'o 	TP_PROTO(struct super_block *sb, unsigned long group),
1335f307333eSTheodore Ts'o 
1336f307333eSTheodore Ts'o 	TP_ARGS(sb, group)
1337f307333eSTheodore Ts'o );
1338f307333eSTheodore Ts'o 
1339f307333eSTheodore Ts'o DEFINE_EVENT(ext4__bitmap_load, ext4_mb_buddy_bitmap_load,
1340f307333eSTheodore Ts'o 
1341f307333eSTheodore Ts'o 	TP_PROTO(struct super_block *sb, unsigned long group),
1342f307333eSTheodore Ts'o 
1343f307333eSTheodore Ts'o 	TP_ARGS(sb, group)
1344f307333eSTheodore Ts'o );
1345f8ec9d68STheodore Ts'o 
1346ab74c7b2STheodore Ts'o DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap,
13470562e0baSJiaying Zhang 
13480562e0baSJiaying Zhang 	TP_PROTO(struct super_block *sb, unsigned long group),
13490562e0baSJiaying Zhang 
13500562e0baSJiaying Zhang 	TP_ARGS(sb, group)
13510562e0baSJiaying Zhang );
13520562e0baSJiaying Zhang 
1353ab74c7b2STheodore Ts'o TRACE_EVENT(ext4_read_block_bitmap_load,
1354ab74c7b2STheodore Ts'o 	TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch),
13550562e0baSJiaying Zhang 
1356ab74c7b2STheodore Ts'o 	TP_ARGS(sb, group, prefetch),
13570562e0baSJiaying Zhang 
1358ab74c7b2STheodore Ts'o 	TP_STRUCT__entry(
1359ab74c7b2STheodore Ts'o 		__field(	dev_t,	dev			)
1360ab74c7b2STheodore Ts'o 		__field(	__u32,	group			)
1361ab74c7b2STheodore Ts'o 		__field(	bool,	prefetch		)
1362ab74c7b2STheodore Ts'o 
1363ab74c7b2STheodore Ts'o 	),
1364ab74c7b2STheodore Ts'o 
1365ab74c7b2STheodore Ts'o 	TP_fast_assign(
1366ab74c7b2STheodore Ts'o 		__entry->dev	= sb->s_dev;
1367ab74c7b2STheodore Ts'o 		__entry->group	= group;
1368ab74c7b2STheodore Ts'o 		__entry->prefetch = prefetch;
1369ab74c7b2STheodore Ts'o 	),
1370ab74c7b2STheodore Ts'o 
1371ab74c7b2STheodore Ts'o 	TP_printk("dev %d,%d group %u prefetch %d",
1372ab74c7b2STheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1373ab74c7b2STheodore Ts'o 		  __entry->group, __entry->prefetch)
13740562e0baSJiaying Zhang );
13750562e0baSJiaying Zhang 
1376b8a86845SLukas Czerner DECLARE_EVENT_CLASS(ext4__fallocate_mode,
13770562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
13780562e0baSJiaying Zhang 
13790562e0baSJiaying Zhang 	TP_ARGS(inode, offset, len, mode),
13800562e0baSJiaying Zhang 
13810562e0baSJiaying Zhang 	TP_STRUCT__entry(
13820562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1383210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
1384b8a86845SLukas Czerner 		__field(	loff_t,	offset			)
13850562e0baSJiaying Zhang 		__field(	loff_t, len			)
13860562e0baSJiaying Zhang 		__field(	int,	mode			)
13870562e0baSJiaying Zhang 	),
13880562e0baSJiaying Zhang 
13890562e0baSJiaying Zhang 	TP_fast_assign(
13900562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1391210c0526SAnatol Pomozov 		__entry->ino	= inode->i_ino;
1392b8a86845SLukas Czerner 		__entry->offset	= offset;
13930562e0baSJiaying Zhang 		__entry->len	= len;
13940562e0baSJiaying Zhang 		__entry->mode	= mode;
13950562e0baSJiaying Zhang 	),
13960562e0baSJiaying Zhang 
1397b8a86845SLukas Czerner 	TP_printk("dev %d,%d ino %lu offset %lld len %lld mode %s",
13980562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1399b8a86845SLukas Czerner 		  (unsigned long) __entry->ino,
1400b8a86845SLukas Czerner 		  __entry->offset, __entry->len,
1401b8a86845SLukas Czerner 		  show_falloc_mode(__entry->mode))
1402b8a86845SLukas Czerner );
1403b8a86845SLukas Czerner 
1404b8a86845SLukas Czerner DEFINE_EVENT(ext4__fallocate_mode, ext4_fallocate_enter,
1405b8a86845SLukas Czerner 
1406b8a86845SLukas Czerner 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1407b8a86845SLukas Czerner 
1408b8a86845SLukas Czerner 	TP_ARGS(inode, offset, len, mode)
1409b8a86845SLukas Czerner );
1410b8a86845SLukas Czerner 
1411b8a86845SLukas Czerner DEFINE_EVENT(ext4__fallocate_mode, ext4_punch_hole,
1412b8a86845SLukas Czerner 
1413b8a86845SLukas Czerner 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1414b8a86845SLukas Czerner 
1415b8a86845SLukas Czerner 	TP_ARGS(inode, offset, len, mode)
1416b8a86845SLukas Czerner );
1417b8a86845SLukas Czerner 
1418b8a86845SLukas Czerner DEFINE_EVENT(ext4__fallocate_mode, ext4_zero_range,
1419b8a86845SLukas Czerner 
1420b8a86845SLukas Czerner 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1421b8a86845SLukas Czerner 
1422b8a86845SLukas Czerner 	TP_ARGS(inode, offset, len, mode)
14230562e0baSJiaying Zhang );
14240562e0baSJiaying Zhang 
14250562e0baSJiaying Zhang TRACE_EVENT(ext4_fallocate_exit,
1426a9c667f8SLukas Czerner 	TP_PROTO(struct inode *inode, loff_t offset,
1427a9c667f8SLukas Czerner 		 unsigned int max_blocks, int ret),
14280562e0baSJiaying Zhang 
14290562e0baSJiaying Zhang 	TP_ARGS(inode, offset, max_blocks, ret),
14300562e0baSJiaying Zhang 
14310562e0baSJiaying Zhang 	TP_STRUCT__entry(
14320562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1433210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
14340562e0baSJiaying Zhang 		__field(	loff_t,	pos			)
1435a9c667f8SLukas Czerner 		__field(	unsigned int,	blocks		)
14360562e0baSJiaying Zhang 		__field(	int, 	ret			)
14370562e0baSJiaying Zhang 	),
14380562e0baSJiaying Zhang 
14390562e0baSJiaying Zhang 	TP_fast_assign(
14400562e0baSJiaying Zhang 		__entry->dev	= inode->i_sb->s_dev;
1441210c0526SAnatol Pomozov 		__entry->ino	= inode->i_ino;
14420562e0baSJiaying Zhang 		__entry->pos	= offset;
14430562e0baSJiaying Zhang 		__entry->blocks	= max_blocks;
14440562e0baSJiaying Zhang 		__entry->ret	= ret;
14450562e0baSJiaying Zhang 	),
14460562e0baSJiaying Zhang 
1447a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu pos %lld blocks %u ret %d",
14480562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
14490562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
1450a9c667f8SLukas Czerner 		  __entry->pos, __entry->blocks,
14510562e0baSJiaying Zhang 		  __entry->ret)
14520562e0baSJiaying Zhang );
14530562e0baSJiaying Zhang 
14540562e0baSJiaying Zhang TRACE_EVENT(ext4_unlink_enter,
14550562e0baSJiaying Zhang 	TP_PROTO(struct inode *parent, struct dentry *dentry),
14560562e0baSJiaying Zhang 
14570562e0baSJiaying Zhang 	TP_ARGS(parent, dentry),
14580562e0baSJiaying Zhang 
14590562e0baSJiaying Zhang 	TP_STRUCT__entry(
14600562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1461210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
1462210c0526SAnatol Pomozov 		__field(	ino_t,	parent			)
1463210c0526SAnatol Pomozov 		__field(	loff_t,	size			)
14640562e0baSJiaying Zhang 	),
14650562e0baSJiaying Zhang 
14660562e0baSJiaying Zhang 	TP_fast_assign(
1467fc64005cSAl Viro 		__entry->dev		= dentry->d_sb->s_dev;
14682b0143b5SDavid Howells 		__entry->ino		= d_inode(dentry)->i_ino;
1469210c0526SAnatol Pomozov 		__entry->parent		= parent->i_ino;
14702b0143b5SDavid Howells 		__entry->size		= d_inode(dentry)->i_size;
14710562e0baSJiaying Zhang 	),
14720562e0baSJiaying Zhang 
1473a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu size %lld parent %lu",
14740562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
14750562e0baSJiaying Zhang 		  (unsigned long) __entry->ino, __entry->size,
14760562e0baSJiaying Zhang 		  (unsigned long) __entry->parent)
14770562e0baSJiaying Zhang );
14780562e0baSJiaying Zhang 
14790562e0baSJiaying Zhang TRACE_EVENT(ext4_unlink_exit,
14800562e0baSJiaying Zhang 	TP_PROTO(struct dentry *dentry, int ret),
14810562e0baSJiaying Zhang 
14820562e0baSJiaying Zhang 	TP_ARGS(dentry, ret),
14830562e0baSJiaying Zhang 
14840562e0baSJiaying Zhang 	TP_STRUCT__entry(
14850562e0baSJiaying Zhang 		__field(	dev_t,	dev			)
1486210c0526SAnatol Pomozov 		__field(	ino_t,	ino			)
14870562e0baSJiaying Zhang 		__field(	int,	ret			)
14880562e0baSJiaying Zhang 	),
14890562e0baSJiaying Zhang 
14900562e0baSJiaying Zhang 	TP_fast_assign(
1491fc64005cSAl Viro 		__entry->dev		= dentry->d_sb->s_dev;
14922b0143b5SDavid Howells 		__entry->ino		= d_inode(dentry)->i_ino;
14930562e0baSJiaying Zhang 		__entry->ret		= ret;
14940562e0baSJiaying Zhang 	),
14950562e0baSJiaying Zhang 
1496a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu ret %d",
14970562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
14980562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
14990562e0baSJiaying Zhang 		  __entry->ret)
15000562e0baSJiaying Zhang );
15010562e0baSJiaying Zhang 
15020562e0baSJiaying Zhang DECLARE_EVENT_CLASS(ext4__truncate,
15030562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode),
15040562e0baSJiaying Zhang 
15050562e0baSJiaying Zhang 	TP_ARGS(inode),
15060562e0baSJiaying Zhang 
15070562e0baSJiaying Zhang 	TP_STRUCT__entry(
15080562e0baSJiaying Zhang 		__field(	dev_t,		dev		)
1509210c0526SAnatol Pomozov 		__field(	ino_t,		ino		)
1510a9c667f8SLukas Czerner 		__field(	__u64,		blocks		)
15110562e0baSJiaying Zhang 	),
15120562e0baSJiaying Zhang 
15130562e0baSJiaying Zhang 	TP_fast_assign(
15140562e0baSJiaying Zhang 		__entry->dev    = inode->i_sb->s_dev;
1515210c0526SAnatol Pomozov 		__entry->ino    = inode->i_ino;
15160562e0baSJiaying Zhang 		__entry->blocks	= inode->i_blocks;
15170562e0baSJiaying Zhang 	),
15180562e0baSJiaying Zhang 
1519a9c667f8SLukas Czerner 	TP_printk("dev %d,%d ino %lu blocks %llu",
15200562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1521a9c667f8SLukas Czerner 		  (unsigned long) __entry->ino, __entry->blocks)
15220562e0baSJiaying Zhang );
15230562e0baSJiaying Zhang 
15240562e0baSJiaying Zhang DEFINE_EVENT(ext4__truncate, ext4_truncate_enter,
15250562e0baSJiaying Zhang 
15260562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode),
15270562e0baSJiaying Zhang 
15280562e0baSJiaying Zhang 	TP_ARGS(inode)
15290562e0baSJiaying Zhang );
15300562e0baSJiaying Zhang 
15310562e0baSJiaying Zhang DEFINE_EVENT(ext4__truncate, ext4_truncate_exit,
15320562e0baSJiaying Zhang 
15330562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode),
15340562e0baSJiaying Zhang 
15350562e0baSJiaying Zhang 	TP_ARGS(inode)
15360562e0baSJiaying Zhang );
15370562e0baSJiaying Zhang 
1538556615dcSLukas Czerner /* 'ux' is the unwritten extent. */
15396f91bc5fSEric Gouriou TRACE_EVENT(ext4_ext_convert_to_initialized_enter,
15406f91bc5fSEric Gouriou 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
15416f91bc5fSEric Gouriou 		 struct ext4_extent *ux),
15426f91bc5fSEric Gouriou 
15436f91bc5fSEric Gouriou 	TP_ARGS(inode, map, ux),
15446f91bc5fSEric Gouriou 
15456f91bc5fSEric Gouriou 	TP_STRUCT__entry(
15466f91bc5fSEric Gouriou 		__field(	dev_t,		dev	)
1547210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
15486f91bc5fSEric Gouriou 		__field(	ext4_lblk_t,	m_lblk	)
15496f91bc5fSEric Gouriou 		__field(	unsigned,	m_len	)
15506f91bc5fSEric Gouriou 		__field(	ext4_lblk_t,	u_lblk	)
15516f91bc5fSEric Gouriou 		__field(	unsigned,	u_len	)
15526f91bc5fSEric Gouriou 		__field(	ext4_fsblk_t,	u_pblk	)
15536f91bc5fSEric Gouriou 	),
15546f91bc5fSEric Gouriou 
15556f91bc5fSEric Gouriou 	TP_fast_assign(
15566f91bc5fSEric Gouriou 		__entry->dev		= inode->i_sb->s_dev;
1557210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
15586f91bc5fSEric Gouriou 		__entry->m_lblk		= map->m_lblk;
15596f91bc5fSEric Gouriou 		__entry->m_len		= map->m_len;
15606f91bc5fSEric Gouriou 		__entry->u_lblk		= le32_to_cpu(ux->ee_block);
15616f91bc5fSEric Gouriou 		__entry->u_len		= ext4_ext_get_actual_len(ux);
15626f91bc5fSEric Gouriou 		__entry->u_pblk		= ext4_ext_pblock(ux);
15636f91bc5fSEric Gouriou 	),
15646f91bc5fSEric Gouriou 
15656f91bc5fSEric Gouriou 	TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u u_lblk %u u_len %u "
15666f91bc5fSEric Gouriou 		  "u_pblk %llu",
15676f91bc5fSEric Gouriou 		  MAJOR(__entry->dev), MINOR(__entry->dev),
15686f91bc5fSEric Gouriou 		  (unsigned long) __entry->ino,
15696f91bc5fSEric Gouriou 		  __entry->m_lblk, __entry->m_len,
15706f91bc5fSEric Gouriou 		  __entry->u_lblk, __entry->u_len, __entry->u_pblk)
15716f91bc5fSEric Gouriou );
15726f91bc5fSEric Gouriou 
15736f91bc5fSEric Gouriou /*
1574556615dcSLukas Czerner  * 'ux' is the unwritten extent.
15756f91bc5fSEric Gouriou  * 'ix' is the initialized extent to which blocks are transferred.
15766f91bc5fSEric Gouriou  */
15776f91bc5fSEric Gouriou TRACE_EVENT(ext4_ext_convert_to_initialized_fastpath,
15786f91bc5fSEric Gouriou 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
15796f91bc5fSEric Gouriou 		 struct ext4_extent *ux, struct ext4_extent *ix),
15806f91bc5fSEric Gouriou 
15816f91bc5fSEric Gouriou 	TP_ARGS(inode, map, ux, ix),
15826f91bc5fSEric Gouriou 
15836f91bc5fSEric Gouriou 	TP_STRUCT__entry(
15846f91bc5fSEric Gouriou 		__field(	dev_t,		dev	)
1585210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
15866f91bc5fSEric Gouriou 		__field(	ext4_lblk_t,	m_lblk	)
15876f91bc5fSEric Gouriou 		__field(	unsigned,	m_len	)
15886f91bc5fSEric Gouriou 		__field(	ext4_lblk_t,	u_lblk	)
15896f91bc5fSEric Gouriou 		__field(	unsigned,	u_len	)
15906f91bc5fSEric Gouriou 		__field(	ext4_fsblk_t,	u_pblk	)
15916f91bc5fSEric Gouriou 		__field(	ext4_lblk_t,	i_lblk	)
15926f91bc5fSEric Gouriou 		__field(	unsigned,	i_len	)
15936f91bc5fSEric Gouriou 		__field(	ext4_fsblk_t,	i_pblk	)
15946f91bc5fSEric Gouriou 	),
15956f91bc5fSEric Gouriou 
15966f91bc5fSEric Gouriou 	TP_fast_assign(
15976f91bc5fSEric Gouriou 		__entry->dev		= inode->i_sb->s_dev;
1598210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
15996f91bc5fSEric Gouriou 		__entry->m_lblk		= map->m_lblk;
16006f91bc5fSEric Gouriou 		__entry->m_len		= map->m_len;
16016f91bc5fSEric Gouriou 		__entry->u_lblk		= le32_to_cpu(ux->ee_block);
16026f91bc5fSEric Gouriou 		__entry->u_len		= ext4_ext_get_actual_len(ux);
16036f91bc5fSEric Gouriou 		__entry->u_pblk		= ext4_ext_pblock(ux);
16046f91bc5fSEric Gouriou 		__entry->i_lblk		= le32_to_cpu(ix->ee_block);
16056f91bc5fSEric Gouriou 		__entry->i_len		= ext4_ext_get_actual_len(ix);
16066f91bc5fSEric Gouriou 		__entry->i_pblk		= ext4_ext_pblock(ix);
16076f91bc5fSEric Gouriou 	),
16086f91bc5fSEric Gouriou 
16096f91bc5fSEric Gouriou 	TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u "
16106f91bc5fSEric Gouriou 		  "u_lblk %u u_len %u u_pblk %llu "
16116f91bc5fSEric Gouriou 		  "i_lblk %u i_len %u i_pblk %llu ",
16126f91bc5fSEric Gouriou 		  MAJOR(__entry->dev), MINOR(__entry->dev),
16136f91bc5fSEric Gouriou 		  (unsigned long) __entry->ino,
16146f91bc5fSEric Gouriou 		  __entry->m_lblk, __entry->m_len,
16156f91bc5fSEric Gouriou 		  __entry->u_lblk, __entry->u_len, __entry->u_pblk,
16166f91bc5fSEric Gouriou 		  __entry->i_lblk, __entry->i_len, __entry->i_pblk)
16176f91bc5fSEric Gouriou );
16186f91bc5fSEric Gouriou 
16190562e0baSJiaying Zhang DECLARE_EVENT_CLASS(ext4__map_blocks_enter,
16200562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
1621a9c667f8SLukas Czerner 		 unsigned int len, unsigned int flags),
16220562e0baSJiaying Zhang 
16230562e0baSJiaying Zhang 	TP_ARGS(inode, lblk, len, flags),
16240562e0baSJiaying Zhang 
16250562e0baSJiaying Zhang 	TP_STRUCT__entry(
16260562e0baSJiaying Zhang 		__field(	dev_t,		dev		)
1627210c0526SAnatol Pomozov 		__field(	ino_t,		ino		)
16280562e0baSJiaying Zhang 		__field(	ext4_lblk_t,	lblk		)
1629a9c667f8SLukas Czerner 		__field(	unsigned int,	len		)
1630a9c667f8SLukas Czerner 		__field(	unsigned int,	flags		)
16310562e0baSJiaying Zhang 	),
16320562e0baSJiaying Zhang 
16330562e0baSJiaying Zhang 	TP_fast_assign(
16340562e0baSJiaying Zhang 		__entry->dev    = inode->i_sb->s_dev;
1635210c0526SAnatol Pomozov 		__entry->ino    = inode->i_ino;
16360562e0baSJiaying Zhang 		__entry->lblk	= lblk;
16370562e0baSJiaying Zhang 		__entry->len	= len;
16380562e0baSJiaying Zhang 		__entry->flags	= flags;
16390562e0baSJiaying Zhang 	),
16400562e0baSJiaying Zhang 
164121ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu lblk %u len %u flags %s",
16420562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
16430562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
164421ddd568STheodore Ts'o 		  __entry->lblk, __entry->len, show_map_flags(__entry->flags))
16450562e0baSJiaying Zhang );
16460562e0baSJiaying Zhang 
16470562e0baSJiaying Zhang DEFINE_EVENT(ext4__map_blocks_enter, ext4_ext_map_blocks_enter,
16480562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
16490562e0baSJiaying Zhang 		 unsigned len, unsigned flags),
16500562e0baSJiaying Zhang 
16510562e0baSJiaying Zhang 	TP_ARGS(inode, lblk, len, flags)
16520562e0baSJiaying Zhang );
16530562e0baSJiaying Zhang 
16540562e0baSJiaying Zhang DEFINE_EVENT(ext4__map_blocks_enter, ext4_ind_map_blocks_enter,
16550562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
16560562e0baSJiaying Zhang 		 unsigned len, unsigned flags),
16570562e0baSJiaying Zhang 
16580562e0baSJiaying Zhang 	TP_ARGS(inode, lblk, len, flags)
16590562e0baSJiaying Zhang );
16600562e0baSJiaying Zhang 
16610562e0baSJiaying Zhang DECLARE_EVENT_CLASS(ext4__map_blocks_exit,
166221ddd568STheodore Ts'o 	TP_PROTO(struct inode *inode, unsigned flags, struct ext4_map_blocks *map,
166321ddd568STheodore Ts'o 		 int ret),
16640562e0baSJiaying Zhang 
166521ddd568STheodore Ts'o 	TP_ARGS(inode, flags, map, ret),
16660562e0baSJiaying Zhang 
16670562e0baSJiaying Zhang 	TP_STRUCT__entry(
16680562e0baSJiaying Zhang 		__field(	dev_t,		dev		)
1669210c0526SAnatol Pomozov 		__field(	ino_t,		ino		)
167021ddd568STheodore Ts'o 		__field(	unsigned int,	flags		)
16710562e0baSJiaying Zhang 		__field(	ext4_fsblk_t,	pblk		)
1672210c0526SAnatol Pomozov 		__field(	ext4_lblk_t,	lblk		)
1673a9c667f8SLukas Czerner 		__field(	unsigned int,	len		)
167421ddd568STheodore Ts'o 		__field(	unsigned int,	mflags		)
16750562e0baSJiaying Zhang 		__field(	int,		ret		)
16760562e0baSJiaying Zhang 	),
16770562e0baSJiaying Zhang 
16780562e0baSJiaying Zhang 	TP_fast_assign(
16790562e0baSJiaying Zhang 		__entry->dev    = inode->i_sb->s_dev;
1680210c0526SAnatol Pomozov 		__entry->ino    = inode->i_ino;
168121ddd568STheodore Ts'o 		__entry->flags	= flags;
168219b303d8SZheng Liu 		__entry->pblk	= map->m_pblk;
168319b303d8SZheng Liu 		__entry->lblk	= map->m_lblk;
168419b303d8SZheng Liu 		__entry->len	= map->m_len;
168521ddd568STheodore Ts'o 		__entry->mflags	= map->m_flags;
16860562e0baSJiaying Zhang 		__entry->ret	= ret;
16870562e0baSJiaying Zhang 	),
16880562e0baSJiaying Zhang 
168921ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu flags %s lblk %u pblk %llu len %u "
169021ddd568STheodore Ts'o 		  "mflags %s ret %d",
16910562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
16920562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
169321ddd568STheodore Ts'o 		  show_map_flags(__entry->flags), __entry->lblk, __entry->pblk,
169421ddd568STheodore Ts'o 		  __entry->len, show_mflags(__entry->mflags), __entry->ret)
16950562e0baSJiaying Zhang );
16960562e0baSJiaying Zhang 
16970562e0baSJiaying Zhang DEFINE_EVENT(ext4__map_blocks_exit, ext4_ext_map_blocks_exit,
169821ddd568STheodore Ts'o 	TP_PROTO(struct inode *inode, unsigned flags,
169921ddd568STheodore Ts'o 		 struct ext4_map_blocks *map, int ret),
17000562e0baSJiaying Zhang 
170121ddd568STheodore Ts'o 	TP_ARGS(inode, flags, map, ret)
17020562e0baSJiaying Zhang );
17030562e0baSJiaying Zhang 
17040562e0baSJiaying Zhang DEFINE_EVENT(ext4__map_blocks_exit, ext4_ind_map_blocks_exit,
170521ddd568STheodore Ts'o 	TP_PROTO(struct inode *inode, unsigned flags,
170621ddd568STheodore Ts'o 		 struct ext4_map_blocks *map, int ret),
17070562e0baSJiaying Zhang 
170821ddd568STheodore Ts'o 	TP_ARGS(inode, flags, map, ret)
17090562e0baSJiaying Zhang );
17100562e0baSJiaying Zhang 
17110562e0baSJiaying Zhang TRACE_EVENT(ext4_ext_load_extent,
17120562e0baSJiaying Zhang 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk),
17130562e0baSJiaying Zhang 
17140562e0baSJiaying Zhang 	TP_ARGS(inode, lblk, pblk),
17150562e0baSJiaying Zhang 
17160562e0baSJiaying Zhang 	TP_STRUCT__entry(
17170562e0baSJiaying Zhang 		__field(	dev_t,		dev		)
1718210c0526SAnatol Pomozov 		__field(	ino_t,		ino		)
17190562e0baSJiaying Zhang 		__field(	ext4_fsblk_t,	pblk		)
1720210c0526SAnatol Pomozov 		__field(	ext4_lblk_t,	lblk		)
17210562e0baSJiaying Zhang 	),
17220562e0baSJiaying Zhang 
17230562e0baSJiaying Zhang 	TP_fast_assign(
17240562e0baSJiaying Zhang 		__entry->dev    = inode->i_sb->s_dev;
1725210c0526SAnatol Pomozov 		__entry->ino    = inode->i_ino;
17260562e0baSJiaying Zhang 		__entry->pblk	= pblk;
1727210c0526SAnatol Pomozov 		__entry->lblk	= lblk;
17280562e0baSJiaying Zhang 	),
17290562e0baSJiaying Zhang 
17300562e0baSJiaying Zhang 	TP_printk("dev %d,%d ino %lu lblk %u pblk %llu",
17310562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
17320562e0baSJiaying Zhang 		  (unsigned long) __entry->ino,
1733a9c667f8SLukas Czerner 		  __entry->lblk, __entry->pblk)
17340562e0baSJiaying Zhang );
17350562e0baSJiaying Zhang 
17360562e0baSJiaying Zhang TRACE_EVENT(ext4_load_inode,
17378016e29fSHarshad Shirwadkar 	TP_PROTO(struct super_block *sb, unsigned long ino),
17380562e0baSJiaying Zhang 
17398016e29fSHarshad Shirwadkar 	TP_ARGS(sb, ino),
17400562e0baSJiaying Zhang 
17410562e0baSJiaying Zhang 	TP_STRUCT__entry(
17420562e0baSJiaying Zhang 		__field(	dev_t,	dev		)
1743210c0526SAnatol Pomozov 		__field(	ino_t,	ino		)
17440562e0baSJiaying Zhang 	),
17450562e0baSJiaying Zhang 
17460562e0baSJiaying Zhang 	TP_fast_assign(
17478016e29fSHarshad Shirwadkar 		__entry->dev		= sb->s_dev;
17488016e29fSHarshad Shirwadkar 		__entry->ino		= ino;
17490562e0baSJiaying Zhang 	),
17500562e0baSJiaying Zhang 
17510562e0baSJiaying Zhang 	TP_printk("dev %d,%d ino %ld",
17520562e0baSJiaying Zhang 		  MAJOR(__entry->dev), MINOR(__entry->dev),
17530562e0baSJiaying Zhang 		  (unsigned long) __entry->ino)
17540562e0baSJiaying Zhang );
17550562e0baSJiaying Zhang 
17565f3e2403Schangfengnan TRACE_EVENT(ext4_journal_start_sb,
17575fe2fe89SJan Kara 	TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
17585f3e2403Schangfengnan 		 int revoke_creds, int type, unsigned long IP),
175912706394STheodore Ts'o 
17605f3e2403Schangfengnan 	TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, type, IP),
176112706394STheodore Ts'o 
176212706394STheodore Ts'o 	TP_STRUCT__entry(
176312706394STheodore Ts'o 		__field(	dev_t,		dev		)
176412706394STheodore Ts'o 		__field(	unsigned long,	ip		)
17655fe2fe89SJan Kara 		__field(	int,		blocks		)
17665fe2fe89SJan Kara 		__field(	int,		rsv_blocks	)
176783448bdfSJan Kara 		__field(	int,		revoke_creds	)
17685f3e2403Schangfengnan 		__field(	int,		type		)
176912706394STheodore Ts'o 	),
177012706394STheodore Ts'o 
177112706394STheodore Ts'o 	TP_fast_assign(
177212706394STheodore Ts'o 		__entry->dev		 = sb->s_dev;
177312706394STheodore Ts'o 		__entry->ip		 = IP;
17745fe2fe89SJan Kara 		__entry->blocks		 = blocks;
17755fe2fe89SJan Kara 		__entry->rsv_blocks	 = rsv_blocks;
177683448bdfSJan Kara 		__entry->revoke_creds	 = revoke_creds;
17775f3e2403Schangfengnan 		__entry->type		 = type;
177812706394STheodore Ts'o 	),
177912706394STheodore Ts'o 
178083448bdfSJan Kara 	TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d,"
17815f3e2403Schangfengnan 		  " type %d, caller %pS", MAJOR(__entry->dev),
17825f3e2403Schangfengnan 		  MINOR(__entry->dev), __entry->blocks, __entry->rsv_blocks,
17835f3e2403Schangfengnan 		  __entry->revoke_creds, __entry->type, (void *)__entry->ip)
17845f3e2403Schangfengnan );
17855f3e2403Schangfengnan 
17865f3e2403Schangfengnan TRACE_EVENT(ext4_journal_start_inode,
17875f3e2403Schangfengnan 	TP_PROTO(struct inode *inode, int blocks, int rsv_blocks,
17885f3e2403Schangfengnan 		 int revoke_creds, int type, unsigned long IP),
17895f3e2403Schangfengnan 
17905f3e2403Schangfengnan 	TP_ARGS(inode, blocks, rsv_blocks, revoke_creds, type, IP),
17915f3e2403Schangfengnan 
17925f3e2403Schangfengnan 	TP_STRUCT__entry(
17935f3e2403Schangfengnan 		__field(	unsigned long,	ino		)
17945f3e2403Schangfengnan 		__field(	dev_t,		dev		)
17955f3e2403Schangfengnan 		__field(	unsigned long,	ip		)
17965f3e2403Schangfengnan 		__field(	int,		blocks		)
17975f3e2403Schangfengnan 		__field(	int,		rsv_blocks	)
17985f3e2403Schangfengnan 		__field(	int,		revoke_creds	)
17995f3e2403Schangfengnan 		__field(	int,		type		)
18005f3e2403Schangfengnan 	),
18015f3e2403Schangfengnan 
18025f3e2403Schangfengnan 	TP_fast_assign(
18035f3e2403Schangfengnan 		__entry->dev		 = inode->i_sb->s_dev;
18045f3e2403Schangfengnan 		__entry->ip		 = IP;
18055f3e2403Schangfengnan 		__entry->blocks		 = blocks;
18065f3e2403Schangfengnan 		__entry->rsv_blocks	 = rsv_blocks;
18075f3e2403Schangfengnan 		__entry->revoke_creds	 = revoke_creds;
18085f3e2403Schangfengnan 		__entry->type		 = type;
18095f3e2403Schangfengnan 		__entry->ino		 = inode->i_ino;
18105f3e2403Schangfengnan 	),
18115f3e2403Schangfengnan 
18125f3e2403Schangfengnan 	TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d,"
18135f3e2403Schangfengnan 		  " type %d, ino %lu, caller %pS", MAJOR(__entry->dev),
18145f3e2403Schangfengnan 		  MINOR(__entry->dev), __entry->blocks, __entry->rsv_blocks,
18155f3e2403Schangfengnan 		  __entry->revoke_creds, __entry->type, __entry->ino,
181683448bdfSJan Kara 		  (void *)__entry->ip)
18175fe2fe89SJan Kara );
18185fe2fe89SJan Kara 
18195fe2fe89SJan Kara TRACE_EVENT(ext4_journal_start_reserved,
18205fe2fe89SJan Kara 	TP_PROTO(struct super_block *sb, int blocks, unsigned long IP),
18215fe2fe89SJan Kara 
18225fe2fe89SJan Kara 	TP_ARGS(sb, blocks, IP),
18235fe2fe89SJan Kara 
18245fe2fe89SJan Kara 	TP_STRUCT__entry(
18255fe2fe89SJan Kara 		__field(	dev_t,	dev			)
18265fe2fe89SJan Kara 		__field(unsigned long,	ip			)
18275fe2fe89SJan Kara 		__field(	  int,	blocks			)
18285fe2fe89SJan Kara 	),
18295fe2fe89SJan Kara 
18305fe2fe89SJan Kara 	TP_fast_assign(
18315fe2fe89SJan Kara 		__entry->dev		 = sb->s_dev;
18325fe2fe89SJan Kara 		__entry->ip		 = IP;
18335fe2fe89SJan Kara 		__entry->blocks		 = blocks;
18345fe2fe89SJan Kara 	),
18355fe2fe89SJan Kara 
1836bbedb179SScott Wood 	TP_printk("dev %d,%d blocks, %d caller %pS",
18375fe2fe89SJan Kara 		  MAJOR(__entry->dev), MINOR(__entry->dev),
18385fe2fe89SJan Kara 		  __entry->blocks, (void *)__entry->ip)
183912706394STheodore Ts'o );
184012706394STheodore Ts'o 
1841b3d4c2b1STao Ma DECLARE_EVENT_CLASS(ext4__trim,
1842b3d4c2b1STao Ma 	TP_PROTO(struct super_block *sb,
1843b3d4c2b1STao Ma 		 ext4_group_t group,
1844b3d4c2b1STao Ma 		 ext4_grpblk_t start,
1845b3d4c2b1STao Ma 		 ext4_grpblk_t len),
1846b3d4c2b1STao Ma 
1847b3d4c2b1STao Ma 	TP_ARGS(sb, group, start, len),
1848b3d4c2b1STao Ma 
1849b3d4c2b1STao Ma 	TP_STRUCT__entry(
1850b3d4c2b1STao Ma 		__field(	int,	dev_major		)
1851b3d4c2b1STao Ma 		__field(	int,	dev_minor		)
1852b3d4c2b1STao Ma 		__field(	__u32, 	group			)
1853b3d4c2b1STao Ma 		__field(	int,	start			)
1854b3d4c2b1STao Ma 		__field(	int,	len			)
1855b3d4c2b1STao Ma 	),
1856b3d4c2b1STao Ma 
1857b3d4c2b1STao Ma 	TP_fast_assign(
1858b3d4c2b1STao Ma 		__entry->dev_major	= MAJOR(sb->s_dev);
1859b3d4c2b1STao Ma 		__entry->dev_minor	= MINOR(sb->s_dev);
1860b3d4c2b1STao Ma 		__entry->group		= group;
1861b3d4c2b1STao Ma 		__entry->start		= start;
1862b3d4c2b1STao Ma 		__entry->len		= len;
1863b3d4c2b1STao Ma 	),
1864b3d4c2b1STao Ma 
1865b3d4c2b1STao Ma 	TP_printk("dev %d,%d group %u, start %d, len %d",
1866b3d4c2b1STao Ma 		  __entry->dev_major, __entry->dev_minor,
1867b3d4c2b1STao Ma 		  __entry->group, __entry->start, __entry->len)
1868b3d4c2b1STao Ma );
1869b3d4c2b1STao Ma 
1870b3d4c2b1STao Ma DEFINE_EVENT(ext4__trim, ext4_trim_extent,
1871b3d4c2b1STao Ma 
1872b3d4c2b1STao Ma 	TP_PROTO(struct super_block *sb,
1873b3d4c2b1STao Ma 		 ext4_group_t group,
1874b3d4c2b1STao Ma 		 ext4_grpblk_t start,
1875b3d4c2b1STao Ma 		 ext4_grpblk_t len),
1876b3d4c2b1STao Ma 
1877b3d4c2b1STao Ma 	TP_ARGS(sb, group, start, len)
1878b3d4c2b1STao Ma );
1879b3d4c2b1STao Ma 
1880b3d4c2b1STao Ma DEFINE_EVENT(ext4__trim, ext4_trim_all_free,
1881b3d4c2b1STao Ma 
1882b3d4c2b1STao Ma 	TP_PROTO(struct super_block *sb,
1883b3d4c2b1STao Ma 		 ext4_group_t group,
1884b3d4c2b1STao Ma 		 ext4_grpblk_t start,
1885b3d4c2b1STao Ma 		 ext4_grpblk_t len),
1886b3d4c2b1STao Ma 
1887b3d4c2b1STao Ma 	TP_ARGS(sb, group, start, len)
1888b3d4c2b1STao Ma );
1889b3d4c2b1STao Ma 
1890556615dcSLukas Czerner TRACE_EVENT(ext4_ext_handle_unwritten_extents,
1891b5645534SZheng Liu 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int flags,
1892d8990240SAditya Kali 		 unsigned int allocated, ext4_fsblk_t newblock),
1893d8990240SAditya Kali 
1894b5645534SZheng Liu 	TP_ARGS(inode, map, flags, allocated, newblock),
1895d8990240SAditya Kali 
1896d8990240SAditya Kali 	TP_STRUCT__entry(
1897d8990240SAditya Kali 		__field(	dev_t,		dev		)
1898210c0526SAnatol Pomozov 		__field(	ino_t,		ino		)
1899210c0526SAnatol Pomozov 		__field(	int,		flags		)
1900d8990240SAditya Kali 		__field(	ext4_lblk_t,	lblk		)
1901d8990240SAditya Kali 		__field(	ext4_fsblk_t,	pblk		)
1902d8990240SAditya Kali 		__field(	unsigned int,	len		)
1903d8990240SAditya Kali 		__field(	unsigned int,	allocated	)
1904d8990240SAditya Kali 		__field(	ext4_fsblk_t,	newblk		)
1905d8990240SAditya Kali 	),
1906d8990240SAditya Kali 
1907d8990240SAditya Kali 	TP_fast_assign(
1908d8990240SAditya Kali 		__entry->dev		= inode->i_sb->s_dev;
1909210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
1910b5645534SZheng Liu 		__entry->flags		= flags;
1911d8990240SAditya Kali 		__entry->lblk		= map->m_lblk;
1912d8990240SAditya Kali 		__entry->pblk		= map->m_pblk;
1913d8990240SAditya Kali 		__entry->len		= map->m_len;
1914d8990240SAditya Kali 		__entry->allocated	= allocated;
1915d8990240SAditya Kali 		__entry->newblk		= newblock;
1916d8990240SAditya Kali 	),
1917d8990240SAditya Kali 
191821ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu m_lblk %u m_pblk %llu m_len %u flags %s "
1919d8990240SAditya Kali 		  "allocated %d newblock %llu",
1920d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1921d8990240SAditya Kali 		  (unsigned long) __entry->ino,
1922d8990240SAditya Kali 		  (unsigned) __entry->lblk, (unsigned long long) __entry->pblk,
192321ddd568STheodore Ts'o 		  __entry->len, show_map_flags(__entry->flags),
1924d8990240SAditya Kali 		  (unsigned int) __entry->allocated,
1925d8990240SAditya Kali 		  (unsigned long long) __entry->newblk)
1926d8990240SAditya Kali );
1927d8990240SAditya Kali 
1928d8990240SAditya Kali TRACE_EVENT(ext4_get_implied_cluster_alloc_exit,
1929d8990240SAditya Kali 	TP_PROTO(struct super_block *sb, struct ext4_map_blocks *map, int ret),
1930d8990240SAditya Kali 
1931d8990240SAditya Kali 	TP_ARGS(sb, map, ret),
1932d8990240SAditya Kali 
1933d8990240SAditya Kali 	TP_STRUCT__entry(
1934d8990240SAditya Kali 		__field(	dev_t,		dev	)
1935210c0526SAnatol Pomozov 		__field(	unsigned int,	flags	)
1936d8990240SAditya Kali 		__field(	ext4_lblk_t,	lblk	)
1937d8990240SAditya Kali 		__field(	ext4_fsblk_t,	pblk	)
1938d8990240SAditya Kali 		__field(	unsigned int,	len	)
1939d8990240SAditya Kali 		__field(	int,		ret	)
1940d8990240SAditya Kali 	),
1941d8990240SAditya Kali 
1942d8990240SAditya Kali 	TP_fast_assign(
1943d8990240SAditya Kali 		__entry->dev	= sb->s_dev;
1944210c0526SAnatol Pomozov 		__entry->flags	= map->m_flags;
1945d8990240SAditya Kali 		__entry->lblk	= map->m_lblk;
1946d8990240SAditya Kali 		__entry->pblk	= map->m_pblk;
1947d8990240SAditya Kali 		__entry->len	= map->m_len;
1948d8990240SAditya Kali 		__entry->ret	= ret;
1949d8990240SAditya Kali 	),
1950d8990240SAditya Kali 
195121ddd568STheodore Ts'o 	TP_printk("dev %d,%d m_lblk %u m_pblk %llu m_len %u m_flags %s ret %d",
1952d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1953d8990240SAditya Kali 		  __entry->lblk, (unsigned long long) __entry->pblk,
195421ddd568STheodore Ts'o 		  __entry->len, show_mflags(__entry->flags), __entry->ret)
1955d8990240SAditya Kali );
1956d8990240SAditya Kali 
1957d8990240SAditya Kali TRACE_EVENT(ext4_ext_show_extent,
1958d8990240SAditya Kali 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk,
1959d8990240SAditya Kali 		 unsigned short len),
1960d8990240SAditya Kali 
1961d8990240SAditya Kali 	TP_ARGS(inode, lblk, pblk, len),
1962d8990240SAditya Kali 
1963d8990240SAditya Kali 	TP_STRUCT__entry(
1964d8990240SAditya Kali 		__field(	dev_t,		dev	)
1965210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
1966d8990240SAditya Kali 		__field(	ext4_fsblk_t,	pblk	)
1967210c0526SAnatol Pomozov 		__field(	ext4_lblk_t,	lblk	)
1968d8990240SAditya Kali 		__field(	unsigned short,	len	)
1969d8990240SAditya Kali 	),
1970d8990240SAditya Kali 
1971d8990240SAditya Kali 	TP_fast_assign(
1972d8990240SAditya Kali 		__entry->dev	= inode->i_sb->s_dev;
1973210c0526SAnatol Pomozov 		__entry->ino	= inode->i_ino;
1974d8990240SAditya Kali 		__entry->pblk	= pblk;
1975210c0526SAnatol Pomozov 		__entry->lblk	= lblk;
1976d8990240SAditya Kali 		__entry->len	= len;
1977d8990240SAditya Kali 	),
1978d8990240SAditya Kali 
1979d8990240SAditya Kali 	TP_printk("dev %d,%d ino %lu lblk %u pblk %llu len %u",
1980d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1981d8990240SAditya Kali 		  (unsigned long) __entry->ino,
1982d8990240SAditya Kali 		  (unsigned) __entry->lblk,
1983d8990240SAditya Kali 		  (unsigned long long) __entry->pblk,
1984d8990240SAditya Kali 		  (unsigned short) __entry->len)
1985d8990240SAditya Kali );
1986d8990240SAditya Kali 
1987d8990240SAditya Kali TRACE_EVENT(ext4_remove_blocks,
1988d8990240SAditya Kali 	TP_PROTO(struct inode *inode, struct ext4_extent *ex,
1989d8990240SAditya Kali 		 ext4_lblk_t from, ext4_fsblk_t to,
19909fe67149SEric Whitney 		 struct partial_cluster *pc),
1991d8990240SAditya Kali 
19929fe67149SEric Whitney 	TP_ARGS(inode, ex, from, to, pc),
1993d8990240SAditya Kali 
1994d8990240SAditya Kali 	TP_STRUCT__entry(
1995d8990240SAditya Kali 		__field(	dev_t,		dev	)
1996210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
1997d8990240SAditya Kali 		__field(	ext4_lblk_t,	from	)
1998d8990240SAditya Kali 		__field(	ext4_lblk_t,	to	)
1999210c0526SAnatol Pomozov 		__field(	ext4_fsblk_t,	ee_pblk	)
2000210c0526SAnatol Pomozov 		__field(	ext4_lblk_t,	ee_lblk	)
2001210c0526SAnatol Pomozov 		__field(	unsigned short,	ee_len	)
20029fe67149SEric Whitney 		__field(	ext4_fsblk_t,	pc_pclu	)
20039fe67149SEric Whitney 		__field(	ext4_lblk_t,	pc_lblk	)
20049fe67149SEric Whitney 		__field(	int,		pc_state)
2005d8990240SAditya Kali 	),
2006d8990240SAditya Kali 
2007d8990240SAditya Kali 	TP_fast_assign(
2008d8990240SAditya Kali 		__entry->dev		= inode->i_sb->s_dev;
2009210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
2010d8990240SAditya Kali 		__entry->from		= from;
2011d8990240SAditya Kali 		__entry->to		= to;
2012210c0526SAnatol Pomozov 		__entry->ee_pblk	= ext4_ext_pblock(ex);
2013d6a77105STheodore Ts'o 		__entry->ee_lblk	= le32_to_cpu(ex->ee_block);
2014210c0526SAnatol Pomozov 		__entry->ee_len		= ext4_ext_get_actual_len(ex);
20159fe67149SEric Whitney 		__entry->pc_pclu	= pc->pclu;
20169fe67149SEric Whitney 		__entry->pc_lblk	= pc->lblk;
20179fe67149SEric Whitney 		__entry->pc_state	= pc->state;
2018d8990240SAditya Kali 	),
2019d8990240SAditya Kali 
2020d8990240SAditya Kali 	TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]"
20219fe67149SEric Whitney 		  "from %u to %u partial [pclu %lld lblk %u state %d]",
2022d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2023d8990240SAditya Kali 		  (unsigned long) __entry->ino,
2024d8990240SAditya Kali 		  (unsigned) __entry->ee_lblk,
2025d8990240SAditya Kali 		  (unsigned long long) __entry->ee_pblk,
2026d8990240SAditya Kali 		  (unsigned short) __entry->ee_len,
2027d8990240SAditya Kali 		  (unsigned) __entry->from,
2028d8990240SAditya Kali 		  (unsigned) __entry->to,
20299fe67149SEric Whitney 		  (long long) __entry->pc_pclu,
20309fe67149SEric Whitney 		  (unsigned int) __entry->pc_lblk,
20319fe67149SEric Whitney 		  (int) __entry->pc_state)
2032d8990240SAditya Kali );
2033d8990240SAditya Kali 
2034d8990240SAditya Kali TRACE_EVENT(ext4_ext_rm_leaf,
2035d8990240SAditya Kali 	TP_PROTO(struct inode *inode, ext4_lblk_t start,
2036d23142c6SLukas Czerner 		 struct ext4_extent *ex,
20379fe67149SEric Whitney 		 struct partial_cluster *pc),
2038d8990240SAditya Kali 
20399fe67149SEric Whitney 	TP_ARGS(inode, start, ex, pc),
2040d8990240SAditya Kali 
2041d8990240SAditya Kali 	TP_STRUCT__entry(
2042d8990240SAditya Kali 		__field(	dev_t,		dev	)
2043210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
2044d8990240SAditya Kali 		__field(	ext4_lblk_t,	start	)
2045d8990240SAditya Kali 		__field(	ext4_lblk_t,	ee_lblk	)
2046d8990240SAditya Kali 		__field(	ext4_fsblk_t,	ee_pblk	)
2047d8990240SAditya Kali 		__field(	short,		ee_len	)
20489fe67149SEric Whitney 		__field(	ext4_fsblk_t,	pc_pclu	)
20499fe67149SEric Whitney 		__field(	ext4_lblk_t,	pc_lblk	)
20509fe67149SEric Whitney 		__field(	int,		pc_state)
2051d8990240SAditya Kali 	),
2052d8990240SAditya Kali 
2053d8990240SAditya Kali 	TP_fast_assign(
2054d8990240SAditya Kali 		__entry->dev		= inode->i_sb->s_dev;
2055210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
2056d8990240SAditya Kali 		__entry->start		= start;
2057d8990240SAditya Kali 		__entry->ee_lblk	= le32_to_cpu(ex->ee_block);
2058d8990240SAditya Kali 		__entry->ee_pblk	= ext4_ext_pblock(ex);
2059d8990240SAditya Kali 		__entry->ee_len		= ext4_ext_get_actual_len(ex);
20609fe67149SEric Whitney 		__entry->pc_pclu	= pc->pclu;
20619fe67149SEric Whitney 		__entry->pc_lblk	= pc->lblk;
20629fe67149SEric Whitney 		__entry->pc_state	= pc->state;
2063d8990240SAditya Kali 	),
2064d8990240SAditya Kali 
2065d8990240SAditya Kali 	TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]"
20669fe67149SEric Whitney 		  "partial [pclu %lld lblk %u state %d]",
2067d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2068d8990240SAditya Kali 		  (unsigned long) __entry->ino,
2069d8990240SAditya Kali 		  (unsigned) __entry->start,
2070d8990240SAditya Kali 		  (unsigned) __entry->ee_lblk,
2071d8990240SAditya Kali 		  (unsigned long long) __entry->ee_pblk,
2072d8990240SAditya Kali 		  (unsigned short) __entry->ee_len,
20739fe67149SEric Whitney 		  (long long) __entry->pc_pclu,
20749fe67149SEric Whitney 		  (unsigned int) __entry->pc_lblk,
20759fe67149SEric Whitney 		  (int) __entry->pc_state)
2076d8990240SAditya Kali );
2077d8990240SAditya Kali 
2078d8990240SAditya Kali TRACE_EVENT(ext4_ext_rm_idx,
2079d8990240SAditya Kali 	TP_PROTO(struct inode *inode, ext4_fsblk_t pblk),
2080d8990240SAditya Kali 
2081d8990240SAditya Kali 	TP_ARGS(inode, pblk),
2082d8990240SAditya Kali 
2083d8990240SAditya Kali 	TP_STRUCT__entry(
2084d8990240SAditya Kali 		__field(	dev_t,		dev	)
2085210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
2086d8990240SAditya Kali 		__field(	ext4_fsblk_t,	pblk	)
2087d8990240SAditya Kali 	),
2088d8990240SAditya Kali 
2089d8990240SAditya Kali 	TP_fast_assign(
2090d8990240SAditya Kali 		__entry->dev	= inode->i_sb->s_dev;
2091210c0526SAnatol Pomozov 		__entry->ino	= inode->i_ino;
2092d8990240SAditya Kali 		__entry->pblk	= pblk;
2093d8990240SAditya Kali 	),
2094d8990240SAditya Kali 
2095d8990240SAditya Kali 	TP_printk("dev %d,%d ino %lu index_pblk %llu",
2096d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2097d8990240SAditya Kali 		  (unsigned long) __entry->ino,
2098d8990240SAditya Kali 		  (unsigned long long) __entry->pblk)
2099d8990240SAditya Kali );
2100d8990240SAditya Kali 
2101d8990240SAditya Kali TRACE_EVENT(ext4_ext_remove_space,
210261801325SLukas Czerner 	TP_PROTO(struct inode *inode, ext4_lblk_t start,
210361801325SLukas Czerner 		 ext4_lblk_t end, int depth),
2104d8990240SAditya Kali 
210561801325SLukas Czerner 	TP_ARGS(inode, start, end, depth),
2106d8990240SAditya Kali 
2107d8990240SAditya Kali 	TP_STRUCT__entry(
2108d8990240SAditya Kali 		__field(	dev_t,		dev	)
2109210c0526SAnatol Pomozov 		__field(	ino_t,		ino	)
2110d8990240SAditya Kali 		__field(	ext4_lblk_t,	start	)
211161801325SLukas Czerner 		__field(	ext4_lblk_t,	end	)
2112d8990240SAditya Kali 		__field(	int,		depth	)
2113d8990240SAditya Kali 	),
2114d8990240SAditya Kali 
2115d8990240SAditya Kali 	TP_fast_assign(
2116d8990240SAditya Kali 		__entry->dev	= inode->i_sb->s_dev;
2117210c0526SAnatol Pomozov 		__entry->ino	= inode->i_ino;
2118d8990240SAditya Kali 		__entry->start	= start;
211961801325SLukas Czerner 		__entry->end	= end;
2120d8990240SAditya Kali 		__entry->depth	= depth;
2121d8990240SAditya Kali 	),
2122d8990240SAditya Kali 
212361801325SLukas Czerner 	TP_printk("dev %d,%d ino %lu since %u end %u depth %d",
2124d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2125d8990240SAditya Kali 		  (unsigned long) __entry->ino,
2126d8990240SAditya Kali 		  (unsigned) __entry->start,
212761801325SLukas Czerner 		  (unsigned) __entry->end,
2128d8990240SAditya Kali 		  __entry->depth)
2129d8990240SAditya Kali );
2130d8990240SAditya Kali 
2131d8990240SAditya Kali TRACE_EVENT(ext4_ext_remove_space_done,
213261801325SLukas Czerner 	TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end,
21339fe67149SEric Whitney 		 int depth, struct partial_cluster *pc, __le16 eh_entries),
2134d8990240SAditya Kali 
21359fe67149SEric Whitney 	TP_ARGS(inode, start, end, depth, pc, eh_entries),
2136d8990240SAditya Kali 
2137d8990240SAditya Kali 	TP_STRUCT__entry(
2138d8990240SAditya Kali 		__field(	dev_t,		dev		)
2139210c0526SAnatol Pomozov 		__field(	ino_t,		ino		)
2140d8990240SAditya Kali 		__field(	ext4_lblk_t,	start		)
214161801325SLukas Czerner 		__field(	ext4_lblk_t,	end		)
2142d8990240SAditya Kali 		__field(	int,		depth		)
21439fe67149SEric Whitney 		__field(	ext4_fsblk_t,	pc_pclu		)
21449fe67149SEric Whitney 		__field(	ext4_lblk_t,	pc_lblk		)
21459fe67149SEric Whitney 		__field(	int,		pc_state	)
2146d8990240SAditya Kali 		__field(	unsigned short,	eh_entries	)
2147d8990240SAditya Kali 	),
2148d8990240SAditya Kali 
2149d8990240SAditya Kali 	TP_fast_assign(
2150d8990240SAditya Kali 		__entry->dev		= inode->i_sb->s_dev;
2151210c0526SAnatol Pomozov 		__entry->ino		= inode->i_ino;
2152d8990240SAditya Kali 		__entry->start		= start;
215361801325SLukas Czerner 		__entry->end		= end;
2154d8990240SAditya Kali 		__entry->depth		= depth;
21559fe67149SEric Whitney 		__entry->pc_pclu	= pc->pclu;
21569fe67149SEric Whitney 		__entry->pc_lblk	= pc->lblk;
21579fe67149SEric Whitney 		__entry->pc_state	= pc->state;
2158d6a77105STheodore Ts'o 		__entry->eh_entries	= le16_to_cpu(eh_entries);
2159d8990240SAditya Kali 	),
2160d8990240SAditya Kali 
21619fe67149SEric Whitney 	TP_printk("dev %d,%d ino %lu since %u end %u depth %d "
21629fe67149SEric Whitney 		  "partial [pclu %lld lblk %u state %d] "
2163d8990240SAditya Kali 		  "remaining_entries %u",
2164d8990240SAditya Kali 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2165d8990240SAditya Kali 		  (unsigned long) __entry->ino,
2166d8990240SAditya Kali 		  (unsigned) __entry->start,
216761801325SLukas Czerner 		  (unsigned) __entry->end,
2168d8990240SAditya Kali 		  __entry->depth,
21699fe67149SEric Whitney 		  (long long) __entry->pc_pclu,
21709fe67149SEric Whitney 		  (unsigned int) __entry->pc_lblk,
21719fe67149SEric Whitney 		  (int) __entry->pc_state,
2172d8990240SAditya Kali 		  (unsigned short) __entry->eh_entries)
2173d8990240SAditya Kali );
2174d8990240SAditya Kali 
2175107a7bd3STheodore Ts'o DECLARE_EVENT_CLASS(ext4__es_extent,
2176fdc0212eSZheng Liu 	TP_PROTO(struct inode *inode, struct extent_status *es),
2177992e9fddSZheng Liu 
2178fdc0212eSZheng Liu 	TP_ARGS(inode, es),
2179992e9fddSZheng Liu 
2180992e9fddSZheng Liu 	TP_STRUCT__entry(
2181992e9fddSZheng Liu 		__field(	dev_t,		dev		)
2182992e9fddSZheng Liu 		__field(	ino_t,		ino		)
2183fdc0212eSZheng Liu 		__field(	ext4_lblk_t,	lblk		)
2184fdc0212eSZheng Liu 		__field(	ext4_lblk_t,	len		)
2185fdc0212eSZheng Liu 		__field(	ext4_fsblk_t,	pblk		)
218621ddd568STheodore Ts'o 		__field(	char, status	)
2187992e9fddSZheng Liu 	),
2188992e9fddSZheng Liu 
2189992e9fddSZheng Liu 	TP_fast_assign(
2190992e9fddSZheng Liu 		__entry->dev	= inode->i_sb->s_dev;
2191992e9fddSZheng Liu 		__entry->ino	= inode->i_ino;
2192fdc0212eSZheng Liu 		__entry->lblk	= es->es_lblk;
2193fdc0212eSZheng Liu 		__entry->len	= es->es_len;
219452144d89SDmitry Monakhov 		__entry->pblk	= ext4_es_show_pblock(es);
21953be78c73STheodore Ts'o 		__entry->status	= ext4_es_status(es);
2196992e9fddSZheng Liu 	),
2197992e9fddSZheng Liu 
219821ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s",
2199992e9fddSZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2200992e9fddSZheng Liu 		  (unsigned long) __entry->ino,
2201fdc0212eSZheng Liu 		  __entry->lblk, __entry->len,
220221ddd568STheodore Ts'o 		  __entry->pblk, show_extent_status(__entry->status))
2203992e9fddSZheng Liu );
2204992e9fddSZheng Liu 
2205107a7bd3STheodore Ts'o DEFINE_EVENT(ext4__es_extent, ext4_es_insert_extent,
2206107a7bd3STheodore Ts'o 	TP_PROTO(struct inode *inode, struct extent_status *es),
2207107a7bd3STheodore Ts'o 
2208107a7bd3STheodore Ts'o 	TP_ARGS(inode, es)
2209107a7bd3STheodore Ts'o );
2210107a7bd3STheodore Ts'o 
2211107a7bd3STheodore Ts'o DEFINE_EVENT(ext4__es_extent, ext4_es_cache_extent,
2212107a7bd3STheodore Ts'o 	TP_PROTO(struct inode *inode, struct extent_status *es),
2213107a7bd3STheodore Ts'o 
2214107a7bd3STheodore Ts'o 	TP_ARGS(inode, es)
2215107a7bd3STheodore Ts'o );
2216107a7bd3STheodore Ts'o 
2217992e9fddSZheng Liu TRACE_EVENT(ext4_es_remove_extent,
221806b0c886SZheng Liu 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len),
2219992e9fddSZheng Liu 
222006b0c886SZheng Liu 	TP_ARGS(inode, lblk, len),
2221992e9fddSZheng Liu 
2222992e9fddSZheng Liu 	TP_STRUCT__entry(
2223992e9fddSZheng Liu 		__field(	dev_t,	dev			)
2224992e9fddSZheng Liu 		__field(	ino_t,	ino			)
222506b0c886SZheng Liu 		__field(	loff_t,	lblk			)
2226992e9fddSZheng Liu 		__field(	loff_t,	len			)
2227992e9fddSZheng Liu 	),
2228992e9fddSZheng Liu 
2229992e9fddSZheng Liu 	TP_fast_assign(
2230992e9fddSZheng Liu 		__entry->dev	= inode->i_sb->s_dev;
2231992e9fddSZheng Liu 		__entry->ino	= inode->i_ino;
223206b0c886SZheng Liu 		__entry->lblk	= lblk;
2233992e9fddSZheng Liu 		__entry->len	= len;
2234992e9fddSZheng Liu 	),
2235992e9fddSZheng Liu 
2236992e9fddSZheng Liu 	TP_printk("dev %d,%d ino %lu es [%lld/%lld)",
2237992e9fddSZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2238992e9fddSZheng Liu 		  (unsigned long) __entry->ino,
223906b0c886SZheng Liu 		  __entry->lblk, __entry->len)
2240992e9fddSZheng Liu );
2241992e9fddSZheng Liu 
2242ad431025SEric Whitney TRACE_EVENT(ext4_es_find_extent_range_enter,
224306b0c886SZheng Liu 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
2244992e9fddSZheng Liu 
224506b0c886SZheng Liu 	TP_ARGS(inode, lblk),
2246992e9fddSZheng Liu 
2247992e9fddSZheng Liu 	TP_STRUCT__entry(
2248992e9fddSZheng Liu 		__field(	dev_t,		dev		)
2249992e9fddSZheng Liu 		__field(	ino_t,		ino		)
225006b0c886SZheng Liu 		__field(	ext4_lblk_t,	lblk		)
2251992e9fddSZheng Liu 	),
2252992e9fddSZheng Liu 
2253992e9fddSZheng Liu 	TP_fast_assign(
2254992e9fddSZheng Liu 		__entry->dev	= inode->i_sb->s_dev;
2255992e9fddSZheng Liu 		__entry->ino	= inode->i_ino;
225606b0c886SZheng Liu 		__entry->lblk	= lblk;
2257992e9fddSZheng Liu 	),
2258992e9fddSZheng Liu 
225906b0c886SZheng Liu 	TP_printk("dev %d,%d ino %lu lblk %u",
2260992e9fddSZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
226106b0c886SZheng Liu 		  (unsigned long) __entry->ino, __entry->lblk)
2262992e9fddSZheng Liu );
2263992e9fddSZheng Liu 
2264ad431025SEric Whitney TRACE_EVENT(ext4_es_find_extent_range_exit,
2265be401363SZheng Liu 	TP_PROTO(struct inode *inode, struct extent_status *es),
2266992e9fddSZheng Liu 
2267be401363SZheng Liu 	TP_ARGS(inode, es),
2268992e9fddSZheng Liu 
2269992e9fddSZheng Liu 	TP_STRUCT__entry(
2270992e9fddSZheng Liu 		__field(	dev_t,		dev		)
2271992e9fddSZheng Liu 		__field(	ino_t,		ino		)
227206b0c886SZheng Liu 		__field(	ext4_lblk_t,	lblk		)
2273992e9fddSZheng Liu 		__field(	ext4_lblk_t,	len		)
2274fdc0212eSZheng Liu 		__field(	ext4_fsblk_t,	pblk		)
227521ddd568STheodore Ts'o 		__field(	char, status	)
2276992e9fddSZheng Liu 	),
2277992e9fddSZheng Liu 
2278992e9fddSZheng Liu 	TP_fast_assign(
2279992e9fddSZheng Liu 		__entry->dev	= inode->i_sb->s_dev;
2280992e9fddSZheng Liu 		__entry->ino	= inode->i_ino;
228106b0c886SZheng Liu 		__entry->lblk	= es->es_lblk;
228206b0c886SZheng Liu 		__entry->len	= es->es_len;
228352144d89SDmitry Monakhov 		__entry->pblk	= ext4_es_show_pblock(es);
22843be78c73STheodore Ts'o 		__entry->status	= ext4_es_status(es);
2285992e9fddSZheng Liu 	),
2286992e9fddSZheng Liu 
228721ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s",
2288992e9fddSZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2289992e9fddSZheng Liu 		  (unsigned long) __entry->ino,
2290fdc0212eSZheng Liu 		  __entry->lblk, __entry->len,
229121ddd568STheodore Ts'o 		  __entry->pblk, show_extent_status(__entry->status))
2292992e9fddSZheng Liu );
2293992e9fddSZheng Liu 
2294d100eef2SZheng Liu TRACE_EVENT(ext4_es_lookup_extent_enter,
2295d100eef2SZheng Liu 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
2296d100eef2SZheng Liu 
2297d100eef2SZheng Liu 	TP_ARGS(inode, lblk),
2298d100eef2SZheng Liu 
2299d100eef2SZheng Liu 	TP_STRUCT__entry(
2300d100eef2SZheng Liu 		__field(	dev_t,		dev		)
2301d100eef2SZheng Liu 		__field(	ino_t,		ino		)
2302d100eef2SZheng Liu 		__field(	ext4_lblk_t,	lblk		)
2303d100eef2SZheng Liu 	),
2304d100eef2SZheng Liu 
2305d100eef2SZheng Liu 	TP_fast_assign(
2306d100eef2SZheng Liu 		__entry->dev	= inode->i_sb->s_dev;
2307d100eef2SZheng Liu 		__entry->ino	= inode->i_ino;
2308d100eef2SZheng Liu 		__entry->lblk	= lblk;
2309d100eef2SZheng Liu 	),
2310d100eef2SZheng Liu 
2311d100eef2SZheng Liu 	TP_printk("dev %d,%d ino %lu lblk %u",
2312d100eef2SZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2313d100eef2SZheng Liu 		  (unsigned long) __entry->ino, __entry->lblk)
2314d100eef2SZheng Liu );
2315d100eef2SZheng Liu 
2316d100eef2SZheng Liu TRACE_EVENT(ext4_es_lookup_extent_exit,
2317d100eef2SZheng Liu 	TP_PROTO(struct inode *inode, struct extent_status *es,
2318d100eef2SZheng Liu 		 int found),
2319d100eef2SZheng Liu 
2320d100eef2SZheng Liu 	TP_ARGS(inode, es, found),
2321d100eef2SZheng Liu 
2322d100eef2SZheng Liu 	TP_STRUCT__entry(
2323d100eef2SZheng Liu 		__field(	dev_t,		dev		)
2324d100eef2SZheng Liu 		__field(	ino_t,		ino		)
2325d100eef2SZheng Liu 		__field(	ext4_lblk_t,	lblk		)
2326d100eef2SZheng Liu 		__field(	ext4_lblk_t,	len		)
2327d100eef2SZheng Liu 		__field(	ext4_fsblk_t,	pblk		)
232821ddd568STheodore Ts'o 		__field(	char,		status		)
2329d100eef2SZheng Liu 		__field(	int,		found		)
2330d100eef2SZheng Liu 	),
2331d100eef2SZheng Liu 
2332d100eef2SZheng Liu 	TP_fast_assign(
2333d100eef2SZheng Liu 		__entry->dev	= inode->i_sb->s_dev;
2334d100eef2SZheng Liu 		__entry->ino	= inode->i_ino;
2335d100eef2SZheng Liu 		__entry->lblk	= es->es_lblk;
2336d100eef2SZheng Liu 		__entry->len	= es->es_len;
233752144d89SDmitry Monakhov 		__entry->pblk	= ext4_es_show_pblock(es);
23383be78c73STheodore Ts'o 		__entry->status	= ext4_es_status(es);
2339d100eef2SZheng Liu 		__entry->found	= found;
2340d100eef2SZheng Liu 	),
2341d100eef2SZheng Liu 
234221ddd568STheodore Ts'o 	TP_printk("dev %d,%d ino %lu found %d [%u/%u) %llu %s",
2343d100eef2SZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2344d100eef2SZheng Liu 		  (unsigned long) __entry->ino, __entry->found,
2345d100eef2SZheng Liu 		  __entry->lblk, __entry->len,
2346d100eef2SZheng Liu 		  __entry->found ? __entry->pblk : 0,
234721ddd568STheodore Ts'o 		  show_extent_status(__entry->found ? __entry->status : 0))
2348d100eef2SZheng Liu );
2349d100eef2SZheng Liu 
2350e963bb1dSZheng Liu DECLARE_EVENT_CLASS(ext4__es_shrink_enter,
235124630774STheodore Ts'o 	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
235274cd15cdSZheng Liu 
235324630774STheodore Ts'o 	TP_ARGS(sb, nr_to_scan, cache_cnt),
235474cd15cdSZheng Liu 
235574cd15cdSZheng Liu 	TP_STRUCT__entry(
235674cd15cdSZheng Liu 		__field(	dev_t,	dev			)
235774cd15cdSZheng Liu 		__field(	int,	nr_to_scan		)
235824630774STheodore Ts'o 		__field(	int,	cache_cnt		)
235974cd15cdSZheng Liu 	),
236074cd15cdSZheng Liu 
236174cd15cdSZheng Liu 	TP_fast_assign(
236274cd15cdSZheng Liu 		__entry->dev		= sb->s_dev;
236374cd15cdSZheng Liu 		__entry->nr_to_scan	= nr_to_scan;
236424630774STheodore Ts'o 		__entry->cache_cnt	= cache_cnt;
236574cd15cdSZheng Liu 	),
236674cd15cdSZheng Liu 
236724630774STheodore Ts'o 	TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d",
236874cd15cdSZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
236924630774STheodore Ts'o 		  __entry->nr_to_scan, __entry->cache_cnt)
237074cd15cdSZheng Liu );
237174cd15cdSZheng Liu 
2372e963bb1dSZheng Liu DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_count,
2373e963bb1dSZheng Liu 	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
237474cd15cdSZheng Liu 
2375e963bb1dSZheng Liu 	TP_ARGS(sb, nr_to_scan, cache_cnt)
2376e963bb1dSZheng Liu );
2377e963bb1dSZheng Liu 
2378e963bb1dSZheng Liu DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_scan_enter,
2379e963bb1dSZheng Liu 	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
2380e963bb1dSZheng Liu 
2381e963bb1dSZheng Liu 	TP_ARGS(sb, nr_to_scan, cache_cnt)
2382e963bb1dSZheng Liu );
2383e963bb1dSZheng Liu 
2384e963bb1dSZheng Liu TRACE_EVENT(ext4_es_shrink_scan_exit,
2385e963bb1dSZheng Liu 	TP_PROTO(struct super_block *sb, int nr_shrunk, int cache_cnt),
2386e963bb1dSZheng Liu 
2387e963bb1dSZheng Liu 	TP_ARGS(sb, nr_shrunk, cache_cnt),
238874cd15cdSZheng Liu 
238974cd15cdSZheng Liu 	TP_STRUCT__entry(
239074cd15cdSZheng Liu 		__field(	dev_t,	dev			)
2391e963bb1dSZheng Liu 		__field(	int,	nr_shrunk		)
239224630774STheodore Ts'o 		__field(	int,	cache_cnt		)
239374cd15cdSZheng Liu 	),
239474cd15cdSZheng Liu 
239574cd15cdSZheng Liu 	TP_fast_assign(
239674cd15cdSZheng Liu 		__entry->dev		= sb->s_dev;
2397e963bb1dSZheng Liu 		__entry->nr_shrunk	= nr_shrunk;
239824630774STheodore Ts'o 		__entry->cache_cnt	= cache_cnt;
239974cd15cdSZheng Liu 	),
240074cd15cdSZheng Liu 
2401e963bb1dSZheng Liu 	TP_printk("dev %d,%d nr_shrunk %d cache_cnt %d",
240274cd15cdSZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2403e963bb1dSZheng Liu 		  __entry->nr_shrunk, __entry->cache_cnt)
240474cd15cdSZheng Liu );
240574cd15cdSZheng Liu 
24069eb79482SNamjae Jeon TRACE_EVENT(ext4_collapse_range,
24079eb79482SNamjae Jeon 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len),
24089eb79482SNamjae Jeon 
24099eb79482SNamjae Jeon 	TP_ARGS(inode, offset, len),
24109eb79482SNamjae Jeon 
24119eb79482SNamjae Jeon 	TP_STRUCT__entry(
24129eb79482SNamjae Jeon 		__field(dev_t,	dev)
24139eb79482SNamjae Jeon 		__field(ino_t,	ino)
24149eb79482SNamjae Jeon 		__field(loff_t,	offset)
24159eb79482SNamjae Jeon 		__field(loff_t, len)
24169eb79482SNamjae Jeon 	),
24179eb79482SNamjae Jeon 
24189eb79482SNamjae Jeon 	TP_fast_assign(
24199eb79482SNamjae Jeon 		__entry->dev	= inode->i_sb->s_dev;
24209eb79482SNamjae Jeon 		__entry->ino	= inode->i_ino;
24219eb79482SNamjae Jeon 		__entry->offset	= offset;
24229eb79482SNamjae Jeon 		__entry->len	= len;
24239eb79482SNamjae Jeon 	),
24249eb79482SNamjae Jeon 
24259eb79482SNamjae Jeon 	TP_printk("dev %d,%d ino %lu offset %lld len %lld",
24269eb79482SNamjae Jeon 		  MAJOR(__entry->dev), MINOR(__entry->dev),
24279eb79482SNamjae Jeon 		  (unsigned long) __entry->ino,
24289eb79482SNamjae Jeon 		  __entry->offset, __entry->len)
24299eb79482SNamjae Jeon );
24309eb79482SNamjae Jeon 
2431331573feSNamjae Jeon TRACE_EVENT(ext4_insert_range,
2432331573feSNamjae Jeon 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len),
2433331573feSNamjae Jeon 
2434331573feSNamjae Jeon 	TP_ARGS(inode, offset, len),
2435331573feSNamjae Jeon 
2436331573feSNamjae Jeon 	TP_STRUCT__entry(
2437331573feSNamjae Jeon 		__field(dev_t,	dev)
2438331573feSNamjae Jeon 		__field(ino_t,	ino)
2439331573feSNamjae Jeon 		__field(loff_t,	offset)
2440331573feSNamjae Jeon 		__field(loff_t, len)
2441331573feSNamjae Jeon 	),
2442331573feSNamjae Jeon 
2443331573feSNamjae Jeon 	TP_fast_assign(
2444331573feSNamjae Jeon 		__entry->dev	= inode->i_sb->s_dev;
2445331573feSNamjae Jeon 		__entry->ino	= inode->i_ino;
2446331573feSNamjae Jeon 		__entry->offset	= offset;
2447331573feSNamjae Jeon 		__entry->len	= len;
2448331573feSNamjae Jeon 	),
2449331573feSNamjae Jeon 
2450331573feSNamjae Jeon 	TP_printk("dev %d,%d ino %lu offset %lld len %lld",
2451331573feSNamjae Jeon 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2452331573feSNamjae Jeon 		  (unsigned long) __entry->ino,
2453331573feSNamjae Jeon 		  __entry->offset, __entry->len)
2454331573feSNamjae Jeon );
2455331573feSNamjae Jeon 
2456eb68d0e2SZheng Liu TRACE_EVENT(ext4_es_shrink,
2457eb68d0e2SZheng Liu 	TP_PROTO(struct super_block *sb, int nr_shrunk, u64 scan_time,
2458edaa53caSZheng Liu 		 int nr_skipped, int retried),
2459eb68d0e2SZheng Liu 
2460edaa53caSZheng Liu 	TP_ARGS(sb, nr_shrunk, scan_time, nr_skipped, retried),
2461eb68d0e2SZheng Liu 
2462eb68d0e2SZheng Liu 	TP_STRUCT__entry(
2463eb68d0e2SZheng Liu 		__field(	dev_t,		dev		)
2464eb68d0e2SZheng Liu 		__field(	int,		nr_shrunk	)
2465eb68d0e2SZheng Liu 		__field(	unsigned long long, scan_time	)
2466eb68d0e2SZheng Liu 		__field(	int,		nr_skipped	)
2467eb68d0e2SZheng Liu 		__field(	int,		retried		)
2468eb68d0e2SZheng Liu 	),
2469eb68d0e2SZheng Liu 
2470eb68d0e2SZheng Liu 	TP_fast_assign(
2471eb68d0e2SZheng Liu 		__entry->dev		= sb->s_dev;
2472eb68d0e2SZheng Liu 		__entry->nr_shrunk	= nr_shrunk;
2473eb68d0e2SZheng Liu 		__entry->scan_time	= div_u64(scan_time, 1000);
2474eb68d0e2SZheng Liu 		__entry->nr_skipped	= nr_skipped;
2475eb68d0e2SZheng Liu 		__entry->retried	= retried;
2476eb68d0e2SZheng Liu 	),
2477eb68d0e2SZheng Liu 
2478edaa53caSZheng Liu 	TP_printk("dev %d,%d nr_shrunk %d, scan_time %llu "
2479eb68d0e2SZheng Liu 		  "nr_skipped %d retried %d",
2480eb68d0e2SZheng Liu 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->nr_shrunk,
2481edaa53caSZheng Liu 		  __entry->scan_time, __entry->nr_skipped, __entry->retried)
2482eb68d0e2SZheng Liu );
2483eb68d0e2SZheng Liu 
24840b02f4c0SEric Whitney TRACE_EVENT(ext4_es_insert_delayed_block,
24850b02f4c0SEric Whitney 	TP_PROTO(struct inode *inode, struct extent_status *es,
24860b02f4c0SEric Whitney 		 bool allocated),
24870b02f4c0SEric Whitney 
24880b02f4c0SEric Whitney 	TP_ARGS(inode, es, allocated),
24890b02f4c0SEric Whitney 
24900b02f4c0SEric Whitney 	TP_STRUCT__entry(
24910b02f4c0SEric Whitney 		__field(	dev_t,		dev		)
24920b02f4c0SEric Whitney 		__field(	ino_t,		ino		)
24930b02f4c0SEric Whitney 		__field(	ext4_lblk_t,	lblk		)
24940b02f4c0SEric Whitney 		__field(	ext4_lblk_t,	len		)
24950b02f4c0SEric Whitney 		__field(	ext4_fsblk_t,	pblk		)
24960b02f4c0SEric Whitney 		__field(	char,		status		)
24970b02f4c0SEric Whitney 		__field(	bool,		allocated	)
24980b02f4c0SEric Whitney 	),
24990b02f4c0SEric Whitney 
25000b02f4c0SEric Whitney 	TP_fast_assign(
25010b02f4c0SEric Whitney 		__entry->dev		= inode->i_sb->s_dev;
25020b02f4c0SEric Whitney 		__entry->ino		= inode->i_ino;
25030b02f4c0SEric Whitney 		__entry->lblk		= es->es_lblk;
25040b02f4c0SEric Whitney 		__entry->len		= es->es_len;
250552144d89SDmitry Monakhov 		__entry->pblk		= ext4_es_show_pblock(es);
25060b02f4c0SEric Whitney 		__entry->status		= ext4_es_status(es);
25070b02f4c0SEric Whitney 		__entry->allocated	= allocated;
25080b02f4c0SEric Whitney 	),
25090b02f4c0SEric Whitney 
25100b02f4c0SEric Whitney 	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s "
25110b02f4c0SEric Whitney 		  "allocated %d",
25120b02f4c0SEric Whitney 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25130b02f4c0SEric Whitney 		  (unsigned long) __entry->ino,
25140b02f4c0SEric Whitney 		  __entry->lblk, __entry->len,
25150b02f4c0SEric Whitney 		  __entry->pblk, show_extent_status(__entry->status),
25160b02f4c0SEric Whitney 		  __entry->allocated)
25170b02f4c0SEric Whitney );
25180b02f4c0SEric Whitney 
25190c9ec4beSDarrick J. Wong /* fsmap traces */
25200c9ec4beSDarrick J. Wong DECLARE_EVENT_CLASS(ext4_fsmap_class,
25210c9ec4beSDarrick J. Wong 	TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len,
25220c9ec4beSDarrick J. Wong 		 u64 owner),
25230c9ec4beSDarrick J. Wong 	TP_ARGS(sb, keydev, agno, bno, len, owner),
25240c9ec4beSDarrick J. Wong 	TP_STRUCT__entry(
25250c9ec4beSDarrick J. Wong 		__field(dev_t, dev)
25260c9ec4beSDarrick J. Wong 		__field(dev_t, keydev)
25270c9ec4beSDarrick J. Wong 		__field(u32, agno)
25280c9ec4beSDarrick J. Wong 		__field(u64, bno)
25290c9ec4beSDarrick J. Wong 		__field(u64, len)
25300c9ec4beSDarrick J. Wong 		__field(u64, owner)
25310c9ec4beSDarrick J. Wong 	),
25320c9ec4beSDarrick J. Wong 	TP_fast_assign(
25330c9ec4beSDarrick J. Wong 		__entry->dev = sb->s_bdev->bd_dev;
25340c9ec4beSDarrick J. Wong 		__entry->keydev = new_decode_dev(keydev);
25350c9ec4beSDarrick J. Wong 		__entry->agno = agno;
25360c9ec4beSDarrick J. Wong 		__entry->bno = bno;
25370c9ec4beSDarrick J. Wong 		__entry->len = len;
25380c9ec4beSDarrick J. Wong 		__entry->owner = owner;
25390c9ec4beSDarrick J. Wong 	),
25400c9ec4beSDarrick J. Wong 	TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld\n",
25410c9ec4beSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25420c9ec4beSDarrick J. Wong 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
25430c9ec4beSDarrick J. Wong 		  __entry->agno,
25440c9ec4beSDarrick J. Wong 		  __entry->bno,
25450c9ec4beSDarrick J. Wong 		  __entry->len,
25460c9ec4beSDarrick J. Wong 		  __entry->owner)
25470c9ec4beSDarrick J. Wong )
25480c9ec4beSDarrick J. Wong #define DEFINE_FSMAP_EVENT(name) \
25490c9ec4beSDarrick J. Wong DEFINE_EVENT(ext4_fsmap_class, name, \
25500c9ec4beSDarrick J. Wong 	TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len, \
25510c9ec4beSDarrick J. Wong 		 u64 owner), \
25520c9ec4beSDarrick J. Wong 	TP_ARGS(sb, keydev, agno, bno, len, owner))
25530c9ec4beSDarrick J. Wong DEFINE_FSMAP_EVENT(ext4_fsmap_low_key);
25540c9ec4beSDarrick J. Wong DEFINE_FSMAP_EVENT(ext4_fsmap_high_key);
25550c9ec4beSDarrick J. Wong DEFINE_FSMAP_EVENT(ext4_fsmap_mapping);
25560c9ec4beSDarrick J. Wong 
25570c9ec4beSDarrick J. Wong DECLARE_EVENT_CLASS(ext4_getfsmap_class,
25580c9ec4beSDarrick J. Wong 	TP_PROTO(struct super_block *sb, struct ext4_fsmap *fsmap),
25590c9ec4beSDarrick J. Wong 	TP_ARGS(sb, fsmap),
25600c9ec4beSDarrick J. Wong 	TP_STRUCT__entry(
25610c9ec4beSDarrick J. Wong 		__field(dev_t, dev)
25620c9ec4beSDarrick J. Wong 		__field(dev_t, keydev)
25630c9ec4beSDarrick J. Wong 		__field(u64, block)
25640c9ec4beSDarrick J. Wong 		__field(u64, len)
25650c9ec4beSDarrick J. Wong 		__field(u64, owner)
25660c9ec4beSDarrick J. Wong 		__field(u64, flags)
25670c9ec4beSDarrick J. Wong 	),
25680c9ec4beSDarrick J. Wong 	TP_fast_assign(
25690c9ec4beSDarrick J. Wong 		__entry->dev = sb->s_bdev->bd_dev;
25700c9ec4beSDarrick J. Wong 		__entry->keydev = new_decode_dev(fsmap->fmr_device);
25710c9ec4beSDarrick J. Wong 		__entry->block = fsmap->fmr_physical;
25720c9ec4beSDarrick J. Wong 		__entry->len = fsmap->fmr_length;
25730c9ec4beSDarrick J. Wong 		__entry->owner = fsmap->fmr_owner;
25740c9ec4beSDarrick J. Wong 		__entry->flags = fsmap->fmr_flags;
25750c9ec4beSDarrick J. Wong 	),
25760c9ec4beSDarrick J. Wong 	TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld flags 0x%llx\n",
25770c9ec4beSDarrick J. Wong 		  MAJOR(__entry->dev), MINOR(__entry->dev),
25780c9ec4beSDarrick J. Wong 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
25790c9ec4beSDarrick J. Wong 		  __entry->block,
25800c9ec4beSDarrick J. Wong 		  __entry->len,
25810c9ec4beSDarrick J. Wong 		  __entry->owner,
25820c9ec4beSDarrick J. Wong 		  __entry->flags)
25830c9ec4beSDarrick J. Wong )
25840c9ec4beSDarrick J. Wong #define DEFINE_GETFSMAP_EVENT(name) \
25850c9ec4beSDarrick J. Wong DEFINE_EVENT(ext4_getfsmap_class, name, \
25860c9ec4beSDarrick J. Wong 	TP_PROTO(struct super_block *sb, struct ext4_fsmap *fsmap), \
25870c9ec4beSDarrick J. Wong 	TP_ARGS(sb, fsmap))
25880c9ec4beSDarrick J. Wong DEFINE_GETFSMAP_EVENT(ext4_getfsmap_low_key);
25890c9ec4beSDarrick J. Wong DEFINE_GETFSMAP_EVENT(ext4_getfsmap_high_key);
25900c9ec4beSDarrick J. Wong DEFINE_GETFSMAP_EVENT(ext4_getfsmap_mapping);
25910c9ec4beSDarrick J. Wong 
2592ccf0f32aSTheodore Ts'o TRACE_EVENT(ext4_shutdown,
2593ccf0f32aSTheodore Ts'o 	TP_PROTO(struct super_block *sb, unsigned long flags),
2594ccf0f32aSTheodore Ts'o 
2595ccf0f32aSTheodore Ts'o 	TP_ARGS(sb, flags),
2596ccf0f32aSTheodore Ts'o 
2597ccf0f32aSTheodore Ts'o 	TP_STRUCT__entry(
2598ccf0f32aSTheodore Ts'o 		__field(	dev_t,	dev			)
2599ccf0f32aSTheodore Ts'o 		__field(     unsigned,	flags			)
2600ccf0f32aSTheodore Ts'o 	),
2601ccf0f32aSTheodore Ts'o 
2602ccf0f32aSTheodore Ts'o 	TP_fast_assign(
2603ccf0f32aSTheodore Ts'o 		__entry->dev	= sb->s_dev;
2604ccf0f32aSTheodore Ts'o 		__entry->flags	= flags;
2605ccf0f32aSTheodore Ts'o 	),
2606ccf0f32aSTheodore Ts'o 
2607ccf0f32aSTheodore Ts'o 	TP_printk("dev %d,%d flags %u",
2608ccf0f32aSTheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2609ccf0f32aSTheodore Ts'o 		  __entry->flags)
2610ccf0f32aSTheodore Ts'o );
2611ccf0f32aSTheodore Ts'o 
2612ccf0f32aSTheodore Ts'o TRACE_EVENT(ext4_error,
2613ccf0f32aSTheodore Ts'o 	TP_PROTO(struct super_block *sb, const char *function,
2614ccf0f32aSTheodore Ts'o 		 unsigned int line),
2615ccf0f32aSTheodore Ts'o 
2616ccf0f32aSTheodore Ts'o 	TP_ARGS(sb, function, line),
2617ccf0f32aSTheodore Ts'o 
2618ccf0f32aSTheodore Ts'o 	TP_STRUCT__entry(
2619ccf0f32aSTheodore Ts'o 		__field(	dev_t,	dev			)
2620ccf0f32aSTheodore Ts'o 		__field( const char *,	function		)
2621ccf0f32aSTheodore Ts'o 		__field(     unsigned,	line			)
2622ccf0f32aSTheodore Ts'o 	),
2623ccf0f32aSTheodore Ts'o 
2624ccf0f32aSTheodore Ts'o 	TP_fast_assign(
2625ccf0f32aSTheodore Ts'o 		__entry->dev	= sb->s_dev;
2626ccf0f32aSTheodore Ts'o 		__entry->function = function;
2627ccf0f32aSTheodore Ts'o 		__entry->line	= line;
2628ccf0f32aSTheodore Ts'o 	),
2629ccf0f32aSTheodore Ts'o 
2630ccf0f32aSTheodore Ts'o 	TP_printk("dev %d,%d function %s line %u",
2631ccf0f32aSTheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2632ccf0f32aSTheodore Ts'o 		  __entry->function, __entry->line)
2633ccf0f32aSTheodore Ts'o );
2634ccf0f32aSTheodore Ts'o 
26353d392b26STheodore Ts'o TRACE_EVENT(ext4_prefetch_bitmaps,
26363d392b26STheodore Ts'o 	    TP_PROTO(struct super_block *sb, ext4_group_t group,
26373d392b26STheodore Ts'o 		     ext4_group_t next, unsigned int prefetch_ios),
26383d392b26STheodore Ts'o 
26393d392b26STheodore Ts'o 	TP_ARGS(sb, group, next, prefetch_ios),
26403d392b26STheodore Ts'o 
26413d392b26STheodore Ts'o 	TP_STRUCT__entry(
26423d392b26STheodore Ts'o 		__field(	dev_t,	dev			)
26433d392b26STheodore Ts'o 		__field(	__u32,	group			)
26443d392b26STheodore Ts'o 		__field(	__u32,	next			)
26453d392b26STheodore Ts'o 		__field(	__u32,	ios			)
26463d392b26STheodore Ts'o 	),
26473d392b26STheodore Ts'o 
26483d392b26STheodore Ts'o 	TP_fast_assign(
26493d392b26STheodore Ts'o 		__entry->dev	= sb->s_dev;
26503d392b26STheodore Ts'o 		__entry->group	= group;
26513d392b26STheodore Ts'o 		__entry->next	= next;
26523d392b26STheodore Ts'o 		__entry->ios	= prefetch_ios;
26533d392b26STheodore Ts'o 	),
26543d392b26STheodore Ts'o 
26553d392b26STheodore Ts'o 	TP_printk("dev %d,%d group %u next %u ios %u",
26563d392b26STheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev),
26573d392b26STheodore Ts'o 		  __entry->group, __entry->next, __entry->ios)
26583d392b26STheodore Ts'o );
26593d392b26STheodore Ts'o 
26603d392b26STheodore Ts'o TRACE_EVENT(ext4_lazy_itable_init,
26613d392b26STheodore Ts'o 	    TP_PROTO(struct super_block *sb, ext4_group_t group),
26623d392b26STheodore Ts'o 
26633d392b26STheodore Ts'o 	TP_ARGS(sb, group),
26643d392b26STheodore Ts'o 
26653d392b26STheodore Ts'o 	TP_STRUCT__entry(
26663d392b26STheodore Ts'o 		__field(	dev_t,	dev			)
26673d392b26STheodore Ts'o 		__field(	__u32,	group			)
26683d392b26STheodore Ts'o 	),
26693d392b26STheodore Ts'o 
26703d392b26STheodore Ts'o 	TP_fast_assign(
26713d392b26STheodore Ts'o 		__entry->dev	= sb->s_dev;
26723d392b26STheodore Ts'o 		__entry->group	= group;
26733d392b26STheodore Ts'o 	),
26743d392b26STheodore Ts'o 
26753d392b26STheodore Ts'o 	TP_printk("dev %d,%d group %u",
26763d392b26STheodore Ts'o 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->group)
26773d392b26STheodore Ts'o );
26783d392b26STheodore Ts'o 
26798016e29fSHarshad Shirwadkar TRACE_EVENT(ext4_fc_replay_scan,
26808016e29fSHarshad Shirwadkar 	TP_PROTO(struct super_block *sb, int error, int off),
26818016e29fSHarshad Shirwadkar 
26828016e29fSHarshad Shirwadkar 	TP_ARGS(sb, error, off),
26838016e29fSHarshad Shirwadkar 
26848016e29fSHarshad Shirwadkar 	TP_STRUCT__entry(
26858016e29fSHarshad Shirwadkar 		__field(dev_t, dev)
26868016e29fSHarshad Shirwadkar 		__field(int, error)
26878016e29fSHarshad Shirwadkar 		__field(int, off)
26888016e29fSHarshad Shirwadkar 	),
26898016e29fSHarshad Shirwadkar 
26908016e29fSHarshad Shirwadkar 	TP_fast_assign(
26918016e29fSHarshad Shirwadkar 		__entry->dev = sb->s_dev;
26928016e29fSHarshad Shirwadkar 		__entry->error = error;
26938016e29fSHarshad Shirwadkar 		__entry->off = off;
26948016e29fSHarshad Shirwadkar 	),
26958016e29fSHarshad Shirwadkar 
2696163f11b8SRitesh Harjani 	TP_printk("dev %d,%d error %d, off %d",
26978016e29fSHarshad Shirwadkar 		  MAJOR(__entry->dev), MINOR(__entry->dev),
26988016e29fSHarshad Shirwadkar 		  __entry->error, __entry->off)
26998016e29fSHarshad Shirwadkar );
27008016e29fSHarshad Shirwadkar 
27018016e29fSHarshad Shirwadkar TRACE_EVENT(ext4_fc_replay,
27028016e29fSHarshad Shirwadkar 	TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2),
27038016e29fSHarshad Shirwadkar 
27048016e29fSHarshad Shirwadkar 	TP_ARGS(sb, tag, ino, priv1, priv2),
27058016e29fSHarshad Shirwadkar 
27068016e29fSHarshad Shirwadkar 	TP_STRUCT__entry(
27078016e29fSHarshad Shirwadkar 		__field(dev_t, dev)
27088016e29fSHarshad Shirwadkar 		__field(int, tag)
27098016e29fSHarshad Shirwadkar 		__field(int, ino)
27108016e29fSHarshad Shirwadkar 		__field(int, priv1)
27118016e29fSHarshad Shirwadkar 		__field(int, priv2)
27128016e29fSHarshad Shirwadkar 	),
27138016e29fSHarshad Shirwadkar 
27148016e29fSHarshad Shirwadkar 	TP_fast_assign(
27158016e29fSHarshad Shirwadkar 		__entry->dev = sb->s_dev;
27168016e29fSHarshad Shirwadkar 		__entry->tag = tag;
27178016e29fSHarshad Shirwadkar 		__entry->ino = ino;
27188016e29fSHarshad Shirwadkar 		__entry->priv1 = priv1;
27198016e29fSHarshad Shirwadkar 		__entry->priv2 = priv2;
27208016e29fSHarshad Shirwadkar 	),
27218016e29fSHarshad Shirwadkar 
2722163f11b8SRitesh Harjani 	TP_printk("dev %d,%d: tag %d, ino %d, data1 %d, data2 %d",
27238016e29fSHarshad Shirwadkar 		  MAJOR(__entry->dev), MINOR(__entry->dev),
27248016e29fSHarshad Shirwadkar 		  __entry->tag, __entry->ino, __entry->priv1, __entry->priv2)
27258016e29fSHarshad Shirwadkar );
27268016e29fSHarshad Shirwadkar 
2727aa75f4d3SHarshad Shirwadkar TRACE_EVENT(ext4_fc_commit_start,
27285641ace5SRitesh Harjani 	TP_PROTO(struct super_block *sb, tid_t commit_tid),
2729aa75f4d3SHarshad Shirwadkar 
27305641ace5SRitesh Harjani 	TP_ARGS(sb, commit_tid),
2731aa75f4d3SHarshad Shirwadkar 
2732aa75f4d3SHarshad Shirwadkar 	TP_STRUCT__entry(
2733aa75f4d3SHarshad Shirwadkar 		__field(dev_t, dev)
27345641ace5SRitesh Harjani 		__field(tid_t, tid)
2735aa75f4d3SHarshad Shirwadkar 	),
2736aa75f4d3SHarshad Shirwadkar 
2737aa75f4d3SHarshad Shirwadkar 	TP_fast_assign(
2738aa75f4d3SHarshad Shirwadkar 		__entry->dev = sb->s_dev;
27395641ace5SRitesh Harjani 		__entry->tid = commit_tid;
2740aa75f4d3SHarshad Shirwadkar 	),
2741aa75f4d3SHarshad Shirwadkar 
27425641ace5SRitesh Harjani 	TP_printk("dev %d,%d tid %u", MAJOR(__entry->dev), MINOR(__entry->dev),
27435641ace5SRitesh Harjani 		  __entry->tid)
2744aa75f4d3SHarshad Shirwadkar );
2745aa75f4d3SHarshad Shirwadkar 
2746aa75f4d3SHarshad Shirwadkar TRACE_EVENT(ext4_fc_commit_stop,
27475641ace5SRitesh Harjani 	    TP_PROTO(struct super_block *sb, int nblks, int reason,
27485641ace5SRitesh Harjani 		     tid_t commit_tid),
2749aa75f4d3SHarshad Shirwadkar 
27505641ace5SRitesh Harjani 	TP_ARGS(sb, nblks, reason, commit_tid),
2751aa75f4d3SHarshad Shirwadkar 
2752aa75f4d3SHarshad Shirwadkar 	TP_STRUCT__entry(
2753aa75f4d3SHarshad Shirwadkar 		__field(dev_t, dev)
2754aa75f4d3SHarshad Shirwadkar 		__field(int, nblks)
2755aa75f4d3SHarshad Shirwadkar 		__field(int, reason)
2756aa75f4d3SHarshad Shirwadkar 		__field(int, num_fc)
2757aa75f4d3SHarshad Shirwadkar 		__field(int, num_fc_ineligible)
2758aa75f4d3SHarshad Shirwadkar 		__field(int, nblks_agg)
27595641ace5SRitesh Harjani 		__field(tid_t, tid)
2760aa75f4d3SHarshad Shirwadkar 	),
2761aa75f4d3SHarshad Shirwadkar 
2762aa75f4d3SHarshad Shirwadkar 	TP_fast_assign(
2763aa75f4d3SHarshad Shirwadkar 		__entry->dev = sb->s_dev;
2764aa75f4d3SHarshad Shirwadkar 		__entry->nblks = nblks;
2765aa75f4d3SHarshad Shirwadkar 		__entry->reason = reason;
2766aa75f4d3SHarshad Shirwadkar 		__entry->num_fc = EXT4_SB(sb)->s_fc_stats.fc_num_commits;
2767aa75f4d3SHarshad Shirwadkar 		__entry->num_fc_ineligible =
2768aa75f4d3SHarshad Shirwadkar 			EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits;
2769aa75f4d3SHarshad Shirwadkar 		__entry->nblks_agg = EXT4_SB(sb)->s_fc_stats.fc_numblks;
27705641ace5SRitesh Harjani 		__entry->tid = commit_tid;
2771aa75f4d3SHarshad Shirwadkar 	),
2772aa75f4d3SHarshad Shirwadkar 
27735641ace5SRitesh Harjani 	TP_printk("dev %d,%d nblks %d, reason %d, fc = %d, ineligible = %d, agg_nblks %d, tid %u",
2774aa75f4d3SHarshad Shirwadkar 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2775aa75f4d3SHarshad Shirwadkar 		  __entry->nblks, __entry->reason, __entry->num_fc,
27765641ace5SRitesh Harjani 		  __entry->num_fc_ineligible, __entry->nblks_agg, __entry->tid)
2777aa75f4d3SHarshad Shirwadkar );
2778aa75f4d3SHarshad Shirwadkar 
2779aa75f4d3SHarshad Shirwadkar #define FC_REASON_NAME_STAT(reason)					\
2780aa75f4d3SHarshad Shirwadkar 	show_fc_reason(reason),						\
27817af1974aSRitesh Harjani 	__entry->fc_ineligible_rc[reason]
2782aa75f4d3SHarshad Shirwadkar 
2783aa75f4d3SHarshad Shirwadkar TRACE_EVENT(ext4_fc_stats,
2784aa75f4d3SHarshad Shirwadkar 	TP_PROTO(struct super_block *sb),
2785aa75f4d3SHarshad Shirwadkar 
2786aa75f4d3SHarshad Shirwadkar 	TP_ARGS(sb),
2787aa75f4d3SHarshad Shirwadkar 
2788aa75f4d3SHarshad Shirwadkar 	TP_STRUCT__entry(
2789aa75f4d3SHarshad Shirwadkar 		__field(dev_t, dev)
27907af1974aSRitesh Harjani 		__array(unsigned int, fc_ineligible_rc, EXT4_FC_REASON_MAX)
27917af1974aSRitesh Harjani 		__field(unsigned long, fc_commits)
27927af1974aSRitesh Harjani 		__field(unsigned long, fc_ineligible_commits)
27937af1974aSRitesh Harjani 		__field(unsigned long, fc_numblks)
2794aa75f4d3SHarshad Shirwadkar 	),
2795aa75f4d3SHarshad Shirwadkar 
2796aa75f4d3SHarshad Shirwadkar 	TP_fast_assign(
27977af1974aSRitesh Harjani 		int i;
27987af1974aSRitesh Harjani 
2799aa75f4d3SHarshad Shirwadkar 		__entry->dev = sb->s_dev;
28007af1974aSRitesh Harjani 		for (i = 0; i < EXT4_FC_REASON_MAX; i++) {
28017af1974aSRitesh Harjani 			__entry->fc_ineligible_rc[i] =
28027af1974aSRitesh Harjani 				EXT4_SB(sb)->s_fc_stats.fc_ineligible_reason_count[i];
28037af1974aSRitesh Harjani 		}
28047af1974aSRitesh Harjani 		__entry->fc_commits = EXT4_SB(sb)->s_fc_stats.fc_num_commits;
28057af1974aSRitesh Harjani 		__entry->fc_ineligible_commits =
28067af1974aSRitesh Harjani 			EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits;
28077af1974aSRitesh Harjani 		__entry->fc_numblks = EXT4_SB(sb)->s_fc_stats.fc_numblks;
2808aa75f4d3SHarshad Shirwadkar 	),
2809aa75f4d3SHarshad Shirwadkar 
28107af1974aSRitesh Harjani 	TP_printk("dev %d,%d fc ineligible reasons:\n"
28110fbcb525SEric Biggers 		  "%s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u"
28127af1974aSRitesh Harjani 		  "num_commits:%lu, ineligible: %lu, numblks: %lu",
2813aa75f4d3SHarshad Shirwadkar 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2814aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_XATTR),
2815aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_CROSS_RENAME),
2816aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE),
2817b21ebf14SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_NOMEM),
2818aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_SWAP_BOOT),
2819aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_RESIZE),
2820aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_RENAME_DIR),
2821aa75f4d3SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_FALLOC_RANGE),
2822556e0319SHarshad Shirwadkar 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_INODE_JOURNAL_DATA),
28230fbcb525SEric Biggers 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_ENCRYPTED_FILENAME),
28247af1974aSRitesh Harjani 		  __entry->fc_commits, __entry->fc_ineligible_commits,
28257af1974aSRitesh Harjani 		  __entry->fc_numblks)
2826aa75f4d3SHarshad Shirwadkar );
2827aa75f4d3SHarshad Shirwadkar 
28288cb5a303SRitesh Harjani DECLARE_EVENT_CLASS(ext4_fc_track_dentry,
28298cb5a303SRitesh Harjani 
28301d2e2440SRitesh Harjani 	TP_PROTO(handle_t *handle, struct inode *inode,
28311d2e2440SRitesh Harjani 		 struct dentry *dentry, int ret),
28328cb5a303SRitesh Harjani 
28331d2e2440SRitesh Harjani 	TP_ARGS(handle, inode, dentry, ret),
28348cb5a303SRitesh Harjani 
28358cb5a303SRitesh Harjani 	TP_STRUCT__entry(
28368cb5a303SRitesh Harjani 		__field(dev_t, dev)
28371d2e2440SRitesh Harjani 		__field(tid_t, t_tid)
28388cb5a303SRitesh Harjani 		__field(ino_t, i_ino)
28391d2e2440SRitesh Harjani 		__field(tid_t, i_sync_tid)
28408cb5a303SRitesh Harjani 		__field(int, error)
28418cb5a303SRitesh Harjani 	),
28428cb5a303SRitesh Harjani 
28438cb5a303SRitesh Harjani 	TP_fast_assign(
28441d2e2440SRitesh Harjani 		struct ext4_inode_info *ei = EXT4_I(inode);
28451d2e2440SRitesh Harjani 
28468cb5a303SRitesh Harjani 		__entry->dev = inode->i_sb->s_dev;
28471d2e2440SRitesh Harjani 		__entry->t_tid = handle->h_transaction->t_tid;
28488cb5a303SRitesh Harjani 		__entry->i_ino = inode->i_ino;
28491d2e2440SRitesh Harjani 		__entry->i_sync_tid = ei->i_sync_tid;
28508cb5a303SRitesh Harjani 		__entry->error = ret;
28518cb5a303SRitesh Harjani 	),
28528cb5a303SRitesh Harjani 
28531d2e2440SRitesh Harjani 	TP_printk("dev %d,%d, t_tid %u, ino %lu, i_sync_tid %u, error %d",
28548cb5a303SRitesh Harjani 		  MAJOR(__entry->dev), MINOR(__entry->dev),
28551d2e2440SRitesh Harjani 		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
28561d2e2440SRitesh Harjani 		  __entry->error
28578cb5a303SRitesh Harjani 	)
28588cb5a303SRitesh Harjani );
28598cb5a303SRitesh Harjani 
28608cb5a303SRitesh Harjani #define DEFINE_EVENT_CLASS_DENTRY(__type)				\
28618cb5a303SRitesh Harjani DEFINE_EVENT(ext4_fc_track_dentry, ext4_fc_track_##__type,		\
28621d2e2440SRitesh Harjani 	TP_PROTO(handle_t *handle, struct inode *inode,			\
28631d2e2440SRitesh Harjani 		 struct dentry *dentry, int ret),			\
28641d2e2440SRitesh Harjani 	TP_ARGS(handle, inode, dentry, ret)				\
2865aa75f4d3SHarshad Shirwadkar )
2866aa75f4d3SHarshad Shirwadkar 
28678cb5a303SRitesh Harjani DEFINE_EVENT_CLASS_DENTRY(create);
28688cb5a303SRitesh Harjani DEFINE_EVENT_CLASS_DENTRY(link);
28698cb5a303SRitesh Harjani DEFINE_EVENT_CLASS_DENTRY(unlink);
2870aa75f4d3SHarshad Shirwadkar 
2871aa75f4d3SHarshad Shirwadkar TRACE_EVENT(ext4_fc_track_inode,
28721d2e2440SRitesh Harjani 	TP_PROTO(handle_t *handle, struct inode *inode, int ret),
2873aa75f4d3SHarshad Shirwadkar 
28741d2e2440SRitesh Harjani 	TP_ARGS(handle, inode, ret),
2875aa75f4d3SHarshad Shirwadkar 
2876aa75f4d3SHarshad Shirwadkar 	TP_STRUCT__entry(
2877aa75f4d3SHarshad Shirwadkar 		__field(dev_t, dev)
28781d2e2440SRitesh Harjani 		__field(tid_t, t_tid)
28791d2e2440SRitesh Harjani 		__field(ino_t, i_ino)
28801d2e2440SRitesh Harjani 		__field(tid_t, i_sync_tid)
2881aa75f4d3SHarshad Shirwadkar 		__field(int, error)
2882aa75f4d3SHarshad Shirwadkar 	),
2883aa75f4d3SHarshad Shirwadkar 
2884aa75f4d3SHarshad Shirwadkar 	TP_fast_assign(
28851d2e2440SRitesh Harjani 		struct ext4_inode_info *ei = EXT4_I(inode);
28861d2e2440SRitesh Harjani 
2887aa75f4d3SHarshad Shirwadkar 		__entry->dev = inode->i_sb->s_dev;
28881d2e2440SRitesh Harjani 		__entry->t_tid = handle->h_transaction->t_tid;
28891d2e2440SRitesh Harjani 		__entry->i_ino = inode->i_ino;
28901d2e2440SRitesh Harjani 		__entry->i_sync_tid = ei->i_sync_tid;
2891aa75f4d3SHarshad Shirwadkar 		__entry->error = ret;
2892aa75f4d3SHarshad Shirwadkar 	),
2893aa75f4d3SHarshad Shirwadkar 
28941d2e2440SRitesh Harjani 	TP_printk("dev %d:%d, t_tid %u, inode %lu, i_sync_tid %u, error %d",
2895aa75f4d3SHarshad Shirwadkar 		  MAJOR(__entry->dev), MINOR(__entry->dev),
28961d2e2440SRitesh Harjani 		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
28971d2e2440SRitesh Harjani 		  __entry->error)
2898aa75f4d3SHarshad Shirwadkar 	);
2899aa75f4d3SHarshad Shirwadkar 
2900aa75f4d3SHarshad Shirwadkar TRACE_EVENT(ext4_fc_track_range,
29011d2e2440SRitesh Harjani 	TP_PROTO(handle_t *handle, struct inode *inode,
29021d2e2440SRitesh Harjani 		 long start, long end, int ret),
2903aa75f4d3SHarshad Shirwadkar 
29041d2e2440SRitesh Harjani 	TP_ARGS(handle, inode, start, end, ret),
2905aa75f4d3SHarshad Shirwadkar 
2906aa75f4d3SHarshad Shirwadkar 	TP_STRUCT__entry(
2907aa75f4d3SHarshad Shirwadkar 		__field(dev_t, dev)
29081d2e2440SRitesh Harjani 		__field(tid_t, t_tid)
29091d2e2440SRitesh Harjani 		__field(ino_t, i_ino)
29101d2e2440SRitesh Harjani 		__field(tid_t, i_sync_tid)
2911aa75f4d3SHarshad Shirwadkar 		__field(long, start)
2912aa75f4d3SHarshad Shirwadkar 		__field(long, end)
2913aa75f4d3SHarshad Shirwadkar 		__field(int, error)
2914aa75f4d3SHarshad Shirwadkar 	),
2915aa75f4d3SHarshad Shirwadkar 
2916aa75f4d3SHarshad Shirwadkar 	TP_fast_assign(
29171d2e2440SRitesh Harjani 		struct ext4_inode_info *ei = EXT4_I(inode);
29181d2e2440SRitesh Harjani 
2919aa75f4d3SHarshad Shirwadkar 		__entry->dev = inode->i_sb->s_dev;
29201d2e2440SRitesh Harjani 		__entry->t_tid = handle->h_transaction->t_tid;
29211d2e2440SRitesh Harjani 		__entry->i_ino = inode->i_ino;
29221d2e2440SRitesh Harjani 		__entry->i_sync_tid = ei->i_sync_tid;
2923aa75f4d3SHarshad Shirwadkar 		__entry->start = start;
2924aa75f4d3SHarshad Shirwadkar 		__entry->end = end;
2925aa75f4d3SHarshad Shirwadkar 		__entry->error = ret;
2926aa75f4d3SHarshad Shirwadkar 	),
2927aa75f4d3SHarshad Shirwadkar 
29281d2e2440SRitesh Harjani 	TP_printk("dev %d:%d, t_tid %u, inode %lu, i_sync_tid %u, error %d, start %ld, end %ld",
2929aa75f4d3SHarshad Shirwadkar 		  MAJOR(__entry->dev), MINOR(__entry->dev),
29301d2e2440SRitesh Harjani 		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
29311d2e2440SRitesh Harjani 		  __entry->error, __entry->start, __entry->end)
2932aa75f4d3SHarshad Shirwadkar 	);
2933aa75f4d3SHarshad Shirwadkar 
293408f4c42aSRitesh Harjani TRACE_EVENT(ext4_fc_cleanup,
293508f4c42aSRitesh Harjani 	TP_PROTO(journal_t *journal, int full, tid_t tid),
293608f4c42aSRitesh Harjani 
293708f4c42aSRitesh Harjani 	TP_ARGS(journal, full, tid),
293808f4c42aSRitesh Harjani 
293908f4c42aSRitesh Harjani 	TP_STRUCT__entry(
294008f4c42aSRitesh Harjani 		__field(dev_t, dev)
294108f4c42aSRitesh Harjani 		__field(int, j_fc_off)
294208f4c42aSRitesh Harjani 		__field(int, full)
294308f4c42aSRitesh Harjani 		__field(tid_t, tid)
294408f4c42aSRitesh Harjani 	),
294508f4c42aSRitesh Harjani 
294608f4c42aSRitesh Harjani 	TP_fast_assign(
294708f4c42aSRitesh Harjani 		struct super_block *sb = journal->j_private;
294808f4c42aSRitesh Harjani 
294908f4c42aSRitesh Harjani 		__entry->dev = sb->s_dev;
295008f4c42aSRitesh Harjani 		__entry->j_fc_off = journal->j_fc_off;
295108f4c42aSRitesh Harjani 		__entry->full = full;
295208f4c42aSRitesh Harjani 		__entry->tid = tid;
295308f4c42aSRitesh Harjani 	),
295408f4c42aSRitesh Harjani 
295508f4c42aSRitesh Harjani 	TP_printk("dev %d,%d, j_fc_off %d, full %d, tid %u",
295608f4c42aSRitesh Harjani 		  MAJOR(__entry->dev), MINOR(__entry->dev),
295708f4c42aSRitesh Harjani 		  __entry->j_fc_off, __entry->full, __entry->tid)
295808f4c42aSRitesh Harjani 	);
295908f4c42aSRitesh Harjani 
2960bbc605cdSLukas Czerner TRACE_EVENT(ext4_update_sb,
2961bbc605cdSLukas Czerner 	TP_PROTO(struct super_block *sb, ext4_fsblk_t fsblk,
2962bbc605cdSLukas Czerner 		 unsigned int flags),
2963bbc605cdSLukas Czerner 
2964bbc605cdSLukas Czerner 	TP_ARGS(sb, fsblk, flags),
2965bbc605cdSLukas Czerner 
2966bbc605cdSLukas Czerner 	TP_STRUCT__entry(
2967bbc605cdSLukas Czerner 		__field(dev_t,		dev)
2968bbc605cdSLukas Czerner 		__field(ext4_fsblk_t,	fsblk)
2969bbc605cdSLukas Czerner 		__field(unsigned int,	flags)
2970bbc605cdSLukas Czerner 	),
2971bbc605cdSLukas Czerner 
2972bbc605cdSLukas Czerner 	TP_fast_assign(
2973bbc605cdSLukas Czerner 		__entry->dev	= sb->s_dev;
2974bbc605cdSLukas Czerner 		__entry->fsblk	= fsblk;
2975bbc605cdSLukas Czerner 		__entry->flags	= flags;
2976bbc605cdSLukas Czerner 	),
2977bbc605cdSLukas Czerner 
2978bbc605cdSLukas Czerner 	TP_printk("dev %d,%d fsblk %llu flags %u",
2979bbc605cdSLukas Czerner 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2980bbc605cdSLukas Czerner 		  __entry->fsblk, __entry->flags)
2981bbc605cdSLukas Czerner );
2982bbc605cdSLukas Czerner 
29839bffad1eSTheodore Ts'o #endif /* _TRACE_EXT4_H */
29849bffad1eSTheodore Ts'o 
29859bffad1eSTheodore Ts'o /* This part must be outside protection */
29869bffad1eSTheodore Ts'o #include <trace/define_trace.h>
2987