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" }, \ 278f899262SGao Xiang { EROFS_MAP_ENCODED, "E" }) 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 ) 3893368aabSGao Xiang __string(name, dentry->d_name.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; 44a5876e24SGao Xiang __entry->nid = EROFS_I(dir)->nid; 4593368aabSGao Xiang __assign_str(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), 5193368aabSGao Xiang __get_str(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; 69a5876e24SGao Xiang __entry->nid = EROFS_I(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; 98a5876e24SGao Xiang __entry->nid = EROFS_I(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 1160c07a9f9SMatthew Wilcox (Oracle) TP_PROTO(struct inode *inode, pgoff_t start, unsigned int nrpage, 11747e4937aSGao Xiang bool raw), 11847e4937aSGao Xiang 1190c07a9f9SMatthew Wilcox (Oracle) TP_ARGS(inode, start, 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; 131a5876e24SGao Xiang __entry->nid = EROFS_I(inode)->nid; 1320c07a9f9SMatthew Wilcox (Oracle) __entry->start = start; 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; 160a5876e24SGao Xiang __entry->nid = EROFS_I(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 172*469407a3SGao Xiang DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_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; 206a5876e24SGao Xiang __entry->nid = EROFS_I(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 224*469407a3SGao Xiang DEFINE_EVENT(erofs__map_blocks_exit, erofs_map_blocks_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; 250a5876e24SGao Xiang __entry->nid = EROFS_I(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