f2fs.h 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207
  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. TRACE_DEFINE_ENUM(NODE);
  9. TRACE_DEFINE_ENUM(DATA);
  10. TRACE_DEFINE_ENUM(META);
  11. TRACE_DEFINE_ENUM(META_FLUSH);
  12. TRACE_DEFINE_ENUM(CURSEG_HOT_DATA);
  13. TRACE_DEFINE_ENUM(CURSEG_WARM_DATA);
  14. TRACE_DEFINE_ENUM(CURSEG_COLD_DATA);
  15. TRACE_DEFINE_ENUM(CURSEG_HOT_NODE);
  16. TRACE_DEFINE_ENUM(CURSEG_WARM_NODE);
  17. TRACE_DEFINE_ENUM(CURSEG_COLD_NODE);
  18. TRACE_DEFINE_ENUM(NO_CHECK_TYPE);
  19. TRACE_DEFINE_ENUM(GC_GREEDY);
  20. TRACE_DEFINE_ENUM(GC_CB);
  21. TRACE_DEFINE_ENUM(FG_GC);
  22. TRACE_DEFINE_ENUM(BG_GC);
  23. TRACE_DEFINE_ENUM(LFS);
  24. TRACE_DEFINE_ENUM(SSR);
  25. TRACE_DEFINE_ENUM(__REQ_RAHEAD);
  26. TRACE_DEFINE_ENUM(__REQ_WRITE);
  27. TRACE_DEFINE_ENUM(__REQ_SYNC);
  28. TRACE_DEFINE_ENUM(__REQ_NOIDLE);
  29. TRACE_DEFINE_ENUM(__REQ_FLUSH);
  30. TRACE_DEFINE_ENUM(__REQ_FUA);
  31. TRACE_DEFINE_ENUM(__REQ_PRIO);
  32. TRACE_DEFINE_ENUM(__REQ_META);
  33. TRACE_DEFINE_ENUM(CP_UMOUNT);
  34. TRACE_DEFINE_ENUM(CP_FASTBOOT);
  35. TRACE_DEFINE_ENUM(CP_SYNC);
  36. TRACE_DEFINE_ENUM(CP_DISCARD);
  37. #define show_block_type(type) \
  38. __print_symbolic(type, \
  39. { NODE, "NODE" }, \
  40. { DATA, "DATA" }, \
  41. { META, "META" }, \
  42. { META_FLUSH, "META_FLUSH" }, \
  43. { INMEM, "INMEM" }, \
  44. { INMEM_DROP, "INMEM_DROP" }, \
  45. { IPU, "IN-PLACE" }, \
  46. { OPU, "OUT-OF-PLACE" })
  47. #define F2FS_BIO_MASK(t) (t & (READA | WRITE_FLUSH_FUA))
  48. #define F2FS_BIO_EXTRA_MASK(t) (t & (REQ_META | REQ_PRIO))
  49. #define show_bio_type(type) show_bio_base(type), show_bio_extra(type)
  50. #define show_bio_base(type) \
  51. __print_symbolic(F2FS_BIO_MASK(type), \
  52. { READ, "READ" }, \
  53. { READA, "READAHEAD" }, \
  54. { READ_SYNC, "READ_SYNC" }, \
  55. { WRITE, "WRITE" }, \
  56. { WRITE_SYNC, "WRITE_SYNC" }, \
  57. { WRITE_FLUSH, "WRITE_FLUSH" }, \
  58. { WRITE_FUA, "WRITE_FUA" }, \
  59. { WRITE_FLUSH_FUA, "WRITE_FLUSH_FUA" })
  60. #define show_bio_extra(type) \
  61. __print_symbolic(F2FS_BIO_EXTRA_MASK(type), \
  62. { REQ_META, "(M)" }, \
  63. { REQ_PRIO, "(P)" }, \
  64. { REQ_META | REQ_PRIO, "(MP)" }, \
  65. { 0, " \b" })
  66. #define show_data_type(type) \
  67. __print_symbolic(type, \
  68. { CURSEG_HOT_DATA, "Hot DATA" }, \
  69. { CURSEG_WARM_DATA, "Warm DATA" }, \
  70. { CURSEG_COLD_DATA, "Cold DATA" }, \
  71. { CURSEG_HOT_NODE, "Hot NODE" }, \
  72. { CURSEG_WARM_NODE, "Warm NODE" }, \
  73. { CURSEG_COLD_NODE, "Cold NODE" }, \
  74. { NO_CHECK_TYPE, "No TYPE" })
  75. #define show_file_type(type) \
  76. __print_symbolic(type, \
  77. { 0, "FILE" }, \
  78. { 1, "DIR" })
  79. #define show_gc_type(type) \
  80. __print_symbolic(type, \
  81. { FG_GC, "Foreground GC" }, \
  82. { BG_GC, "Background GC" })
  83. #define show_alloc_mode(type) \
  84. __print_symbolic(type, \
  85. { LFS, "LFS-mode" }, \
  86. { SSR, "SSR-mode" })
  87. #define show_victim_policy(type) \
  88. __print_symbolic(type, \
  89. { GC_GREEDY, "Greedy" }, \
  90. { GC_CB, "Cost-Benefit" })
  91. #define show_cpreason(type) \
  92. __print_symbolic(type, \
  93. { CP_UMOUNT, "Umount" }, \
  94. { CP_FASTBOOT, "Fastboot" }, \
  95. { CP_SYNC, "Sync" }, \
  96. { CP_RECOVERY, "Recovery" }, \
  97. { CP_DISCARD, "Discard" })
  98. struct victim_sel_policy;
  99. DECLARE_EVENT_CLASS(f2fs__inode,
  100. TP_PROTO(struct inode *inode),
  101. TP_ARGS(inode),
  102. TP_STRUCT__entry(
  103. __field(dev_t, dev)
  104. __field(ino_t, ino)
  105. __field(ino_t, pino)
  106. __field(umode_t, mode)
  107. __field(loff_t, size)
  108. __field(unsigned int, nlink)
  109. __field(blkcnt_t, blocks)
  110. __field(__u8, advise)
  111. ),
  112. TP_fast_assign(
  113. __entry->dev = inode->i_sb->s_dev;
  114. __entry->ino = inode->i_ino;
  115. __entry->pino = F2FS_I(inode)->i_pino;
  116. __entry->mode = inode->i_mode;
  117. __entry->nlink = inode->i_nlink;
  118. __entry->size = inode->i_size;
  119. __entry->blocks = inode->i_blocks;
  120. __entry->advise = F2FS_I(inode)->i_advise;
  121. ),
  122. TP_printk("dev = (%d,%d), ino = %lu, pino = %lu, i_mode = 0x%hx, "
  123. "i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = 0x%x",
  124. show_dev_ino(__entry),
  125. (unsigned long)__entry->pino,
  126. __entry->mode,
  127. __entry->size,
  128. (unsigned int)__entry->nlink,
  129. (unsigned long long)__entry->blocks,
  130. (unsigned char)__entry->advise)
  131. );
  132. DECLARE_EVENT_CLASS(f2fs__inode_exit,
  133. TP_PROTO(struct inode *inode, int ret),
  134. TP_ARGS(inode, ret),
  135. TP_STRUCT__entry(
  136. __field(dev_t, dev)
  137. __field(ino_t, ino)
  138. __field(int, ret)
  139. ),
  140. TP_fast_assign(
  141. __entry->dev = inode->i_sb->s_dev;
  142. __entry->ino = inode->i_ino;
  143. __entry->ret = ret;
  144. ),
  145. TP_printk("dev = (%d,%d), ino = %lu, ret = %d",
  146. show_dev_ino(__entry),
  147. __entry->ret)
  148. );
  149. DEFINE_EVENT(f2fs__inode, f2fs_sync_file_enter,
  150. TP_PROTO(struct inode *inode),
  151. TP_ARGS(inode)
  152. );
  153. TRACE_EVENT(f2fs_sync_file_exit,
  154. TP_PROTO(struct inode *inode, int need_cp, int datasync, int ret),
  155. TP_ARGS(inode, need_cp, datasync, ret),
  156. TP_STRUCT__entry(
  157. __field(dev_t, dev)
  158. __field(ino_t, ino)
  159. __field(int, need_cp)
  160. __field(int, datasync)
  161. __field(int, ret)
  162. ),
  163. TP_fast_assign(
  164. __entry->dev = inode->i_sb->s_dev;
  165. __entry->ino = inode->i_ino;
  166. __entry->need_cp = need_cp;
  167. __entry->datasync = datasync;
  168. __entry->ret = ret;
  169. ),
  170. TP_printk("dev = (%d,%d), ino = %lu, checkpoint is %s, "
  171. "datasync = %d, ret = %d",
  172. show_dev_ino(__entry),
  173. __entry->need_cp ? "needed" : "not needed",
  174. __entry->datasync,
  175. __entry->ret)
  176. );
  177. TRACE_EVENT(f2fs_sync_fs,
  178. TP_PROTO(struct super_block *sb, int wait),
  179. TP_ARGS(sb, wait),
  180. TP_STRUCT__entry(
  181. __field(dev_t, dev)
  182. __field(int, dirty)
  183. __field(int, wait)
  184. ),
  185. TP_fast_assign(
  186. __entry->dev = sb->s_dev;
  187. __entry->dirty = is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY);
  188. __entry->wait = wait;
  189. ),
  190. TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
  191. show_dev(__entry),
  192. __entry->dirty ? "dirty" : "not dirty",
  193. __entry->wait)
  194. );
  195. DEFINE_EVENT(f2fs__inode, f2fs_iget,
  196. TP_PROTO(struct inode *inode),
  197. TP_ARGS(inode)
  198. );
  199. DEFINE_EVENT(f2fs__inode_exit, f2fs_iget_exit,
  200. TP_PROTO(struct inode *inode, int ret),
  201. TP_ARGS(inode, ret)
  202. );
  203. DEFINE_EVENT(f2fs__inode, f2fs_evict_inode,
  204. TP_PROTO(struct inode *inode),
  205. TP_ARGS(inode)
  206. );
  207. DEFINE_EVENT(f2fs__inode_exit, f2fs_new_inode,
  208. TP_PROTO(struct inode *inode, int ret),
  209. TP_ARGS(inode, ret)
  210. );
  211. TRACE_EVENT(f2fs_unlink_enter,
  212. TP_PROTO(struct inode *dir, struct dentry *dentry),
  213. TP_ARGS(dir, dentry),
  214. TP_STRUCT__entry(
  215. __field(dev_t, dev)
  216. __field(ino_t, ino)
  217. __field(loff_t, size)
  218. __field(blkcnt_t, blocks)
  219. __field(const char *, name)
  220. ),
  221. TP_fast_assign(
  222. __entry->dev = dir->i_sb->s_dev;
  223. __entry->ino = dir->i_ino;
  224. __entry->size = dir->i_size;
  225. __entry->blocks = dir->i_blocks;
  226. __entry->name = dentry->d_name.name;
  227. ),
  228. TP_printk("dev = (%d,%d), dir ino = %lu, i_size = %lld, "
  229. "i_blocks = %llu, name = %s",
  230. show_dev_ino(__entry),
  231. __entry->size,
  232. (unsigned long long)__entry->blocks,
  233. __entry->name)
  234. );
  235. DEFINE_EVENT(f2fs__inode_exit, f2fs_unlink_exit,
  236. TP_PROTO(struct inode *inode, int ret),
  237. TP_ARGS(inode, ret)
  238. );
  239. DEFINE_EVENT(f2fs__inode, f2fs_truncate,
  240. TP_PROTO(struct inode *inode),
  241. TP_ARGS(inode)
  242. );
  243. TRACE_EVENT(f2fs_truncate_data_blocks_range,
  244. TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs, int free),
  245. TP_ARGS(inode, nid, ofs, free),
  246. TP_STRUCT__entry(
  247. __field(dev_t, dev)
  248. __field(ino_t, ino)
  249. __field(nid_t, nid)
  250. __field(unsigned int, ofs)
  251. __field(int, free)
  252. ),
  253. TP_fast_assign(
  254. __entry->dev = inode->i_sb->s_dev;
  255. __entry->ino = inode->i_ino;
  256. __entry->nid = nid;
  257. __entry->ofs = ofs;
  258. __entry->free = free;
  259. ),
  260. TP_printk("dev = (%d,%d), ino = %lu, nid = %u, offset = %u, freed = %d",
  261. show_dev_ino(__entry),
  262. (unsigned int)__entry->nid,
  263. __entry->ofs,
  264. __entry->free)
  265. );
  266. DECLARE_EVENT_CLASS(f2fs__truncate_op,
  267. TP_PROTO(struct inode *inode, u64 from),
  268. TP_ARGS(inode, from),
  269. TP_STRUCT__entry(
  270. __field(dev_t, dev)
  271. __field(ino_t, ino)
  272. __field(loff_t, size)
  273. __field(blkcnt_t, blocks)
  274. __field(u64, from)
  275. ),
  276. TP_fast_assign(
  277. __entry->dev = inode->i_sb->s_dev;
  278. __entry->ino = inode->i_ino;
  279. __entry->size = inode->i_size;
  280. __entry->blocks = inode->i_blocks;
  281. __entry->from = from;
  282. ),
  283. TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld, i_blocks = %llu, "
  284. "start file offset = %llu",
  285. show_dev_ino(__entry),
  286. __entry->size,
  287. (unsigned long long)__entry->blocks,
  288. (unsigned long long)__entry->from)
  289. );
  290. DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_blocks_enter,
  291. TP_PROTO(struct inode *inode, u64 from),
  292. TP_ARGS(inode, from)
  293. );
  294. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_blocks_exit,
  295. TP_PROTO(struct inode *inode, int ret),
  296. TP_ARGS(inode, ret)
  297. );
  298. DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_inode_blocks_enter,
  299. TP_PROTO(struct inode *inode, u64 from),
  300. TP_ARGS(inode, from)
  301. );
  302. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_inode_blocks_exit,
  303. TP_PROTO(struct inode *inode, int ret),
  304. TP_ARGS(inode, ret)
  305. );
  306. DECLARE_EVENT_CLASS(f2fs__truncate_node,
  307. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  308. TP_ARGS(inode, nid, blk_addr),
  309. TP_STRUCT__entry(
  310. __field(dev_t, dev)
  311. __field(ino_t, ino)
  312. __field(nid_t, nid)
  313. __field(block_t, blk_addr)
  314. ),
  315. TP_fast_assign(
  316. __entry->dev = inode->i_sb->s_dev;
  317. __entry->ino = inode->i_ino;
  318. __entry->nid = nid;
  319. __entry->blk_addr = blk_addr;
  320. ),
  321. TP_printk("dev = (%d,%d), ino = %lu, nid = %u, block_address = 0x%llx",
  322. show_dev_ino(__entry),
  323. (unsigned int)__entry->nid,
  324. (unsigned long long)__entry->blk_addr)
  325. );
  326. DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_nodes_enter,
  327. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  328. TP_ARGS(inode, nid, blk_addr)
  329. );
  330. DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_nodes_exit,
  331. TP_PROTO(struct inode *inode, int ret),
  332. TP_ARGS(inode, ret)
  333. );
  334. DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_node,
  335. TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
  336. TP_ARGS(inode, nid, blk_addr)
  337. );
  338. TRACE_EVENT(f2fs_truncate_partial_nodes,
  339. TP_PROTO(struct inode *inode, nid_t nid[], int depth, int err),
  340. TP_ARGS(inode, nid, depth, err),
  341. TP_STRUCT__entry(
  342. __field(dev_t, dev)
  343. __field(ino_t, ino)
  344. __field(nid_t, nid[3])
  345. __field(int, depth)
  346. __field(int, err)
  347. ),
  348. TP_fast_assign(
  349. __entry->dev = inode->i_sb->s_dev;
  350. __entry->ino = inode->i_ino;
  351. __entry->nid[0] = nid[0];
  352. __entry->nid[1] = nid[1];
  353. __entry->nid[2] = nid[2];
  354. __entry->depth = depth;
  355. __entry->err = err;
  356. ),
  357. TP_printk("dev = (%d,%d), ino = %lu, "
  358. "nid[0] = %u, nid[1] = %u, nid[2] = %u, depth = %d, err = %d",
  359. show_dev_ino(__entry),
  360. (unsigned int)__entry->nid[0],
  361. (unsigned int)__entry->nid[1],
  362. (unsigned int)__entry->nid[2],
  363. __entry->depth,
  364. __entry->err)
  365. );
  366. TRACE_EVENT(f2fs_get_data_block,
  367. TP_PROTO(struct inode *inode, sector_t iblock,
  368. struct buffer_head *bh, int ret),
  369. TP_ARGS(inode, iblock, bh, ret),
  370. TP_STRUCT__entry(
  371. __field(dev_t, dev)
  372. __field(ino_t, ino)
  373. __field(sector_t, iblock)
  374. __field(sector_t, bh_start)
  375. __field(size_t, bh_size)
  376. __field(int, ret)
  377. ),
  378. TP_fast_assign(
  379. __entry->dev = inode->i_sb->s_dev;
  380. __entry->ino = inode->i_ino;
  381. __entry->iblock = iblock;
  382. __entry->bh_start = bh->b_blocknr;
  383. __entry->bh_size = bh->b_size;
  384. __entry->ret = ret;
  385. ),
  386. TP_printk("dev = (%d,%d), ino = %lu, file offset = %llu, "
  387. "start blkaddr = 0x%llx, len = 0x%llx bytes, err = %d",
  388. show_dev_ino(__entry),
  389. (unsigned long long)__entry->iblock,
  390. (unsigned long long)__entry->bh_start,
  391. (unsigned long long)__entry->bh_size,
  392. __entry->ret)
  393. );
  394. TRACE_EVENT(f2fs_get_victim,
  395. TP_PROTO(struct super_block *sb, int type, int gc_type,
  396. struct victim_sel_policy *p, unsigned int pre_victim,
  397. unsigned int prefree, unsigned int free),
  398. TP_ARGS(sb, type, gc_type, p, pre_victim, prefree, free),
  399. TP_STRUCT__entry(
  400. __field(dev_t, dev)
  401. __field(int, type)
  402. __field(int, gc_type)
  403. __field(int, alloc_mode)
  404. __field(int, gc_mode)
  405. __field(unsigned int, victim)
  406. __field(unsigned int, ofs_unit)
  407. __field(unsigned int, pre_victim)
  408. __field(unsigned int, prefree)
  409. __field(unsigned int, free)
  410. ),
  411. TP_fast_assign(
  412. __entry->dev = sb->s_dev;
  413. __entry->type = type;
  414. __entry->gc_type = gc_type;
  415. __entry->alloc_mode = p->alloc_mode;
  416. __entry->gc_mode = p->gc_mode;
  417. __entry->victim = p->min_segno;
  418. __entry->ofs_unit = p->ofs_unit;
  419. __entry->pre_victim = pre_victim;
  420. __entry->prefree = prefree;
  421. __entry->free = free;
  422. ),
  423. TP_printk("dev = (%d,%d), type = %s, policy = (%s, %s, %s), victim = %u "
  424. "ofs_unit = %u, pre_victim_secno = %d, prefree = %u, free = %u",
  425. show_dev(__entry),
  426. show_data_type(__entry->type),
  427. show_gc_type(__entry->gc_type),
  428. show_alloc_mode(__entry->alloc_mode),
  429. show_victim_policy(__entry->gc_mode),
  430. __entry->victim,
  431. __entry->ofs_unit,
  432. (int)__entry->pre_victim,
  433. __entry->prefree,
  434. __entry->free)
  435. );
  436. TRACE_EVENT(f2fs_fallocate,
  437. TP_PROTO(struct inode *inode, int mode,
  438. loff_t offset, loff_t len, int ret),
  439. TP_ARGS(inode, mode, offset, len, ret),
  440. TP_STRUCT__entry(
  441. __field(dev_t, dev)
  442. __field(ino_t, ino)
  443. __field(int, mode)
  444. __field(loff_t, offset)
  445. __field(loff_t, len)
  446. __field(loff_t, size)
  447. __field(blkcnt_t, blocks)
  448. __field(int, ret)
  449. ),
  450. TP_fast_assign(
  451. __entry->dev = inode->i_sb->s_dev;
  452. __entry->ino = inode->i_ino;
  453. __entry->mode = mode;
  454. __entry->offset = offset;
  455. __entry->len = len;
  456. __entry->size = inode->i_size;
  457. __entry->blocks = inode->i_blocks;
  458. __entry->ret = ret;
  459. ),
  460. TP_printk("dev = (%d,%d), ino = %lu, mode = %x, offset = %lld, "
  461. "len = %lld, i_size = %lld, i_blocks = %llu, ret = %d",
  462. show_dev_ino(__entry),
  463. __entry->mode,
  464. (unsigned long long)__entry->offset,
  465. (unsigned long long)__entry->len,
  466. (unsigned long long)__entry->size,
  467. (unsigned long long)__entry->blocks,
  468. __entry->ret)
  469. );
  470. TRACE_EVENT(f2fs_direct_IO_enter,
  471. TP_PROTO(struct inode *inode, loff_t offset, unsigned long len, int rw),
  472. TP_ARGS(inode, offset, len, rw),
  473. TP_STRUCT__entry(
  474. __field(dev_t, dev)
  475. __field(ino_t, ino)
  476. __field(loff_t, pos)
  477. __field(unsigned long, len)
  478. __field(int, rw)
  479. ),
  480. TP_fast_assign(
  481. __entry->dev = inode->i_sb->s_dev;
  482. __entry->ino = inode->i_ino;
  483. __entry->pos = offset;
  484. __entry->len = len;
  485. __entry->rw = rw;
  486. ),
  487. TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu rw = %d",
  488. show_dev_ino(__entry),
  489. __entry->pos,
  490. __entry->len,
  491. __entry->rw)
  492. );
  493. TRACE_EVENT(f2fs_direct_IO_exit,
  494. TP_PROTO(struct inode *inode, loff_t offset, unsigned long len,
  495. int rw, int ret),
  496. TP_ARGS(inode, offset, len, rw, ret),
  497. TP_STRUCT__entry(
  498. __field(dev_t, dev)
  499. __field(ino_t, ino)
  500. __field(loff_t, pos)
  501. __field(unsigned long, len)
  502. __field(int, rw)
  503. __field(int, ret)
  504. ),
  505. TP_fast_assign(
  506. __entry->dev = inode->i_sb->s_dev;
  507. __entry->ino = inode->i_ino;
  508. __entry->pos = offset;
  509. __entry->len = len;
  510. __entry->rw = rw;
  511. __entry->ret = ret;
  512. ),
  513. TP_printk("dev = (%d,%d), ino = %lu pos = %lld len = %lu "
  514. "rw = %d ret = %d",
  515. show_dev_ino(__entry),
  516. __entry->pos,
  517. __entry->len,
  518. __entry->rw,
  519. __entry->ret)
  520. );
  521. TRACE_EVENT(f2fs_reserve_new_block,
  522. TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs_in_node),
  523. TP_ARGS(inode, nid, ofs_in_node),
  524. TP_STRUCT__entry(
  525. __field(dev_t, dev)
  526. __field(nid_t, nid)
  527. __field(unsigned int, ofs_in_node)
  528. ),
  529. TP_fast_assign(
  530. __entry->dev = inode->i_sb->s_dev;
  531. __entry->nid = nid;
  532. __entry->ofs_in_node = ofs_in_node;
  533. ),
  534. TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u",
  535. show_dev(__entry),
  536. (unsigned int)__entry->nid,
  537. __entry->ofs_in_node)
  538. );
  539. DECLARE_EVENT_CLASS(f2fs__submit_page_bio,
  540. TP_PROTO(struct page *page, struct f2fs_io_info *fio),
  541. TP_ARGS(page, fio),
  542. TP_STRUCT__entry(
  543. __field(dev_t, dev)
  544. __field(ino_t, ino)
  545. __field(pgoff_t, index)
  546. __field(block_t, blkaddr)
  547. __field(int, rw)
  548. __field(int, type)
  549. ),
  550. TP_fast_assign(
  551. __entry->dev = page->mapping->host->i_sb->s_dev;
  552. __entry->ino = page->mapping->host->i_ino;
  553. __entry->index = page->index;
  554. __entry->blkaddr = fio->blk_addr;
  555. __entry->rw = fio->rw;
  556. __entry->type = fio->type;
  557. ),
  558. TP_printk("dev = (%d,%d), ino = %lu, page_index = 0x%lx, "
  559. "blkaddr = 0x%llx, rw = %s%s, type = %s",
  560. show_dev_ino(__entry),
  561. (unsigned long)__entry->index,
  562. (unsigned long long)__entry->blkaddr,
  563. show_bio_type(__entry->rw),
  564. show_block_type(__entry->type))
  565. );
  566. DEFINE_EVENT_CONDITION(f2fs__submit_page_bio, f2fs_submit_page_bio,
  567. TP_PROTO(struct page *page, struct f2fs_io_info *fio),
  568. TP_ARGS(page, fio),
  569. TP_CONDITION(page->mapping)
  570. );
  571. DEFINE_EVENT_CONDITION(f2fs__submit_page_bio, f2fs_submit_page_mbio,
  572. TP_PROTO(struct page *page, struct f2fs_io_info *fio),
  573. TP_ARGS(page, fio),
  574. TP_CONDITION(page->mapping)
  575. );
  576. DECLARE_EVENT_CLASS(f2fs__submit_bio,
  577. TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
  578. struct bio *bio),
  579. TP_ARGS(sb, fio, bio),
  580. TP_STRUCT__entry(
  581. __field(dev_t, dev)
  582. __field(int, rw)
  583. __field(int, type)
  584. __field(sector_t, sector)
  585. __field(unsigned int, size)
  586. ),
  587. TP_fast_assign(
  588. __entry->dev = sb->s_dev;
  589. __entry->rw = fio->rw;
  590. __entry->type = fio->type;
  591. __entry->sector = bio->bi_iter.bi_sector;
  592. __entry->size = bio->bi_iter.bi_size;
  593. ),
  594. TP_printk("dev = (%d,%d), %s%s, %s, sector = %lld, size = %u",
  595. show_dev(__entry),
  596. show_bio_type(__entry->rw),
  597. show_block_type(__entry->type),
  598. (unsigned long long)__entry->sector,
  599. __entry->size)
  600. );
  601. DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_write_bio,
  602. TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
  603. struct bio *bio),
  604. TP_ARGS(sb, fio, bio),
  605. TP_CONDITION(bio)
  606. );
  607. DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_read_bio,
  608. TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
  609. struct bio *bio),
  610. TP_ARGS(sb, fio, bio),
  611. TP_CONDITION(bio)
  612. );
  613. TRACE_EVENT(f2fs_write_begin,
  614. TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
  615. unsigned int flags),
  616. TP_ARGS(inode, pos, len, flags),
  617. TP_STRUCT__entry(
  618. __field(dev_t, dev)
  619. __field(ino_t, ino)
  620. __field(loff_t, pos)
  621. __field(unsigned int, len)
  622. __field(unsigned int, flags)
  623. ),
  624. TP_fast_assign(
  625. __entry->dev = inode->i_sb->s_dev;
  626. __entry->ino = inode->i_ino;
  627. __entry->pos = pos;
  628. __entry->len = len;
  629. __entry->flags = flags;
  630. ),
  631. TP_printk("dev = (%d,%d), ino = %lu, pos = %llu, len = %u, flags = %u",
  632. show_dev_ino(__entry),
  633. (unsigned long long)__entry->pos,
  634. __entry->len,
  635. __entry->flags)
  636. );
  637. TRACE_EVENT(f2fs_write_end,
  638. TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
  639. unsigned int copied),
  640. TP_ARGS(inode, pos, len, copied),
  641. TP_STRUCT__entry(
  642. __field(dev_t, dev)
  643. __field(ino_t, ino)
  644. __field(loff_t, pos)
  645. __field(unsigned int, len)
  646. __field(unsigned int, copied)
  647. ),
  648. TP_fast_assign(
  649. __entry->dev = inode->i_sb->s_dev;
  650. __entry->ino = inode->i_ino;
  651. __entry->pos = pos;
  652. __entry->len = len;
  653. __entry->copied = copied;
  654. ),
  655. TP_printk("dev = (%d,%d), ino = %lu, pos = %llu, len = %u, copied = %u",
  656. show_dev_ino(__entry),
  657. (unsigned long long)__entry->pos,
  658. __entry->len,
  659. __entry->copied)
  660. );
  661. DECLARE_EVENT_CLASS(f2fs__page,
  662. TP_PROTO(struct page *page, int type),
  663. TP_ARGS(page, type),
  664. TP_STRUCT__entry(
  665. __field(dev_t, dev)
  666. __field(ino_t, ino)
  667. __field(int, type)
  668. __field(int, dir)
  669. __field(pgoff_t, index)
  670. __field(int, dirty)
  671. __field(int, uptodate)
  672. ),
  673. TP_fast_assign(
  674. __entry->dev = page->mapping->host->i_sb->s_dev;
  675. __entry->ino = page->mapping->host->i_ino;
  676. __entry->type = type;
  677. __entry->dir = S_ISDIR(page->mapping->host->i_mode);
  678. __entry->index = page->index;
  679. __entry->dirty = PageDirty(page);
  680. __entry->uptodate = PageUptodate(page);
  681. ),
  682. TP_printk("dev = (%d,%d), ino = %lu, %s, %s, index = %lu, "
  683. "dirty = %d, uptodate = %d",
  684. show_dev_ino(__entry),
  685. show_block_type(__entry->type),
  686. show_file_type(__entry->dir),
  687. (unsigned long)__entry->index,
  688. __entry->dirty,
  689. __entry->uptodate)
  690. );
  691. DEFINE_EVENT(f2fs__page, f2fs_writepage,
  692. TP_PROTO(struct page *page, int type),
  693. TP_ARGS(page, type)
  694. );
  695. DEFINE_EVENT(f2fs__page, f2fs_do_write_data_page,
  696. TP_PROTO(struct page *page, int type),
  697. TP_ARGS(page, type)
  698. );
  699. DEFINE_EVENT(f2fs__page, f2fs_readpage,
  700. TP_PROTO(struct page *page, int type),
  701. TP_ARGS(page, type)
  702. );
  703. DEFINE_EVENT(f2fs__page, f2fs_set_page_dirty,
  704. TP_PROTO(struct page *page, int type),
  705. TP_ARGS(page, type)
  706. );
  707. DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite,
  708. TP_PROTO(struct page *page, int type),
  709. TP_ARGS(page, type)
  710. );
  711. DEFINE_EVENT(f2fs__page, f2fs_register_inmem_page,
  712. TP_PROTO(struct page *page, int type),
  713. TP_ARGS(page, type)
  714. );
  715. DEFINE_EVENT(f2fs__page, f2fs_commit_inmem_page,
  716. TP_PROTO(struct page *page, int type),
  717. TP_ARGS(page, type)
  718. );
  719. TRACE_EVENT(f2fs_writepages,
  720. TP_PROTO(struct inode *inode, struct writeback_control *wbc, int type),
  721. TP_ARGS(inode, wbc, type),
  722. TP_STRUCT__entry(
  723. __field(dev_t, dev)
  724. __field(ino_t, ino)
  725. __field(int, type)
  726. __field(int, dir)
  727. __field(long, nr_to_write)
  728. __field(long, pages_skipped)
  729. __field(loff_t, range_start)
  730. __field(loff_t, range_end)
  731. __field(pgoff_t, writeback_index)
  732. __field(int, sync_mode)
  733. __field(char, for_kupdate)
  734. __field(char, for_background)
  735. __field(char, tagged_writepages)
  736. __field(char, for_reclaim)
  737. __field(char, range_cyclic)
  738. __field(char, for_sync)
  739. ),
  740. TP_fast_assign(
  741. __entry->dev = inode->i_sb->s_dev;
  742. __entry->ino = inode->i_ino;
  743. __entry->type = type;
  744. __entry->dir = S_ISDIR(inode->i_mode);
  745. __entry->nr_to_write = wbc->nr_to_write;
  746. __entry->pages_skipped = wbc->pages_skipped;
  747. __entry->range_start = wbc->range_start;
  748. __entry->range_end = wbc->range_end;
  749. __entry->writeback_index = inode->i_mapping->writeback_index;
  750. __entry->sync_mode = wbc->sync_mode;
  751. __entry->for_kupdate = wbc->for_kupdate;
  752. __entry->for_background = wbc->for_background;
  753. __entry->tagged_writepages = wbc->tagged_writepages;
  754. __entry->for_reclaim = wbc->for_reclaim;
  755. __entry->range_cyclic = wbc->range_cyclic;
  756. __entry->for_sync = wbc->for_sync;
  757. ),
  758. TP_printk("dev = (%d,%d), ino = %lu, %s, %s, nr_to_write %ld, "
  759. "skipped %ld, start %lld, end %lld, wb_idx %lu, sync_mode %d, "
  760. "kupdate %u background %u tagged %u reclaim %u cyclic %u sync %u",
  761. show_dev_ino(__entry),
  762. show_block_type(__entry->type),
  763. show_file_type(__entry->dir),
  764. __entry->nr_to_write,
  765. __entry->pages_skipped,
  766. __entry->range_start,
  767. __entry->range_end,
  768. (unsigned long)__entry->writeback_index,
  769. __entry->sync_mode,
  770. __entry->for_kupdate,
  771. __entry->for_background,
  772. __entry->tagged_writepages,
  773. __entry->for_reclaim,
  774. __entry->range_cyclic,
  775. __entry->for_sync)
  776. );
  777. TRACE_EVENT(f2fs_write_checkpoint,
  778. TP_PROTO(struct super_block *sb, int reason, char *msg),
  779. TP_ARGS(sb, reason, msg),
  780. TP_STRUCT__entry(
  781. __field(dev_t, dev)
  782. __field(int, reason)
  783. __field(char *, msg)
  784. ),
  785. TP_fast_assign(
  786. __entry->dev = sb->s_dev;
  787. __entry->reason = reason;
  788. __entry->msg = msg;
  789. ),
  790. TP_printk("dev = (%d,%d), checkpoint for %s, state = %s",
  791. show_dev(__entry),
  792. show_cpreason(__entry->reason),
  793. __entry->msg)
  794. );
  795. TRACE_EVENT(f2fs_issue_discard,
  796. TP_PROTO(struct super_block *sb, block_t blkstart, block_t blklen),
  797. TP_ARGS(sb, blkstart, blklen),
  798. TP_STRUCT__entry(
  799. __field(dev_t, dev)
  800. __field(block_t, blkstart)
  801. __field(block_t, blklen)
  802. ),
  803. TP_fast_assign(
  804. __entry->dev = sb->s_dev;
  805. __entry->blkstart = blkstart;
  806. __entry->blklen = blklen;
  807. ),
  808. TP_printk("dev = (%d,%d), blkstart = 0x%llx, blklen = 0x%llx",
  809. show_dev(__entry),
  810. (unsigned long long)__entry->blkstart,
  811. (unsigned long long)__entry->blklen)
  812. );
  813. TRACE_EVENT(f2fs_issue_flush,
  814. TP_PROTO(struct super_block *sb, unsigned int nobarrier,
  815. unsigned int flush_merge),
  816. TP_ARGS(sb, nobarrier, flush_merge),
  817. TP_STRUCT__entry(
  818. __field(dev_t, dev)
  819. __field(unsigned int, nobarrier)
  820. __field(unsigned int, flush_merge)
  821. ),
  822. TP_fast_assign(
  823. __entry->dev = sb->s_dev;
  824. __entry->nobarrier = nobarrier;
  825. __entry->flush_merge = flush_merge;
  826. ),
  827. TP_printk("dev = (%d,%d), %s %s",
  828. show_dev(__entry),
  829. __entry->nobarrier ? "skip (nobarrier)" : "issue",
  830. __entry->flush_merge ? " with flush_merge" : "")
  831. );
  832. TRACE_EVENT(f2fs_lookup_extent_tree_start,
  833. TP_PROTO(struct inode *inode, unsigned int pgofs),
  834. TP_ARGS(inode, pgofs),
  835. TP_STRUCT__entry(
  836. __field(dev_t, dev)
  837. __field(ino_t, ino)
  838. __field(unsigned int, pgofs)
  839. ),
  840. TP_fast_assign(
  841. __entry->dev = inode->i_sb->s_dev;
  842. __entry->ino = inode->i_ino;
  843. __entry->pgofs = pgofs;
  844. ),
  845. TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u",
  846. show_dev_ino(__entry),
  847. __entry->pgofs)
  848. );
  849. TRACE_EVENT_CONDITION(f2fs_lookup_extent_tree_end,
  850. TP_PROTO(struct inode *inode, unsigned int pgofs,
  851. struct extent_node *en),
  852. TP_ARGS(inode, pgofs, en),
  853. TP_CONDITION(en),
  854. TP_STRUCT__entry(
  855. __field(dev_t, dev)
  856. __field(ino_t, ino)
  857. __field(unsigned int, pgofs)
  858. __field(unsigned int, fofs)
  859. __field(u32, blk)
  860. __field(unsigned int, len)
  861. ),
  862. TP_fast_assign(
  863. __entry->dev = inode->i_sb->s_dev;
  864. __entry->ino = inode->i_ino;
  865. __entry->pgofs = pgofs;
  866. __entry->fofs = en->ei.fofs;
  867. __entry->blk = en->ei.blk;
  868. __entry->len = en->ei.len;
  869. ),
  870. TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, "
  871. "ext_info(fofs: %u, blk: %u, len: %u)",
  872. show_dev_ino(__entry),
  873. __entry->pgofs,
  874. __entry->fofs,
  875. __entry->blk,
  876. __entry->len)
  877. );
  878. TRACE_EVENT(f2fs_update_extent_tree,
  879. TP_PROTO(struct inode *inode, unsigned int pgofs, block_t blkaddr),
  880. TP_ARGS(inode, pgofs, blkaddr),
  881. TP_STRUCT__entry(
  882. __field(dev_t, dev)
  883. __field(ino_t, ino)
  884. __field(unsigned int, pgofs)
  885. __field(u32, blk)
  886. ),
  887. TP_fast_assign(
  888. __entry->dev = inode->i_sb->s_dev;
  889. __entry->ino = inode->i_ino;
  890. __entry->pgofs = pgofs;
  891. __entry->blk = blkaddr;
  892. ),
  893. TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, blkaddr = %u",
  894. show_dev_ino(__entry),
  895. __entry->pgofs,
  896. __entry->blk)
  897. );
  898. TRACE_EVENT(f2fs_shrink_extent_tree,
  899. TP_PROTO(struct f2fs_sb_info *sbi, unsigned int node_cnt,
  900. unsigned int tree_cnt),
  901. TP_ARGS(sbi, node_cnt, tree_cnt),
  902. TP_STRUCT__entry(
  903. __field(dev_t, dev)
  904. __field(unsigned int, node_cnt)
  905. __field(unsigned int, tree_cnt)
  906. ),
  907. TP_fast_assign(
  908. __entry->dev = sbi->sb->s_dev;
  909. __entry->node_cnt = node_cnt;
  910. __entry->tree_cnt = tree_cnt;
  911. ),
  912. TP_printk("dev = (%d,%d), shrunk: node_cnt = %u, tree_cnt = %u",
  913. show_dev(__entry),
  914. __entry->node_cnt,
  915. __entry->tree_cnt)
  916. );
  917. TRACE_EVENT(f2fs_destroy_extent_tree,
  918. TP_PROTO(struct inode *inode, unsigned int node_cnt),
  919. TP_ARGS(inode, node_cnt),
  920. TP_STRUCT__entry(
  921. __field(dev_t, dev)
  922. __field(ino_t, ino)
  923. __field(unsigned int, node_cnt)
  924. ),
  925. TP_fast_assign(
  926. __entry->dev = inode->i_sb->s_dev;
  927. __entry->ino = inode->i_ino;
  928. __entry->node_cnt = node_cnt;
  929. ),
  930. TP_printk("dev = (%d,%d), ino = %lu, destroyed: node_cnt = %u",
  931. show_dev_ino(__entry),
  932. __entry->node_cnt)
  933. );
  934. #endif /* _TRACE_F2FS_H */
  935. /* This part must be outside protection */
  936. #include <trace/define_trace.h>