erofs.h 5.2 KB

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