xref: /openbmc/linux/include/trace/events/erofs.h (revision d60b8760)
147e4937aSGao Xiang /* SPDX-License-Identifier: GPL-2.0-only */
247e4937aSGao Xiang #undef TRACE_SYSTEM
347e4937aSGao Xiang #define TRACE_SYSTEM erofs
447e4937aSGao Xiang 
547e4937aSGao Xiang #if !defined(_TRACE_EROFS_H) || defined(TRACE_HEADER_MULTI_READ)
647e4937aSGao Xiang #define _TRACE_EROFS_H
747e4937aSGao Xiang 
847e4937aSGao Xiang #include <linux/tracepoint.h>
9a1db98f2SGao Xiang #include <linux/fs.h>
10a1db98f2SGao Xiang 
11a1db98f2SGao Xiang struct erofs_map_blocks;
1247e4937aSGao Xiang 
1347e4937aSGao Xiang #define show_dev(dev)		MAJOR(dev), MINOR(dev)
1447e4937aSGao Xiang #define show_dev_nid(entry)	show_dev(entry->dev), entry->nid
1547e4937aSGao Xiang 
1647e4937aSGao Xiang #define show_file_type(type)						\
1747e4937aSGao Xiang 	__print_symbolic(type,						\
1847e4937aSGao Xiang 		{ 0,		"FILE" },				\
1947e4937aSGao Xiang 		{ 1,		"DIR" })
2047e4937aSGao Xiang 
2147e4937aSGao Xiang #define show_map_flags(flags) __print_flags(flags, "|",	\
22*d60b8760SJingbo Xu 	{ EROFS_GET_BLOCKS_RAW,		"RAW" },	\
23*d60b8760SJingbo Xu 	{ EROFS_GET_BLOCKS_FIEMAP,	"FIEMAP" },	\
24*d60b8760SJingbo Xu 	{ EROFS_GET_BLOCKS_READMORE,	"READMORE" },	\
25*d60b8760SJingbo Xu 	{ EROFS_GET_BLOCKS_FINDTAIL,	"FINDTAIL" })
2647e4937aSGao Xiang 
2747e4937aSGao Xiang #define show_mflags(flags) __print_flags(flags, "",	\
2847e4937aSGao Xiang 	{ EROFS_MAP_MAPPED,		"M" },		\
2947e4937aSGao Xiang 	{ EROFS_MAP_META,		"I" },		\
30*d60b8760SJingbo Xu 	{ EROFS_MAP_ENCODED,		"E" },		\
31*d60b8760SJingbo Xu 	{ EROFS_MAP_FULL_MAPPED,	"F" },		\
32*d60b8760SJingbo Xu 	{ EROFS_MAP_FRAGMENT,		"R" },		\
33*d60b8760SJingbo Xu 	{ EROFS_MAP_PARTIAL_REF,	"P" })
3447e4937aSGao Xiang 
3547e4937aSGao Xiang TRACE_EVENT(erofs_lookup,
3647e4937aSGao Xiang 
3747e4937aSGao Xiang 	TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags),
3847e4937aSGao Xiang 
3947e4937aSGao Xiang 	TP_ARGS(dir, dentry, flags),
4047e4937aSGao Xiang 
4147e4937aSGao Xiang 	TP_STRUCT__entry(
4247e4937aSGao Xiang 		__field(dev_t,		dev	)
4347e4937aSGao Xiang 		__field(erofs_nid_t,	nid	)
4493368aabSGao Xiang 		__string(name,		dentry->d_name.name	)
4547e4937aSGao Xiang 		__field(unsigned int,	flags	)
4647e4937aSGao Xiang 	),
4747e4937aSGao Xiang 
4847e4937aSGao Xiang 	TP_fast_assign(
4947e4937aSGao Xiang 		__entry->dev	= dir->i_sb->s_dev;
50a5876e24SGao Xiang 		__entry->nid	= EROFS_I(dir)->nid;
5193368aabSGao Xiang 		__assign_str(name, dentry->d_name.name);
5247e4937aSGao Xiang 		__entry->flags	= flags;
5347e4937aSGao Xiang 	),
5447e4937aSGao Xiang 
5547e4937aSGao Xiang 	TP_printk("dev = (%d,%d), pnid = %llu, name:%s, flags:%x",
5647e4937aSGao Xiang 		show_dev_nid(__entry),
5793368aabSGao Xiang 		__get_str(name),
5847e4937aSGao Xiang 		__entry->flags)
5947e4937aSGao Xiang );
6047e4937aSGao Xiang 
6147e4937aSGao Xiang TRACE_EVENT(erofs_fill_inode,
62312fe643SGao Xiang 	TP_PROTO(struct inode *inode),
63312fe643SGao Xiang 	TP_ARGS(inode),
6447e4937aSGao Xiang 
6547e4937aSGao Xiang 	TP_STRUCT__entry(
6647e4937aSGao Xiang 		__field(dev_t,		dev	)
6747e4937aSGao Xiang 		__field(erofs_nid_t,	nid	)
6847e4937aSGao Xiang 		__field(erofs_blk_t,	blkaddr )
6947e4937aSGao Xiang 		__field(unsigned int,	ofs	)
7047e4937aSGao Xiang 	),
7147e4937aSGao Xiang 
7247e4937aSGao Xiang 	TP_fast_assign(
7347e4937aSGao Xiang 		__entry->dev		= inode->i_sb->s_dev;
74a5876e24SGao Xiang 		__entry->nid		= EROFS_I(inode)->nid;
75b780d3fcSGao Xiang 		__entry->blkaddr	= erofs_blknr(erofs_iloc(inode));
76b780d3fcSGao Xiang 		__entry->ofs		= erofs_blkoff(erofs_iloc(inode));
7747e4937aSGao Xiang 	),
7847e4937aSGao Xiang 
79312fe643SGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, blkaddr %u ofs %u",
8047e4937aSGao Xiang 		  show_dev_nid(__entry),
81312fe643SGao Xiang 		  __entry->blkaddr, __entry->ofs)
8247e4937aSGao Xiang );
8347e4937aSGao Xiang 
8447e4937aSGao Xiang TRACE_EVENT(erofs_readpage,
8547e4937aSGao Xiang 
8647e4937aSGao Xiang 	TP_PROTO(struct page *page, bool raw),
8747e4937aSGao Xiang 
8847e4937aSGao Xiang 	TP_ARGS(page, raw),
8947e4937aSGao Xiang 
9047e4937aSGao Xiang 	TP_STRUCT__entry(
9147e4937aSGao Xiang 		__field(dev_t,		dev	)
9247e4937aSGao Xiang 		__field(erofs_nid_t,    nid     )
9347e4937aSGao Xiang 		__field(int,		dir	)
9447e4937aSGao Xiang 		__field(pgoff_t,	index	)
9547e4937aSGao Xiang 		__field(int,		uptodate)
9647e4937aSGao Xiang 		__field(bool,		raw	)
9747e4937aSGao Xiang 	),
9847e4937aSGao Xiang 
9947e4937aSGao Xiang 	TP_fast_assign(
10047e4937aSGao Xiang 		__entry->dev	= page->mapping->host->i_sb->s_dev;
101a5876e24SGao Xiang 		__entry->nid	= EROFS_I(page->mapping->host)->nid;
10247e4937aSGao Xiang 		__entry->dir	= S_ISDIR(page->mapping->host->i_mode);
10347e4937aSGao Xiang 		__entry->index	= page->index;
10447e4937aSGao Xiang 		__entry->uptodate = PageUptodate(page);
10547e4937aSGao Xiang 		__entry->raw = raw;
10647e4937aSGao Xiang 	),
10747e4937aSGao Xiang 
10847e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, %s, index = %lu, uptodate = %d "
10947e4937aSGao Xiang 		"raw = %d",
11047e4937aSGao Xiang 		show_dev_nid(__entry),
11147e4937aSGao Xiang 		show_file_type(__entry->dir),
11247e4937aSGao Xiang 		(unsigned long)__entry->index,
11347e4937aSGao Xiang 		__entry->uptodate,
11447e4937aSGao Xiang 		__entry->raw)
11547e4937aSGao Xiang );
11647e4937aSGao Xiang 
11747e4937aSGao Xiang TRACE_EVENT(erofs_readpages,
11847e4937aSGao Xiang 
1190c07a9f9SMatthew Wilcox (Oracle) 	TP_PROTO(struct inode *inode, pgoff_t start, unsigned int nrpage,
12047e4937aSGao Xiang 		bool raw),
12147e4937aSGao Xiang 
1220c07a9f9SMatthew Wilcox (Oracle) 	TP_ARGS(inode, start, nrpage, raw),
12347e4937aSGao Xiang 
12447e4937aSGao Xiang 	TP_STRUCT__entry(
12547e4937aSGao Xiang 		__field(dev_t,		dev	)
12647e4937aSGao Xiang 		__field(erofs_nid_t,	nid	)
12747e4937aSGao Xiang 		__field(pgoff_t,	start	)
12847e4937aSGao Xiang 		__field(unsigned int,	nrpage	)
12947e4937aSGao Xiang 		__field(bool,		raw	)
13047e4937aSGao Xiang 	),
13147e4937aSGao Xiang 
13247e4937aSGao Xiang 	TP_fast_assign(
13347e4937aSGao Xiang 		__entry->dev	= inode->i_sb->s_dev;
134a5876e24SGao Xiang 		__entry->nid	= EROFS_I(inode)->nid;
1350c07a9f9SMatthew Wilcox (Oracle) 		__entry->start	= start;
13647e4937aSGao Xiang 		__entry->nrpage	= nrpage;
13747e4937aSGao Xiang 		__entry->raw	= raw;
13847e4937aSGao Xiang 	),
13947e4937aSGao Xiang 
14047e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, start = %lu nrpage = %u raw = %d",
14147e4937aSGao Xiang 		show_dev_nid(__entry),
14247e4937aSGao Xiang 		(unsigned long)__entry->start,
14347e4937aSGao Xiang 		__entry->nrpage,
14447e4937aSGao Xiang 		__entry->raw)
14547e4937aSGao Xiang );
14647e4937aSGao Xiang 
14747e4937aSGao Xiang DECLARE_EVENT_CLASS(erofs__map_blocks_enter,
14847e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
14947e4937aSGao Xiang 		 unsigned int flags),
15047e4937aSGao Xiang 
15147e4937aSGao Xiang 	TP_ARGS(inode, map, flags),
15247e4937aSGao Xiang 
15347e4937aSGao Xiang 	TP_STRUCT__entry(
15447e4937aSGao Xiang 		__field(	dev_t,		dev		)
15547e4937aSGao Xiang 		__field(	erofs_nid_t,	nid		)
15647e4937aSGao Xiang 		__field(	erofs_off_t,	la		)
15747e4937aSGao Xiang 		__field(	u64,		llen		)
15847e4937aSGao Xiang 		__field(	unsigned int,	flags		)
15947e4937aSGao Xiang 	),
16047e4937aSGao Xiang 
16147e4937aSGao Xiang 	TP_fast_assign(
16247e4937aSGao Xiang 		__entry->dev    = inode->i_sb->s_dev;
163a5876e24SGao Xiang 		__entry->nid    = EROFS_I(inode)->nid;
16447e4937aSGao Xiang 		__entry->la	= map->m_la;
16547e4937aSGao Xiang 		__entry->llen	= map->m_llen;
16647e4937aSGao Xiang 		__entry->flags	= flags;
16747e4937aSGao Xiang 	),
16847e4937aSGao Xiang 
16947e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, la %llu llen %llu flags %s",
17047e4937aSGao Xiang 		  show_dev_nid(__entry),
17147e4937aSGao Xiang 		  __entry->la, __entry->llen,
17247e4937aSGao Xiang 		  __entry->flags ? show_map_flags(__entry->flags) : "NULL")
17347e4937aSGao Xiang );
17447e4937aSGao Xiang 
175469407a3SGao Xiang DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_enter,
17647e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
17747e4937aSGao Xiang 		 unsigned flags),
17847e4937aSGao Xiang 
17947e4937aSGao Xiang 	TP_ARGS(inode, map, flags)
18047e4937aSGao Xiang );
18147e4937aSGao Xiang 
18247e4937aSGao Xiang DEFINE_EVENT(erofs__map_blocks_enter, z_erofs_map_blocks_iter_enter,
18347e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
18447e4937aSGao Xiang 		 unsigned int flags),
18547e4937aSGao Xiang 
18647e4937aSGao Xiang 	TP_ARGS(inode, map, flags)
18747e4937aSGao Xiang );
18847e4937aSGao Xiang 
18947e4937aSGao Xiang DECLARE_EVENT_CLASS(erofs__map_blocks_exit,
19047e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
19147e4937aSGao Xiang 		 unsigned int flags, int ret),
19247e4937aSGao Xiang 
19347e4937aSGao Xiang 	TP_ARGS(inode, map, flags, ret),
19447e4937aSGao Xiang 
19547e4937aSGao Xiang 	TP_STRUCT__entry(
19647e4937aSGao Xiang 		__field(	dev_t,		dev		)
19747e4937aSGao Xiang 		__field(	erofs_nid_t,	nid		)
19847e4937aSGao Xiang 		__field(        unsigned int,   flags           )
19947e4937aSGao Xiang 		__field(	erofs_off_t,	la		)
20047e4937aSGao Xiang 		__field(	erofs_off_t,	pa		)
20147e4937aSGao Xiang 		__field(	u64,		llen		)
20247e4937aSGao Xiang 		__field(	u64,		plen		)
20347e4937aSGao Xiang 		__field(        unsigned int,	mflags		)
20447e4937aSGao Xiang 		__field(	int,		ret		)
20547e4937aSGao Xiang 	),
20647e4937aSGao Xiang 
20747e4937aSGao Xiang 	TP_fast_assign(
20847e4937aSGao Xiang 		__entry->dev    = inode->i_sb->s_dev;
209a5876e24SGao Xiang 		__entry->nid    = EROFS_I(inode)->nid;
21047e4937aSGao Xiang 		__entry->flags	= flags;
21147e4937aSGao Xiang 		__entry->la	= map->m_la;
21247e4937aSGao Xiang 		__entry->pa	= map->m_pa;
21347e4937aSGao Xiang 		__entry->llen	= map->m_llen;
21447e4937aSGao Xiang 		__entry->plen	= map->m_plen;
21547e4937aSGao Xiang 		__entry->mflags	= map->m_flags;
21647e4937aSGao Xiang 		__entry->ret	= ret;
21747e4937aSGao Xiang 	),
21847e4937aSGao Xiang 
21947e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, flags %s "
22047e4937aSGao Xiang 		  "la %llu pa %llu llen %llu plen %llu mflags %s ret %d",
22147e4937aSGao Xiang 		  show_dev_nid(__entry),
22247e4937aSGao Xiang 		  __entry->flags ? show_map_flags(__entry->flags) : "NULL",
22347e4937aSGao Xiang 		  __entry->la, __entry->pa, __entry->llen, __entry->plen,
22447e4937aSGao Xiang 		  show_mflags(__entry->mflags), __entry->ret)
22547e4937aSGao Xiang );
22647e4937aSGao Xiang 
227469407a3SGao Xiang DEFINE_EVENT(erofs__map_blocks_exit, erofs_map_blocks_exit,
22847e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
22947e4937aSGao Xiang 		 unsigned flags, int ret),
23047e4937aSGao Xiang 
23147e4937aSGao Xiang 	TP_ARGS(inode, map, flags, ret)
23247e4937aSGao Xiang );
23347e4937aSGao Xiang 
23447e4937aSGao Xiang DEFINE_EVENT(erofs__map_blocks_exit, z_erofs_map_blocks_iter_exit,
23547e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
23647e4937aSGao Xiang 		 unsigned int flags, int ret),
23747e4937aSGao Xiang 
23847e4937aSGao Xiang 	TP_ARGS(inode, map, flags, ret)
23947e4937aSGao Xiang );
24047e4937aSGao Xiang 
24147e4937aSGao Xiang TRACE_EVENT(erofs_destroy_inode,
24247e4937aSGao Xiang 	TP_PROTO(struct inode *inode),
24347e4937aSGao Xiang 
24447e4937aSGao Xiang 	TP_ARGS(inode),
24547e4937aSGao Xiang 
24647e4937aSGao Xiang 	TP_STRUCT__entry(
24747e4937aSGao Xiang 		__field(	dev_t,		dev		)
24847e4937aSGao Xiang 		__field(	erofs_nid_t,	nid		)
24947e4937aSGao Xiang 	),
25047e4937aSGao Xiang 
25147e4937aSGao Xiang 	TP_fast_assign(
25247e4937aSGao Xiang 		__entry->dev	= inode->i_sb->s_dev;
253a5876e24SGao Xiang 		__entry->nid	= EROFS_I(inode)->nid;
25447e4937aSGao Xiang 	),
25547e4937aSGao Xiang 
25647e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu", show_dev_nid(__entry))
25747e4937aSGao Xiang );
25847e4937aSGao Xiang 
25947e4937aSGao Xiang #endif /* _TRACE_EROFS_H */
26047e4937aSGao Xiang 
26147e4937aSGao Xiang  /* This part must be outside protection */
26247e4937aSGao Xiang #include <trace/define_trace.h>
263