Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
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 /* _TRACE_EROFS_H */
0257 
0258  /* This part must be outside protection */
0259 #include <trace/define_trace.h>