1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM erofs 4 5 #if !defined(_TRACE_EROFS_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_EROFS_H 7 8 #include <linux/tracepoint.h> 9 #include <linux/fs.h> 10 11 struct erofs_map_blocks; 12 13 #define show_dev(dev) MAJOR(dev), MINOR(dev) 14 #define show_dev_nid(entry) show_dev(entry->dev), entry->nid 15 16 #define show_file_type(type) \ 17 __print_symbolic(type, \ 18 { 0, "FILE" }, \ 19 { 1, "DIR" }) 20 21 #define show_map_flags(flags) __print_flags(flags, "|", \ 22 { EROFS_GET_BLOCKS_FIEMAP, "FIEMAP" }, \ 23 { EROFS_GET_BLOCKS_READMORE, "READMORE" }, \ 24 { EROFS_GET_BLOCKS_FINDTAIL, "FINDTAIL" }) 25 26 #define show_mflags(flags) __print_flags(flags, "", \ 27 { EROFS_MAP_MAPPED, "M" }, \ 28 { EROFS_MAP_META, "I" }, \ 29 { EROFS_MAP_PARTIAL_MAPPED, "T" }, \ 30 { EROFS_MAP_PARTIAL_REF, "P" }, \ 31 { EROFS_MAP_FRAGMENT, "R" }) 32 33 TRACE_EVENT(erofs_lookup, 34 35 TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags), 36 37 TP_ARGS(dir, dentry, flags), 38 39 TP_STRUCT__entry( 40 __field(dev_t, dev ) 41 __field(erofs_nid_t, nid ) 42 __string(name, dentry->d_name.name ) 43 __field(unsigned int, flags ) 44 ), 45 46 TP_fast_assign( 47 __entry->dev = dir->i_sb->s_dev; 48 __entry->nid = EROFS_I(dir)->nid; 49 __assign_str(name); 50 __entry->flags = flags; 51 ), 52 53 TP_printk("dev = (%d,%d), pnid = %llu, name:%s, flags:%x", 54 show_dev_nid(__entry), 55 __get_str(name), 56 __entry->flags) 57 ); 58 59 TRACE_EVENT(erofs_fill_inode, 60 TP_PROTO(struct inode *inode), 61 TP_ARGS(inode), 62 63 TP_STRUCT__entry( 64 __field(dev_t, dev ) 65 __field(erofs_nid_t, nid ) 66 __field(erofs_blk_t, blkaddr ) 67 __field(unsigned int, ofs ) 68 ), 69 70 TP_fast_assign( 71 __entry->dev = inode->i_sb->s_dev; 72 __entry->nid = EROFS_I(inode)->nid; 73 __entry->blkaddr = erofs_blknr(inode->i_sb, erofs_iloc(inode)); 74 __entry->ofs = erofs_blkoff(inode->i_sb, erofs_iloc(inode)); 75 ), 76 77 TP_printk("dev = (%d,%d), nid = %llu, blkaddr %llu ofs %u", 78 show_dev_nid(__entry), 79 __entry->blkaddr, __entry->ofs) 80 ); 81 82 TRACE_EVENT(erofs_read_folio, 83 84 TP_PROTO(struct inode *inode, struct folio *folio, bool raw), 85 86 TP_ARGS(inode, folio, raw), 87 88 TP_STRUCT__entry( 89 __field(dev_t, dev ) 90 __field(erofs_nid_t, nid ) 91 __field(int, dir ) 92 __field(pgoff_t, index ) 93 __field(unsigned int, order ) 94 __field(bool, raw ) 95 ), 96 97 TP_fast_assign( 98 __entry->dev = inode->i_sb->s_dev; 99 __entry->nid = EROFS_I(inode)->nid; 100 __entry->dir = S_ISDIR(inode->i_mode); 101 __entry->index = folio->index; 102 __entry->order = folio_order(folio); 103 __entry->raw = raw; 104 ), 105 106 TP_printk("dev = (%d,%d), nid = %llu, %s, index = %lu, order = %u, raw = %d", 107 show_dev_nid(__entry), 108 show_file_type(__entry->dir), 109 (unsigned long)__entry->index, 110 __entry->order, 111 __entry->raw) 112 ); 113 114 TRACE_EVENT(erofs_readahead, 115 116 TP_PROTO(struct inode *inode, pgoff_t start, unsigned int nrpage, 117 bool raw), 118 119 TP_ARGS(inode, start, nrpage, raw), 120 121 TP_STRUCT__entry( 122 __field(dev_t, dev ) 123 __field(erofs_nid_t, nid ) 124 __field(pgoff_t, start ) 125 __field(unsigned int, nrpage ) 126 __field(bool, raw ) 127 ), 128 129 TP_fast_assign( 130 __entry->dev = inode->i_sb->s_dev; 131 __entry->nid = EROFS_I(inode)->nid; 132 __entry->start = start; 133 __entry->nrpage = nrpage; 134 __entry->raw = raw; 135 ), 136 137 TP_printk("dev = (%d,%d), nid = %llu, start = %lu nrpage = %u raw = %d", 138 show_dev_nid(__entry), 139 (unsigned long)__entry->start, 140 __entry->nrpage, 141 __entry->raw) 142 ); 143 144 TRACE_EVENT(erofs_map_blocks_enter, 145 146 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map, 147 unsigned int flags), 148 149 TP_ARGS(inode, map, flags), 150 151 TP_STRUCT__entry( 152 __field( dev_t, dev ) 153 __field( erofs_nid_t, nid ) 154 __field( erofs_off_t, la ) 155 __field( u64, llen ) 156 __field( unsigned int, flags ) 157 ), 158 159 TP_fast_assign( 160 __entry->dev = inode->i_sb->s_dev; 161 __entry->nid = EROFS_I(inode)->nid; 162 __entry->la = map->m_la; 163 __entry->llen = map->m_llen; 164 __entry->flags = flags; 165 ), 166 167 TP_printk("dev = (%d,%d), nid = %llu, la %llu llen %llu flags %s", 168 show_dev_nid(__entry), 169 __entry->la, __entry->llen, 170 __entry->flags ? show_map_flags(__entry->flags) : "NULL") 171 ); 172 173 TRACE_EVENT(erofs_map_blocks_exit, 174 175 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map, 176 unsigned int flags, int ret), 177 178 TP_ARGS(inode, map, flags, ret), 179 180 TP_STRUCT__entry( 181 __field( dev_t, dev ) 182 __field( erofs_nid_t, nid ) 183 __field( unsigned int, flags ) 184 __field( erofs_off_t, la ) 185 __field( erofs_off_t, pa ) 186 __field( u64, llen ) 187 __field( u64, plen ) 188 __field( unsigned int, mflags ) 189 __field( int, ret ) 190 ), 191 192 TP_fast_assign( 193 __entry->dev = inode->i_sb->s_dev; 194 __entry->nid = EROFS_I(inode)->nid; 195 __entry->flags = flags; 196 __entry->la = map->m_la; 197 __entry->pa = map->m_pa; 198 __entry->llen = map->m_llen; 199 __entry->plen = map->m_plen; 200 __entry->mflags = map->m_flags; 201 __entry->ret = ret; 202 ), 203 204 TP_printk("dev = (%d,%d), nid = %llu, flags %s " 205 "la %llu pa %llu llen %llu plen %llu mflags %s ret %d", 206 show_dev_nid(__entry), 207 __entry->flags ? show_map_flags(__entry->flags) : "NULL", 208 __entry->la, __entry->pa, __entry->llen, __entry->plen, 209 show_mflags(__entry->mflags), __entry->ret) 210 ); 211 212 #endif /* _TRACE_EROFS_H */ 213 214 /* This part must be outside protection */ 215 #include <trace/define_trace.h> 216