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