nfstrace.h 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com>
  4. */
  5. #undef TRACE_SYSTEM
  6. #define TRACE_SYSTEM nfs
  7. #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ)
  8. #define _TRACE_NFS_H
  9. #include <linux/tracepoint.h>
  10. #include <linux/iversion.h>
  11. #include <trace/misc/fs.h>
  12. #include <trace/misc/nfs.h>
  13. #include <trace/misc/sunrpc.h>
  14. #define nfs_show_cache_validity(v) \
  15. __print_flags(v, "|", \
  16. { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \
  17. { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \
  18. { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \
  19. { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \
  20. { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \
  21. { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \
  22. { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \
  23. { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \
  24. { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \
  25. { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \
  26. { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \
  27. { NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \
  28. { NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \
  29. { NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \
  30. { NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \
  31. { NFS_INO_INVALID_MODE, "INVALID_MODE" })
  32. #define nfs_show_nfsi_flags(v) \
  33. __print_flags(v, "|", \
  34. { BIT(NFS_INO_STALE), "STALE" }, \
  35. { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \
  36. { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \
  37. { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \
  38. { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \
  39. { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
  40. { BIT(NFS_INO_ODIRECT), "ODIRECT" })
  41. DECLARE_EVENT_CLASS(nfs_inode_event,
  42. TP_PROTO(
  43. const struct inode *inode
  44. ),
  45. TP_ARGS(inode),
  46. TP_STRUCT__entry(
  47. __field(dev_t, dev)
  48. __field(u32, fhandle)
  49. __field(u64, fileid)
  50. __field(u64, version)
  51. ),
  52. TP_fast_assign(
  53. const struct nfs_inode *nfsi = NFS_I(inode);
  54. __entry->dev = inode->i_sb->s_dev;
  55. __entry->fileid = nfsi->fileid;
  56. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  57. __entry->version = inode_peek_iversion_raw(inode);
  58. ),
  59. TP_printk(
  60. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ",
  61. MAJOR(__entry->dev), MINOR(__entry->dev),
  62. (unsigned long long)__entry->fileid,
  63. __entry->fhandle,
  64. (unsigned long long)__entry->version
  65. )
  66. );
  67. DECLARE_EVENT_CLASS(nfs_inode_event_done,
  68. TP_PROTO(
  69. const struct inode *inode,
  70. int error
  71. ),
  72. TP_ARGS(inode, error),
  73. TP_STRUCT__entry(
  74. __field(unsigned long, error)
  75. __field(dev_t, dev)
  76. __field(u32, fhandle)
  77. __field(unsigned char, type)
  78. __field(u64, fileid)
  79. __field(u64, version)
  80. __field(loff_t, size)
  81. __field(unsigned long, nfsi_flags)
  82. __field(unsigned long, cache_validity)
  83. ),
  84. TP_fast_assign(
  85. const struct nfs_inode *nfsi = NFS_I(inode);
  86. __entry->error = error < 0 ? -error : 0;
  87. __entry->dev = inode->i_sb->s_dev;
  88. __entry->fileid = nfsi->fileid;
  89. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  90. __entry->type = nfs_umode_to_dtype(inode->i_mode);
  91. __entry->version = inode_peek_iversion_raw(inode);
  92. __entry->size = i_size_read(inode);
  93. __entry->nfsi_flags = nfsi->flags;
  94. __entry->cache_validity = nfsi->cache_validity;
  95. ),
  96. TP_printk(
  97. "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
  98. "type=%u (%s) version=%llu size=%lld "
  99. "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)",
  100. -__entry->error, show_nfs_status(__entry->error),
  101. MAJOR(__entry->dev), MINOR(__entry->dev),
  102. (unsigned long long)__entry->fileid,
  103. __entry->fhandle,
  104. __entry->type,
  105. show_fs_dirent_type(__entry->type),
  106. (unsigned long long)__entry->version,
  107. (long long)__entry->size,
  108. __entry->cache_validity,
  109. nfs_show_cache_validity(__entry->cache_validity),
  110. __entry->nfsi_flags,
  111. nfs_show_nfsi_flags(__entry->nfsi_flags)
  112. )
  113. );
  114. #define DEFINE_NFS_INODE_EVENT(name) \
  115. DEFINE_EVENT(nfs_inode_event, name, \
  116. TP_PROTO( \
  117. const struct inode *inode \
  118. ), \
  119. TP_ARGS(inode))
  120. #define DEFINE_NFS_INODE_EVENT_DONE(name) \
  121. DEFINE_EVENT(nfs_inode_event_done, name, \
  122. TP_PROTO( \
  123. const struct inode *inode, \
  124. int error \
  125. ), \
  126. TP_ARGS(inode, error))
  127. DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale);
  128. DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
  129. DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
  130. DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
  131. DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
  132. DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
  133. DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
  134. DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
  135. DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
  136. DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
  137. DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
  138. DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
  139. DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
  140. DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
  141. DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
  142. DEFINE_NFS_INODE_EVENT(nfs_access_enter);
  143. DEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_invalid);
  144. DEFINE_NFS_INODE_EVENT(nfs_readdir_force_readdirplus);
  145. DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done);
  146. DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done);
  147. TRACE_EVENT(nfs_access_exit,
  148. TP_PROTO(
  149. const struct inode *inode,
  150. unsigned int mask,
  151. unsigned int permitted,
  152. int error
  153. ),
  154. TP_ARGS(inode, mask, permitted, error),
  155. TP_STRUCT__entry(
  156. __field(unsigned long, error)
  157. __field(dev_t, dev)
  158. __field(u32, fhandle)
  159. __field(unsigned char, type)
  160. __field(u64, fileid)
  161. __field(u64, version)
  162. __field(loff_t, size)
  163. __field(unsigned long, nfsi_flags)
  164. __field(unsigned long, cache_validity)
  165. __field(unsigned int, mask)
  166. __field(unsigned int, permitted)
  167. ),
  168. TP_fast_assign(
  169. const struct nfs_inode *nfsi = NFS_I(inode);
  170. __entry->error = error < 0 ? -error : 0;
  171. __entry->dev = inode->i_sb->s_dev;
  172. __entry->fileid = nfsi->fileid;
  173. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  174. __entry->type = nfs_umode_to_dtype(inode->i_mode);
  175. __entry->version = inode_peek_iversion_raw(inode);
  176. __entry->size = i_size_read(inode);
  177. __entry->nfsi_flags = nfsi->flags;
  178. __entry->cache_validity = nfsi->cache_validity;
  179. __entry->mask = mask;
  180. __entry->permitted = permitted;
  181. ),
  182. TP_printk(
  183. "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
  184. "type=%u (%s) version=%llu size=%lld "
  185. "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) "
  186. "mask=0x%x permitted=0x%x",
  187. -__entry->error, show_nfs_status(__entry->error),
  188. MAJOR(__entry->dev), MINOR(__entry->dev),
  189. (unsigned long long)__entry->fileid,
  190. __entry->fhandle,
  191. __entry->type,
  192. show_fs_dirent_type(__entry->type),
  193. (unsigned long long)__entry->version,
  194. (long long)__entry->size,
  195. __entry->cache_validity,
  196. nfs_show_cache_validity(__entry->cache_validity),
  197. __entry->nfsi_flags,
  198. nfs_show_nfsi_flags(__entry->nfsi_flags),
  199. __entry->mask, __entry->permitted
  200. )
  201. );
  202. DECLARE_EVENT_CLASS(nfs_update_size_class,
  203. TP_PROTO(
  204. const struct inode *inode,
  205. loff_t new_size
  206. ),
  207. TP_ARGS(inode, new_size),
  208. TP_STRUCT__entry(
  209. __field(dev_t, dev)
  210. __field(u32, fhandle)
  211. __field(u64, fileid)
  212. __field(u64, version)
  213. __field(loff_t, cur_size)
  214. __field(loff_t, new_size)
  215. ),
  216. TP_fast_assign(
  217. const struct nfs_inode *nfsi = NFS_I(inode);
  218. __entry->dev = inode->i_sb->s_dev;
  219. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  220. __entry->fileid = nfsi->fileid;
  221. __entry->version = inode_peek_iversion_raw(inode);
  222. __entry->cur_size = i_size_read(inode);
  223. __entry->new_size = new_size;
  224. ),
  225. TP_printk(
  226. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld",
  227. MAJOR(__entry->dev), MINOR(__entry->dev),
  228. (unsigned long long)__entry->fileid,
  229. __entry->fhandle, __entry->version,
  230. __entry->cur_size, __entry->new_size
  231. )
  232. );
  233. #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \
  234. DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \
  235. TP_PROTO( \
  236. const struct inode *inode, \
  237. loff_t new_size \
  238. ), \
  239. TP_ARGS(inode, new_size))
  240. DEFINE_NFS_UPDATE_SIZE_EVENT(truncate);
  241. DEFINE_NFS_UPDATE_SIZE_EVENT(wcc);
  242. DEFINE_NFS_UPDATE_SIZE_EVENT(update);
  243. DEFINE_NFS_UPDATE_SIZE_EVENT(grow);
  244. DECLARE_EVENT_CLASS(nfs_inode_range_event,
  245. TP_PROTO(
  246. const struct inode *inode,
  247. loff_t range_start,
  248. loff_t range_end
  249. ),
  250. TP_ARGS(inode, range_start, range_end),
  251. TP_STRUCT__entry(
  252. __field(dev_t, dev)
  253. __field(u32, fhandle)
  254. __field(u64, fileid)
  255. __field(u64, version)
  256. __field(loff_t, range_start)
  257. __field(loff_t, range_end)
  258. ),
  259. TP_fast_assign(
  260. const struct nfs_inode *nfsi = NFS_I(inode);
  261. __entry->dev = inode->i_sb->s_dev;
  262. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  263. __entry->fileid = nfsi->fileid;
  264. __entry->version = inode_peek_iversion_raw(inode);
  265. __entry->range_start = range_start;
  266. __entry->range_end = range_end;
  267. ),
  268. TP_printk(
  269. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
  270. "range=[%lld, %lld]",
  271. MAJOR(__entry->dev), MINOR(__entry->dev),
  272. (unsigned long long)__entry->fileid,
  273. __entry->fhandle, __entry->version,
  274. __entry->range_start, __entry->range_end
  275. )
  276. );
  277. #define DEFINE_NFS_INODE_RANGE_EVENT(name) \
  278. DEFINE_EVENT(nfs_inode_range_event, name, \
  279. TP_PROTO( \
  280. const struct inode *inode, \
  281. loff_t range_start, \
  282. loff_t range_end \
  283. ), \
  284. TP_ARGS(inode, range_start, range_end))
  285. DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range);
  286. DECLARE_EVENT_CLASS(nfs_readdir_event,
  287. TP_PROTO(
  288. const struct file *file,
  289. const __be32 *verifier,
  290. u64 cookie,
  291. pgoff_t page_index,
  292. unsigned int dtsize
  293. ),
  294. TP_ARGS(file, verifier, cookie, page_index, dtsize),
  295. TP_STRUCT__entry(
  296. __field(dev_t, dev)
  297. __field(u32, fhandle)
  298. __field(u64, fileid)
  299. __field(u64, version)
  300. __array(char, verifier, NFS4_VERIFIER_SIZE)
  301. __field(u64, cookie)
  302. __field(pgoff_t, index)
  303. __field(unsigned int, dtsize)
  304. ),
  305. TP_fast_assign(
  306. const struct inode *dir = file_inode(file);
  307. const struct nfs_inode *nfsi = NFS_I(dir);
  308. __entry->dev = dir->i_sb->s_dev;
  309. __entry->fileid = nfsi->fileid;
  310. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  311. __entry->version = inode_peek_iversion_raw(dir);
  312. if (cookie != 0)
  313. memcpy(__entry->verifier, verifier,
  314. NFS4_VERIFIER_SIZE);
  315. else
  316. memset(__entry->verifier, 0,
  317. NFS4_VERIFIER_SIZE);
  318. __entry->cookie = cookie;
  319. __entry->index = page_index;
  320. __entry->dtsize = dtsize;
  321. ),
  322. TP_printk(
  323. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
  324. "cookie=%s:0x%llx cache_index=%lu dtsize=%u",
  325. MAJOR(__entry->dev), MINOR(__entry->dev),
  326. (unsigned long long)__entry->fileid, __entry->fhandle,
  327. __entry->version, show_nfs4_verifier(__entry->verifier),
  328. (unsigned long long)__entry->cookie, __entry->index,
  329. __entry->dtsize
  330. )
  331. );
  332. #define DEFINE_NFS_READDIR_EVENT(name) \
  333. DEFINE_EVENT(nfs_readdir_event, name, \
  334. TP_PROTO( \
  335. const struct file *file, \
  336. const __be32 *verifier, \
  337. u64 cookie, \
  338. pgoff_t page_index, \
  339. unsigned int dtsize \
  340. ), \
  341. TP_ARGS(file, verifier, cookie, page_index, dtsize))
  342. DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill);
  343. DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached);
  344. DECLARE_EVENT_CLASS(nfs_lookup_event,
  345. TP_PROTO(
  346. const struct inode *dir,
  347. const struct dentry *dentry,
  348. unsigned int flags
  349. ),
  350. TP_ARGS(dir, dentry, flags),
  351. TP_STRUCT__entry(
  352. __field(unsigned long, flags)
  353. __field(dev_t, dev)
  354. __field(u64, dir)
  355. __field(u64, fileid)
  356. __string(name, dentry->d_name.name)
  357. ),
  358. TP_fast_assign(
  359. __entry->dev = dir->i_sb->s_dev;
  360. __entry->dir = NFS_FILEID(dir);
  361. __entry->flags = flags;
  362. __entry->fileid = d_is_negative(dentry) ? 0 : NFS_FILEID(d_inode(dentry));
  363. __assign_str(name);
  364. ),
  365. TP_printk(
  366. "flags=0x%lx (%s) name=%02x:%02x:%llu/%s fileid=%llu",
  367. __entry->flags,
  368. show_fs_lookup_flags(__entry->flags),
  369. MAJOR(__entry->dev), MINOR(__entry->dev),
  370. (unsigned long long)__entry->dir,
  371. __get_str(name),
  372. __entry->fileid
  373. )
  374. );
  375. #define DEFINE_NFS_LOOKUP_EVENT(name) \
  376. DEFINE_EVENT(nfs_lookup_event, name, \
  377. TP_PROTO( \
  378. const struct inode *dir, \
  379. const struct dentry *dentry, \
  380. unsigned int flags \
  381. ), \
  382. TP_ARGS(dir, dentry, flags))
  383. DECLARE_EVENT_CLASS(nfs_lookup_event_done,
  384. TP_PROTO(
  385. const struct inode *dir,
  386. const struct dentry *dentry,
  387. unsigned int flags,
  388. int error
  389. ),
  390. TP_ARGS(dir, dentry, flags, error),
  391. TP_STRUCT__entry(
  392. __field(unsigned long, error)
  393. __field(unsigned long, flags)
  394. __field(dev_t, dev)
  395. __field(u64, dir)
  396. __field(u64, fileid)
  397. __string(name, dentry->d_name.name)
  398. ),
  399. TP_fast_assign(
  400. __entry->dev = dir->i_sb->s_dev;
  401. __entry->dir = NFS_FILEID(dir);
  402. __entry->error = error < 0 ? -error : 0;
  403. __entry->flags = flags;
  404. __entry->fileid = d_is_negative(dentry) ? 0 : NFS_FILEID(d_inode(dentry));
  405. __assign_str(name);
  406. ),
  407. TP_printk(
  408. "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s fileid=%llu",
  409. -__entry->error, show_nfs_status(__entry->error),
  410. __entry->flags,
  411. show_fs_lookup_flags(__entry->flags),
  412. MAJOR(__entry->dev), MINOR(__entry->dev),
  413. (unsigned long long)__entry->dir,
  414. __get_str(name),
  415. __entry->fileid
  416. )
  417. );
  418. #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \
  419. DEFINE_EVENT(nfs_lookup_event_done, name, \
  420. TP_PROTO( \
  421. const struct inode *dir, \
  422. const struct dentry *dentry, \
  423. unsigned int flags, \
  424. int error \
  425. ), \
  426. TP_ARGS(dir, dentry, flags, error))
  427. DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
  428. DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
  429. DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
  430. DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit);
  431. DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup);
  432. DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed);
  433. DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate);
  434. TRACE_EVENT(nfs_atomic_open_enter,
  435. TP_PROTO(
  436. const struct inode *dir,
  437. const struct nfs_open_context *ctx,
  438. unsigned int flags
  439. ),
  440. TP_ARGS(dir, ctx, flags),
  441. TP_STRUCT__entry(
  442. __field(unsigned long, flags)
  443. __field(unsigned long, fmode)
  444. __field(dev_t, dev)
  445. __field(u64, dir)
  446. __string(name, ctx->dentry->d_name.name)
  447. ),
  448. TP_fast_assign(
  449. __entry->dev = dir->i_sb->s_dev;
  450. __entry->dir = NFS_FILEID(dir);
  451. __entry->flags = flags;
  452. __entry->fmode = (__force unsigned long)ctx->mode;
  453. __assign_str(name);
  454. ),
  455. TP_printk(
  456. "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s",
  457. __entry->flags,
  458. show_fs_fcntl_open_flags(__entry->flags),
  459. show_fs_fmode_flags(__entry->fmode),
  460. MAJOR(__entry->dev), MINOR(__entry->dev),
  461. (unsigned long long)__entry->dir,
  462. __get_str(name)
  463. )
  464. );
  465. TRACE_EVENT(nfs_atomic_open_exit,
  466. TP_PROTO(
  467. const struct inode *dir,
  468. const struct nfs_open_context *ctx,
  469. unsigned int flags,
  470. int error
  471. ),
  472. TP_ARGS(dir, ctx, flags, error),
  473. TP_STRUCT__entry(
  474. __field(unsigned long, error)
  475. __field(unsigned long, flags)
  476. __field(unsigned long, fmode)
  477. __field(dev_t, dev)
  478. __field(u64, dir)
  479. __string(name, ctx->dentry->d_name.name)
  480. ),
  481. TP_fast_assign(
  482. __entry->error = -error;
  483. __entry->dev = dir->i_sb->s_dev;
  484. __entry->dir = NFS_FILEID(dir);
  485. __entry->flags = flags;
  486. __entry->fmode = (__force unsigned long)ctx->mode;
  487. __assign_str(name);
  488. ),
  489. TP_printk(
  490. "error=%ld (%s) flags=0x%lx (%s) fmode=%s "
  491. "name=%02x:%02x:%llu/%s",
  492. -__entry->error, show_nfs_status(__entry->error),
  493. __entry->flags,
  494. show_fs_fcntl_open_flags(__entry->flags),
  495. show_fs_fmode_flags(__entry->fmode),
  496. MAJOR(__entry->dev), MINOR(__entry->dev),
  497. (unsigned long long)__entry->dir,
  498. __get_str(name)
  499. )
  500. );
  501. TRACE_EVENT(nfs_create_enter,
  502. TP_PROTO(
  503. const struct inode *dir,
  504. const struct dentry *dentry,
  505. unsigned int flags
  506. ),
  507. TP_ARGS(dir, dentry, flags),
  508. TP_STRUCT__entry(
  509. __field(unsigned long, flags)
  510. __field(dev_t, dev)
  511. __field(u64, dir)
  512. __string(name, dentry->d_name.name)
  513. ),
  514. TP_fast_assign(
  515. __entry->dev = dir->i_sb->s_dev;
  516. __entry->dir = NFS_FILEID(dir);
  517. __entry->flags = flags;
  518. __assign_str(name);
  519. ),
  520. TP_printk(
  521. "flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
  522. __entry->flags,
  523. show_fs_fcntl_open_flags(__entry->flags),
  524. MAJOR(__entry->dev), MINOR(__entry->dev),
  525. (unsigned long long)__entry->dir,
  526. __get_str(name)
  527. )
  528. );
  529. TRACE_EVENT(nfs_create_exit,
  530. TP_PROTO(
  531. const struct inode *dir,
  532. const struct dentry *dentry,
  533. unsigned int flags,
  534. int error
  535. ),
  536. TP_ARGS(dir, dentry, flags, error),
  537. TP_STRUCT__entry(
  538. __field(unsigned long, error)
  539. __field(unsigned long, flags)
  540. __field(dev_t, dev)
  541. __field(u64, dir)
  542. __string(name, dentry->d_name.name)
  543. ),
  544. TP_fast_assign(
  545. __entry->error = -error;
  546. __entry->dev = dir->i_sb->s_dev;
  547. __entry->dir = NFS_FILEID(dir);
  548. __entry->flags = flags;
  549. __assign_str(name);
  550. ),
  551. TP_printk(
  552. "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
  553. -__entry->error, show_nfs_status(__entry->error),
  554. __entry->flags,
  555. show_fs_fcntl_open_flags(__entry->flags),
  556. MAJOR(__entry->dev), MINOR(__entry->dev),
  557. (unsigned long long)__entry->dir,
  558. __get_str(name)
  559. )
  560. );
  561. DECLARE_EVENT_CLASS(nfs_directory_event,
  562. TP_PROTO(
  563. const struct inode *dir,
  564. const struct dentry *dentry
  565. ),
  566. TP_ARGS(dir, dentry),
  567. TP_STRUCT__entry(
  568. __field(dev_t, dev)
  569. __field(u64, dir)
  570. __string(name, dentry->d_name.name)
  571. ),
  572. TP_fast_assign(
  573. __entry->dev = dir->i_sb->s_dev;
  574. __entry->dir = NFS_FILEID(dir);
  575. __assign_str(name);
  576. ),
  577. TP_printk(
  578. "name=%02x:%02x:%llu/%s",
  579. MAJOR(__entry->dev), MINOR(__entry->dev),
  580. (unsigned long long)__entry->dir,
  581. __get_str(name)
  582. )
  583. );
  584. #define DEFINE_NFS_DIRECTORY_EVENT(name) \
  585. DEFINE_EVENT(nfs_directory_event, name, \
  586. TP_PROTO( \
  587. const struct inode *dir, \
  588. const struct dentry *dentry \
  589. ), \
  590. TP_ARGS(dir, dentry))
  591. DECLARE_EVENT_CLASS(nfs_directory_event_done,
  592. TP_PROTO(
  593. const struct inode *dir,
  594. const struct dentry *dentry,
  595. int error
  596. ),
  597. TP_ARGS(dir, dentry, error),
  598. TP_STRUCT__entry(
  599. __field(unsigned long, error)
  600. __field(dev_t, dev)
  601. __field(u64, dir)
  602. __string(name, dentry->d_name.name)
  603. ),
  604. TP_fast_assign(
  605. __entry->dev = dir->i_sb->s_dev;
  606. __entry->dir = NFS_FILEID(dir);
  607. __entry->error = error < 0 ? -error : 0;
  608. __assign_str(name);
  609. ),
  610. TP_printk(
  611. "error=%ld (%s) name=%02x:%02x:%llu/%s",
  612. -__entry->error, show_nfs_status(__entry->error),
  613. MAJOR(__entry->dev), MINOR(__entry->dev),
  614. (unsigned long long)__entry->dir,
  615. __get_str(name)
  616. )
  617. );
  618. #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \
  619. DEFINE_EVENT(nfs_directory_event_done, name, \
  620. TP_PROTO( \
  621. const struct inode *dir, \
  622. const struct dentry *dentry, \
  623. int error \
  624. ), \
  625. TP_ARGS(dir, dentry, error))
  626. DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
  627. DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
  628. DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
  629. DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
  630. DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
  631. DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
  632. DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
  633. DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
  634. DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
  635. DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
  636. DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
  637. DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
  638. TRACE_EVENT(nfs_link_enter,
  639. TP_PROTO(
  640. const struct inode *inode,
  641. const struct inode *dir,
  642. const struct dentry *dentry
  643. ),
  644. TP_ARGS(inode, dir, dentry),
  645. TP_STRUCT__entry(
  646. __field(dev_t, dev)
  647. __field(u64, fileid)
  648. __field(u64, dir)
  649. __string(name, dentry->d_name.name)
  650. ),
  651. TP_fast_assign(
  652. __entry->dev = inode->i_sb->s_dev;
  653. __entry->fileid = NFS_FILEID(inode);
  654. __entry->dir = NFS_FILEID(dir);
  655. __assign_str(name);
  656. ),
  657. TP_printk(
  658. "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
  659. MAJOR(__entry->dev), MINOR(__entry->dev),
  660. __entry->fileid,
  661. MAJOR(__entry->dev), MINOR(__entry->dev),
  662. (unsigned long long)__entry->dir,
  663. __get_str(name)
  664. )
  665. );
  666. TRACE_EVENT(nfs_link_exit,
  667. TP_PROTO(
  668. const struct inode *inode,
  669. const struct inode *dir,
  670. const struct dentry *dentry,
  671. int error
  672. ),
  673. TP_ARGS(inode, dir, dentry, error),
  674. TP_STRUCT__entry(
  675. __field(unsigned long, error)
  676. __field(dev_t, dev)
  677. __field(u64, fileid)
  678. __field(u64, dir)
  679. __string(name, dentry->d_name.name)
  680. ),
  681. TP_fast_assign(
  682. __entry->dev = inode->i_sb->s_dev;
  683. __entry->fileid = NFS_FILEID(inode);
  684. __entry->dir = NFS_FILEID(dir);
  685. __entry->error = error < 0 ? -error : 0;
  686. __assign_str(name);
  687. ),
  688. TP_printk(
  689. "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
  690. -__entry->error, show_nfs_status(__entry->error),
  691. MAJOR(__entry->dev), MINOR(__entry->dev),
  692. __entry->fileid,
  693. MAJOR(__entry->dev), MINOR(__entry->dev),
  694. (unsigned long long)__entry->dir,
  695. __get_str(name)
  696. )
  697. );
  698. DECLARE_EVENT_CLASS(nfs_rename_event,
  699. TP_PROTO(
  700. const struct inode *old_dir,
  701. const struct dentry *old_dentry,
  702. const struct inode *new_dir,
  703. const struct dentry *new_dentry
  704. ),
  705. TP_ARGS(old_dir, old_dentry, new_dir, new_dentry),
  706. TP_STRUCT__entry(
  707. __field(dev_t, dev)
  708. __field(u64, old_dir)
  709. __field(u64, new_dir)
  710. __string(old_name, old_dentry->d_name.name)
  711. __string(new_name, new_dentry->d_name.name)
  712. ),
  713. TP_fast_assign(
  714. __entry->dev = old_dir->i_sb->s_dev;
  715. __entry->old_dir = NFS_FILEID(old_dir);
  716. __entry->new_dir = NFS_FILEID(new_dir);
  717. __assign_str(old_name);
  718. __assign_str(new_name);
  719. ),
  720. TP_printk(
  721. "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s",
  722. MAJOR(__entry->dev), MINOR(__entry->dev),
  723. (unsigned long long)__entry->old_dir,
  724. __get_str(old_name),
  725. MAJOR(__entry->dev), MINOR(__entry->dev),
  726. (unsigned long long)__entry->new_dir,
  727. __get_str(new_name)
  728. )
  729. );
  730. #define DEFINE_NFS_RENAME_EVENT(name) \
  731. DEFINE_EVENT(nfs_rename_event, name, \
  732. TP_PROTO( \
  733. const struct inode *old_dir, \
  734. const struct dentry *old_dentry, \
  735. const struct inode *new_dir, \
  736. const struct dentry *new_dentry \
  737. ), \
  738. TP_ARGS(old_dir, old_dentry, new_dir, new_dentry))
  739. DECLARE_EVENT_CLASS(nfs_rename_event_done,
  740. TP_PROTO(
  741. const struct inode *old_dir,
  742. const struct dentry *old_dentry,
  743. const struct inode *new_dir,
  744. const struct dentry *new_dentry,
  745. int error
  746. ),
  747. TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error),
  748. TP_STRUCT__entry(
  749. __field(dev_t, dev)
  750. __field(unsigned long, error)
  751. __field(u64, old_dir)
  752. __string(old_name, old_dentry->d_name.name)
  753. __field(u64, new_dir)
  754. __string(new_name, new_dentry->d_name.name)
  755. ),
  756. TP_fast_assign(
  757. __entry->dev = old_dir->i_sb->s_dev;
  758. __entry->error = -error;
  759. __entry->old_dir = NFS_FILEID(old_dir);
  760. __entry->new_dir = NFS_FILEID(new_dir);
  761. __assign_str(old_name);
  762. __assign_str(new_name);
  763. ),
  764. TP_printk(
  765. "error=%ld (%s) old_name=%02x:%02x:%llu/%s "
  766. "new_name=%02x:%02x:%llu/%s",
  767. -__entry->error, show_nfs_status(__entry->error),
  768. MAJOR(__entry->dev), MINOR(__entry->dev),
  769. (unsigned long long)__entry->old_dir,
  770. __get_str(old_name),
  771. MAJOR(__entry->dev), MINOR(__entry->dev),
  772. (unsigned long long)__entry->new_dir,
  773. __get_str(new_name)
  774. )
  775. );
  776. #define DEFINE_NFS_RENAME_EVENT_DONE(name) \
  777. DEFINE_EVENT(nfs_rename_event_done, name, \
  778. TP_PROTO( \
  779. const struct inode *old_dir, \
  780. const struct dentry *old_dentry, \
  781. const struct inode *new_dir, \
  782. const struct dentry *new_dentry, \
  783. int error \
  784. ), \
  785. TP_ARGS(old_dir, old_dentry, new_dir, \
  786. new_dentry, error))
  787. DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
  788. DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
  789. DEFINE_NFS_RENAME_EVENT_DONE(nfs_async_rename_done);
  790. TRACE_EVENT(nfs_sillyrename_unlink,
  791. TP_PROTO(
  792. const struct nfs_unlinkdata *data,
  793. int error
  794. ),
  795. TP_ARGS(data, error),
  796. TP_STRUCT__entry(
  797. __field(dev_t, dev)
  798. __field(unsigned long, error)
  799. __field(u64, dir)
  800. __dynamic_array(char, name, data->args.name.len + 1)
  801. ),
  802. TP_fast_assign(
  803. struct inode *dir = d_inode(data->dentry->d_parent);
  804. size_t len = data->args.name.len;
  805. __entry->dev = dir->i_sb->s_dev;
  806. __entry->dir = NFS_FILEID(dir);
  807. __entry->error = -error;
  808. memcpy(__get_str(name),
  809. data->args.name.name, len);
  810. __get_str(name)[len] = 0;
  811. ),
  812. TP_printk(
  813. "error=%ld (%s) name=%02x:%02x:%llu/%s",
  814. -__entry->error, show_nfs_status(__entry->error),
  815. MAJOR(__entry->dev), MINOR(__entry->dev),
  816. (unsigned long long)__entry->dir,
  817. __get_str(name)
  818. )
  819. );
  820. DECLARE_EVENT_CLASS(nfs_folio_event,
  821. TP_PROTO(
  822. const struct inode *inode,
  823. loff_t offset,
  824. size_t count
  825. ),
  826. TP_ARGS(inode, offset, count),
  827. TP_STRUCT__entry(
  828. __field(dev_t, dev)
  829. __field(u32, fhandle)
  830. __field(u64, fileid)
  831. __field(u64, version)
  832. __field(loff_t, offset)
  833. __field(size_t, count)
  834. ),
  835. TP_fast_assign(
  836. const struct nfs_inode *nfsi = NFS_I(inode);
  837. __entry->dev = inode->i_sb->s_dev;
  838. __entry->fileid = nfsi->fileid;
  839. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  840. __entry->version = inode_peek_iversion_raw(inode);
  841. __entry->offset = offset,
  842. __entry->count = count;
  843. ),
  844. TP_printk(
  845. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
  846. "offset=%lld count=%zu",
  847. MAJOR(__entry->dev), MINOR(__entry->dev),
  848. (unsigned long long)__entry->fileid,
  849. __entry->fhandle, __entry->version,
  850. __entry->offset, __entry->count
  851. )
  852. );
  853. #define DEFINE_NFS_FOLIO_EVENT(name) \
  854. DEFINE_EVENT(nfs_folio_event, name, \
  855. TP_PROTO( \
  856. const struct inode *inode, \
  857. loff_t offset, \
  858. size_t count \
  859. ), \
  860. TP_ARGS(inode, offset, count))
  861. DECLARE_EVENT_CLASS(nfs_folio_event_done,
  862. TP_PROTO(
  863. const struct inode *inode,
  864. loff_t offset,
  865. size_t count,
  866. int ret
  867. ),
  868. TP_ARGS(inode, offset, count, ret),
  869. TP_STRUCT__entry(
  870. __field(dev_t, dev)
  871. __field(u32, fhandle)
  872. __field(int, ret)
  873. __field(u64, fileid)
  874. __field(u64, version)
  875. __field(loff_t, offset)
  876. __field(size_t, count)
  877. ),
  878. TP_fast_assign(
  879. const struct nfs_inode *nfsi = NFS_I(inode);
  880. __entry->dev = inode->i_sb->s_dev;
  881. __entry->fileid = nfsi->fileid;
  882. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  883. __entry->version = inode_peek_iversion_raw(inode);
  884. __entry->offset = offset,
  885. __entry->count = count,
  886. __entry->ret = ret;
  887. ),
  888. TP_printk(
  889. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
  890. "offset=%lld count=%zu ret=%d",
  891. MAJOR(__entry->dev), MINOR(__entry->dev),
  892. (unsigned long long)__entry->fileid,
  893. __entry->fhandle, __entry->version,
  894. __entry->offset, __entry->count, __entry->ret
  895. )
  896. );
  897. #define DEFINE_NFS_FOLIO_EVENT_DONE(name) \
  898. DEFINE_EVENT(nfs_folio_event_done, name, \
  899. TP_PROTO( \
  900. const struct inode *inode, \
  901. loff_t offset, \
  902. size_t count, \
  903. int ret \
  904. ), \
  905. TP_ARGS(inode, offset, count, ret))
  906. DEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage);
  907. DEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_done);
  908. DEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio);
  909. DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_folio_done);
  910. DEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio);
  911. DEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio_done);
  912. TRACE_EVENT(nfs_aop_readahead,
  913. TP_PROTO(
  914. const struct inode *inode,
  915. loff_t pos,
  916. unsigned int nr_pages
  917. ),
  918. TP_ARGS(inode, pos, nr_pages),
  919. TP_STRUCT__entry(
  920. __field(dev_t, dev)
  921. __field(u32, fhandle)
  922. __field(u64, fileid)
  923. __field(u64, version)
  924. __field(loff_t, offset)
  925. __field(unsigned int, nr_pages)
  926. ),
  927. TP_fast_assign(
  928. const struct nfs_inode *nfsi = NFS_I(inode);
  929. __entry->dev = inode->i_sb->s_dev;
  930. __entry->fileid = nfsi->fileid;
  931. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  932. __entry->version = inode_peek_iversion_raw(inode);
  933. __entry->offset = pos;
  934. __entry->nr_pages = nr_pages;
  935. ),
  936. TP_printk(
  937. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u",
  938. MAJOR(__entry->dev), MINOR(__entry->dev),
  939. (unsigned long long)__entry->fileid,
  940. __entry->fhandle, __entry->version,
  941. __entry->offset, __entry->nr_pages
  942. )
  943. );
  944. TRACE_EVENT(nfs_aop_readahead_done,
  945. TP_PROTO(
  946. const struct inode *inode,
  947. unsigned int nr_pages,
  948. int ret
  949. ),
  950. TP_ARGS(inode, nr_pages, ret),
  951. TP_STRUCT__entry(
  952. __field(dev_t, dev)
  953. __field(u32, fhandle)
  954. __field(int, ret)
  955. __field(u64, fileid)
  956. __field(u64, version)
  957. __field(loff_t, offset)
  958. __field(unsigned int, nr_pages)
  959. ),
  960. TP_fast_assign(
  961. const struct nfs_inode *nfsi = NFS_I(inode);
  962. __entry->dev = inode->i_sb->s_dev;
  963. __entry->fileid = nfsi->fileid;
  964. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  965. __entry->version = inode_peek_iversion_raw(inode);
  966. __entry->nr_pages = nr_pages;
  967. __entry->ret = ret;
  968. ),
  969. TP_printk(
  970. "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d",
  971. MAJOR(__entry->dev), MINOR(__entry->dev),
  972. (unsigned long long)__entry->fileid,
  973. __entry->fhandle, __entry->version,
  974. __entry->nr_pages, __entry->ret
  975. )
  976. );
  977. TRACE_EVENT(nfs_initiate_read,
  978. TP_PROTO(
  979. const struct nfs_pgio_header *hdr
  980. ),
  981. TP_ARGS(hdr),
  982. TP_STRUCT__entry(
  983. __field(dev_t, dev)
  984. __field(u32, fhandle)
  985. __field(u64, fileid)
  986. __field(loff_t, offset)
  987. __field(u32, count)
  988. ),
  989. TP_fast_assign(
  990. const struct inode *inode = hdr->inode;
  991. const struct nfs_inode *nfsi = NFS_I(inode);
  992. const struct nfs_fh *fh = hdr->args.fh ?
  993. hdr->args.fh : &nfsi->fh;
  994. __entry->offset = hdr->args.offset;
  995. __entry->count = hdr->args.count;
  996. __entry->dev = inode->i_sb->s_dev;
  997. __entry->fileid = nfsi->fileid;
  998. __entry->fhandle = nfs_fhandle_hash(fh);
  999. ),
  1000. TP_printk(
  1001. "fileid=%02x:%02x:%llu fhandle=0x%08x "
  1002. "offset=%lld count=%u",
  1003. MAJOR(__entry->dev), MINOR(__entry->dev),
  1004. (unsigned long long)__entry->fileid,
  1005. __entry->fhandle,
  1006. (long long)__entry->offset, __entry->count
  1007. )
  1008. );
  1009. TRACE_EVENT(nfs_readpage_done,
  1010. TP_PROTO(
  1011. const struct rpc_task *task,
  1012. const struct nfs_pgio_header *hdr
  1013. ),
  1014. TP_ARGS(task, hdr),
  1015. TP_STRUCT__entry(
  1016. __field(dev_t, dev)
  1017. __field(u32, fhandle)
  1018. __field(u64, fileid)
  1019. __field(loff_t, offset)
  1020. __field(u32, arg_count)
  1021. __field(u32, res_count)
  1022. __field(bool, eof)
  1023. __field(int, error)
  1024. ),
  1025. TP_fast_assign(
  1026. const struct inode *inode = hdr->inode;
  1027. const struct nfs_inode *nfsi = NFS_I(inode);
  1028. const struct nfs_fh *fh = hdr->args.fh ?
  1029. hdr->args.fh : &nfsi->fh;
  1030. __entry->error = task->tk_status;
  1031. __entry->offset = hdr->args.offset;
  1032. __entry->arg_count = hdr->args.count;
  1033. __entry->res_count = hdr->res.count;
  1034. __entry->eof = hdr->res.eof;
  1035. __entry->dev = inode->i_sb->s_dev;
  1036. __entry->fileid = nfsi->fileid;
  1037. __entry->fhandle = nfs_fhandle_hash(fh);
  1038. ),
  1039. TP_printk(
  1040. "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
  1041. "offset=%lld count=%u res=%u%s", __entry->error,
  1042. MAJOR(__entry->dev), MINOR(__entry->dev),
  1043. (unsigned long long)__entry->fileid,
  1044. __entry->fhandle,
  1045. (long long)__entry->offset, __entry->arg_count,
  1046. __entry->res_count, __entry->eof ? " eof" : ""
  1047. )
  1048. );
  1049. TRACE_EVENT(nfs_readpage_short,
  1050. TP_PROTO(
  1051. const struct rpc_task *task,
  1052. const struct nfs_pgio_header *hdr
  1053. ),
  1054. TP_ARGS(task, hdr),
  1055. TP_STRUCT__entry(
  1056. __field(dev_t, dev)
  1057. __field(u32, fhandle)
  1058. __field(u64, fileid)
  1059. __field(loff_t, offset)
  1060. __field(u32, arg_count)
  1061. __field(u32, res_count)
  1062. __field(bool, eof)
  1063. __field(int, error)
  1064. ),
  1065. TP_fast_assign(
  1066. const struct inode *inode = hdr->inode;
  1067. const struct nfs_inode *nfsi = NFS_I(inode);
  1068. const struct nfs_fh *fh = hdr->args.fh ?
  1069. hdr->args.fh : &nfsi->fh;
  1070. __entry->error = task->tk_status;
  1071. __entry->offset = hdr->args.offset;
  1072. __entry->arg_count = hdr->args.count;
  1073. __entry->res_count = hdr->res.count;
  1074. __entry->eof = hdr->res.eof;
  1075. __entry->dev = inode->i_sb->s_dev;
  1076. __entry->fileid = nfsi->fileid;
  1077. __entry->fhandle = nfs_fhandle_hash(fh);
  1078. ),
  1079. TP_printk(
  1080. "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
  1081. "offset=%lld count=%u res=%u%s", __entry->error,
  1082. MAJOR(__entry->dev), MINOR(__entry->dev),
  1083. (unsigned long long)__entry->fileid,
  1084. __entry->fhandle,
  1085. (long long)__entry->offset, __entry->arg_count,
  1086. __entry->res_count, __entry->eof ? " eof" : ""
  1087. )
  1088. );
  1089. TRACE_EVENT(nfs_pgio_error,
  1090. TP_PROTO(
  1091. const struct nfs_pgio_header *hdr,
  1092. int error,
  1093. loff_t pos
  1094. ),
  1095. TP_ARGS(hdr, error, pos),
  1096. TP_STRUCT__entry(
  1097. __field(dev_t, dev)
  1098. __field(u32, fhandle)
  1099. __field(u64, fileid)
  1100. __field(loff_t, offset)
  1101. __field(u32, arg_count)
  1102. __field(u32, res_count)
  1103. __field(loff_t, pos)
  1104. __field(int, error)
  1105. ),
  1106. TP_fast_assign(
  1107. const struct inode *inode = hdr->inode;
  1108. const struct nfs_inode *nfsi = NFS_I(inode);
  1109. const struct nfs_fh *fh = hdr->args.fh ?
  1110. hdr->args.fh : &nfsi->fh;
  1111. __entry->error = error;
  1112. __entry->offset = hdr->args.offset;
  1113. __entry->arg_count = hdr->args.count;
  1114. __entry->res_count = hdr->res.count;
  1115. __entry->dev = inode->i_sb->s_dev;
  1116. __entry->fileid = nfsi->fileid;
  1117. __entry->fhandle = nfs_fhandle_hash(fh);
  1118. ),
  1119. TP_printk("error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
  1120. "offset=%lld count=%u res=%u pos=%llu", __entry->error,
  1121. MAJOR(__entry->dev), MINOR(__entry->dev),
  1122. (unsigned long long)__entry->fileid, __entry->fhandle,
  1123. (long long)__entry->offset, __entry->arg_count, __entry->res_count,
  1124. __entry->pos
  1125. )
  1126. );
  1127. TRACE_EVENT(nfs_initiate_write,
  1128. TP_PROTO(
  1129. const struct nfs_pgio_header *hdr
  1130. ),
  1131. TP_ARGS(hdr),
  1132. TP_STRUCT__entry(
  1133. __field(dev_t, dev)
  1134. __field(u32, fhandle)
  1135. __field(u64, fileid)
  1136. __field(loff_t, offset)
  1137. __field(u32, count)
  1138. __field(unsigned long, stable)
  1139. ),
  1140. TP_fast_assign(
  1141. const struct inode *inode = hdr->inode;
  1142. const struct nfs_inode *nfsi = NFS_I(inode);
  1143. const struct nfs_fh *fh = hdr->args.fh ?
  1144. hdr->args.fh : &nfsi->fh;
  1145. __entry->offset = hdr->args.offset;
  1146. __entry->count = hdr->args.count;
  1147. __entry->stable = hdr->args.stable;
  1148. __entry->dev = inode->i_sb->s_dev;
  1149. __entry->fileid = nfsi->fileid;
  1150. __entry->fhandle = nfs_fhandle_hash(fh);
  1151. ),
  1152. TP_printk(
  1153. "fileid=%02x:%02x:%llu fhandle=0x%08x "
  1154. "offset=%lld count=%u stable=%s",
  1155. MAJOR(__entry->dev), MINOR(__entry->dev),
  1156. (unsigned long long)__entry->fileid,
  1157. __entry->fhandle,
  1158. (long long)__entry->offset, __entry->count,
  1159. show_nfs_stable_how(__entry->stable)
  1160. )
  1161. );
  1162. TRACE_EVENT(nfs_writeback_done,
  1163. TP_PROTO(
  1164. const struct rpc_task *task,
  1165. const struct nfs_pgio_header *hdr
  1166. ),
  1167. TP_ARGS(task, hdr),
  1168. TP_STRUCT__entry(
  1169. __field(dev_t, dev)
  1170. __field(u32, fhandle)
  1171. __field(u64, fileid)
  1172. __field(loff_t, offset)
  1173. __field(u32, arg_count)
  1174. __field(u32, res_count)
  1175. __field(int, error)
  1176. __field(unsigned long, stable)
  1177. __array(char, verifier, NFS4_VERIFIER_SIZE)
  1178. ),
  1179. TP_fast_assign(
  1180. const struct inode *inode = hdr->inode;
  1181. const struct nfs_inode *nfsi = NFS_I(inode);
  1182. const struct nfs_fh *fh = hdr->args.fh ?
  1183. hdr->args.fh : &nfsi->fh;
  1184. const struct nfs_writeverf *verf = hdr->res.verf;
  1185. __entry->error = task->tk_status;
  1186. __entry->offset = hdr->args.offset;
  1187. __entry->arg_count = hdr->args.count;
  1188. __entry->res_count = hdr->res.count;
  1189. __entry->stable = verf->committed;
  1190. memcpy(__entry->verifier,
  1191. &verf->verifier,
  1192. NFS4_VERIFIER_SIZE);
  1193. __entry->dev = inode->i_sb->s_dev;
  1194. __entry->fileid = nfsi->fileid;
  1195. __entry->fhandle = nfs_fhandle_hash(fh);
  1196. ),
  1197. TP_printk(
  1198. "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
  1199. "offset=%lld count=%u res=%u stable=%s "
  1200. "verifier=%s", __entry->error,
  1201. MAJOR(__entry->dev), MINOR(__entry->dev),
  1202. (unsigned long long)__entry->fileid,
  1203. __entry->fhandle,
  1204. (long long)__entry->offset, __entry->arg_count,
  1205. __entry->res_count,
  1206. show_nfs_stable_how(__entry->stable),
  1207. show_nfs4_verifier(__entry->verifier)
  1208. )
  1209. );
  1210. DECLARE_EVENT_CLASS(nfs_page_error_class,
  1211. TP_PROTO(
  1212. const struct inode *inode,
  1213. const struct nfs_page *req,
  1214. int error
  1215. ),
  1216. TP_ARGS(inode, req, error),
  1217. TP_STRUCT__entry(
  1218. __field(dev_t, dev)
  1219. __field(u32, fhandle)
  1220. __field(u64, fileid)
  1221. __field(loff_t, offset)
  1222. __field(unsigned int, count)
  1223. __field(int, error)
  1224. ),
  1225. TP_fast_assign(
  1226. const struct nfs_inode *nfsi = NFS_I(inode);
  1227. __entry->dev = inode->i_sb->s_dev;
  1228. __entry->fileid = nfsi->fileid;
  1229. __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
  1230. __entry->offset = req_offset(req);
  1231. __entry->count = req->wb_bytes;
  1232. __entry->error = error;
  1233. ),
  1234. TP_printk(
  1235. "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
  1236. "offset=%lld count=%u", __entry->error,
  1237. MAJOR(__entry->dev), MINOR(__entry->dev),
  1238. (unsigned long long)__entry->fileid,
  1239. __entry->fhandle, __entry->offset,
  1240. __entry->count
  1241. )
  1242. );
  1243. #define DEFINE_NFS_PAGEERR_EVENT(name) \
  1244. DEFINE_EVENT(nfs_page_error_class, name, \
  1245. TP_PROTO( \
  1246. const struct inode *inode, \
  1247. const struct nfs_page *req, \
  1248. int error \
  1249. ), \
  1250. TP_ARGS(inode, req, error))
  1251. DEFINE_NFS_PAGEERR_EVENT(nfs_write_error);
  1252. DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error);
  1253. DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error);
  1254. TRACE_EVENT(nfs_initiate_commit,
  1255. TP_PROTO(
  1256. const struct nfs_commit_data *data
  1257. ),
  1258. TP_ARGS(data),
  1259. TP_STRUCT__entry(
  1260. __field(dev_t, dev)
  1261. __field(u32, fhandle)
  1262. __field(u64, fileid)
  1263. __field(loff_t, offset)
  1264. __field(u32, count)
  1265. ),
  1266. TP_fast_assign(
  1267. const struct inode *inode = data->inode;
  1268. const struct nfs_inode *nfsi = NFS_I(inode);
  1269. const struct nfs_fh *fh = data->args.fh ?
  1270. data->args.fh : &nfsi->fh;
  1271. __entry->offset = data->args.offset;
  1272. __entry->count = data->args.count;
  1273. __entry->dev = inode->i_sb->s_dev;
  1274. __entry->fileid = nfsi->fileid;
  1275. __entry->fhandle = nfs_fhandle_hash(fh);
  1276. ),
  1277. TP_printk(
  1278. "fileid=%02x:%02x:%llu fhandle=0x%08x "
  1279. "offset=%lld count=%u",
  1280. MAJOR(__entry->dev), MINOR(__entry->dev),
  1281. (unsigned long long)__entry->fileid,
  1282. __entry->fhandle,
  1283. (long long)__entry->offset, __entry->count
  1284. )
  1285. );
  1286. TRACE_EVENT(nfs_commit_done,
  1287. TP_PROTO(
  1288. const struct rpc_task *task,
  1289. const struct nfs_commit_data *data
  1290. ),
  1291. TP_ARGS(task, data),
  1292. TP_STRUCT__entry(
  1293. __field(dev_t, dev)
  1294. __field(u32, fhandle)
  1295. __field(u64, fileid)
  1296. __field(loff_t, offset)
  1297. __field(int, error)
  1298. __field(unsigned long, stable)
  1299. __array(char, verifier, NFS4_VERIFIER_SIZE)
  1300. ),
  1301. TP_fast_assign(
  1302. const struct inode *inode = data->inode;
  1303. const struct nfs_inode *nfsi = NFS_I(inode);
  1304. const struct nfs_fh *fh = data->args.fh ?
  1305. data->args.fh : &nfsi->fh;
  1306. const struct nfs_writeverf *verf = data->res.verf;
  1307. __entry->error = task->tk_status;
  1308. __entry->offset = data->args.offset;
  1309. __entry->stable = verf->committed;
  1310. memcpy(__entry->verifier,
  1311. &verf->verifier,
  1312. NFS4_VERIFIER_SIZE);
  1313. __entry->dev = inode->i_sb->s_dev;
  1314. __entry->fileid = nfsi->fileid;
  1315. __entry->fhandle = nfs_fhandle_hash(fh);
  1316. ),
  1317. TP_printk(
  1318. "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
  1319. "offset=%lld stable=%s verifier=%s", __entry->error,
  1320. MAJOR(__entry->dev), MINOR(__entry->dev),
  1321. (unsigned long long)__entry->fileid,
  1322. __entry->fhandle,
  1323. (long long)__entry->offset,
  1324. show_nfs_stable_how(__entry->stable),
  1325. show_nfs4_verifier(__entry->verifier)
  1326. )
  1327. );
  1328. #define nfs_show_direct_req_flags(v) \
  1329. __print_flags(v, "|", \
  1330. { NFS_ODIRECT_DO_COMMIT, "DO_COMMIT" }, \
  1331. { NFS_ODIRECT_RESCHED_WRITES, "RESCHED_WRITES" }, \
  1332. { NFS_ODIRECT_SHOULD_DIRTY, "SHOULD DIRTY" }, \
  1333. { NFS_ODIRECT_DONE, "DONE" } )
  1334. DECLARE_EVENT_CLASS(nfs_direct_req_class,
  1335. TP_PROTO(
  1336. const struct nfs_direct_req *dreq
  1337. ),
  1338. TP_ARGS(dreq),
  1339. TP_STRUCT__entry(
  1340. __field(dev_t, dev)
  1341. __field(u64, fileid)
  1342. __field(u32, fhandle)
  1343. __field(loff_t, offset)
  1344. __field(ssize_t, count)
  1345. __field(ssize_t, error)
  1346. __field(int, flags)
  1347. ),
  1348. TP_fast_assign(
  1349. const struct inode *inode = dreq->inode;
  1350. const struct nfs_inode *nfsi = NFS_I(inode);
  1351. const struct nfs_fh *fh = &nfsi->fh;
  1352. __entry->dev = inode->i_sb->s_dev;
  1353. __entry->fileid = nfsi->fileid;
  1354. __entry->fhandle = nfs_fhandle_hash(fh);
  1355. __entry->offset = dreq->io_start;
  1356. __entry->count = dreq->count;
  1357. __entry->error = dreq->error;
  1358. __entry->flags = dreq->flags;
  1359. ),
  1360. TP_printk(
  1361. "error=%zd fileid=%02x:%02x:%llu fhandle=0x%08x "
  1362. "offset=%lld count=%zd flags=%s",
  1363. __entry->error, MAJOR(__entry->dev),
  1364. MINOR(__entry->dev),
  1365. (unsigned long long)__entry->fileid,
  1366. __entry->fhandle, __entry->offset,
  1367. __entry->count,
  1368. nfs_show_direct_req_flags(__entry->flags)
  1369. )
  1370. );
  1371. #define DEFINE_NFS_DIRECT_REQ_EVENT(name) \
  1372. DEFINE_EVENT(nfs_direct_req_class, name, \
  1373. TP_PROTO( \
  1374. const struct nfs_direct_req *dreq \
  1375. ), \
  1376. TP_ARGS(dreq))
  1377. DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_commit_complete);
  1378. DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_resched_write);
  1379. DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_complete);
  1380. DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_completion);
  1381. DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_schedule_iovec);
  1382. DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_reschedule_io);
  1383. TRACE_EVENT(nfs_fh_to_dentry,
  1384. TP_PROTO(
  1385. const struct super_block *sb,
  1386. const struct nfs_fh *fh,
  1387. u64 fileid,
  1388. int error
  1389. ),
  1390. TP_ARGS(sb, fh, fileid, error),
  1391. TP_STRUCT__entry(
  1392. __field(int, error)
  1393. __field(dev_t, dev)
  1394. __field(u32, fhandle)
  1395. __field(u64, fileid)
  1396. ),
  1397. TP_fast_assign(
  1398. __entry->error = error;
  1399. __entry->dev = sb->s_dev;
  1400. __entry->fileid = fileid;
  1401. __entry->fhandle = nfs_fhandle_hash(fh);
  1402. ),
  1403. TP_printk(
  1404. "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ",
  1405. __entry->error,
  1406. MAJOR(__entry->dev), MINOR(__entry->dev),
  1407. (unsigned long long)__entry->fileid,
  1408. __entry->fhandle
  1409. )
  1410. );
  1411. TRACE_EVENT(nfs_mount_assign,
  1412. TP_PROTO(
  1413. const char *option,
  1414. const char *value
  1415. ),
  1416. TP_ARGS(option, value),
  1417. TP_STRUCT__entry(
  1418. __string(option, option)
  1419. __string(value, value)
  1420. ),
  1421. TP_fast_assign(
  1422. __assign_str(option);
  1423. __assign_str(value);
  1424. ),
  1425. TP_printk("option %s=%s",
  1426. __get_str(option), __get_str(value)
  1427. )
  1428. );
  1429. TRACE_EVENT(nfs_mount_option,
  1430. TP_PROTO(
  1431. const struct fs_parameter *param
  1432. ),
  1433. TP_ARGS(param),
  1434. TP_STRUCT__entry(
  1435. __string(option, param->key)
  1436. ),
  1437. TP_fast_assign(
  1438. __assign_str(option);
  1439. ),
  1440. TP_printk("option %s", __get_str(option))
  1441. );
  1442. TRACE_EVENT(nfs_mount_path,
  1443. TP_PROTO(
  1444. const char *path
  1445. ),
  1446. TP_ARGS(path),
  1447. TP_STRUCT__entry(
  1448. __string(path, path)
  1449. ),
  1450. TP_fast_assign(
  1451. __assign_str(path);
  1452. ),
  1453. TP_printk("path='%s'", __get_str(path))
  1454. );
  1455. TRACE_EVENT(nfs_local_open_fh,
  1456. TP_PROTO(
  1457. const struct nfs_fh *fh,
  1458. fmode_t fmode,
  1459. int error
  1460. ),
  1461. TP_ARGS(fh, fmode, error),
  1462. TP_STRUCT__entry(
  1463. __field(int, error)
  1464. __field(u32, fhandle)
  1465. __field(unsigned int, fmode)
  1466. ),
  1467. TP_fast_assign(
  1468. __entry->error = error;
  1469. __entry->fhandle = nfs_fhandle_hash(fh);
  1470. __entry->fmode = (__force unsigned int)fmode;
  1471. ),
  1472. TP_printk(
  1473. "error=%d fhandle=0x%08x mode=%s",
  1474. __entry->error,
  1475. __entry->fhandle,
  1476. show_fs_fmode_flags(__entry->fmode)
  1477. )
  1478. );
  1479. DECLARE_EVENT_CLASS(nfs_local_client_event,
  1480. TP_PROTO(
  1481. const struct nfs_client *clp
  1482. ),
  1483. TP_ARGS(clp),
  1484. TP_STRUCT__entry(
  1485. __field(unsigned int, protocol)
  1486. __string(server, clp->cl_hostname)
  1487. ),
  1488. TP_fast_assign(
  1489. __entry->protocol = clp->rpc_ops->version;
  1490. __assign_str(server);
  1491. ),
  1492. TP_printk(
  1493. "server=%s NFSv%u", __get_str(server), __entry->protocol
  1494. )
  1495. );
  1496. #define DEFINE_NFS_LOCAL_CLIENT_EVENT(name) \
  1497. DEFINE_EVENT(nfs_local_client_event, name, \
  1498. TP_PROTO( \
  1499. const struct nfs_client *clp \
  1500. ), \
  1501. TP_ARGS(clp))
  1502. DEFINE_NFS_LOCAL_CLIENT_EVENT(nfs_local_enable);
  1503. DEFINE_NFS_LOCAL_CLIENT_EVENT(nfs_local_disable);
  1504. DECLARE_EVENT_CLASS(nfs_xdr_event,
  1505. TP_PROTO(
  1506. const struct xdr_stream *xdr,
  1507. int error
  1508. ),
  1509. TP_ARGS(xdr, error),
  1510. TP_STRUCT__entry(
  1511. __field(unsigned int, task_id)
  1512. __field(unsigned int, client_id)
  1513. __field(u32, xid)
  1514. __field(int, version)
  1515. __field(unsigned long, error)
  1516. __string(program,
  1517. xdr->rqst->rq_task->tk_client->cl_program->name)
  1518. __string(procedure,
  1519. xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
  1520. ),
  1521. TP_fast_assign(
  1522. const struct rpc_rqst *rqstp = xdr->rqst;
  1523. const struct rpc_task *task = rqstp->rq_task;
  1524. __entry->task_id = task->tk_pid;
  1525. __entry->client_id = task->tk_client->cl_clid;
  1526. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  1527. __entry->version = task->tk_client->cl_vers;
  1528. __entry->error = error;
  1529. __assign_str(program);
  1530. __assign_str(procedure);
  1531. ),
  1532. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  1533. " xid=0x%08x %sv%d %s error=%ld (%s)",
  1534. __entry->task_id, __entry->client_id, __entry->xid,
  1535. __get_str(program), __entry->version,
  1536. __get_str(procedure), -__entry->error,
  1537. show_nfs_status(__entry->error)
  1538. )
  1539. );
  1540. #define DEFINE_NFS_XDR_EVENT(name) \
  1541. DEFINE_EVENT(nfs_xdr_event, name, \
  1542. TP_PROTO( \
  1543. const struct xdr_stream *xdr, \
  1544. int error \
  1545. ), \
  1546. TP_ARGS(xdr, error))
  1547. DEFINE_NFS_XDR_EVENT(nfs_xdr_status);
  1548. DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle);
  1549. #endif /* _TRACE_NFS_H */
  1550. #undef TRACE_INCLUDE_PATH
  1551. #define TRACE_INCLUDE_PATH .
  1552. #define TRACE_INCLUDE_FILE nfstrace
  1553. /* This part must be outside protection */
  1554. #include <trace/define_trace.h>