f2fs.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  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_block_type(type) \
  9. __print_symbolic(type, \
  10. { NODE, "NODE" }, \
  11. { DATA, "DATA" }, \
  12. { META, "META" }, \
  13. { META_FLUSH, "META_FLUSH" })
  14. #define show_bio_type(type) \
  15. __print_symbolic(type, \
  16. { READ, "READ" }, \
  17. { READA, "READAHEAD" }, \
  18. { READ_SYNC, "READ_SYNC" }, \
  19. { WRITE, "WRITE" }, \
  20. { WRITE_SYNC, "WRITE_SYNC" }, \
  21. { WRITE_FLUSH, "WRITE_FLUSH" }, \
  22. { WRITE_FUA, "WRITE_FUA" })
  23. #define show_data_type(type) \
  24. __print_symbolic(type, \
  25. { CURSEG_HOT_DATA, "Hot DATA" }, \
  26. { CURSEG_WARM_DATA, "Warm DATA" }, \
  27. { CURSEG_COLD_DATA, "Cold DATA" }, \
  28. { CURSEG_HOT_NODE, "Hot NODE" }, \
  29. { CURSEG_WARM_NODE, "Warm NODE" }, \
  30. { CURSEG_COLD_NODE, "Cold NODE" }, \
  31. { NO_CHECK_TYPE, "No TYPE" })
  32. #define show_file_type(type) \
  33. __print_symbolic(type, \
  34. { 0, "FILE" }, \
  35. { 1, "DIR" })
  36. #define show_gc_type(type) \
  37. __print_symbolic(type, \
  38. { FG_GC, "Foreground GC" }, \
  39. { BG_GC, "Background GC" })
  40. #define show_alloc_mode(type) \
  41. __print_symbolic(type, \
  42. { LFS, "LFS-mode" }, \
  43. { SSR, "SSR-mode" })
  44. #define show_victim_policy(type) \
  45. __print_symbolic(type, \
  46. { GC_GREEDY, "Greedy" }, \
  47. { GC_CB, "Cost-Benefit" })
  48. struct victim_sel_policy;
  49. DECLARE_EVENT_CLASS(f2fs__inode,
  50. TP_PROTO(struct inode *inode),
  51. TP_ARGS(inode),
  52. TP_STRUCT__entry(
  53. __field(dev_t, dev)
  54. __field(ino_t, ino)
  55. __field(ino_t, pino)
  56. __field(umode_t, mode)
  57. __field(loff_t, size)
  58. __field(unsigned int, nlink)
  59. __field(blkcnt_t, blocks)
  60. __field(__u8, advise)
  61. ),
  62. TP_fast_assign(
  63. __entry->dev = inode->i_sb->s_dev;
  64. __entry->ino = inode->i_ino;
  65. __entry->pino = F2FS_I(inode)->i_pino;
  66. __entry->mode = inode->i_mode;
  67. __entry->nlink = inode->i_nlink;
  68. __entry->size = inode->i_size;
  69. __entry->blocks = inode->i_blocks;
  70. __entry->advise = F2FS_I(inode)->i_advise;
  71. ),
  72. TP_printk("dev = (%d,%d), ino = %lu, pino = %lu, i_mode = 0x%hx, "
  73. "i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = 0x%x",
  74. show_dev_ino(__entry),
  75. (unsigned long)__entry->pino,
  76. __entry->mode,
  77. __entry->size,
  78. (unsigned int)__entry->nlink,
  79. (unsigned long long)__entry->blocks,
  80. (unsigned char)__entry->advise)
  81. );
  82. DECLARE_EVENT_CLASS(f2fs__inode_exit,
  83. TP_PROTO(struct inode *inode, int ret),
  84. TP_ARGS(inode, ret),
  85. TP_STRUCT__entry(
  86. __field(dev_t, dev)
  87. __field(ino_t, ino)
  88. __field(int, ret)
  89. ),
  90. TP_fast_assign(
  91. __entry->dev = inode->i_sb->s_dev;
  92. __entry->ino = inode->i_ino;
  93. __entry->ret = ret;
  94. ),
  95. TP_printk("dev = (%d,%d), ino = %lu, ret = %d",
  96. show_dev_ino(__entry),
  97. __entry->ret)
  98. );
  99. DEFINE_EVENT(f2fs__inode, f2fs_sync_file_enter,
  100. TP_PROTO(struct inode *inode),
  101. TP_ARGS(inode)
  102. );
  103. TRACE_EVENT(f2fs_sync_file_exit,
  104. TP_PROTO(struct inode *inode, bool need_cp, int datasync, int ret),
  105. TP_ARGS(inode, need_cp, datasync, ret),
  106. TP_STRUCT__entry(
  107. __field(dev_t, dev)
  108. __field(ino_t, ino)
  109. __field(bool, need_cp)
  110. __field(int, datasync)
  111. __field(int, ret)
  112. ),
  113. TP_fast_assign(
  114. __entry->dev = inode->i_sb->s_dev;
  115. __entry->ino = inode->i_ino;
  116. __entry->need_cp = need_cp;
  117. __entry->datasync = datasync;
  118. __entry->ret = ret;
  119. ),
  120. TP_printk("dev = (%d,%d), ino = %lu, checkpoint is %s, "
  121. "datasync = %d, ret = %d",
  122. show_dev_ino(__entry),
  123. __entry->need_cp ? "needed" : "not needed",
  124. __entry->datasync,
  125. __entry->ret)
  126. );
  127. TRACE_EVENT(f2fs_sync_fs,
  128. TP_PROTO(struct super_block *sb, int wait),
  129. TP_ARGS(sb, wait),
  130. TP_STRUCT__entry(
  131. __field(dev_t, dev)
  132. __field(int, dirty)
  133. __field(int, wait)
  134. ),
  135. TP_fast_assign(
  136. __entry->dev = sb->s_dev;
  137. __entry->dirty = F2FS_SB(sb)->s_dirty;
  138. __entry->wait = wait;
  139. ),
  140. TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
  141. show_dev(__entry),
  142. __entry->dirty ? "dirty" : "not dirty",
  143. __entry->wait)
  144. );
  145. DEFINE_EVENT(f2fs__inode, f2fs_iget,
  146. TP_PROTO(struct inode *inode),
  147. TP_ARGS(inode)
  148. );
  149. DEFINE_EVENT(f2fs__inode_exit, f2fs_iget_exit,
  150. TP_PROTO(struct inode *inode, int ret),
  151. TP_ARGS(inode, ret)
  152. );
  153. DEFINE_EVENT(f2fs__inode, f2fs_evict_inode,
  154. TP_PROTO(struct inode *inode),
  155. TP_ARGS(inode)
  156. );
  157. DEFINE_EVENT(f2fs__inode_exit, f2fs_new_inode,
  158. TP_PROTO(struct inode *inode, int ret),
  159. TP_ARGS(inode, ret)
  160. );
  161. TRACE_EVENT(f2fs_unlink_enter,
  162. TP_PROTO(struct inode *dir, struct dentry *dentry),
  163. TP_ARGS(dir, dentry),
  164. TP_STRUCT__entry(
  165. __field(dev_t, dev)
  166. __field(ino_t, ino)
  167. __field(loff_t, size)
  168. __field(blkcnt_t, blocks)
  169. __field(const char *, name)
  170. ),
  171. TP_fast_assign(
  172. __entry->dev = dir->i_sb->s_dev;
  173. __entry->ino = dir->i_ino;
  174. __entry->size = dir->i_size;
  175. __entry->blocks = dir->i_blocks;
  176. __entry->name = dentry->d_name.name;
  177. ),
  178. TP_printk("dev = (%d,%d), dir ino = %lu, i_size = %lld, "
  179. "i_blocks = %llu, name = %s",
  180. show_dev_ino(__entry),
  181. __entry->size,
  182. (unsigned long long)__entry->blocks,
  183. __entry->name)
  184. );
  185. DEFINE_EVENT(f2fs__inode_exit, f2fs_unlink_exit,
  186. TP_PROTO(struct inode *inode, int ret),
  187. TP_ARGS(inode, ret)
  188. );
  189. DEFINE_EVENT(f2fs__inode, f2fs_truncate,
  190. TP_PROTO(struct inode *inode),
  191. TP_ARGS(inode)
  192. );
  193. TRACE_EVENT(f2fs_truncate_data_blocks_range,
  194. TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs, int free),
  195. TP_ARGS(inode, nid, ofs, free),
  196. TP_STRUCT__entry(
  197. __field(dev_t, dev)
  198. __field(ino_t, ino)
  199. __field(nid_t, nid)
  200. __field(unsigned int, ofs)
  201. __field(int, free)
  202. ),
  203. TP_fast_assign(
  204. __entry->dev = inode->i_sb->s_dev;
  205. __entry->ino = inode->i_ino;
  206. __entry->nid = nid;
  207. __entry->ofs = ofs;
  208. __entry->free = free;
  209. ),
  210. TP_printk("dev = (%d,%d), ino = %lu, nid = %u, offset = %u, freed = %d",
  211. show_dev_ino(__entry),
  212. (unsigned int)__entry->nid,
  213. __entry->ofs,
  214. __entry->free)
  215. );
  216. DECLARE_EVENT_CLASS(f2fs__truncate_op,
  217. TP_PROTO(struct inode *inode, u64 from),
  218. TP_ARGS(inode, from),
  219. TP_STRUCT__entry(
  220. __field(dev_t, dev)
  221. __field(ino_t, ino)
  222. __field(loff_t, size)
  223. __field(blkcnt_t, blocks)
  224. __field(u64, from)
  225. ),
  226. TP_fast_assign(
  227. __entry->dev = inode->i_sb->s_dev;
  228. __entry->ino = inode->i_ino;
  229. __entry->size = inode->i_size;
  230. __entry->blocks = inode->i_blocks;
  231. __entry->from = from;
  232. ),
  233. TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld, i_blocks = %llu, "
  234. "start file offset = %llu",
  235. show_dev_ino(__entry),
  236. __entry->size,
  237. (unsigned long long)__entry->blocks,
  238. (unsigned long long)__entry->from)
  239. );
  240. DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_blocks_enter,
  241. TP_PROTO(struct inode *inode, u64 from),
  242. TP_ARGS(inode, from)
  243. );
  244. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_blocks_exit,
  245. TP_PROTO(struct inode *inode, int ret),
  246. TP_ARGS(inode, ret)
  247. );
  248. DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_inode_blocks_enter,
  249. TP_PROTO(struct inode *inode, u64 from),
  250. TP_ARGS(inode, from)
  251. );
  252. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_inode_blocks_exit,
  253. TP_PROTO(struct inode *inode, int ret),
  254. TP_ARGS(inode, ret)
  255. );
  256. DECLARE_EVENT_CLASS(f2fs__truncate_node,
  257. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  258. TP_ARGS(inode, nid, blk_addr),
  259. TP_STRUCT__entry(
  260. __field(dev_t, dev)
  261. __field(ino_t, ino)
  262. __field(nid_t, nid)
  263. __field(block_t, blk_addr)
  264. ),
  265. TP_fast_assign(
  266. __entry->dev = inode->i_sb->s_dev;
  267. __entry->ino = inode->i_ino;
  268. __entry->nid = nid;
  269. __entry->blk_addr = blk_addr;
  270. ),
  271. TP_printk("dev = (%d,%d), ino = %lu, nid = %u, block_address = 0x%llx",
  272. show_dev_ino(__entry),
  273. (unsigned int)__entry->nid,
  274. (unsigned long long)__entry->blk_addr)
  275. );
  276. DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_nodes_enter,
  277. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  278. TP_ARGS(inode, nid, blk_addr)
  279. );
  280. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_nodes_exit,
  281. TP_PROTO(struct inode *inode, int ret),
  282. TP_ARGS(inode, ret)
  283. );
  284. DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_node,
  285. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  286. TP_ARGS(inode, nid, blk_addr)
  287. );
  288. TRACE_EVENT(f2fs_truncate_partial_nodes,
  289. TP_PROTO(struct inode *inode, nid_t nid[], int depth, int err),
  290. TP_ARGS(inode, nid, depth, err),
  291. TP_STRUCT__entry(
  292. __field(dev_t, dev)
  293. __field(ino_t, ino)
  294. __field(nid_t, nid[3])
  295. __field(int, depth)
  296. __field(int, err)
  297. ),
  298. TP_fast_assign(
  299. __entry->dev = inode->i_sb->s_dev;
  300. __entry->ino = inode->i_ino;
  301. __entry->nid[0] = nid[0];
  302. __entry->nid[1] = nid[1];
  303. __entry->nid[2] = nid[2];
  304. __entry->depth = depth;
  305. __entry->err = err;
  306. ),
  307. TP_printk("dev = (%d,%d), ino = %lu, "
  308. "nid[0] = %u, nid[1] = %u, nid[2] = %u, depth = %d, err = %d",
  309. show_dev_ino(__entry),
  310. (unsigned int)__entry->nid[0],
  311. (unsigned int)__entry->nid[1],
  312. (unsigned int)__entry->nid[2],
  313. __entry->depth,
  314. __entry->err)
  315. );
  316. TRACE_EVENT_CONDITION(f2fs_readpage,
  317. TP_PROTO(struct page *page, sector_t blkaddr, int type),
  318. TP_ARGS(page, blkaddr, type),
  319. TP_CONDITION(page->mapping),
  320. TP_STRUCT__entry(
  321. __field(dev_t, dev)
  322. __field(ino_t, ino)
  323. __field(pgoff_t, index)
  324. __field(sector_t, blkaddr)
  325. __field(int, type)
  326. ),
  327. TP_fast_assign(
  328. __entry->dev = page->mapping->host->i_sb->s_dev;
  329. __entry->ino = page->mapping->host->i_ino;
  330. __entry->index = page->index;
  331. __entry->blkaddr = blkaddr;
  332. __entry->type = type;
  333. ),
  334. TP_printk("dev = (%d,%d), ino = %lu, page_index = 0x%lx, "
  335. "blkaddr = 0x%llx, bio_type = %s",
  336. show_dev_ino(__entry),
  337. (unsigned long)__entry->index,
  338. (unsigned long long)__entry->blkaddr,
  339. show_bio_type(__entry->type))
  340. );
  341. TRACE_EVENT(f2fs_get_data_block,
  342. TP_PROTO(struct inode *inode, sector_t iblock,
  343. struct buffer_head *bh, int ret),
  344. TP_ARGS(inode, iblock, bh, ret),
  345. TP_STRUCT__entry(
  346. __field(dev_t, dev)
  347. __field(ino_t, ino)
  348. __field(sector_t, iblock)
  349. __field(sector_t, bh_start)
  350. __field(size_t, bh_size)
  351. __field(int, ret)
  352. ),
  353. TP_fast_assign(
  354. __entry->dev = inode->i_sb->s_dev;
  355. __entry->ino = inode->i_ino;
  356. __entry->iblock = iblock;
  357. __entry->bh_start = bh->b_blocknr;
  358. __entry->bh_size = bh->b_size;
  359. __entry->ret = ret;
  360. ),
  361. TP_printk("dev = (%d,%d), ino = %lu, file offset = %llu, "
  362. "start blkaddr = 0x%llx, len = 0x%llx bytes, err = %d",
  363. show_dev_ino(__entry),
  364. (unsigned long long)__entry->iblock,
  365. (unsigned long long)__entry->bh_start,
  366. (unsigned long long)__entry->bh_size,
  367. __entry->ret)
  368. );
  369. TRACE_EVENT(f2fs_get_victim,
  370. TP_PROTO(struct super_block *sb, int type, int gc_type,
  371. struct victim_sel_policy *p, unsigned int pre_victim,
  372. unsigned int prefree, unsigned int free),
  373. TP_ARGS(sb, type, gc_type, p, pre_victim, prefree, free),
  374. TP_STRUCT__entry(
  375. __field(dev_t, dev)
  376. __field(int, type)
  377. __field(int, gc_type)
  378. __field(int, alloc_mode)
  379. __field(int, gc_mode)
  380. __field(unsigned int, victim)
  381. __field(unsigned int, ofs_unit)
  382. __field(unsigned int, pre_victim)
  383. __field(unsigned int, prefree)
  384. __field(unsigned int, free)
  385. ),
  386. TP_fast_assign(
  387. __entry->dev = sb->s_dev;
  388. __entry->type = type;
  389. __entry->gc_type = gc_type;
  390. __entry->alloc_mode = p->alloc_mode;
  391. __entry->gc_mode = p->gc_mode;
  392. __entry->victim = p->min_segno;
  393. __entry->ofs_unit = p->ofs_unit;
  394. __entry->pre_victim = pre_victim;
  395. __entry->prefree = prefree;
  396. __entry->free = free;
  397. ),
  398. TP_printk("dev = (%d,%d), type = %s, policy = (%s, %s, %s), victim = %u "
  399. "ofs_unit = %u, pre_victim_secno = %d, prefree = %u, free = %u",
  400. show_dev(__entry),
  401. show_data_type(__entry->type),
  402. show_gc_type(__entry->gc_type),
  403. show_alloc_mode(__entry->alloc_mode),
  404. show_victim_policy(__entry->gc_mode),
  405. __entry->victim,
  406. __entry->ofs_unit,
  407. (int)__entry->pre_victim,
  408. __entry->prefree,
  409. __entry->free)
  410. );
  411. TRACE_EVENT(f2fs_fallocate,
  412. TP_PROTO(struct inode *inode, int mode,
  413. loff_t offset, loff_t len, int ret),
  414. TP_ARGS(inode, mode, offset, len, ret),
  415. TP_STRUCT__entry(
  416. __field(dev_t, dev)
  417. __field(ino_t, ino)
  418. __field(int, mode)
  419. __field(loff_t, offset)
  420. __field(loff_t, len)
  421. __field(loff_t, size)
  422. __field(blkcnt_t, blocks)
  423. __field(int, ret)
  424. ),
  425. TP_fast_assign(
  426. __entry->dev = inode->i_sb->s_dev;
  427. __entry->ino = inode->i_ino;
  428. __entry->mode = mode;
  429. __entry->offset = offset;
  430. __entry->len = len;
  431. __entry->size = inode->i_size;
  432. __entry->blocks = inode->i_blocks;
  433. __entry->ret = ret;
  434. ),
  435. TP_printk("dev = (%d,%d), ino = %lu, mode = %x, offset = %lld, "
  436. "len = %lld, i_size = %lld, i_blocks = %llu, ret = %d",
  437. show_dev_ino(__entry),
  438. __entry->mode,
  439. (unsigned long long)__entry->offset,
  440. (unsigned long long)__entry->len,
  441. (unsigned long long)__entry->size,
  442. (unsigned long long)__entry->blocks,
  443. __entry->ret)
  444. );
  445. TRACE_EVENT(f2fs_reserve_new_block,
  446. TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs_in_node),
  447. TP_ARGS(inode, nid, ofs_in_node),
  448. TP_STRUCT__entry(
  449. __field(dev_t, dev)
  450. __field(nid_t, nid)
  451. __field(unsigned int, ofs_in_node)
  452. ),
  453. TP_fast_assign(
  454. __entry->dev = inode->i_sb->s_dev;
  455. __entry->nid = nid;
  456. __entry->ofs_in_node = ofs_in_node;
  457. ),
  458. TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u",
  459. show_dev(__entry),
  460. (unsigned int)__entry->nid,
  461. __entry->ofs_in_node)
  462. );
  463. TRACE_EVENT(f2fs_do_submit_bio,
  464. TP_PROTO(struct super_block *sb, int btype, bool sync, struct bio *bio),
  465. TP_ARGS(sb, btype, sync, bio),
  466. TP_STRUCT__entry(
  467. __field(dev_t, dev)
  468. __field(int, btype)
  469. __field(bool, sync)
  470. __field(sector_t, sector)
  471. __field(unsigned int, size)
  472. ),
  473. TP_fast_assign(
  474. __entry->dev = sb->s_dev;
  475. __entry->btype = btype;
  476. __entry->sync = sync;
  477. __entry->sector = bio->bi_sector;
  478. __entry->size = bio->bi_size;
  479. ),
  480. TP_printk("dev = (%d,%d), type = %s, io = %s, sector = %lld, size = %u",
  481. show_dev(__entry),
  482. show_block_type(__entry->btype),
  483. __entry->sync ? "sync" : "no sync",
  484. (unsigned long long)__entry->sector,
  485. __entry->size)
  486. );
  487. DECLARE_EVENT_CLASS(f2fs__page,
  488. TP_PROTO(struct page *page, int type),
  489. TP_ARGS(page, type),
  490. TP_STRUCT__entry(
  491. __field(dev_t, dev)
  492. __field(ino_t, ino)
  493. __field(int, type)
  494. __field(int, dir)
  495. __field(pgoff_t, index)
  496. __field(int, dirty)
  497. ),
  498. TP_fast_assign(
  499. __entry->dev = page->mapping->host->i_sb->s_dev;
  500. __entry->ino = page->mapping->host->i_ino;
  501. __entry->type = type;
  502. __entry->dir = S_ISDIR(page->mapping->host->i_mode);
  503. __entry->index = page->index;
  504. __entry->dirty = PageDirty(page);
  505. ),
  506. TP_printk("dev = (%d,%d), ino = %lu, %s, %s, index = %lu, dirty = %d",
  507. show_dev_ino(__entry),
  508. show_block_type(__entry->type),
  509. show_file_type(__entry->dir),
  510. (unsigned long)__entry->index,
  511. __entry->dirty)
  512. );
  513. DEFINE_EVENT(f2fs__page, f2fs_set_page_dirty,
  514. TP_PROTO(struct page *page, int type),
  515. TP_ARGS(page, type)
  516. );
  517. DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite,
  518. TP_PROTO(struct page *page, int type),
  519. TP_ARGS(page, type)
  520. );
  521. TRACE_EVENT(f2fs_submit_write_page,
  522. TP_PROTO(struct page *page, block_t blk_addr, int type),
  523. TP_ARGS(page, blk_addr, type),
  524. TP_STRUCT__entry(
  525. __field(dev_t, dev)
  526. __field(ino_t, ino)
  527. __field(int, type)
  528. __field(pgoff_t, index)
  529. __field(block_t, block)
  530. ),
  531. TP_fast_assign(
  532. __entry->dev = page->mapping->host->i_sb->s_dev;
  533. __entry->ino = page->mapping->host->i_ino;
  534. __entry->type = type;
  535. __entry->index = page->index;
  536. __entry->block = blk_addr;
  537. ),
  538. TP_printk("dev = (%d,%d), ino = %lu, %s, index = %lu, blkaddr = 0x%llx",
  539. show_dev_ino(__entry),
  540. show_block_type(__entry->type),
  541. (unsigned long)__entry->index,
  542. (unsigned long long)__entry->block)
  543. );
  544. TRACE_EVENT(f2fs_write_checkpoint,
  545. TP_PROTO(struct super_block *sb, bool is_umount, char *msg),
  546. TP_ARGS(sb, is_umount, msg),
  547. TP_STRUCT__entry(
  548. __field(dev_t, dev)
  549. __field(bool, is_umount)
  550. __field(char *, msg)
  551. ),
  552. TP_fast_assign(
  553. __entry->dev = sb->s_dev;
  554. __entry->is_umount = is_umount;
  555. __entry->msg = msg;
  556. ),
  557. TP_printk("dev = (%d,%d), checkpoint for %s, state = %s",
  558. show_dev(__entry),
  559. __entry->is_umount ? "clean umount" : "consistency",
  560. __entry->msg)
  561. );
  562. #endif /* _TRACE_F2FS_H */
  563. /* This part must be outside protection */
  564. #include <trace/define_trace.h>