0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM erofs
0004
0005 #if !defined(_TRACE_EROFS_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_EROFS_H
0007
0008 #include <linux/tracepoint.h>
0009 #include <linux/fs.h>
0010
0011 struct erofs_map_blocks;
0012
0013 #define show_dev(dev) MAJOR(dev), MINOR(dev)
0014 #define show_dev_nid(entry) show_dev(entry->dev), entry->nid
0015
0016 #define show_file_type(type) \
0017 __print_symbolic(type, \
0018 { 0, "FILE" }, \
0019 { 1, "DIR" })
0020
0021 #define show_map_flags(flags) __print_flags(flags, "|", \
0022 { EROFS_GET_BLOCKS_RAW, "RAW" })
0023
0024 #define show_mflags(flags) __print_flags(flags, "", \
0025 { EROFS_MAP_MAPPED, "M" }, \
0026 { EROFS_MAP_META, "I" }, \
0027 { EROFS_MAP_ENCODED, "E" })
0028
0029 TRACE_EVENT(erofs_lookup,
0030
0031 TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags),
0032
0033 TP_ARGS(dir, dentry, flags),
0034
0035 TP_STRUCT__entry(
0036 __field(dev_t, dev )
0037 __field(erofs_nid_t, nid )
0038 __string(name, dentry->d_name.name )
0039 __field(unsigned int, flags )
0040 ),
0041
0042 TP_fast_assign(
0043 __entry->dev = dir->i_sb->s_dev;
0044 __entry->nid = EROFS_I(dir)->nid;
0045 __assign_str(name, dentry->d_name.name);
0046 __entry->flags = flags;
0047 ),
0048
0049 TP_printk("dev = (%d,%d), pnid = %llu, name:%s, flags:%x",
0050 show_dev_nid(__entry),
0051 __get_str(name),
0052 __entry->flags)
0053 );
0054
0055 TRACE_EVENT(erofs_fill_inode,
0056 TP_PROTO(struct inode *inode, int isdir),
0057 TP_ARGS(inode, isdir),
0058
0059 TP_STRUCT__entry(
0060 __field(dev_t, dev )
0061 __field(erofs_nid_t, nid )
0062 __field(erofs_blk_t, blkaddr )
0063 __field(unsigned int, ofs )
0064 __field(int, isdir )
0065 ),
0066
0067 TP_fast_assign(
0068 __entry->dev = inode->i_sb->s_dev;
0069 __entry->nid = EROFS_I(inode)->nid;
0070 __entry->blkaddr = erofs_blknr(iloc(EROFS_I_SB(inode), __entry->nid));
0071 __entry->ofs = erofs_blkoff(iloc(EROFS_I_SB(inode), __entry->nid));
0072 __entry->isdir = isdir;
0073 ),
0074
0075 TP_printk("dev = (%d,%d), nid = %llu, blkaddr %u ofs %u, isdir %d",
0076 show_dev_nid(__entry),
0077 __entry->blkaddr, __entry->ofs,
0078 __entry->isdir)
0079 );
0080
0081 TRACE_EVENT(erofs_readpage,
0082
0083 TP_PROTO(struct page *page, bool raw),
0084
0085 TP_ARGS(page, raw),
0086
0087 TP_STRUCT__entry(
0088 __field(dev_t, dev )
0089 __field(erofs_nid_t, nid )
0090 __field(int, dir )
0091 __field(pgoff_t, index )
0092 __field(int, uptodate)
0093 __field(bool, raw )
0094 ),
0095
0096 TP_fast_assign(
0097 __entry->dev = page->mapping->host->i_sb->s_dev;
0098 __entry->nid = EROFS_I(page->mapping->host)->nid;
0099 __entry->dir = S_ISDIR(page->mapping->host->i_mode);
0100 __entry->index = page->index;
0101 __entry->uptodate = PageUptodate(page);
0102 __entry->raw = raw;
0103 ),
0104
0105 TP_printk("dev = (%d,%d), nid = %llu, %s, index = %lu, uptodate = %d "
0106 "raw = %d",
0107 show_dev_nid(__entry),
0108 show_file_type(__entry->dir),
0109 (unsigned long)__entry->index,
0110 __entry->uptodate,
0111 __entry->raw)
0112 );
0113
0114 TRACE_EVENT(erofs_readpages,
0115
0116 TP_PROTO(struct inode *inode, pgoff_t start, unsigned int nrpage,
0117 bool raw),
0118
0119 TP_ARGS(inode, start, nrpage, raw),
0120
0121 TP_STRUCT__entry(
0122 __field(dev_t, dev )
0123 __field(erofs_nid_t, nid )
0124 __field(pgoff_t, start )
0125 __field(unsigned int, nrpage )
0126 __field(bool, raw )
0127 ),
0128
0129 TP_fast_assign(
0130 __entry->dev = inode->i_sb->s_dev;
0131 __entry->nid = EROFS_I(inode)->nid;
0132 __entry->start = start;
0133 __entry->nrpage = nrpage;
0134 __entry->raw = raw;
0135 ),
0136
0137 TP_printk("dev = (%d,%d), nid = %llu, start = %lu nrpage = %u raw = %d",
0138 show_dev_nid(__entry),
0139 (unsigned long)__entry->start,
0140 __entry->nrpage,
0141 __entry->raw)
0142 );
0143
0144 DECLARE_EVENT_CLASS(erofs__map_blocks_enter,
0145 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
0146 unsigned int flags),
0147
0148 TP_ARGS(inode, map, flags),
0149
0150 TP_STRUCT__entry(
0151 __field( dev_t, dev )
0152 __field( erofs_nid_t, nid )
0153 __field( erofs_off_t, la )
0154 __field( u64, llen )
0155 __field( unsigned int, flags )
0156 ),
0157
0158 TP_fast_assign(
0159 __entry->dev = inode->i_sb->s_dev;
0160 __entry->nid = EROFS_I(inode)->nid;
0161 __entry->la = map->m_la;
0162 __entry->llen = map->m_llen;
0163 __entry->flags = flags;
0164 ),
0165
0166 TP_printk("dev = (%d,%d), nid = %llu, la %llu llen %llu flags %s",
0167 show_dev_nid(__entry),
0168 __entry->la, __entry->llen,
0169 __entry->flags ? show_map_flags(__entry->flags) : "NULL")
0170 );
0171
0172 DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_enter,
0173 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
0174 unsigned flags),
0175
0176 TP_ARGS(inode, map, flags)
0177 );
0178
0179 DEFINE_EVENT(erofs__map_blocks_enter, z_erofs_map_blocks_iter_enter,
0180 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
0181 unsigned int flags),
0182
0183 TP_ARGS(inode, map, flags)
0184 );
0185
0186 DECLARE_EVENT_CLASS(erofs__map_blocks_exit,
0187 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
0188 unsigned int flags, int ret),
0189
0190 TP_ARGS(inode, map, flags, ret),
0191
0192 TP_STRUCT__entry(
0193 __field( dev_t, dev )
0194 __field( erofs_nid_t, nid )
0195 __field( unsigned int, flags )
0196 __field( erofs_off_t, la )
0197 __field( erofs_off_t, pa )
0198 __field( u64, llen )
0199 __field( u64, plen )
0200 __field( unsigned int, mflags )
0201 __field( int, ret )
0202 ),
0203
0204 TP_fast_assign(
0205 __entry->dev = inode->i_sb->s_dev;
0206 __entry->nid = EROFS_I(inode)->nid;
0207 __entry->flags = flags;
0208 __entry->la = map->m_la;
0209 __entry->pa = map->m_pa;
0210 __entry->llen = map->m_llen;
0211 __entry->plen = map->m_plen;
0212 __entry->mflags = map->m_flags;
0213 __entry->ret = ret;
0214 ),
0215
0216 TP_printk("dev = (%d,%d), nid = %llu, flags %s "
0217 "la %llu pa %llu llen %llu plen %llu mflags %s ret %d",
0218 show_dev_nid(__entry),
0219 __entry->flags ? show_map_flags(__entry->flags) : "NULL",
0220 __entry->la, __entry->pa, __entry->llen, __entry->plen,
0221 show_mflags(__entry->mflags), __entry->ret)
0222 );
0223
0224 DEFINE_EVENT(erofs__map_blocks_exit, erofs_map_blocks_exit,
0225 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
0226 unsigned flags, int ret),
0227
0228 TP_ARGS(inode, map, flags, ret)
0229 );
0230
0231 DEFINE_EVENT(erofs__map_blocks_exit, z_erofs_map_blocks_iter_exit,
0232 TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
0233 unsigned int flags, int ret),
0234
0235 TP_ARGS(inode, map, flags, ret)
0236 );
0237
0238 TRACE_EVENT(erofs_destroy_inode,
0239 TP_PROTO(struct inode *inode),
0240
0241 TP_ARGS(inode),
0242
0243 TP_STRUCT__entry(
0244 __field( dev_t, dev )
0245 __field( erofs_nid_t, nid )
0246 ),
0247
0248 TP_fast_assign(
0249 __entry->dev = inode->i_sb->s_dev;
0250 __entry->nid = EROFS_I(inode)->nid;
0251 ),
0252
0253 TP_printk("dev = (%d,%d), nid = %llu", show_dev_nid(__entry))
0254 );
0255
0256 #endif
0257
0258
0259 #include <trace/define_trace.h>