trace.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2009-2019 Christoph Hellwig
  4. *
  5. * NOTE: none of these tracepoints shall be consider a stable kernel ABI
  6. * as they can change at any time.
  7. */
  8. #undef TRACE_SYSTEM
  9. #define TRACE_SYSTEM iomap
  10. #if !defined(_IOMAP_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  11. #define _IOMAP_TRACE_H
  12. #include <linux/tracepoint.h>
  13. struct inode;
  14. DECLARE_EVENT_CLASS(iomap_readpage_class,
  15. TP_PROTO(struct inode *inode, int nr_pages),
  16. TP_ARGS(inode, nr_pages),
  17. TP_STRUCT__entry(
  18. __field(dev_t, dev)
  19. __field(u64, ino)
  20. __field(int, nr_pages)
  21. ),
  22. TP_fast_assign(
  23. __entry->dev = inode->i_sb->s_dev;
  24. __entry->ino = inode->i_ino;
  25. __entry->nr_pages = nr_pages;
  26. ),
  27. TP_printk("dev %d:%d ino 0x%llx nr_pages %d",
  28. MAJOR(__entry->dev), MINOR(__entry->dev),
  29. __entry->ino,
  30. __entry->nr_pages)
  31. )
  32. #define DEFINE_READPAGE_EVENT(name) \
  33. DEFINE_EVENT(iomap_readpage_class, name, \
  34. TP_PROTO(struct inode *inode, int nr_pages), \
  35. TP_ARGS(inode, nr_pages))
  36. DEFINE_READPAGE_EVENT(iomap_readpage);
  37. DEFINE_READPAGE_EVENT(iomap_readahead);
  38. DECLARE_EVENT_CLASS(iomap_range_class,
  39. TP_PROTO(struct inode *inode, unsigned long off, unsigned int len),
  40. TP_ARGS(inode, off, len),
  41. TP_STRUCT__entry(
  42. __field(dev_t, dev)
  43. __field(u64, ino)
  44. __field(loff_t, size)
  45. __field(unsigned long, offset)
  46. __field(unsigned int, length)
  47. ),
  48. TP_fast_assign(
  49. __entry->dev = inode->i_sb->s_dev;
  50. __entry->ino = inode->i_ino;
  51. __entry->size = i_size_read(inode);
  52. __entry->offset = off;
  53. __entry->length = len;
  54. ),
  55. TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset %lx "
  56. "length %x",
  57. MAJOR(__entry->dev), MINOR(__entry->dev),
  58. __entry->ino,
  59. __entry->size,
  60. __entry->offset,
  61. __entry->length)
  62. )
  63. #define DEFINE_RANGE_EVENT(name) \
  64. DEFINE_EVENT(iomap_range_class, name, \
  65. TP_PROTO(struct inode *inode, unsigned long off, unsigned int len),\
  66. TP_ARGS(inode, off, len))
  67. DEFINE_RANGE_EVENT(iomap_writepage);
  68. DEFINE_RANGE_EVENT(iomap_releasepage);
  69. DEFINE_RANGE_EVENT(iomap_invalidatepage);
  70. DEFINE_RANGE_EVENT(iomap_dio_invalidate_fail);
  71. #define IOMAP_TYPE_STRINGS \
  72. { IOMAP_HOLE, "HOLE" }, \
  73. { IOMAP_DELALLOC, "DELALLOC" }, \
  74. { IOMAP_MAPPED, "MAPPED" }, \
  75. { IOMAP_UNWRITTEN, "UNWRITTEN" }, \
  76. { IOMAP_INLINE, "INLINE" }
  77. #define IOMAP_FLAGS_STRINGS \
  78. { IOMAP_WRITE, "WRITE" }, \
  79. { IOMAP_ZERO, "ZERO" }, \
  80. { IOMAP_REPORT, "REPORT" }, \
  81. { IOMAP_FAULT, "FAULT" }, \
  82. { IOMAP_DIRECT, "DIRECT" }, \
  83. { IOMAP_NOWAIT, "NOWAIT" }
  84. #define IOMAP_F_FLAGS_STRINGS \
  85. { IOMAP_F_NEW, "NEW" }, \
  86. { IOMAP_F_DIRTY, "DIRTY" }, \
  87. { IOMAP_F_SHARED, "SHARED" }, \
  88. { IOMAP_F_MERGED, "MERGED" }, \
  89. { IOMAP_F_BUFFER_HEAD, "BH" }, \
  90. { IOMAP_F_SIZE_CHANGED, "SIZE_CHANGED" }
  91. DECLARE_EVENT_CLASS(iomap_class,
  92. TP_PROTO(struct inode *inode, struct iomap *iomap),
  93. TP_ARGS(inode, iomap),
  94. TP_STRUCT__entry(
  95. __field(dev_t, dev)
  96. __field(u64, ino)
  97. __field(u64, addr)
  98. __field(loff_t, offset)
  99. __field(u64, length)
  100. __field(u16, type)
  101. __field(u16, flags)
  102. __field(dev_t, bdev)
  103. ),
  104. TP_fast_assign(
  105. __entry->dev = inode->i_sb->s_dev;
  106. __entry->ino = inode->i_ino;
  107. __entry->addr = iomap->addr;
  108. __entry->offset = iomap->offset;
  109. __entry->length = iomap->length;
  110. __entry->type = iomap->type;
  111. __entry->flags = iomap->flags;
  112. __entry->bdev = iomap->bdev ? iomap->bdev->bd_dev : 0;
  113. ),
  114. TP_printk("dev %d:%d ino 0x%llx bdev %d:%d addr %lld offset %lld "
  115. "length %llu type %s flags %s",
  116. MAJOR(__entry->dev), MINOR(__entry->dev),
  117. __entry->ino,
  118. MAJOR(__entry->bdev), MINOR(__entry->bdev),
  119. __entry->addr,
  120. __entry->offset,
  121. __entry->length,
  122. __print_symbolic(__entry->type, IOMAP_TYPE_STRINGS),
  123. __print_flags(__entry->flags, "|", IOMAP_F_FLAGS_STRINGS))
  124. )
  125. #define DEFINE_IOMAP_EVENT(name) \
  126. DEFINE_EVENT(iomap_class, name, \
  127. TP_PROTO(struct inode *inode, struct iomap *iomap), \
  128. TP_ARGS(inode, iomap))
  129. DEFINE_IOMAP_EVENT(iomap_apply_dstmap);
  130. DEFINE_IOMAP_EVENT(iomap_apply_srcmap);
  131. TRACE_EVENT(iomap_apply,
  132. TP_PROTO(struct inode *inode, loff_t pos, loff_t length,
  133. unsigned int flags, const void *ops, void *actor,
  134. unsigned long caller),
  135. TP_ARGS(inode, pos, length, flags, ops, actor, caller),
  136. TP_STRUCT__entry(
  137. __field(dev_t, dev)
  138. __field(u64, ino)
  139. __field(loff_t, pos)
  140. __field(loff_t, length)
  141. __field(unsigned int, flags)
  142. __field(const void *, ops)
  143. __field(void *, actor)
  144. __field(unsigned long, caller)
  145. ),
  146. TP_fast_assign(
  147. __entry->dev = inode->i_sb->s_dev;
  148. __entry->ino = inode->i_ino;
  149. __entry->pos = pos;
  150. __entry->length = length;
  151. __entry->flags = flags;
  152. __entry->ops = ops;
  153. __entry->actor = actor;
  154. __entry->caller = caller;
  155. ),
  156. TP_printk("dev %d:%d ino 0x%llx pos %lld length %lld flags %s (0x%x) "
  157. "ops %ps caller %pS actor %ps",
  158. MAJOR(__entry->dev), MINOR(__entry->dev),
  159. __entry->ino,
  160. __entry->pos,
  161. __entry->length,
  162. __print_flags(__entry->flags, "|", IOMAP_FLAGS_STRINGS),
  163. __entry->flags,
  164. __entry->ops,
  165. (void *)__entry->caller,
  166. __entry->actor)
  167. );
  168. #endif /* _IOMAP_TRACE_H */
  169. #undef TRACE_INCLUDE_PATH
  170. #define TRACE_INCLUDE_PATH .
  171. #define TRACE_INCLUDE_FILE trace
  172. #include <trace/define_trace.h>