xref: /openbmc/linux/include/trace/events/erofs.h (revision a1db98f2)
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, "|",	\
2247e4937aSGao Xiang 	{ EROFS_GET_BLOCKS_RAW,	"RAW" })
2347e4937aSGao Xiang 
2447e4937aSGao Xiang #define show_mflags(flags) __print_flags(flags, "",	\
2547e4937aSGao Xiang 	{ EROFS_MAP_MAPPED,	"M" },			\
2647e4937aSGao Xiang 	{ EROFS_MAP_META,	"I" },			\
2747e4937aSGao Xiang 	{ EROFS_MAP_ZIPPED,	"Z" })
2847e4937aSGao Xiang 
2947e4937aSGao Xiang TRACE_EVENT(erofs_lookup,
3047e4937aSGao Xiang 
3147e4937aSGao Xiang 	TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags),
3247e4937aSGao Xiang 
3347e4937aSGao Xiang 	TP_ARGS(dir, dentry, flags),
3447e4937aSGao Xiang 
3547e4937aSGao Xiang 	TP_STRUCT__entry(
3647e4937aSGao Xiang 		__field(dev_t,		dev	)
3747e4937aSGao Xiang 		__field(erofs_nid_t,	nid	)
3847e4937aSGao Xiang 		__field(const char *,	name	)
3947e4937aSGao Xiang 		__field(unsigned int,	flags	)
4047e4937aSGao Xiang 	),
4147e4937aSGao Xiang 
4247e4937aSGao Xiang 	TP_fast_assign(
4347e4937aSGao Xiang 		__entry->dev	= dir->i_sb->s_dev;
4447e4937aSGao Xiang 		__entry->nid	= EROFS_V(dir)->nid;
4547e4937aSGao Xiang 		__entry->name	= dentry->d_name.name;
4647e4937aSGao Xiang 		__entry->flags	= flags;
4747e4937aSGao Xiang 	),
4847e4937aSGao Xiang 
4947e4937aSGao Xiang 	TP_printk("dev = (%d,%d), pnid = %llu, name:%s, flags:%x",
5047e4937aSGao Xiang 		show_dev_nid(__entry),
5147e4937aSGao Xiang 		__entry->name,
5247e4937aSGao Xiang 		__entry->flags)
5347e4937aSGao Xiang );
5447e4937aSGao Xiang 
5547e4937aSGao Xiang TRACE_EVENT(erofs_fill_inode,
5647e4937aSGao Xiang 	TP_PROTO(struct inode *inode, int isdir),
5747e4937aSGao Xiang 	TP_ARGS(inode, isdir),
5847e4937aSGao Xiang 
5947e4937aSGao Xiang 	TP_STRUCT__entry(
6047e4937aSGao Xiang 		__field(dev_t,		dev	)
6147e4937aSGao Xiang 		__field(erofs_nid_t,	nid	)
6247e4937aSGao Xiang 		__field(erofs_blk_t,	blkaddr )
6347e4937aSGao Xiang 		__field(unsigned int,	ofs	)
6447e4937aSGao Xiang 		__field(int,		isdir	)
6547e4937aSGao Xiang 	),
6647e4937aSGao Xiang 
6747e4937aSGao Xiang 	TP_fast_assign(
6847e4937aSGao Xiang 		__entry->dev		= inode->i_sb->s_dev;
6947e4937aSGao Xiang 		__entry->nid		= EROFS_V(inode)->nid;
7047e4937aSGao Xiang 		__entry->blkaddr	= erofs_blknr(iloc(EROFS_I_SB(inode), __entry->nid));
7147e4937aSGao Xiang 		__entry->ofs		= erofs_blkoff(iloc(EROFS_I_SB(inode), __entry->nid));
7247e4937aSGao Xiang 		__entry->isdir		= isdir;
7347e4937aSGao Xiang 	),
7447e4937aSGao Xiang 
7547e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, blkaddr %u ofs %u, isdir %d",
7647e4937aSGao Xiang 		  show_dev_nid(__entry),
7747e4937aSGao Xiang 		  __entry->blkaddr, __entry->ofs,
7847e4937aSGao Xiang 		  __entry->isdir)
7947e4937aSGao Xiang );
8047e4937aSGao Xiang 
8147e4937aSGao Xiang TRACE_EVENT(erofs_readpage,
8247e4937aSGao Xiang 
8347e4937aSGao Xiang 	TP_PROTO(struct page *page, bool raw),
8447e4937aSGao Xiang 
8547e4937aSGao Xiang 	TP_ARGS(page, raw),
8647e4937aSGao Xiang 
8747e4937aSGao Xiang 	TP_STRUCT__entry(
8847e4937aSGao Xiang 		__field(dev_t,		dev	)
8947e4937aSGao Xiang 		__field(erofs_nid_t,    nid     )
9047e4937aSGao Xiang 		__field(int,		dir	)
9147e4937aSGao Xiang 		__field(pgoff_t,	index	)
9247e4937aSGao Xiang 		__field(int,		uptodate)
9347e4937aSGao Xiang 		__field(bool,		raw	)
9447e4937aSGao Xiang 	),
9547e4937aSGao Xiang 
9647e4937aSGao Xiang 	TP_fast_assign(
9747e4937aSGao Xiang 		__entry->dev	= page->mapping->host->i_sb->s_dev;
9847e4937aSGao Xiang 		__entry->nid	= EROFS_V(page->mapping->host)->nid;
9947e4937aSGao Xiang 		__entry->dir	= S_ISDIR(page->mapping->host->i_mode);
10047e4937aSGao Xiang 		__entry->index	= page->index;
10147e4937aSGao Xiang 		__entry->uptodate = PageUptodate(page);
10247e4937aSGao Xiang 		__entry->raw = raw;
10347e4937aSGao Xiang 	),
10447e4937aSGao Xiang 
10547e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, %s, index = %lu, uptodate = %d "
10647e4937aSGao Xiang 		"raw = %d",
10747e4937aSGao Xiang 		show_dev_nid(__entry),
10847e4937aSGao Xiang 		show_file_type(__entry->dir),
10947e4937aSGao Xiang 		(unsigned long)__entry->index,
11047e4937aSGao Xiang 		__entry->uptodate,
11147e4937aSGao Xiang 		__entry->raw)
11247e4937aSGao Xiang );
11347e4937aSGao Xiang 
11447e4937aSGao Xiang TRACE_EVENT(erofs_readpages,
11547e4937aSGao Xiang 
11647e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct page *page, unsigned int nrpage,
11747e4937aSGao Xiang 		bool raw),
11847e4937aSGao Xiang 
11947e4937aSGao Xiang 	TP_ARGS(inode, page, nrpage, raw),
12047e4937aSGao Xiang 
12147e4937aSGao Xiang 	TP_STRUCT__entry(
12247e4937aSGao Xiang 		__field(dev_t,		dev	)
12347e4937aSGao Xiang 		__field(erofs_nid_t,	nid	)
12447e4937aSGao Xiang 		__field(pgoff_t,	start	)
12547e4937aSGao Xiang 		__field(unsigned int,	nrpage	)
12647e4937aSGao Xiang 		__field(bool,		raw	)
12747e4937aSGao Xiang 	),
12847e4937aSGao Xiang 
12947e4937aSGao Xiang 	TP_fast_assign(
13047e4937aSGao Xiang 		__entry->dev	= inode->i_sb->s_dev;
13147e4937aSGao Xiang 		__entry->nid	= EROFS_V(inode)->nid;
13247e4937aSGao Xiang 		__entry->start	= page->index;
13347e4937aSGao Xiang 		__entry->nrpage	= nrpage;
13447e4937aSGao Xiang 		__entry->raw	= raw;
13547e4937aSGao Xiang 	),
13647e4937aSGao Xiang 
13747e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, start = %lu nrpage = %u raw = %d",
13847e4937aSGao Xiang 		show_dev_nid(__entry),
13947e4937aSGao Xiang 		(unsigned long)__entry->start,
14047e4937aSGao Xiang 		__entry->nrpage,
14147e4937aSGao Xiang 		__entry->raw)
14247e4937aSGao Xiang );
14347e4937aSGao Xiang 
14447e4937aSGao Xiang DECLARE_EVENT_CLASS(erofs__map_blocks_enter,
14547e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
14647e4937aSGao Xiang 		 unsigned int flags),
14747e4937aSGao Xiang 
14847e4937aSGao Xiang 	TP_ARGS(inode, map, flags),
14947e4937aSGao Xiang 
15047e4937aSGao Xiang 	TP_STRUCT__entry(
15147e4937aSGao Xiang 		__field(	dev_t,		dev		)
15247e4937aSGao Xiang 		__field(	erofs_nid_t,	nid		)
15347e4937aSGao Xiang 		__field(	erofs_off_t,	la		)
15447e4937aSGao Xiang 		__field(	u64,		llen		)
15547e4937aSGao Xiang 		__field(	unsigned int,	flags		)
15647e4937aSGao Xiang 	),
15747e4937aSGao Xiang 
15847e4937aSGao Xiang 	TP_fast_assign(
15947e4937aSGao Xiang 		__entry->dev    = inode->i_sb->s_dev;
16047e4937aSGao Xiang 		__entry->nid    = EROFS_V(inode)->nid;
16147e4937aSGao Xiang 		__entry->la	= map->m_la;
16247e4937aSGao Xiang 		__entry->llen	= map->m_llen;
16347e4937aSGao Xiang 		__entry->flags	= flags;
16447e4937aSGao Xiang 	),
16547e4937aSGao Xiang 
16647e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, la %llu llen %llu flags %s",
16747e4937aSGao Xiang 		  show_dev_nid(__entry),
16847e4937aSGao Xiang 		  __entry->la, __entry->llen,
16947e4937aSGao Xiang 		  __entry->flags ? show_map_flags(__entry->flags) : "NULL")
17047e4937aSGao Xiang );
17147e4937aSGao Xiang 
17247e4937aSGao Xiang DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_flatmode_enter,
17347e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
17447e4937aSGao Xiang 		 unsigned flags),
17547e4937aSGao Xiang 
17647e4937aSGao Xiang 	TP_ARGS(inode, map, flags)
17747e4937aSGao Xiang );
17847e4937aSGao Xiang 
17947e4937aSGao Xiang DEFINE_EVENT(erofs__map_blocks_enter, z_erofs_map_blocks_iter_enter,
18047e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
18147e4937aSGao Xiang 		 unsigned int flags),
18247e4937aSGao Xiang 
18347e4937aSGao Xiang 	TP_ARGS(inode, map, flags)
18447e4937aSGao Xiang );
18547e4937aSGao Xiang 
18647e4937aSGao Xiang DECLARE_EVENT_CLASS(erofs__map_blocks_exit,
18747e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
18847e4937aSGao Xiang 		 unsigned int flags, int ret),
18947e4937aSGao Xiang 
19047e4937aSGao Xiang 	TP_ARGS(inode, map, flags, ret),
19147e4937aSGao Xiang 
19247e4937aSGao Xiang 	TP_STRUCT__entry(
19347e4937aSGao Xiang 		__field(	dev_t,		dev		)
19447e4937aSGao Xiang 		__field(	erofs_nid_t,	nid		)
19547e4937aSGao Xiang 		__field(        unsigned int,   flags           )
19647e4937aSGao Xiang 		__field(	erofs_off_t,	la		)
19747e4937aSGao Xiang 		__field(	erofs_off_t,	pa		)
19847e4937aSGao Xiang 		__field(	u64,		llen		)
19947e4937aSGao Xiang 		__field(	u64,		plen		)
20047e4937aSGao Xiang 		__field(        unsigned int,	mflags		)
20147e4937aSGao Xiang 		__field(	int,		ret		)
20247e4937aSGao Xiang 	),
20347e4937aSGao Xiang 
20447e4937aSGao Xiang 	TP_fast_assign(
20547e4937aSGao Xiang 		__entry->dev    = inode->i_sb->s_dev;
20647e4937aSGao Xiang 		__entry->nid    = EROFS_V(inode)->nid;
20747e4937aSGao Xiang 		__entry->flags	= flags;
20847e4937aSGao Xiang 		__entry->la	= map->m_la;
20947e4937aSGao Xiang 		__entry->pa	= map->m_pa;
21047e4937aSGao Xiang 		__entry->llen	= map->m_llen;
21147e4937aSGao Xiang 		__entry->plen	= map->m_plen;
21247e4937aSGao Xiang 		__entry->mflags	= map->m_flags;
21347e4937aSGao Xiang 		__entry->ret	= ret;
21447e4937aSGao Xiang 	),
21547e4937aSGao Xiang 
21647e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu, flags %s "
21747e4937aSGao Xiang 		  "la %llu pa %llu llen %llu plen %llu mflags %s ret %d",
21847e4937aSGao Xiang 		  show_dev_nid(__entry),
21947e4937aSGao Xiang 		  __entry->flags ? show_map_flags(__entry->flags) : "NULL",
22047e4937aSGao Xiang 		  __entry->la, __entry->pa, __entry->llen, __entry->plen,
22147e4937aSGao Xiang 		  show_mflags(__entry->mflags), __entry->ret)
22247e4937aSGao Xiang );
22347e4937aSGao Xiang 
22447e4937aSGao Xiang DEFINE_EVENT(erofs__map_blocks_exit, erofs_map_blocks_flatmode_exit,
22547e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
22647e4937aSGao Xiang 		 unsigned flags, int ret),
22747e4937aSGao Xiang 
22847e4937aSGao Xiang 	TP_ARGS(inode, map, flags, ret)
22947e4937aSGao Xiang );
23047e4937aSGao Xiang 
23147e4937aSGao Xiang DEFINE_EVENT(erofs__map_blocks_exit, z_erofs_map_blocks_iter_exit,
23247e4937aSGao Xiang 	TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
23347e4937aSGao Xiang 		 unsigned int flags, int ret),
23447e4937aSGao Xiang 
23547e4937aSGao Xiang 	TP_ARGS(inode, map, flags, ret)
23647e4937aSGao Xiang );
23747e4937aSGao Xiang 
23847e4937aSGao Xiang TRACE_EVENT(erofs_destroy_inode,
23947e4937aSGao Xiang 	TP_PROTO(struct inode *inode),
24047e4937aSGao Xiang 
24147e4937aSGao Xiang 	TP_ARGS(inode),
24247e4937aSGao Xiang 
24347e4937aSGao Xiang 	TP_STRUCT__entry(
24447e4937aSGao Xiang 		__field(	dev_t,		dev		)
24547e4937aSGao Xiang 		__field(	erofs_nid_t,	nid		)
24647e4937aSGao Xiang 	),
24747e4937aSGao Xiang 
24847e4937aSGao Xiang 	TP_fast_assign(
24947e4937aSGao Xiang 		__entry->dev	= inode->i_sb->s_dev;
25047e4937aSGao Xiang 		__entry->nid	= EROFS_V(inode)->nid;
25147e4937aSGao Xiang 	),
25247e4937aSGao Xiang 
25347e4937aSGao Xiang 	TP_printk("dev = (%d,%d), nid = %llu", show_dev_nid(__entry))
25447e4937aSGao Xiang );
25547e4937aSGao Xiang 
25647e4937aSGao Xiang #endif /* _TRACE_EROFS_H */
25747e4937aSGao Xiang 
25847e4937aSGao Xiang  /* This part must be outside protection */
25947e4937aSGao Xiang #include <trace/define_trace.h>
260