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