filemap.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM filemap
  4. #if !defined(_TRACE_FILEMAP_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_FILEMAP_H
  6. #include <linux/types.h>
  7. #include <linux/tracepoint.h>
  8. #include <linux/mm.h>
  9. #include <linux/memcontrol.h>
  10. #include <linux/device.h>
  11. #include <linux/kdev_t.h>
  12. #include <linux/errseq.h>
  13. DECLARE_EVENT_CLASS(mm_filemap_op_page_cache,
  14. TP_PROTO(struct folio *folio),
  15. TP_ARGS(folio),
  16. TP_STRUCT__entry(
  17. __field(unsigned long, pfn)
  18. __field(unsigned long, i_ino)
  19. __field(unsigned long, index)
  20. __field(dev_t, s_dev)
  21. __field(unsigned char, order)
  22. ),
  23. TP_fast_assign(
  24. __entry->pfn = folio_pfn(folio);
  25. __entry->i_ino = folio->mapping->host->i_ino;
  26. __entry->index = folio->index;
  27. if (folio->mapping->host->i_sb)
  28. __entry->s_dev = folio->mapping->host->i_sb->s_dev;
  29. else
  30. __entry->s_dev = folio->mapping->host->i_rdev;
  31. __entry->order = folio_order(folio);
  32. ),
  33. TP_printk("dev %d:%d ino %lx pfn=0x%lx ofs=%lu order=%u",
  34. MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
  35. __entry->i_ino,
  36. __entry->pfn,
  37. __entry->index << PAGE_SHIFT,
  38. __entry->order)
  39. );
  40. DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_delete_from_page_cache,
  41. TP_PROTO(struct folio *folio),
  42. TP_ARGS(folio)
  43. );
  44. DEFINE_EVENT(mm_filemap_op_page_cache, mm_filemap_add_to_page_cache,
  45. TP_PROTO(struct folio *folio),
  46. TP_ARGS(folio)
  47. );
  48. DECLARE_EVENT_CLASS(mm_filemap_op_page_cache_range,
  49. TP_PROTO(
  50. struct address_space *mapping,
  51. pgoff_t index,
  52. pgoff_t last_index
  53. ),
  54. TP_ARGS(mapping, index, last_index),
  55. TP_STRUCT__entry(
  56. __field(unsigned long, i_ino)
  57. __field(dev_t, s_dev)
  58. __field(unsigned long, index)
  59. __field(unsigned long, last_index)
  60. ),
  61. TP_fast_assign(
  62. __entry->i_ino = mapping->host->i_ino;
  63. if (mapping->host->i_sb)
  64. __entry->s_dev =
  65. mapping->host->i_sb->s_dev;
  66. else
  67. __entry->s_dev = mapping->host->i_rdev;
  68. __entry->index = index;
  69. __entry->last_index = last_index;
  70. ),
  71. TP_printk(
  72. "dev=%d:%d ino=%lx ofs=%lld-%lld",
  73. MAJOR(__entry->s_dev),
  74. MINOR(__entry->s_dev), __entry->i_ino,
  75. ((loff_t)__entry->index) << PAGE_SHIFT,
  76. ((((loff_t)__entry->last_index + 1) << PAGE_SHIFT) - 1)
  77. )
  78. );
  79. DEFINE_EVENT(mm_filemap_op_page_cache_range, mm_filemap_get_pages,
  80. TP_PROTO(
  81. struct address_space *mapping,
  82. pgoff_t index,
  83. pgoff_t last_index
  84. ),
  85. TP_ARGS(mapping, index, last_index)
  86. );
  87. DEFINE_EVENT(mm_filemap_op_page_cache_range, mm_filemap_map_pages,
  88. TP_PROTO(
  89. struct address_space *mapping,
  90. pgoff_t index,
  91. pgoff_t last_index
  92. ),
  93. TP_ARGS(mapping, index, last_index)
  94. );
  95. TRACE_EVENT(mm_filemap_fault,
  96. TP_PROTO(struct address_space *mapping, pgoff_t index),
  97. TP_ARGS(mapping, index),
  98. TP_STRUCT__entry(
  99. __field(unsigned long, i_ino)
  100. __field(dev_t, s_dev)
  101. __field(unsigned long, index)
  102. ),
  103. TP_fast_assign(
  104. __entry->i_ino = mapping->host->i_ino;
  105. if (mapping->host->i_sb)
  106. __entry->s_dev =
  107. mapping->host->i_sb->s_dev;
  108. else
  109. __entry->s_dev = mapping->host->i_rdev;
  110. __entry->index = index;
  111. ),
  112. TP_printk(
  113. "dev=%d:%d ino=%lx ofs=%lld",
  114. MAJOR(__entry->s_dev),
  115. MINOR(__entry->s_dev), __entry->i_ino,
  116. ((loff_t)__entry->index) << PAGE_SHIFT
  117. )
  118. );
  119. TRACE_EVENT(filemap_set_wb_err,
  120. TP_PROTO(struct address_space *mapping, errseq_t eseq),
  121. TP_ARGS(mapping, eseq),
  122. TP_STRUCT__entry(
  123. __field(unsigned long, i_ino)
  124. __field(dev_t, s_dev)
  125. __field(errseq_t, errseq)
  126. ),
  127. TP_fast_assign(
  128. __entry->i_ino = mapping->host->i_ino;
  129. __entry->errseq = eseq;
  130. if (mapping->host->i_sb)
  131. __entry->s_dev = mapping->host->i_sb->s_dev;
  132. else
  133. __entry->s_dev = mapping->host->i_rdev;
  134. ),
  135. TP_printk("dev=%d:%d ino=0x%lx errseq=0x%x",
  136. MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
  137. __entry->i_ino, __entry->errseq)
  138. );
  139. TRACE_EVENT(file_check_and_advance_wb_err,
  140. TP_PROTO(struct file *file, errseq_t old),
  141. TP_ARGS(file, old),
  142. TP_STRUCT__entry(
  143. __field(struct file *, file)
  144. __field(unsigned long, i_ino)
  145. __field(dev_t, s_dev)
  146. __field(errseq_t, old)
  147. __field(errseq_t, new)
  148. ),
  149. TP_fast_assign(
  150. __entry->file = file;
  151. __entry->i_ino = file->f_mapping->host->i_ino;
  152. if (file->f_mapping->host->i_sb)
  153. __entry->s_dev =
  154. file->f_mapping->host->i_sb->s_dev;
  155. else
  156. __entry->s_dev =
  157. file->f_mapping->host->i_rdev;
  158. __entry->old = old;
  159. __entry->new = file->f_wb_err;
  160. ),
  161. TP_printk("file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x",
  162. __entry->file, MAJOR(__entry->s_dev),
  163. MINOR(__entry->s_dev), __entry->i_ino, __entry->old,
  164. __entry->new)
  165. );
  166. #endif /* _TRACE_FILEMAP_H */
  167. /* This part must be outside protection */
  168. #include <trace/define_trace.h>