f2fs.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. #undef TRACE_SYSTEM
  2. #define TRACE_SYSTEM f2fs
  3. #if !defined(_TRACE_F2FS_H) || defined(TRACE_HEADER_MULTI_READ)
  4. #define _TRACE_F2FS_H
  5. #include <linux/tracepoint.h>
  6. #define show_dev(entry) MAJOR(entry->dev), MINOR(entry->dev)
  7. #define show_dev_ino(entry) show_dev(entry), (unsigned long)entry->ino
  8. #define show_bio_type(type) \
  9. __print_symbolic(type, \
  10. { READ, "READ" }, \
  11. { READA, "READAHEAD" }, \
  12. { READ_SYNC, "READ_SYNC" }, \
  13. { WRITE, "WRITE" }, \
  14. { WRITE_SYNC, "WRITE_SYNC" }, \
  15. { WRITE_FLUSH, "WRITE_FLUSH" }, \
  16. { WRITE_FUA, "WRITE_FUA" })
  17. DECLARE_EVENT_CLASS(f2fs__inode,
  18. TP_PROTO(struct inode *inode),
  19. TP_ARGS(inode),
  20. TP_STRUCT__entry(
  21. __field(dev_t, dev)
  22. __field(ino_t, ino)
  23. __field(ino_t, pino)
  24. __field(umode_t, mode)
  25. __field(loff_t, size)
  26. __field(unsigned int, nlink)
  27. __field(blkcnt_t, blocks)
  28. __field(__u8, advise)
  29. ),
  30. TP_fast_assign(
  31. __entry->dev = inode->i_sb->s_dev;
  32. __entry->ino = inode->i_ino;
  33. __entry->pino = F2FS_I(inode)->i_pino;
  34. __entry->mode = inode->i_mode;
  35. __entry->nlink = inode->i_nlink;
  36. __entry->size = inode->i_size;
  37. __entry->blocks = inode->i_blocks;
  38. __entry->advise = F2FS_I(inode)->i_advise;
  39. ),
  40. TP_printk("dev = (%d,%d), ino = %lu, pino = %lu, i_mode = 0x%hx, "
  41. "i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = 0x%x",
  42. show_dev_ino(__entry),
  43. (unsigned long)__entry->pino,
  44. __entry->mode,
  45. __entry->size,
  46. (unsigned int)__entry->nlink,
  47. (unsigned long long)__entry->blocks,
  48. (unsigned char)__entry->advise)
  49. );
  50. DECLARE_EVENT_CLASS(f2fs__inode_exit,
  51. TP_PROTO(struct inode *inode, int ret),
  52. TP_ARGS(inode, ret),
  53. TP_STRUCT__entry(
  54. __field(dev_t, dev)
  55. __field(ino_t, ino)
  56. __field(int, ret)
  57. ),
  58. TP_fast_assign(
  59. __entry->dev = inode->i_sb->s_dev;
  60. __entry->ino = inode->i_ino;
  61. __entry->ret = ret;
  62. ),
  63. TP_printk("dev = (%d,%d), ino = %lu, ret = %d",
  64. show_dev_ino(__entry),
  65. __entry->ret)
  66. );
  67. DEFINE_EVENT(f2fs__inode, f2fs_sync_file_enter,
  68. TP_PROTO(struct inode *inode),
  69. TP_ARGS(inode)
  70. );
  71. TRACE_EVENT(f2fs_sync_file_exit,
  72. TP_PROTO(struct inode *inode, bool need_cp, int datasync, int ret),
  73. TP_ARGS(inode, need_cp, datasync, ret),
  74. TP_STRUCT__entry(
  75. __field(dev_t, dev)
  76. __field(ino_t, ino)
  77. __field(bool, need_cp)
  78. __field(int, datasync)
  79. __field(int, ret)
  80. ),
  81. TP_fast_assign(
  82. __entry->dev = inode->i_sb->s_dev;
  83. __entry->ino = inode->i_ino;
  84. __entry->need_cp = need_cp;
  85. __entry->datasync = datasync;
  86. __entry->ret = ret;
  87. ),
  88. TP_printk("dev = (%d,%d), ino = %lu, checkpoint is %s, "
  89. "datasync = %d, ret = %d",
  90. show_dev_ino(__entry),
  91. __entry->need_cp ? "needed" : "not needed",
  92. __entry->datasync,
  93. __entry->ret)
  94. );
  95. TRACE_EVENT(f2fs_sync_fs,
  96. TP_PROTO(struct super_block *sb, int wait),
  97. TP_ARGS(sb, wait),
  98. TP_STRUCT__entry(
  99. __field(dev_t, dev)
  100. __field(int, dirty)
  101. __field(int, wait)
  102. ),
  103. TP_fast_assign(
  104. __entry->dev = sb->s_dev;
  105. __entry->dirty = F2FS_SB(sb)->s_dirty;
  106. __entry->wait = wait;
  107. ),
  108. TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
  109. show_dev(__entry),
  110. __entry->dirty ? "dirty" : "not dirty",
  111. __entry->wait)
  112. );
  113. DEFINE_EVENT(f2fs__inode, f2fs_iget,
  114. TP_PROTO(struct inode *inode),
  115. TP_ARGS(inode)
  116. );
  117. DEFINE_EVENT(f2fs__inode_exit, f2fs_iget_exit,
  118. TP_PROTO(struct inode *inode, int ret),
  119. TP_ARGS(inode, ret)
  120. );
  121. DEFINE_EVENT(f2fs__inode, f2fs_evict_inode,
  122. TP_PROTO(struct inode *inode),
  123. TP_ARGS(inode)
  124. );
  125. TRACE_EVENT(f2fs_unlink_enter,
  126. TP_PROTO(struct inode *dir, struct dentry *dentry),
  127. TP_ARGS(dir, dentry),
  128. TP_STRUCT__entry(
  129. __field(dev_t, dev)
  130. __field(ino_t, ino)
  131. __field(loff_t, size)
  132. __field(blkcnt_t, blocks)
  133. __field(const char *, name)
  134. ),
  135. TP_fast_assign(
  136. __entry->dev = dir->i_sb->s_dev;
  137. __entry->ino = dir->i_ino;
  138. __entry->size = dir->i_size;
  139. __entry->blocks = dir->i_blocks;
  140. __entry->name = dentry->d_name.name;
  141. ),
  142. TP_printk("dev = (%d,%d), dir ino = %lu, i_size = %lld, "
  143. "i_blocks = %llu, name = %s",
  144. show_dev_ino(__entry),
  145. __entry->size,
  146. (unsigned long long)__entry->blocks,
  147. __entry->name)
  148. );
  149. DEFINE_EVENT(f2fs__inode_exit, f2fs_unlink_exit,
  150. TP_PROTO(struct inode *inode, int ret),
  151. TP_ARGS(inode, ret)
  152. );
  153. DEFINE_EVENT(f2fs__inode, f2fs_truncate,
  154. TP_PROTO(struct inode *inode),
  155. TP_ARGS(inode)
  156. );
  157. TRACE_EVENT(f2fs_truncate_data_blocks_range,
  158. TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs, int free),
  159. TP_ARGS(inode, nid, ofs, free),
  160. TP_STRUCT__entry(
  161. __field(dev_t, dev)
  162. __field(ino_t, ino)
  163. __field(nid_t, nid)
  164. __field(unsigned int, ofs)
  165. __field(int, free)
  166. ),
  167. TP_fast_assign(
  168. __entry->dev = inode->i_sb->s_dev;
  169. __entry->ino = inode->i_ino;
  170. __entry->nid = nid;
  171. __entry->ofs = ofs;
  172. __entry->free = free;
  173. ),
  174. TP_printk("dev = (%d,%d), ino = %lu, nid = %u, offset = %u, freed = %d",
  175. show_dev_ino(__entry),
  176. (unsigned int)__entry->nid,
  177. __entry->ofs,
  178. __entry->free)
  179. );
  180. DECLARE_EVENT_CLASS(f2fs__truncate_op,
  181. TP_PROTO(struct inode *inode, u64 from),
  182. TP_ARGS(inode, from),
  183. TP_STRUCT__entry(
  184. __field(dev_t, dev)
  185. __field(ino_t, ino)
  186. __field(loff_t, size)
  187. __field(blkcnt_t, blocks)
  188. __field(u64, from)
  189. ),
  190. TP_fast_assign(
  191. __entry->dev = inode->i_sb->s_dev;
  192. __entry->ino = inode->i_ino;
  193. __entry->size = inode->i_size;
  194. __entry->blocks = inode->i_blocks;
  195. __entry->from = from;
  196. ),
  197. TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld, i_blocks = %llu, "
  198. "start file offset = %llu",
  199. show_dev_ino(__entry),
  200. __entry->size,
  201. (unsigned long long)__entry->blocks,
  202. (unsigned long long)__entry->from)
  203. );
  204. DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_blocks_enter,
  205. TP_PROTO(struct inode *inode, u64 from),
  206. TP_ARGS(inode, from)
  207. );
  208. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_blocks_exit,
  209. TP_PROTO(struct inode *inode, int ret),
  210. TP_ARGS(inode, ret)
  211. );
  212. DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_inode_blocks_enter,
  213. TP_PROTO(struct inode *inode, u64 from),
  214. TP_ARGS(inode, from)
  215. );
  216. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_inode_blocks_exit,
  217. TP_PROTO(struct inode *inode, int ret),
  218. TP_ARGS(inode, ret)
  219. );
  220. DECLARE_EVENT_CLASS(f2fs__truncate_node,
  221. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  222. TP_ARGS(inode, nid, blk_addr),
  223. TP_STRUCT__entry(
  224. __field(dev_t, dev)
  225. __field(ino_t, ino)
  226. __field(nid_t, nid)
  227. __field(block_t, blk_addr)
  228. ),
  229. TP_fast_assign(
  230. __entry->dev = inode->i_sb->s_dev;
  231. __entry->ino = inode->i_ino;
  232. __entry->nid = nid;
  233. __entry->blk_addr = blk_addr;
  234. ),
  235. TP_printk("dev = (%d,%d), ino = %lu, nid = %u, block_address = 0x%llx",
  236. show_dev_ino(__entry),
  237. (unsigned int)__entry->nid,
  238. (unsigned long long)__entry->blk_addr)
  239. );
  240. DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_nodes_enter,
  241. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  242. TP_ARGS(inode, nid, blk_addr)
  243. );
  244. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_nodes_exit,
  245. TP_PROTO(struct inode *inode, int ret),
  246. TP_ARGS(inode, ret)
  247. );
  248. DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_node,
  249. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  250. TP_ARGS(inode, nid, blk_addr)
  251. );
  252. TRACE_EVENT(f2fs_truncate_partial_nodes,
  253. TP_PROTO(struct inode *inode, nid_t nid[], int depth, int err),
  254. TP_ARGS(inode, nid, depth, err),
  255. TP_STRUCT__entry(
  256. __field(dev_t, dev)
  257. __field(ino_t, ino)
  258. __field(nid_t, nid[3])
  259. __field(int, depth)
  260. __field(int, err)
  261. ),
  262. TP_fast_assign(
  263. __entry->dev = inode->i_sb->s_dev;
  264. __entry->ino = inode->i_ino;
  265. __entry->nid[0] = nid[0];
  266. __entry->nid[1] = nid[1];
  267. __entry->nid[2] = nid[2];
  268. __entry->depth = depth;
  269. __entry->err = err;
  270. ),
  271. TP_printk("dev = (%d,%d), ino = %lu, "
  272. "nid[0] = %u, nid[1] = %u, nid[2] = %u, depth = %d, err = %d",
  273. show_dev_ino(__entry),
  274. (unsigned int)__entry->nid[0],
  275. (unsigned int)__entry->nid[1],
  276. (unsigned int)__entry->nid[2],
  277. __entry->depth,
  278. __entry->err)
  279. );
  280. TRACE_EVENT_CONDITION(f2fs_readpage,
  281. TP_PROTO(struct page *page, sector_t blkaddr, int type),
  282. TP_ARGS(page, blkaddr, type),
  283. TP_CONDITION(page->mapping),
  284. TP_STRUCT__entry(
  285. __field(dev_t, dev)
  286. __field(ino_t, ino)
  287. __field(pgoff_t, index)
  288. __field(sector_t, blkaddr)
  289. __field(int, type)
  290. ),
  291. TP_fast_assign(
  292. __entry->dev = page->mapping->host->i_sb->s_dev;
  293. __entry->ino = page->mapping->host->i_ino;
  294. __entry->index = page->index;
  295. __entry->blkaddr = blkaddr;
  296. __entry->type = type;
  297. ),
  298. TP_printk("dev = (%d,%d), ino = %lu, page_index = 0x%lx, "
  299. "blkaddr = 0x%llx, bio_type = %s",
  300. show_dev_ino(__entry),
  301. (unsigned long)__entry->index,
  302. (unsigned long long)__entry->blkaddr,
  303. show_bio_type(__entry->type))
  304. );
  305. TRACE_EVENT(f2fs_get_data_block,
  306. TP_PROTO(struct inode *inode, sector_t iblock,
  307. struct buffer_head *bh, int ret),
  308. TP_ARGS(inode, iblock, bh, ret),
  309. TP_STRUCT__entry(
  310. __field(dev_t, dev)
  311. __field(ino_t, ino)
  312. __field(sector_t, iblock)
  313. __field(sector_t, bh_start)
  314. __field(size_t, bh_size)
  315. __field(int, ret)
  316. ),
  317. TP_fast_assign(
  318. __entry->dev = inode->i_sb->s_dev;
  319. __entry->ino = inode->i_ino;
  320. __entry->iblock = iblock;
  321. __entry->bh_start = bh->b_blocknr;
  322. __entry->bh_size = bh->b_size;
  323. __entry->ret = ret;
  324. ),
  325. TP_printk("dev = (%d,%d), ino = %lu, file offset = %llu, "
  326. "start blkaddr = 0x%llx, len = 0x%llx bytes, err = %d",
  327. show_dev_ino(__entry),
  328. (unsigned long long)__entry->iblock,
  329. (unsigned long long)__entry->bh_start,
  330. (unsigned long long)__entry->bh_size,
  331. __entry->ret)
  332. );
  333. #endif /* _TRACE_F2FS_H */
  334. /* This part must be outside protection */
  335. #include <trace/define_trace.h>