nfstrace.h 45 KB

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