trace.h 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2014 Christoph Hellwig.
  4. */
  5. #undef TRACE_SYSTEM
  6. #define TRACE_SYSTEM nfsd
  7. #if !defined(_NFSD_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  8. #define _NFSD_TRACE_H
  9. #include <linux/tracepoint.h>
  10. #include <linux/sunrpc/clnt.h>
  11. #include <linux/sunrpc/xprt.h>
  12. #include <trace/misc/nfs.h>
  13. #include <trace/misc/sunrpc.h>
  14. #include "export.h"
  15. #include "nfsfh.h"
  16. #include "xdr4.h"
  17. #define NFSD_TRACE_PROC_RES_FIELDS \
  18. __field(unsigned int, netns_ino) \
  19. __field(u32, xid) \
  20. __field(unsigned long, status) \
  21. __array(unsigned char, server, sizeof(struct sockaddr_in6)) \
  22. __array(unsigned char, client, sizeof(struct sockaddr_in6))
  23. #define NFSD_TRACE_PROC_RES_ASSIGNMENTS(error) \
  24. do { \
  25. __entry->netns_ino = SVC_NET(rqstp)->ns.inum; \
  26. __entry->xid = be32_to_cpu(rqstp->rq_xid); \
  27. __entry->status = be32_to_cpu(error); \
  28. memcpy(__entry->server, &rqstp->rq_xprt->xpt_local, \
  29. rqstp->rq_xprt->xpt_locallen); \
  30. memcpy(__entry->client, &rqstp->rq_xprt->xpt_remote, \
  31. rqstp->rq_xprt->xpt_remotelen); \
  32. } while (0);
  33. DECLARE_EVENT_CLASS(nfsd_xdr_err_class,
  34. TP_PROTO(
  35. const struct svc_rqst *rqstp
  36. ),
  37. TP_ARGS(rqstp),
  38. TP_STRUCT__entry(
  39. __field(unsigned int, netns_ino)
  40. __field(u32, xid)
  41. __field(u32, vers)
  42. __field(u32, proc)
  43. __sockaddr(server, rqstp->rq_xprt->xpt_locallen)
  44. __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
  45. ),
  46. TP_fast_assign(
  47. const struct svc_xprt *xprt = rqstp->rq_xprt;
  48. __entry->netns_ino = xprt->xpt_net->ns.inum;
  49. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  50. __entry->vers = rqstp->rq_vers;
  51. __entry->proc = rqstp->rq_proc;
  52. __assign_sockaddr(server, &xprt->xpt_local, xprt->xpt_locallen);
  53. __assign_sockaddr(client, &xprt->xpt_remote, xprt->xpt_remotelen);
  54. ),
  55. TP_printk("xid=0x%08x vers=%u proc=%u",
  56. __entry->xid, __entry->vers, __entry->proc
  57. )
  58. );
  59. #define DEFINE_NFSD_XDR_ERR_EVENT(name) \
  60. DEFINE_EVENT(nfsd_xdr_err_class, nfsd_##name##_err, \
  61. TP_PROTO(const struct svc_rqst *rqstp), \
  62. TP_ARGS(rqstp))
  63. DEFINE_NFSD_XDR_ERR_EVENT(garbage_args);
  64. DEFINE_NFSD_XDR_ERR_EVENT(cant_encode);
  65. #define show_nfsd_may_flags(x) \
  66. __print_flags(x, "|", \
  67. { NFSD_MAY_EXEC, "EXEC" }, \
  68. { NFSD_MAY_WRITE, "WRITE" }, \
  69. { NFSD_MAY_READ, "READ" }, \
  70. { NFSD_MAY_SATTR, "SATTR" }, \
  71. { NFSD_MAY_TRUNC, "TRUNC" }, \
  72. { NFSD_MAY_NLM, "NLM" }, \
  73. { NFSD_MAY_OWNER_OVERRIDE, "OWNER_OVERRIDE" }, \
  74. { NFSD_MAY_LOCAL_ACCESS, "LOCAL_ACCESS" }, \
  75. { NFSD_MAY_BYPASS_GSS_ON_ROOT, "BYPASS_GSS_ON_ROOT" }, \
  76. { NFSD_MAY_NOT_BREAK_LEASE, "NOT_BREAK_LEASE" }, \
  77. { NFSD_MAY_BYPASS_GSS, "BYPASS_GSS" }, \
  78. { NFSD_MAY_READ_IF_EXEC, "READ_IF_EXEC" }, \
  79. { NFSD_MAY_64BIT_COOKIE, "64BIT_COOKIE" }, \
  80. { NFSD_MAY_LOCALIO, "LOCALIO" })
  81. TRACE_EVENT(nfsd_compound,
  82. TP_PROTO(
  83. const struct svc_rqst *rqst,
  84. const char *tag,
  85. u32 taglen,
  86. u32 opcnt
  87. ),
  88. TP_ARGS(rqst, tag, taglen, opcnt),
  89. TP_STRUCT__entry(
  90. __field(u32, xid)
  91. __field(u32, opcnt)
  92. __string_len(tag, tag, taglen)
  93. ),
  94. TP_fast_assign(
  95. __entry->xid = be32_to_cpu(rqst->rq_xid);
  96. __entry->opcnt = opcnt;
  97. __assign_str(tag);
  98. ),
  99. TP_printk("xid=0x%08x opcnt=%u tag=%s",
  100. __entry->xid, __entry->opcnt, __get_str(tag)
  101. )
  102. )
  103. TRACE_EVENT(nfsd_compound_status,
  104. TP_PROTO(u32 args_opcnt,
  105. u32 resp_opcnt,
  106. __be32 status,
  107. const char *name),
  108. TP_ARGS(args_opcnt, resp_opcnt, status, name),
  109. TP_STRUCT__entry(
  110. __field(u32, args_opcnt)
  111. __field(u32, resp_opcnt)
  112. __field(int, status)
  113. __string(name, name)
  114. ),
  115. TP_fast_assign(
  116. __entry->args_opcnt = args_opcnt;
  117. __entry->resp_opcnt = resp_opcnt;
  118. __entry->status = be32_to_cpu(status);
  119. __assign_str(name);
  120. ),
  121. TP_printk("op=%u/%u %s status=%d",
  122. __entry->resp_opcnt, __entry->args_opcnt,
  123. __get_str(name), __entry->status)
  124. )
  125. TRACE_EVENT(nfsd_compound_decode_err,
  126. TP_PROTO(
  127. const struct svc_rqst *rqstp,
  128. u32 args_opcnt,
  129. u32 resp_opcnt,
  130. u32 opnum,
  131. __be32 status
  132. ),
  133. TP_ARGS(rqstp, args_opcnt, resp_opcnt, opnum, status),
  134. TP_STRUCT__entry(
  135. NFSD_TRACE_PROC_RES_FIELDS
  136. __field(u32, args_opcnt)
  137. __field(u32, resp_opcnt)
  138. __field(u32, opnum)
  139. ),
  140. TP_fast_assign(
  141. NFSD_TRACE_PROC_RES_ASSIGNMENTS(status)
  142. __entry->args_opcnt = args_opcnt;
  143. __entry->resp_opcnt = resp_opcnt;
  144. __entry->opnum = opnum;
  145. ),
  146. TP_printk("op=%u/%u opnum=%u status=%lu",
  147. __entry->resp_opcnt, __entry->args_opcnt,
  148. __entry->opnum, __entry->status)
  149. );
  150. TRACE_EVENT(nfsd_compound_encode_err,
  151. TP_PROTO(
  152. const struct svc_rqst *rqstp,
  153. u32 opnum,
  154. __be32 status
  155. ),
  156. TP_ARGS(rqstp, opnum, status),
  157. TP_STRUCT__entry(
  158. NFSD_TRACE_PROC_RES_FIELDS
  159. __field(u32, opnum)
  160. ),
  161. TP_fast_assign(
  162. NFSD_TRACE_PROC_RES_ASSIGNMENTS(status)
  163. __entry->opnum = opnum;
  164. ),
  165. TP_printk("opnum=%u status=%lu",
  166. __entry->opnum, __entry->status)
  167. );
  168. #define show_fs_file_type(x) \
  169. __print_symbolic(x, \
  170. { S_IFLNK, "LNK" }, \
  171. { S_IFREG, "REG" }, \
  172. { S_IFDIR, "DIR" }, \
  173. { S_IFCHR, "CHR" }, \
  174. { S_IFBLK, "BLK" }, \
  175. { S_IFIFO, "FIFO" }, \
  176. { S_IFSOCK, "SOCK" })
  177. TRACE_EVENT_CONDITION(nfsd_fh_verify,
  178. TP_PROTO(
  179. const struct svc_rqst *rqstp,
  180. const struct svc_fh *fhp,
  181. umode_t type,
  182. int access
  183. ),
  184. TP_ARGS(rqstp, fhp, type, access),
  185. TP_CONDITION(rqstp != NULL),
  186. TP_STRUCT__entry(
  187. __field(unsigned int, netns_ino)
  188. __sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
  189. __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
  190. __field(u32, xid)
  191. __field(u32, fh_hash)
  192. __field(const void *, inode)
  193. __field(unsigned long, type)
  194. __field(unsigned long, access)
  195. ),
  196. TP_fast_assign(
  197. __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
  198. __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
  199. rqstp->rq_xprt->xpt_locallen);
  200. __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote,
  201. rqstp->rq_xprt->xpt_remotelen);
  202. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  203. __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
  204. __entry->inode = d_inode(fhp->fh_dentry);
  205. __entry->type = type;
  206. __entry->access = access;
  207. ),
  208. TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s",
  209. __entry->xid, __entry->fh_hash,
  210. show_fs_file_type(__entry->type),
  211. show_nfsd_may_flags(__entry->access)
  212. )
  213. );
  214. TRACE_EVENT_CONDITION(nfsd_fh_verify_err,
  215. TP_PROTO(
  216. const struct svc_rqst *rqstp,
  217. const struct svc_fh *fhp,
  218. umode_t type,
  219. int access,
  220. __be32 error
  221. ),
  222. TP_ARGS(rqstp, fhp, type, access, error),
  223. TP_CONDITION(rqstp != NULL && error),
  224. TP_STRUCT__entry(
  225. __field(unsigned int, netns_ino)
  226. __sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
  227. __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
  228. __field(u32, xid)
  229. __field(u32, fh_hash)
  230. __field(const void *, inode)
  231. __field(unsigned long, type)
  232. __field(unsigned long, access)
  233. __field(int, error)
  234. ),
  235. TP_fast_assign(
  236. __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
  237. __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
  238. rqstp->rq_xprt->xpt_locallen);
  239. __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote,
  240. rqstp->rq_xprt->xpt_remotelen);
  241. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  242. __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
  243. if (fhp->fh_dentry)
  244. __entry->inode = d_inode(fhp->fh_dentry);
  245. else
  246. __entry->inode = NULL;
  247. __entry->type = type;
  248. __entry->access = access;
  249. __entry->error = be32_to_cpu(error);
  250. ),
  251. TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s error=%d",
  252. __entry->xid, __entry->fh_hash,
  253. show_fs_file_type(__entry->type),
  254. show_nfsd_may_flags(__entry->access),
  255. __entry->error
  256. )
  257. );
  258. DECLARE_EVENT_CLASS(nfsd_fh_err_class,
  259. TP_PROTO(struct svc_rqst *rqstp,
  260. struct svc_fh *fhp,
  261. int status),
  262. TP_ARGS(rqstp, fhp, status),
  263. TP_STRUCT__entry(
  264. __field(u32, xid)
  265. __field(u32, fh_hash)
  266. __field(int, status)
  267. ),
  268. TP_fast_assign(
  269. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  270. __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
  271. __entry->status = status;
  272. ),
  273. TP_printk("xid=0x%08x fh_hash=0x%08x status=%d",
  274. __entry->xid, __entry->fh_hash,
  275. __entry->status)
  276. )
  277. #define DEFINE_NFSD_FH_ERR_EVENT(name) \
  278. DEFINE_EVENT_CONDITION(nfsd_fh_err_class, nfsd_##name, \
  279. TP_PROTO(struct svc_rqst *rqstp, \
  280. struct svc_fh *fhp, \
  281. int status), \
  282. TP_ARGS(rqstp, fhp, status), \
  283. TP_CONDITION(rqstp != NULL))
  284. DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport);
  285. DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
  286. TRACE_EVENT(nfsd_exp_find_key,
  287. TP_PROTO(const struct svc_expkey *key,
  288. int status),
  289. TP_ARGS(key, status),
  290. TP_STRUCT__entry(
  291. __field(int, fsidtype)
  292. __array(u32, fsid, 6)
  293. __string(auth_domain, key->ek_client->name)
  294. __field(int, status)
  295. ),
  296. TP_fast_assign(
  297. __entry->fsidtype = key->ek_fsidtype;
  298. memcpy(__entry->fsid, key->ek_fsid, 4*6);
  299. __assign_str(auth_domain);
  300. __entry->status = status;
  301. ),
  302. TP_printk("fsid=%x::%s domain=%s status=%d",
  303. __entry->fsidtype,
  304. __print_array(__entry->fsid, 6, 4),
  305. __get_str(auth_domain),
  306. __entry->status
  307. )
  308. );
  309. TRACE_EVENT(nfsd_expkey_update,
  310. TP_PROTO(const struct svc_expkey *key, const char *exp_path),
  311. TP_ARGS(key, exp_path),
  312. TP_STRUCT__entry(
  313. __field(int, fsidtype)
  314. __array(u32, fsid, 6)
  315. __string(auth_domain, key->ek_client->name)
  316. __string(path, exp_path)
  317. __field(bool, cache)
  318. ),
  319. TP_fast_assign(
  320. __entry->fsidtype = key->ek_fsidtype;
  321. memcpy(__entry->fsid, key->ek_fsid, 4*6);
  322. __assign_str(auth_domain);
  323. __assign_str(path);
  324. __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
  325. ),
  326. TP_printk("fsid=%x::%s domain=%s path=%s cache=%s",
  327. __entry->fsidtype,
  328. __print_array(__entry->fsid, 6, 4),
  329. __get_str(auth_domain),
  330. __get_str(path),
  331. __entry->cache ? "pos" : "neg"
  332. )
  333. );
  334. TRACE_EVENT(nfsd_exp_get_by_name,
  335. TP_PROTO(const struct svc_export *key,
  336. int status),
  337. TP_ARGS(key, status),
  338. TP_STRUCT__entry(
  339. __string(path, key->ex_path.dentry->d_name.name)
  340. __string(auth_domain, key->ex_client->name)
  341. __field(int, status)
  342. ),
  343. TP_fast_assign(
  344. __assign_str(path);
  345. __assign_str(auth_domain);
  346. __entry->status = status;
  347. ),
  348. TP_printk("path=%s domain=%s status=%d",
  349. __get_str(path),
  350. __get_str(auth_domain),
  351. __entry->status
  352. )
  353. );
  354. TRACE_EVENT(nfsd_export_update,
  355. TP_PROTO(const struct svc_export *key),
  356. TP_ARGS(key),
  357. TP_STRUCT__entry(
  358. __string(path, key->ex_path.dentry->d_name.name)
  359. __string(auth_domain, key->ex_client->name)
  360. __field(bool, cache)
  361. ),
  362. TP_fast_assign(
  363. __assign_str(path);
  364. __assign_str(auth_domain);
  365. __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
  366. ),
  367. TP_printk("path=%s domain=%s cache=%s",
  368. __get_str(path),
  369. __get_str(auth_domain),
  370. __entry->cache ? "pos" : "neg"
  371. )
  372. );
  373. DECLARE_EVENT_CLASS(nfsd_io_class,
  374. TP_PROTO(struct svc_rqst *rqstp,
  375. struct svc_fh *fhp,
  376. u64 offset,
  377. u32 len),
  378. TP_ARGS(rqstp, fhp, offset, len),
  379. TP_STRUCT__entry(
  380. __field(u32, xid)
  381. __field(u32, fh_hash)
  382. __field(u64, offset)
  383. __field(u32, len)
  384. ),
  385. TP_fast_assign(
  386. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  387. __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
  388. __entry->offset = offset;
  389. __entry->len = len;
  390. ),
  391. TP_printk("xid=0x%08x fh_hash=0x%08x offset=%llu len=%u",
  392. __entry->xid, __entry->fh_hash,
  393. __entry->offset, __entry->len)
  394. )
  395. #define DEFINE_NFSD_IO_EVENT(name) \
  396. DEFINE_EVENT(nfsd_io_class, nfsd_##name, \
  397. TP_PROTO(struct svc_rqst *rqstp, \
  398. struct svc_fh *fhp, \
  399. u64 offset, \
  400. u32 len), \
  401. TP_ARGS(rqstp, fhp, offset, len))
  402. DEFINE_NFSD_IO_EVENT(read_start);
  403. DEFINE_NFSD_IO_EVENT(read_splice);
  404. DEFINE_NFSD_IO_EVENT(read_vector);
  405. DEFINE_NFSD_IO_EVENT(read_io_done);
  406. DEFINE_NFSD_IO_EVENT(read_done);
  407. DEFINE_NFSD_IO_EVENT(write_start);
  408. DEFINE_NFSD_IO_EVENT(write_opened);
  409. DEFINE_NFSD_IO_EVENT(write_io_done);
  410. DEFINE_NFSD_IO_EVENT(write_done);
  411. DECLARE_EVENT_CLASS(nfsd_err_class,
  412. TP_PROTO(struct svc_rqst *rqstp,
  413. struct svc_fh *fhp,
  414. loff_t offset,
  415. int status),
  416. TP_ARGS(rqstp, fhp, offset, status),
  417. TP_STRUCT__entry(
  418. __field(u32, xid)
  419. __field(u32, fh_hash)
  420. __field(loff_t, offset)
  421. __field(int, status)
  422. ),
  423. TP_fast_assign(
  424. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  425. __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
  426. __entry->offset = offset;
  427. __entry->status = status;
  428. ),
  429. TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d",
  430. __entry->xid, __entry->fh_hash,
  431. __entry->offset, __entry->status)
  432. )
  433. #define DEFINE_NFSD_ERR_EVENT(name) \
  434. DEFINE_EVENT(nfsd_err_class, nfsd_##name, \
  435. TP_PROTO(struct svc_rqst *rqstp, \
  436. struct svc_fh *fhp, \
  437. loff_t offset, \
  438. int len), \
  439. TP_ARGS(rqstp, fhp, offset, len))
  440. DEFINE_NFSD_ERR_EVENT(read_err);
  441. DEFINE_NFSD_ERR_EVENT(write_err);
  442. TRACE_EVENT(nfsd_dirent,
  443. TP_PROTO(struct svc_fh *fhp,
  444. u64 ino,
  445. const char *name,
  446. int namlen),
  447. TP_ARGS(fhp, ino, name, namlen),
  448. TP_STRUCT__entry(
  449. __field(u32, fh_hash)
  450. __field(u64, ino)
  451. __string_len(name, name, namlen)
  452. ),
  453. TP_fast_assign(
  454. __entry->fh_hash = fhp ? knfsd_fh_hash(&fhp->fh_handle) : 0;
  455. __entry->ino = ino;
  456. __assign_str(name);
  457. ),
  458. TP_printk("fh_hash=0x%08x ino=%llu name=%s",
  459. __entry->fh_hash, __entry->ino, __get_str(name)
  460. )
  461. )
  462. DECLARE_EVENT_CLASS(nfsd_copy_err_class,
  463. TP_PROTO(struct svc_rqst *rqstp,
  464. struct svc_fh *src_fhp,
  465. loff_t src_offset,
  466. struct svc_fh *dst_fhp,
  467. loff_t dst_offset,
  468. u64 count,
  469. int status),
  470. TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, count, status),
  471. TP_STRUCT__entry(
  472. __field(u32, xid)
  473. __field(u32, src_fh_hash)
  474. __field(loff_t, src_offset)
  475. __field(u32, dst_fh_hash)
  476. __field(loff_t, dst_offset)
  477. __field(u64, count)
  478. __field(int, status)
  479. ),
  480. TP_fast_assign(
  481. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  482. __entry->src_fh_hash = knfsd_fh_hash(&src_fhp->fh_handle);
  483. __entry->src_offset = src_offset;
  484. __entry->dst_fh_hash = knfsd_fh_hash(&dst_fhp->fh_handle);
  485. __entry->dst_offset = dst_offset;
  486. __entry->count = count;
  487. __entry->status = status;
  488. ),
  489. TP_printk("xid=0x%08x src_fh_hash=0x%08x src_offset=%lld "
  490. "dst_fh_hash=0x%08x dst_offset=%lld "
  491. "count=%llu status=%d",
  492. __entry->xid, __entry->src_fh_hash, __entry->src_offset,
  493. __entry->dst_fh_hash, __entry->dst_offset,
  494. (unsigned long long)__entry->count,
  495. __entry->status)
  496. )
  497. #define DEFINE_NFSD_COPY_ERR_EVENT(name) \
  498. DEFINE_EVENT(nfsd_copy_err_class, nfsd_##name, \
  499. TP_PROTO(struct svc_rqst *rqstp, \
  500. struct svc_fh *src_fhp, \
  501. loff_t src_offset, \
  502. struct svc_fh *dst_fhp, \
  503. loff_t dst_offset, \
  504. u64 count, \
  505. int status), \
  506. TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, \
  507. count, status))
  508. DEFINE_NFSD_COPY_ERR_EVENT(clone_file_range_err);
  509. #include "state.h"
  510. #include "filecache.h"
  511. #include "vfs.h"
  512. TRACE_EVENT(nfsd_delegret_wakeup,
  513. TP_PROTO(
  514. const struct svc_rqst *rqstp,
  515. const struct inode *inode,
  516. long timeo
  517. ),
  518. TP_ARGS(rqstp, inode, timeo),
  519. TP_STRUCT__entry(
  520. __field(u32, xid)
  521. __field(const void *, inode)
  522. __field(long, timeo)
  523. ),
  524. TP_fast_assign(
  525. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  526. __entry->inode = inode;
  527. __entry->timeo = timeo;
  528. ),
  529. TP_printk("xid=0x%08x inode=%p%s",
  530. __entry->xid, __entry->inode,
  531. __entry->timeo == 0 ? " (timed out)" : ""
  532. )
  533. );
  534. DECLARE_EVENT_CLASS(nfsd_stateid_class,
  535. TP_PROTO(stateid_t *stp),
  536. TP_ARGS(stp),
  537. TP_STRUCT__entry(
  538. __field(u32, cl_boot)
  539. __field(u32, cl_id)
  540. __field(u32, si_id)
  541. __field(u32, si_generation)
  542. ),
  543. TP_fast_assign(
  544. __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
  545. __entry->cl_id = stp->si_opaque.so_clid.cl_id;
  546. __entry->si_id = stp->si_opaque.so_id;
  547. __entry->si_generation = stp->si_generation;
  548. ),
  549. TP_printk("client %08x:%08x stateid %08x:%08x",
  550. __entry->cl_boot,
  551. __entry->cl_id,
  552. __entry->si_id,
  553. __entry->si_generation)
  554. )
  555. #define DEFINE_STATEID_EVENT(name) \
  556. DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \
  557. TP_PROTO(stateid_t *stp), \
  558. TP_ARGS(stp))
  559. DEFINE_STATEID_EVENT(layoutstate_alloc);
  560. DEFINE_STATEID_EVENT(layoutstate_unhash);
  561. DEFINE_STATEID_EVENT(layoutstate_free);
  562. DEFINE_STATEID_EVENT(layout_get_lookup_fail);
  563. DEFINE_STATEID_EVENT(layout_commit_lookup_fail);
  564. DEFINE_STATEID_EVENT(layout_return_lookup_fail);
  565. DEFINE_STATEID_EVENT(layout_recall);
  566. DEFINE_STATEID_EVENT(layout_recall_done);
  567. DEFINE_STATEID_EVENT(layout_recall_fail);
  568. DEFINE_STATEID_EVENT(layout_recall_release);
  569. DEFINE_STATEID_EVENT(open);
  570. DEFINE_STATEID_EVENT(deleg_read);
  571. DEFINE_STATEID_EVENT(deleg_write);
  572. DEFINE_STATEID_EVENT(deleg_return);
  573. DEFINE_STATEID_EVENT(deleg_recall);
  574. DECLARE_EVENT_CLASS(nfsd_stateseqid_class,
  575. TP_PROTO(u32 seqid, const stateid_t *stp),
  576. TP_ARGS(seqid, stp),
  577. TP_STRUCT__entry(
  578. __field(u32, seqid)
  579. __field(u32, cl_boot)
  580. __field(u32, cl_id)
  581. __field(u32, si_id)
  582. __field(u32, si_generation)
  583. ),
  584. TP_fast_assign(
  585. __entry->seqid = seqid;
  586. __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
  587. __entry->cl_id = stp->si_opaque.so_clid.cl_id;
  588. __entry->si_id = stp->si_opaque.so_id;
  589. __entry->si_generation = stp->si_generation;
  590. ),
  591. TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x",
  592. __entry->seqid, __entry->cl_boot, __entry->cl_id,
  593. __entry->si_id, __entry->si_generation)
  594. )
  595. #define DEFINE_STATESEQID_EVENT(name) \
  596. DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \
  597. TP_PROTO(u32 seqid, const stateid_t *stp), \
  598. TP_ARGS(seqid, stp))
  599. DEFINE_STATESEQID_EVENT(preprocess);
  600. DEFINE_STATESEQID_EVENT(open_confirm);
  601. #define show_stid_type(x) \
  602. __print_flags(x, "|", \
  603. { SC_TYPE_OPEN, "OPEN" }, \
  604. { SC_TYPE_LOCK, "LOCK" }, \
  605. { SC_TYPE_DELEG, "DELEG" }, \
  606. { SC_TYPE_LAYOUT, "LAYOUT" })
  607. #define show_stid_status(x) \
  608. __print_flags(x, "|", \
  609. { SC_STATUS_CLOSED, "CLOSED" }, \
  610. { SC_STATUS_REVOKED, "REVOKED" }, \
  611. { SC_STATUS_ADMIN_REVOKED, "ADMIN_REVOKED" })
  612. DECLARE_EVENT_CLASS(nfsd_stid_class,
  613. TP_PROTO(
  614. const struct nfs4_stid *stid
  615. ),
  616. TP_ARGS(stid),
  617. TP_STRUCT__entry(
  618. __field(unsigned long, sc_type)
  619. __field(unsigned long, sc_status)
  620. __field(int, sc_count)
  621. __field(u32, cl_boot)
  622. __field(u32, cl_id)
  623. __field(u32, si_id)
  624. __field(u32, si_generation)
  625. ),
  626. TP_fast_assign(
  627. const stateid_t *stp = &stid->sc_stateid;
  628. __entry->sc_type = stid->sc_type;
  629. __entry->sc_status = stid->sc_status;
  630. __entry->sc_count = refcount_read(&stid->sc_count);
  631. __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
  632. __entry->cl_id = stp->si_opaque.so_clid.cl_id;
  633. __entry->si_id = stp->si_opaque.so_id;
  634. __entry->si_generation = stp->si_generation;
  635. ),
  636. TP_printk("client %08x:%08x stateid %08x:%08x ref=%d type=%s state=%s",
  637. __entry->cl_boot, __entry->cl_id,
  638. __entry->si_id, __entry->si_generation,
  639. __entry->sc_count, show_stid_type(__entry->sc_type),
  640. show_stid_status(__entry->sc_status)
  641. )
  642. );
  643. #define DEFINE_STID_EVENT(name) \
  644. DEFINE_EVENT(nfsd_stid_class, nfsd_stid_##name, \
  645. TP_PROTO(const struct nfs4_stid *stid), \
  646. TP_ARGS(stid))
  647. DEFINE_STID_EVENT(revoke);
  648. TRACE_EVENT(nfsd_stateowner_replay,
  649. TP_PROTO(
  650. u32 opnum,
  651. const struct nfs4_replay *rp
  652. ),
  653. TP_ARGS(opnum, rp),
  654. TP_STRUCT__entry(
  655. __field(unsigned long, status)
  656. __field(u32, opnum)
  657. ),
  658. TP_fast_assign(
  659. __entry->status = be32_to_cpu(rp->rp_status);
  660. __entry->opnum = opnum;
  661. ),
  662. TP_printk("opnum=%u status=%lu",
  663. __entry->opnum, __entry->status)
  664. );
  665. TRACE_EVENT_CONDITION(nfsd_seq4_status,
  666. TP_PROTO(
  667. const struct svc_rqst *rqstp,
  668. const struct nfsd4_sequence *sequence
  669. ),
  670. TP_ARGS(rqstp, sequence),
  671. TP_CONDITION(sequence->status_flags),
  672. TP_STRUCT__entry(
  673. __field(unsigned int, netns_ino)
  674. __field(u32, xid)
  675. __field(u32, cl_boot)
  676. __field(u32, cl_id)
  677. __field(u32, seqno)
  678. __field(u32, reserved)
  679. __field(unsigned long, status_flags)
  680. ),
  681. TP_fast_assign(
  682. const struct nfsd4_sessionid *sid =
  683. (struct nfsd4_sessionid *)&sequence->sessionid;
  684. __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
  685. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  686. __entry->cl_boot = sid->clientid.cl_boot;
  687. __entry->cl_id = sid->clientid.cl_id;
  688. __entry->seqno = sid->sequence;
  689. __entry->reserved = sid->reserved;
  690. __entry->status_flags = sequence->status_flags;
  691. ),
  692. TP_printk("xid=0x%08x sessionid=%08x:%08x:%08x:%08x status_flags=%s",
  693. __entry->xid, __entry->cl_boot, __entry->cl_id,
  694. __entry->seqno, __entry->reserved,
  695. show_nfs4_seq4_status(__entry->status_flags)
  696. )
  697. );
  698. DECLARE_EVENT_CLASS(nfsd_cs_slot_class,
  699. TP_PROTO(
  700. const struct nfs4_client *clp,
  701. const struct nfsd4_create_session *cs
  702. ),
  703. TP_ARGS(clp, cs),
  704. TP_STRUCT__entry(
  705. __field(u32, seqid)
  706. __field(u32, slot_seqid)
  707. __field(u32, cl_boot)
  708. __field(u32, cl_id)
  709. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  710. ),
  711. TP_fast_assign(
  712. const struct nfsd4_clid_slot *slot = &clp->cl_cs_slot;
  713. __entry->cl_boot = clp->cl_clientid.cl_boot;
  714. __entry->cl_id = clp->cl_clientid.cl_id;
  715. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  716. clp->cl_cb_conn.cb_addrlen);
  717. __entry->seqid = cs->seqid;
  718. __entry->slot_seqid = slot->sl_seqid;
  719. ),
  720. TP_printk("addr=%pISpc client %08x:%08x seqid=%u slot_seqid=%u",
  721. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  722. __entry->seqid, __entry->slot_seqid
  723. )
  724. );
  725. #define DEFINE_CS_SLOT_EVENT(name) \
  726. DEFINE_EVENT(nfsd_cs_slot_class, nfsd_##name, \
  727. TP_PROTO( \
  728. const struct nfs4_client *clp, \
  729. const struct nfsd4_create_session *cs \
  730. ), \
  731. TP_ARGS(clp, cs))
  732. DEFINE_CS_SLOT_EVENT(slot_seqid_conf);
  733. DEFINE_CS_SLOT_EVENT(slot_seqid_unconf);
  734. TRACE_EVENT(nfsd_slot_seqid_sequence,
  735. TP_PROTO(
  736. const struct nfs4_client *clp,
  737. const struct nfsd4_sequence *seq,
  738. const struct nfsd4_slot *slot
  739. ),
  740. TP_ARGS(clp, seq, slot),
  741. TP_STRUCT__entry(
  742. __field(u32, seqid)
  743. __field(u32, slot_seqid)
  744. __field(u32, cl_boot)
  745. __field(u32, cl_id)
  746. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  747. __field(bool, in_use)
  748. ),
  749. TP_fast_assign(
  750. __entry->cl_boot = clp->cl_clientid.cl_boot;
  751. __entry->cl_id = clp->cl_clientid.cl_id;
  752. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  753. clp->cl_cb_conn.cb_addrlen);
  754. __entry->seqid = seq->seqid;
  755. __entry->slot_seqid = slot->sl_seqid;
  756. ),
  757. TP_printk("addr=%pISpc client %08x:%08x seqid=%u slot_seqid=%u (%sin use)",
  758. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  759. __entry->seqid, __entry->slot_seqid,
  760. __entry->in_use ? "" : "not "
  761. )
  762. );
  763. DECLARE_EVENT_CLASS(nfsd_clientid_class,
  764. TP_PROTO(const clientid_t *clid),
  765. TP_ARGS(clid),
  766. TP_STRUCT__entry(
  767. __field(u32, cl_boot)
  768. __field(u32, cl_id)
  769. ),
  770. TP_fast_assign(
  771. __entry->cl_boot = clid->cl_boot;
  772. __entry->cl_id = clid->cl_id;
  773. ),
  774. TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id)
  775. )
  776. #define DEFINE_CLIENTID_EVENT(name) \
  777. DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \
  778. TP_PROTO(const clientid_t *clid), \
  779. TP_ARGS(clid))
  780. DEFINE_CLIENTID_EVENT(expire_unconf);
  781. DEFINE_CLIENTID_EVENT(reclaim_complete);
  782. DEFINE_CLIENTID_EVENT(confirmed);
  783. DEFINE_CLIENTID_EVENT(destroyed);
  784. DEFINE_CLIENTID_EVENT(admin_expired);
  785. DEFINE_CLIENTID_EVENT(replaced);
  786. DEFINE_CLIENTID_EVENT(purged);
  787. DEFINE_CLIENTID_EVENT(renew);
  788. DEFINE_CLIENTID_EVENT(stale);
  789. TRACE_EVENT(nfsd_mark_client_expired,
  790. TP_PROTO(
  791. const struct nfs4_client *clp,
  792. int cl_rpc_users
  793. ),
  794. TP_ARGS(clp, cl_rpc_users),
  795. TP_STRUCT__entry(
  796. __field(int, cl_rpc_users)
  797. __field(u32, cl_boot)
  798. __field(u32, cl_id)
  799. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  800. ),
  801. TP_fast_assign(
  802. __entry->cl_rpc_users = cl_rpc_users;
  803. __entry->cl_boot = clp->cl_clientid.cl_boot;
  804. __entry->cl_id = clp->cl_clientid.cl_id;
  805. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  806. clp->cl_cb_conn.cb_addrlen)
  807. ),
  808. TP_printk("addr=%pISpc client %08x:%08x cl_rpc_users=%d",
  809. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  810. __entry->cl_rpc_users)
  811. );
  812. DECLARE_EVENT_CLASS(nfsd_net_class,
  813. TP_PROTO(const struct nfsd_net *nn),
  814. TP_ARGS(nn),
  815. TP_STRUCT__entry(
  816. __field(unsigned long long, boot_time)
  817. ),
  818. TP_fast_assign(
  819. __entry->boot_time = nn->boot_time;
  820. ),
  821. TP_printk("boot_time=%16llx", __entry->boot_time)
  822. )
  823. #define DEFINE_NET_EVENT(name) \
  824. DEFINE_EVENT(nfsd_net_class, nfsd_##name, \
  825. TP_PROTO(const struct nfsd_net *nn), \
  826. TP_ARGS(nn))
  827. DEFINE_NET_EVENT(grace_start);
  828. DEFINE_NET_EVENT(grace_complete);
  829. TRACE_EVENT(nfsd_writeverf_reset,
  830. TP_PROTO(
  831. const struct nfsd_net *nn,
  832. const struct svc_rqst *rqstp,
  833. int error
  834. ),
  835. TP_ARGS(nn, rqstp, error),
  836. TP_STRUCT__entry(
  837. __field(unsigned long long, boot_time)
  838. __field(u32, xid)
  839. __field(int, error)
  840. __array(unsigned char, verifier, NFS4_VERIFIER_SIZE)
  841. ),
  842. TP_fast_assign(
  843. __entry->boot_time = nn->boot_time;
  844. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  845. __entry->error = error;
  846. /* avoid seqlock inside TP_fast_assign */
  847. memcpy(__entry->verifier, nn->writeverf,
  848. NFS4_VERIFIER_SIZE);
  849. ),
  850. TP_printk("boot_time=%16llx xid=0x%08x error=%d new verifier=0x%s",
  851. __entry->boot_time, __entry->xid, __entry->error,
  852. __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE)
  853. )
  854. );
  855. TRACE_EVENT(nfsd_clid_cred_mismatch,
  856. TP_PROTO(
  857. const struct nfs4_client *clp,
  858. const struct svc_rqst *rqstp
  859. ),
  860. TP_ARGS(clp, rqstp),
  861. TP_STRUCT__entry(
  862. __field(u32, cl_boot)
  863. __field(u32, cl_id)
  864. __field(unsigned long, cl_flavor)
  865. __field(unsigned long, new_flavor)
  866. __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen)
  867. ),
  868. TP_fast_assign(
  869. __entry->cl_boot = clp->cl_clientid.cl_boot;
  870. __entry->cl_id = clp->cl_clientid.cl_id;
  871. __entry->cl_flavor = clp->cl_cred.cr_flavor;
  872. __entry->new_flavor = rqstp->rq_cred.cr_flavor;
  873. __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote,
  874. rqstp->rq_xprt->xpt_remotelen);
  875. ),
  876. TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc",
  877. __entry->cl_boot, __entry->cl_id,
  878. show_nfsd_authflavor(__entry->cl_flavor),
  879. show_nfsd_authflavor(__entry->new_flavor),
  880. __get_sockaddr(addr)
  881. )
  882. )
  883. TRACE_EVENT(nfsd_clid_verf_mismatch,
  884. TP_PROTO(
  885. const struct nfs4_client *clp,
  886. const struct svc_rqst *rqstp,
  887. const nfs4_verifier *verf
  888. ),
  889. TP_ARGS(clp, rqstp, verf),
  890. TP_STRUCT__entry(
  891. __field(u32, cl_boot)
  892. __field(u32, cl_id)
  893. __array(unsigned char, cl_verifier, NFS4_VERIFIER_SIZE)
  894. __array(unsigned char, new_verifier, NFS4_VERIFIER_SIZE)
  895. __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen)
  896. ),
  897. TP_fast_assign(
  898. __entry->cl_boot = clp->cl_clientid.cl_boot;
  899. __entry->cl_id = clp->cl_clientid.cl_id;
  900. memcpy(__entry->cl_verifier, (void *)&clp->cl_verifier,
  901. NFS4_VERIFIER_SIZE);
  902. memcpy(__entry->new_verifier, (void *)verf,
  903. NFS4_VERIFIER_SIZE);
  904. __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote,
  905. rqstp->rq_xprt->xpt_remotelen);
  906. ),
  907. TP_printk("client %08x:%08x verf=0x%s, updated=0x%s from addr=%pISpc",
  908. __entry->cl_boot, __entry->cl_id,
  909. __print_hex_str(__entry->cl_verifier, NFS4_VERIFIER_SIZE),
  910. __print_hex_str(__entry->new_verifier, NFS4_VERIFIER_SIZE),
  911. __get_sockaddr(addr)
  912. )
  913. );
  914. DECLARE_EVENT_CLASS(nfsd_clid_class,
  915. TP_PROTO(const struct nfs4_client *clp),
  916. TP_ARGS(clp),
  917. TP_STRUCT__entry(
  918. __field(u32, cl_boot)
  919. __field(u32, cl_id)
  920. __array(unsigned char, addr, sizeof(struct sockaddr_in6))
  921. __field(unsigned long, flavor)
  922. __array(unsigned char, verifier, NFS4_VERIFIER_SIZE)
  923. __string_len(name, clp->cl_name.data, clp->cl_name.len)
  924. ),
  925. TP_fast_assign(
  926. __entry->cl_boot = clp->cl_clientid.cl_boot;
  927. __entry->cl_id = clp->cl_clientid.cl_id;
  928. memcpy(__entry->addr, &clp->cl_addr,
  929. sizeof(struct sockaddr_in6));
  930. __entry->flavor = clp->cl_cred.cr_flavor;
  931. memcpy(__entry->verifier, (void *)&clp->cl_verifier,
  932. NFS4_VERIFIER_SIZE);
  933. __assign_str(name);
  934. ),
  935. TP_printk("addr=%pISpc name='%s' verifier=0x%s flavor=%s client=%08x:%08x",
  936. __entry->addr, __get_str(name),
  937. __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE),
  938. show_nfsd_authflavor(__entry->flavor),
  939. __entry->cl_boot, __entry->cl_id)
  940. );
  941. #define DEFINE_CLID_EVENT(name) \
  942. DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \
  943. TP_PROTO(const struct nfs4_client *clp), \
  944. TP_ARGS(clp))
  945. DEFINE_CLID_EVENT(fresh);
  946. DEFINE_CLID_EVENT(confirmed_r);
  947. /*
  948. * from fs/nfsd/filecache.h
  949. */
  950. #define show_nf_flags(val) \
  951. __print_flags(val, "|", \
  952. { 1 << NFSD_FILE_HASHED, "HASHED" }, \
  953. { 1 << NFSD_FILE_PENDING, "PENDING" }, \
  954. { 1 << NFSD_FILE_REFERENCED, "REFERENCED" }, \
  955. { 1 << NFSD_FILE_GC, "GC" })
  956. DECLARE_EVENT_CLASS(nfsd_file_class,
  957. TP_PROTO(struct nfsd_file *nf),
  958. TP_ARGS(nf),
  959. TP_STRUCT__entry(
  960. __field(void *, nf_inode)
  961. __field(int, nf_ref)
  962. __field(unsigned long, nf_flags)
  963. __field(unsigned char, nf_may)
  964. __field(struct file *, nf_file)
  965. ),
  966. TP_fast_assign(
  967. __entry->nf_inode = nf->nf_inode;
  968. __entry->nf_ref = refcount_read(&nf->nf_ref);
  969. __entry->nf_flags = nf->nf_flags;
  970. __entry->nf_may = nf->nf_may;
  971. __entry->nf_file = nf->nf_file;
  972. ),
  973. TP_printk("inode=%p ref=%d flags=%s may=%s nf_file=%p",
  974. __entry->nf_inode,
  975. __entry->nf_ref,
  976. show_nf_flags(__entry->nf_flags),
  977. show_nfsd_may_flags(__entry->nf_may),
  978. __entry->nf_file)
  979. )
  980. #define DEFINE_NFSD_FILE_EVENT(name) \
  981. DEFINE_EVENT(nfsd_file_class, name, \
  982. TP_PROTO(struct nfsd_file *nf), \
  983. TP_ARGS(nf))
  984. DEFINE_NFSD_FILE_EVENT(nfsd_file_free);
  985. DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash);
  986. DEFINE_NFSD_FILE_EVENT(nfsd_file_put);
  987. DEFINE_NFSD_FILE_EVENT(nfsd_file_closing);
  988. DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_queue);
  989. TRACE_EVENT(nfsd_file_alloc,
  990. TP_PROTO(
  991. const struct nfsd_file *nf
  992. ),
  993. TP_ARGS(nf),
  994. TP_STRUCT__entry(
  995. __field(const void *, nf_inode)
  996. __field(unsigned long, nf_flags)
  997. __field(unsigned long, nf_may)
  998. __field(unsigned int, nf_ref)
  999. ),
  1000. TP_fast_assign(
  1001. __entry->nf_inode = nf->nf_inode;
  1002. __entry->nf_flags = nf->nf_flags;
  1003. __entry->nf_ref = refcount_read(&nf->nf_ref);
  1004. __entry->nf_may = nf->nf_may;
  1005. ),
  1006. TP_printk("inode=%p ref=%u flags=%s may=%s",
  1007. __entry->nf_inode, __entry->nf_ref,
  1008. show_nf_flags(__entry->nf_flags),
  1009. show_nfsd_may_flags(__entry->nf_may)
  1010. )
  1011. );
  1012. TRACE_EVENT(nfsd_file_acquire,
  1013. TP_PROTO(
  1014. const struct svc_rqst *rqstp,
  1015. const struct inode *inode,
  1016. unsigned int may_flags,
  1017. const struct nfsd_file *nf,
  1018. __be32 status
  1019. ),
  1020. TP_ARGS(rqstp, inode, may_flags, nf, status),
  1021. TP_STRUCT__entry(
  1022. __field(u32, xid)
  1023. __field(const void *, inode)
  1024. __field(unsigned long, may_flags)
  1025. __field(unsigned int, nf_ref)
  1026. __field(unsigned long, nf_flags)
  1027. __field(unsigned long, nf_may)
  1028. __field(const void *, nf_file)
  1029. __field(u32, status)
  1030. ),
  1031. TP_fast_assign(
  1032. __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
  1033. __entry->inode = inode;
  1034. __entry->may_flags = may_flags;
  1035. __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0;
  1036. __entry->nf_flags = nf ? nf->nf_flags : 0;
  1037. __entry->nf_may = nf ? nf->nf_may : 0;
  1038. __entry->nf_file = nf ? nf->nf_file : NULL;
  1039. __entry->status = be32_to_cpu(status);
  1040. ),
  1041. TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u",
  1042. __entry->xid, __entry->inode,
  1043. show_nfsd_may_flags(__entry->may_flags),
  1044. __entry->nf_ref, show_nf_flags(__entry->nf_flags),
  1045. show_nfsd_may_flags(__entry->nf_may),
  1046. __entry->nf_file, __entry->status
  1047. )
  1048. );
  1049. TRACE_EVENT(nfsd_file_insert_err,
  1050. TP_PROTO(
  1051. const struct svc_rqst *rqstp,
  1052. const struct inode *inode,
  1053. unsigned int may_flags,
  1054. long error
  1055. ),
  1056. TP_ARGS(rqstp, inode, may_flags, error),
  1057. TP_STRUCT__entry(
  1058. __field(u32, xid)
  1059. __field(const void *, inode)
  1060. __field(unsigned long, may_flags)
  1061. __field(long, error)
  1062. ),
  1063. TP_fast_assign(
  1064. __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
  1065. __entry->inode = inode;
  1066. __entry->may_flags = may_flags;
  1067. __entry->error = error;
  1068. ),
  1069. TP_printk("xid=0x%x inode=%p may_flags=%s error=%ld",
  1070. __entry->xid, __entry->inode,
  1071. show_nfsd_may_flags(__entry->may_flags),
  1072. __entry->error
  1073. )
  1074. );
  1075. TRACE_EVENT(nfsd_file_cons_err,
  1076. TP_PROTO(
  1077. const struct svc_rqst *rqstp,
  1078. const struct inode *inode,
  1079. unsigned int may_flags,
  1080. const struct nfsd_file *nf
  1081. ),
  1082. TP_ARGS(rqstp, inode, may_flags, nf),
  1083. TP_STRUCT__entry(
  1084. __field(u32, xid)
  1085. __field(const void *, inode)
  1086. __field(unsigned long, may_flags)
  1087. __field(unsigned int, nf_ref)
  1088. __field(unsigned long, nf_flags)
  1089. __field(unsigned long, nf_may)
  1090. __field(const void *, nf_file)
  1091. ),
  1092. TP_fast_assign(
  1093. __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
  1094. __entry->inode = inode;
  1095. __entry->may_flags = may_flags;
  1096. __entry->nf_ref = refcount_read(&nf->nf_ref);
  1097. __entry->nf_flags = nf->nf_flags;
  1098. __entry->nf_may = nf->nf_may;
  1099. __entry->nf_file = nf->nf_file;
  1100. ),
  1101. TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p",
  1102. __entry->xid, __entry->inode,
  1103. show_nfsd_may_flags(__entry->may_flags), __entry->nf_ref,
  1104. show_nf_flags(__entry->nf_flags),
  1105. show_nfsd_may_flags(__entry->nf_may), __entry->nf_file
  1106. )
  1107. );
  1108. DECLARE_EVENT_CLASS(nfsd_file_open_class,
  1109. TP_PROTO(const struct nfsd_file *nf, __be32 status),
  1110. TP_ARGS(nf, status),
  1111. TP_STRUCT__entry(
  1112. __field(void *, nf_inode) /* cannot be dereferenced */
  1113. __field(int, nf_ref)
  1114. __field(unsigned long, nf_flags)
  1115. __field(unsigned long, nf_may)
  1116. __field(void *, nf_file) /* cannot be dereferenced */
  1117. ),
  1118. TP_fast_assign(
  1119. __entry->nf_inode = nf->nf_inode;
  1120. __entry->nf_ref = refcount_read(&nf->nf_ref);
  1121. __entry->nf_flags = nf->nf_flags;
  1122. __entry->nf_may = nf->nf_may;
  1123. __entry->nf_file = nf->nf_file;
  1124. ),
  1125. TP_printk("inode=%p ref=%d flags=%s may=%s file=%p",
  1126. __entry->nf_inode,
  1127. __entry->nf_ref,
  1128. show_nf_flags(__entry->nf_flags),
  1129. show_nfsd_may_flags(__entry->nf_may),
  1130. __entry->nf_file)
  1131. )
  1132. #define DEFINE_NFSD_FILE_OPEN_EVENT(name) \
  1133. DEFINE_EVENT(nfsd_file_open_class, name, \
  1134. TP_PROTO( \
  1135. const struct nfsd_file *nf, \
  1136. __be32 status \
  1137. ), \
  1138. TP_ARGS(nf, status))
  1139. DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_open);
  1140. DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_opened);
  1141. TRACE_EVENT(nfsd_file_is_cached,
  1142. TP_PROTO(
  1143. const struct inode *inode,
  1144. int found
  1145. ),
  1146. TP_ARGS(inode, found),
  1147. TP_STRUCT__entry(
  1148. __field(const struct inode *, inode)
  1149. __field(int, found)
  1150. ),
  1151. TP_fast_assign(
  1152. __entry->inode = inode;
  1153. __entry->found = found;
  1154. ),
  1155. TP_printk("inode=%p is %scached",
  1156. __entry->inode,
  1157. __entry->found ? "" : "not "
  1158. )
  1159. );
  1160. TRACE_EVENT(nfsd_file_fsnotify_handle_event,
  1161. TP_PROTO(struct inode *inode, u32 mask),
  1162. TP_ARGS(inode, mask),
  1163. TP_STRUCT__entry(
  1164. __field(struct inode *, inode)
  1165. __field(unsigned int, nlink)
  1166. __field(umode_t, mode)
  1167. __field(u32, mask)
  1168. ),
  1169. TP_fast_assign(
  1170. __entry->inode = inode;
  1171. __entry->nlink = inode->i_nlink;
  1172. __entry->mode = inode->i_mode;
  1173. __entry->mask = mask;
  1174. ),
  1175. TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry->inode,
  1176. __entry->nlink, __entry->mode, __entry->mask)
  1177. );
  1178. DECLARE_EVENT_CLASS(nfsd_file_gc_class,
  1179. TP_PROTO(
  1180. const struct nfsd_file *nf
  1181. ),
  1182. TP_ARGS(nf),
  1183. TP_STRUCT__entry(
  1184. __field(void *, nf_inode)
  1185. __field(void *, nf_file)
  1186. __field(int, nf_ref)
  1187. __field(unsigned long, nf_flags)
  1188. ),
  1189. TP_fast_assign(
  1190. __entry->nf_inode = nf->nf_inode;
  1191. __entry->nf_file = nf->nf_file;
  1192. __entry->nf_ref = refcount_read(&nf->nf_ref);
  1193. __entry->nf_flags = nf->nf_flags;
  1194. ),
  1195. TP_printk("inode=%p ref=%d nf_flags=%s nf_file=%p",
  1196. __entry->nf_inode, __entry->nf_ref,
  1197. show_nf_flags(__entry->nf_flags),
  1198. __entry->nf_file
  1199. )
  1200. );
  1201. #define DEFINE_NFSD_FILE_GC_EVENT(name) \
  1202. DEFINE_EVENT(nfsd_file_gc_class, name, \
  1203. TP_PROTO( \
  1204. const struct nfsd_file *nf \
  1205. ), \
  1206. TP_ARGS(nf))
  1207. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add);
  1208. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add_disposed);
  1209. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del);
  1210. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del_disposed);
  1211. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_in_use);
  1212. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_writeback);
  1213. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_referenced);
  1214. DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_disposed);
  1215. DECLARE_EVENT_CLASS(nfsd_file_lruwalk_class,
  1216. TP_PROTO(
  1217. unsigned long removed,
  1218. unsigned long remaining
  1219. ),
  1220. TP_ARGS(removed, remaining),
  1221. TP_STRUCT__entry(
  1222. __field(unsigned long, removed)
  1223. __field(unsigned long, remaining)
  1224. ),
  1225. TP_fast_assign(
  1226. __entry->removed = removed;
  1227. __entry->remaining = remaining;
  1228. ),
  1229. TP_printk("%lu entries removed, %lu remaining",
  1230. __entry->removed, __entry->remaining)
  1231. );
  1232. #define DEFINE_NFSD_FILE_LRUWALK_EVENT(name) \
  1233. DEFINE_EVENT(nfsd_file_lruwalk_class, name, \
  1234. TP_PROTO( \
  1235. unsigned long removed, \
  1236. unsigned long remaining \
  1237. ), \
  1238. TP_ARGS(removed, remaining))
  1239. DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_gc_removed);
  1240. DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_shrinker_removed);
  1241. TRACE_EVENT(nfsd_file_close,
  1242. TP_PROTO(
  1243. const struct inode *inode
  1244. ),
  1245. TP_ARGS(inode),
  1246. TP_STRUCT__entry(
  1247. __field(const void *, inode)
  1248. ),
  1249. TP_fast_assign(
  1250. __entry->inode = inode;
  1251. ),
  1252. TP_printk("inode=%p",
  1253. __entry->inode
  1254. )
  1255. );
  1256. #include "cache.h"
  1257. TRACE_DEFINE_ENUM(RC_DROPIT);
  1258. TRACE_DEFINE_ENUM(RC_REPLY);
  1259. TRACE_DEFINE_ENUM(RC_DOIT);
  1260. #define show_drc_retval(x) \
  1261. __print_symbolic(x, \
  1262. { RC_DROPIT, "DROPIT" }, \
  1263. { RC_REPLY, "REPLY" }, \
  1264. { RC_DOIT, "DOIT" })
  1265. TRACE_EVENT(nfsd_drc_found,
  1266. TP_PROTO(
  1267. const struct nfsd_net *nn,
  1268. const struct svc_rqst *rqstp,
  1269. int result
  1270. ),
  1271. TP_ARGS(nn, rqstp, result),
  1272. TP_STRUCT__entry(
  1273. __field(unsigned long long, boot_time)
  1274. __field(unsigned long, result)
  1275. __field(u32, xid)
  1276. ),
  1277. TP_fast_assign(
  1278. __entry->boot_time = nn->boot_time;
  1279. __entry->result = result;
  1280. __entry->xid = be32_to_cpu(rqstp->rq_xid);
  1281. ),
  1282. TP_printk("boot_time=%16llx xid=0x%08x result=%s",
  1283. __entry->boot_time, __entry->xid,
  1284. show_drc_retval(__entry->result))
  1285. );
  1286. TRACE_EVENT(nfsd_drc_mismatch,
  1287. TP_PROTO(
  1288. const struct nfsd_net *nn,
  1289. const struct nfsd_cacherep *key,
  1290. const struct nfsd_cacherep *rp
  1291. ),
  1292. TP_ARGS(nn, key, rp),
  1293. TP_STRUCT__entry(
  1294. __field(unsigned long long, boot_time)
  1295. __field(u32, xid)
  1296. __field(u32, cached)
  1297. __field(u32, ingress)
  1298. ),
  1299. TP_fast_assign(
  1300. __entry->boot_time = nn->boot_time;
  1301. __entry->xid = be32_to_cpu(key->c_key.k_xid);
  1302. __entry->cached = (__force u32)key->c_key.k_csum;
  1303. __entry->ingress = (__force u32)rp->c_key.k_csum;
  1304. ),
  1305. TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x",
  1306. __entry->boot_time, __entry->xid, __entry->cached,
  1307. __entry->ingress)
  1308. );
  1309. TRACE_EVENT(nfsd_cb_args,
  1310. TP_PROTO(
  1311. const struct nfs4_client *clp,
  1312. const struct nfs4_cb_conn *conn
  1313. ),
  1314. TP_ARGS(clp, conn),
  1315. TP_STRUCT__entry(
  1316. __field(u32, cl_boot)
  1317. __field(u32, cl_id)
  1318. __field(u32, prog)
  1319. __field(u32, ident)
  1320. __sockaddr(addr, conn->cb_addrlen)
  1321. ),
  1322. TP_fast_assign(
  1323. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1324. __entry->cl_id = clp->cl_clientid.cl_id;
  1325. __entry->prog = conn->cb_prog;
  1326. __entry->ident = conn->cb_ident;
  1327. __assign_sockaddr(addr, &conn->cb_addr, conn->cb_addrlen);
  1328. ),
  1329. TP_printk("addr=%pISpc client %08x:%08x prog=%u ident=%u",
  1330. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1331. __entry->prog, __entry->ident)
  1332. );
  1333. TRACE_EVENT(nfsd_cb_nodelegs,
  1334. TP_PROTO(const struct nfs4_client *clp),
  1335. TP_ARGS(clp),
  1336. TP_STRUCT__entry(
  1337. __field(u32, cl_boot)
  1338. __field(u32, cl_id)
  1339. ),
  1340. TP_fast_assign(
  1341. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1342. __entry->cl_id = clp->cl_clientid.cl_id;
  1343. ),
  1344. TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id)
  1345. )
  1346. #define show_cb_state(val) \
  1347. __print_symbolic(val, \
  1348. { NFSD4_CB_UP, "UP" }, \
  1349. { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \
  1350. { NFSD4_CB_DOWN, "DOWN" }, \
  1351. { NFSD4_CB_FAULT, "FAULT"})
  1352. DECLARE_EVENT_CLASS(nfsd_cb_class,
  1353. TP_PROTO(const struct nfs4_client *clp),
  1354. TP_ARGS(clp),
  1355. TP_STRUCT__entry(
  1356. __field(unsigned long, state)
  1357. __field(u32, cl_boot)
  1358. __field(u32, cl_id)
  1359. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  1360. ),
  1361. TP_fast_assign(
  1362. __entry->state = clp->cl_cb_state;
  1363. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1364. __entry->cl_id = clp->cl_clientid.cl_id;
  1365. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1366. clp->cl_cb_conn.cb_addrlen)
  1367. ),
  1368. TP_printk("addr=%pISpc client %08x:%08x state=%s",
  1369. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1370. show_cb_state(__entry->state))
  1371. );
  1372. #define DEFINE_NFSD_CB_EVENT(name) \
  1373. DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \
  1374. TP_PROTO(const struct nfs4_client *clp), \
  1375. TP_ARGS(clp))
  1376. DEFINE_NFSD_CB_EVENT(start);
  1377. DEFINE_NFSD_CB_EVENT(new_state);
  1378. DEFINE_NFSD_CB_EVENT(probe);
  1379. DEFINE_NFSD_CB_EVENT(lost);
  1380. DEFINE_NFSD_CB_EVENT(shutdown);
  1381. DEFINE_NFSD_CB_EVENT(rpc_prepare);
  1382. DEFINE_NFSD_CB_EVENT(rpc_done);
  1383. DEFINE_NFSD_CB_EVENT(rpc_release);
  1384. TRACE_DEFINE_ENUM(RPC_AUTH_NULL);
  1385. TRACE_DEFINE_ENUM(RPC_AUTH_UNIX);
  1386. TRACE_DEFINE_ENUM(RPC_AUTH_GSS);
  1387. TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
  1388. TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
  1389. TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P);
  1390. #define show_nfsd_authflavor(val) \
  1391. __print_symbolic(val, \
  1392. { RPC_AUTH_NULL, "none" }, \
  1393. { RPC_AUTH_UNIX, "sys" }, \
  1394. { RPC_AUTH_GSS, "gss" }, \
  1395. { RPC_AUTH_GSS_KRB5, "krb5" }, \
  1396. { RPC_AUTH_GSS_KRB5I, "krb5i" }, \
  1397. { RPC_AUTH_GSS_KRB5P, "krb5p" })
  1398. TRACE_EVENT(nfsd_cb_setup,
  1399. TP_PROTO(const struct nfs4_client *clp,
  1400. const char *netid,
  1401. rpc_authflavor_t authflavor
  1402. ),
  1403. TP_ARGS(clp, netid, authflavor),
  1404. TP_STRUCT__entry(
  1405. __field(u32, cl_boot)
  1406. __field(u32, cl_id)
  1407. __field(unsigned long, authflavor)
  1408. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  1409. __string(netid, netid)
  1410. ),
  1411. TP_fast_assign(
  1412. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1413. __entry->cl_id = clp->cl_clientid.cl_id;
  1414. __assign_str(netid);
  1415. __entry->authflavor = authflavor;
  1416. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1417. clp->cl_cb_conn.cb_addrlen)
  1418. ),
  1419. TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s",
  1420. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1421. __get_str(netid), show_nfsd_authflavor(__entry->authflavor))
  1422. );
  1423. TRACE_EVENT(nfsd_cb_setup_err,
  1424. TP_PROTO(
  1425. const struct nfs4_client *clp,
  1426. long error
  1427. ),
  1428. TP_ARGS(clp, error),
  1429. TP_STRUCT__entry(
  1430. __field(long, error)
  1431. __field(u32, cl_boot)
  1432. __field(u32, cl_id)
  1433. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  1434. ),
  1435. TP_fast_assign(
  1436. __entry->error = error;
  1437. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1438. __entry->cl_id = clp->cl_clientid.cl_id;
  1439. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1440. clp->cl_cb_conn.cb_addrlen)
  1441. ),
  1442. TP_printk("addr=%pISpc client %08x:%08x error=%ld",
  1443. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1444. __entry->error)
  1445. );
  1446. /* Not a real opcode, but there is no 0 operation. */
  1447. #define _CB_NULL 0
  1448. #define show_nfsd_cb_opcode(val) \
  1449. __print_symbolic(val, \
  1450. { _CB_NULL, "CB_NULL" }, \
  1451. { OP_CB_GETATTR, "CB_GETATTR" }, \
  1452. { OP_CB_RECALL, "CB_RECALL" }, \
  1453. { OP_CB_LAYOUTRECALL, "CB_LAYOUTRECALL" }, \
  1454. { OP_CB_RECALL_ANY, "CB_RECALL_ANY" }, \
  1455. { OP_CB_NOTIFY_LOCK, "CB_NOTIFY_LOCK" }, \
  1456. { OP_CB_OFFLOAD, "CB_OFFLOAD" })
  1457. DECLARE_EVENT_CLASS(nfsd_cb_lifetime_class,
  1458. TP_PROTO(
  1459. const struct nfs4_client *clp,
  1460. const struct nfsd4_callback *cb
  1461. ),
  1462. TP_ARGS(clp, cb),
  1463. TP_STRUCT__entry(
  1464. __field(u32, cl_boot)
  1465. __field(u32, cl_id)
  1466. __field(const void *, cb)
  1467. __field(unsigned long, opcode)
  1468. __field(bool, need_restart)
  1469. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  1470. ),
  1471. TP_fast_assign(
  1472. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1473. __entry->cl_id = clp->cl_clientid.cl_id;
  1474. __entry->cb = cb;
  1475. __entry->opcode = cb->cb_ops ? cb->cb_ops->opcode : _CB_NULL;
  1476. __entry->need_restart = cb->cb_need_restart;
  1477. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1478. clp->cl_cb_conn.cb_addrlen)
  1479. ),
  1480. TP_printk("addr=%pISpc client %08x:%08x cb=%p%s opcode=%s",
  1481. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, __entry->cb,
  1482. __entry->need_restart ? " (need restart)" : " (first try)",
  1483. show_nfsd_cb_opcode(__entry->opcode)
  1484. )
  1485. );
  1486. #define DEFINE_NFSD_CB_LIFETIME_EVENT(name) \
  1487. DEFINE_EVENT(nfsd_cb_lifetime_class, nfsd_cb_##name, \
  1488. TP_PROTO( \
  1489. const struct nfs4_client *clp, \
  1490. const struct nfsd4_callback *cb \
  1491. ), \
  1492. TP_ARGS(clp, cb))
  1493. DEFINE_NFSD_CB_LIFETIME_EVENT(queue);
  1494. DEFINE_NFSD_CB_LIFETIME_EVENT(destroy);
  1495. DEFINE_NFSD_CB_LIFETIME_EVENT(restart);
  1496. DEFINE_NFSD_CB_LIFETIME_EVENT(bc_update);
  1497. DEFINE_NFSD_CB_LIFETIME_EVENT(bc_shutdown);
  1498. TRACE_EVENT(nfsd_cb_seq_status,
  1499. TP_PROTO(
  1500. const struct rpc_task *task,
  1501. const struct nfsd4_callback *cb
  1502. ),
  1503. TP_ARGS(task, cb),
  1504. TP_STRUCT__entry(
  1505. __field(unsigned int, task_id)
  1506. __field(unsigned int, client_id)
  1507. __field(u32, cl_boot)
  1508. __field(u32, cl_id)
  1509. __field(u32, seqno)
  1510. __field(u32, reserved)
  1511. __field(int, tk_status)
  1512. __field(int, seq_status)
  1513. ),
  1514. TP_fast_assign(
  1515. const struct nfs4_client *clp = cb->cb_clp;
  1516. const struct nfsd4_session *session = clp->cl_cb_session;
  1517. const struct nfsd4_sessionid *sid =
  1518. (struct nfsd4_sessionid *)&session->se_sessionid;
  1519. __entry->task_id = task->tk_pid;
  1520. __entry->client_id = task->tk_client ?
  1521. task->tk_client->cl_clid : -1;
  1522. __entry->cl_boot = sid->clientid.cl_boot;
  1523. __entry->cl_id = sid->clientid.cl_id;
  1524. __entry->seqno = sid->sequence;
  1525. __entry->reserved = sid->reserved;
  1526. __entry->tk_status = task->tk_status;
  1527. __entry->seq_status = cb->cb_seq_status;
  1528. ),
  1529. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  1530. " sessionid=%08x:%08x:%08x:%08x tk_status=%d seq_status=%d",
  1531. __entry->task_id, __entry->client_id,
  1532. __entry->cl_boot, __entry->cl_id,
  1533. __entry->seqno, __entry->reserved,
  1534. __entry->tk_status, __entry->seq_status
  1535. )
  1536. );
  1537. TRACE_EVENT(nfsd_cb_free_slot,
  1538. TP_PROTO(
  1539. const struct rpc_task *task,
  1540. const struct nfsd4_callback *cb
  1541. ),
  1542. TP_ARGS(task, cb),
  1543. TP_STRUCT__entry(
  1544. __field(unsigned int, task_id)
  1545. __field(unsigned int, client_id)
  1546. __field(u32, cl_boot)
  1547. __field(u32, cl_id)
  1548. __field(u32, seqno)
  1549. __field(u32, reserved)
  1550. __field(u32, slot_seqno)
  1551. ),
  1552. TP_fast_assign(
  1553. const struct nfs4_client *clp = cb->cb_clp;
  1554. const struct nfsd4_session *session = clp->cl_cb_session;
  1555. const struct nfsd4_sessionid *sid =
  1556. (struct nfsd4_sessionid *)&session->se_sessionid;
  1557. __entry->task_id = task->tk_pid;
  1558. __entry->client_id = task->tk_client ?
  1559. task->tk_client->cl_clid : -1;
  1560. __entry->cl_boot = sid->clientid.cl_boot;
  1561. __entry->cl_id = sid->clientid.cl_id;
  1562. __entry->seqno = sid->sequence;
  1563. __entry->reserved = sid->reserved;
  1564. __entry->slot_seqno = session->se_cb_seq_nr;
  1565. ),
  1566. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  1567. " sessionid=%08x:%08x:%08x:%08x new slot seqno=%u",
  1568. __entry->task_id, __entry->client_id,
  1569. __entry->cl_boot, __entry->cl_id,
  1570. __entry->seqno, __entry->reserved,
  1571. __entry->slot_seqno
  1572. )
  1573. );
  1574. TRACE_EVENT_CONDITION(nfsd_cb_recall,
  1575. TP_PROTO(
  1576. const struct nfs4_stid *stid
  1577. ),
  1578. TP_ARGS(stid),
  1579. TP_CONDITION(stid->sc_client),
  1580. TP_STRUCT__entry(
  1581. __field(u32, cl_boot)
  1582. __field(u32, cl_id)
  1583. __field(u32, si_id)
  1584. __field(u32, si_generation)
  1585. __sockaddr(addr, stid->sc_client->cl_cb_conn.cb_addrlen)
  1586. ),
  1587. TP_fast_assign(
  1588. const stateid_t *stp = &stid->sc_stateid;
  1589. const struct nfs4_client *clp = stid->sc_client;
  1590. __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
  1591. __entry->cl_id = stp->si_opaque.so_clid.cl_id;
  1592. __entry->si_id = stp->si_opaque.so_id;
  1593. __entry->si_generation = stp->si_generation;
  1594. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1595. clp->cl_cb_conn.cb_addrlen)
  1596. ),
  1597. TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x",
  1598. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1599. __entry->si_id, __entry->si_generation)
  1600. );
  1601. TRACE_EVENT(nfsd_cb_notify_lock,
  1602. TP_PROTO(
  1603. const struct nfs4_lockowner *lo,
  1604. const struct nfsd4_blocked_lock *nbl
  1605. ),
  1606. TP_ARGS(lo, nbl),
  1607. TP_STRUCT__entry(
  1608. __field(u32, cl_boot)
  1609. __field(u32, cl_id)
  1610. __field(u32, fh_hash)
  1611. __sockaddr(addr, lo->lo_owner.so_client->cl_cb_conn.cb_addrlen)
  1612. ),
  1613. TP_fast_assign(
  1614. const struct nfs4_client *clp = lo->lo_owner.so_client;
  1615. __entry->cl_boot = clp->cl_clientid.cl_boot;
  1616. __entry->cl_id = clp->cl_clientid.cl_id;
  1617. __entry->fh_hash = knfsd_fh_hash(&nbl->nbl_fh);
  1618. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1619. clp->cl_cb_conn.cb_addrlen)
  1620. ),
  1621. TP_printk("addr=%pISpc client %08x:%08x fh_hash=0x%08x",
  1622. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1623. __entry->fh_hash)
  1624. );
  1625. TRACE_EVENT(nfsd_cb_offload,
  1626. TP_PROTO(
  1627. const struct nfs4_client *clp,
  1628. const stateid_t *stp,
  1629. const struct knfsd_fh *fh,
  1630. u64 count,
  1631. __be32 status
  1632. ),
  1633. TP_ARGS(clp, stp, fh, count, status),
  1634. TP_STRUCT__entry(
  1635. __field(u32, cl_boot)
  1636. __field(u32, cl_id)
  1637. __field(u32, si_id)
  1638. __field(u32, si_generation)
  1639. __field(u32, fh_hash)
  1640. __field(int, status)
  1641. __field(u64, count)
  1642. __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
  1643. ),
  1644. TP_fast_assign(
  1645. __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
  1646. __entry->cl_id = stp->si_opaque.so_clid.cl_id;
  1647. __entry->si_id = stp->si_opaque.so_id;
  1648. __entry->si_generation = stp->si_generation;
  1649. __entry->fh_hash = knfsd_fh_hash(fh);
  1650. __entry->status = be32_to_cpu(status);
  1651. __entry->count = count;
  1652. __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
  1653. clp->cl_cb_conn.cb_addrlen)
  1654. ),
  1655. TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x fh_hash=0x%08x count=%llu status=%d",
  1656. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1657. __entry->si_id, __entry->si_generation,
  1658. __entry->fh_hash, __entry->count, __entry->status)
  1659. );
  1660. TRACE_EVENT(nfsd_cb_recall_any,
  1661. TP_PROTO(
  1662. const struct nfsd4_cb_recall_any *ra
  1663. ),
  1664. TP_ARGS(ra),
  1665. TP_STRUCT__entry(
  1666. __field(u32, cl_boot)
  1667. __field(u32, cl_id)
  1668. __field(u32, keep)
  1669. __field(unsigned long, bmval0)
  1670. __sockaddr(addr, ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen)
  1671. ),
  1672. TP_fast_assign(
  1673. __entry->cl_boot = ra->ra_cb.cb_clp->cl_clientid.cl_boot;
  1674. __entry->cl_id = ra->ra_cb.cb_clp->cl_clientid.cl_id;
  1675. __entry->keep = ra->ra_keep;
  1676. __entry->bmval0 = ra->ra_bmval[0];
  1677. __assign_sockaddr(addr, &ra->ra_cb.cb_clp->cl_addr,
  1678. ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen);
  1679. ),
  1680. TP_printk("addr=%pISpc client %08x:%08x keep=%u bmval0=%s",
  1681. __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
  1682. __entry->keep, show_rca_mask(__entry->bmval0)
  1683. )
  1684. );
  1685. DECLARE_EVENT_CLASS(nfsd_cb_done_class,
  1686. TP_PROTO(
  1687. const stateid_t *stp,
  1688. const struct rpc_task *task
  1689. ),
  1690. TP_ARGS(stp, task),
  1691. TP_STRUCT__entry(
  1692. __field(u32, cl_boot)
  1693. __field(u32, cl_id)
  1694. __field(u32, si_id)
  1695. __field(u32, si_generation)
  1696. __field(int, status)
  1697. ),
  1698. TP_fast_assign(
  1699. __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
  1700. __entry->cl_id = stp->si_opaque.so_clid.cl_id;
  1701. __entry->si_id = stp->si_opaque.so_id;
  1702. __entry->si_generation = stp->si_generation;
  1703. __entry->status = task->tk_status;
  1704. ),
  1705. TP_printk("client %08x:%08x stateid %08x:%08x status=%d",
  1706. __entry->cl_boot, __entry->cl_id, __entry->si_id,
  1707. __entry->si_generation, __entry->status
  1708. )
  1709. );
  1710. #define DEFINE_NFSD_CB_DONE_EVENT(name) \
  1711. DEFINE_EVENT(nfsd_cb_done_class, name, \
  1712. TP_PROTO( \
  1713. const stateid_t *stp, \
  1714. const struct rpc_task *task \
  1715. ), \
  1716. TP_ARGS(stp, task))
  1717. DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_recall_done);
  1718. DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_notify_lock_done);
  1719. DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_layout_done);
  1720. DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_offload_done);
  1721. DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_getattr_done);
  1722. TRACE_EVENT(nfsd_cb_recall_any_done,
  1723. TP_PROTO(
  1724. const struct nfsd4_callback *cb,
  1725. const struct rpc_task *task
  1726. ),
  1727. TP_ARGS(cb, task),
  1728. TP_STRUCT__entry(
  1729. __field(u32, cl_boot)
  1730. __field(u32, cl_id)
  1731. __field(int, status)
  1732. ),
  1733. TP_fast_assign(
  1734. __entry->status = task->tk_status;
  1735. __entry->cl_boot = cb->cb_clp->cl_clientid.cl_boot;
  1736. __entry->cl_id = cb->cb_clp->cl_clientid.cl_id;
  1737. ),
  1738. TP_printk("client %08x:%08x status=%d",
  1739. __entry->cl_boot, __entry->cl_id, __entry->status
  1740. )
  1741. );
  1742. TRACE_EVENT(nfsd_ctl_unlock_ip,
  1743. TP_PROTO(
  1744. const struct net *net,
  1745. const char *address
  1746. ),
  1747. TP_ARGS(net, address),
  1748. TP_STRUCT__entry(
  1749. __field(unsigned int, netns_ino)
  1750. __string(address, address)
  1751. ),
  1752. TP_fast_assign(
  1753. __entry->netns_ino = net->ns.inum;
  1754. __assign_str(address);
  1755. ),
  1756. TP_printk("address=%s",
  1757. __get_str(address)
  1758. )
  1759. );
  1760. TRACE_EVENT(nfsd_ctl_unlock_fs,
  1761. TP_PROTO(
  1762. const struct net *net,
  1763. const char *path
  1764. ),
  1765. TP_ARGS(net, path),
  1766. TP_STRUCT__entry(
  1767. __field(unsigned int, netns_ino)
  1768. __string(path, path)
  1769. ),
  1770. TP_fast_assign(
  1771. __entry->netns_ino = net->ns.inum;
  1772. __assign_str(path);
  1773. ),
  1774. TP_printk("path=%s",
  1775. __get_str(path)
  1776. )
  1777. );
  1778. TRACE_EVENT(nfsd_ctl_filehandle,
  1779. TP_PROTO(
  1780. const struct net *net,
  1781. const char *domain,
  1782. const char *path,
  1783. int maxsize
  1784. ),
  1785. TP_ARGS(net, domain, path, maxsize),
  1786. TP_STRUCT__entry(
  1787. __field(unsigned int, netns_ino)
  1788. __field(int, maxsize)
  1789. __string(domain, domain)
  1790. __string(path, path)
  1791. ),
  1792. TP_fast_assign(
  1793. __entry->netns_ino = net->ns.inum;
  1794. __entry->maxsize = maxsize;
  1795. __assign_str(domain);
  1796. __assign_str(path);
  1797. ),
  1798. TP_printk("domain=%s path=%s maxsize=%d",
  1799. __get_str(domain), __get_str(path), __entry->maxsize
  1800. )
  1801. );
  1802. TRACE_EVENT(nfsd_ctl_threads,
  1803. TP_PROTO(
  1804. const struct net *net,
  1805. int newthreads
  1806. ),
  1807. TP_ARGS(net, newthreads),
  1808. TP_STRUCT__entry(
  1809. __field(unsigned int, netns_ino)
  1810. __field(int, newthreads)
  1811. ),
  1812. TP_fast_assign(
  1813. __entry->netns_ino = net->ns.inum;
  1814. __entry->newthreads = newthreads;
  1815. ),
  1816. TP_printk("newthreads=%d",
  1817. __entry->newthreads
  1818. )
  1819. );
  1820. TRACE_EVENT(nfsd_ctl_pool_threads,
  1821. TP_PROTO(
  1822. const struct net *net,
  1823. int pool,
  1824. int nrthreads
  1825. ),
  1826. TP_ARGS(net, pool, nrthreads),
  1827. TP_STRUCT__entry(
  1828. __field(unsigned int, netns_ino)
  1829. __field(int, pool)
  1830. __field(int, nrthreads)
  1831. ),
  1832. TP_fast_assign(
  1833. __entry->netns_ino = net->ns.inum;
  1834. __entry->pool = pool;
  1835. __entry->nrthreads = nrthreads;
  1836. ),
  1837. TP_printk("pool=%d nrthreads=%d",
  1838. __entry->pool, __entry->nrthreads
  1839. )
  1840. );
  1841. TRACE_EVENT(nfsd_ctl_version,
  1842. TP_PROTO(
  1843. const struct net *net,
  1844. const char *mesg
  1845. ),
  1846. TP_ARGS(net, mesg),
  1847. TP_STRUCT__entry(
  1848. __field(unsigned int, netns_ino)
  1849. __string(mesg, mesg)
  1850. ),
  1851. TP_fast_assign(
  1852. __entry->netns_ino = net->ns.inum;
  1853. __assign_str(mesg);
  1854. ),
  1855. TP_printk("%s",
  1856. __get_str(mesg)
  1857. )
  1858. );
  1859. TRACE_EVENT(nfsd_ctl_ports_addfd,
  1860. TP_PROTO(
  1861. const struct net *net,
  1862. int fd
  1863. ),
  1864. TP_ARGS(net, fd),
  1865. TP_STRUCT__entry(
  1866. __field(unsigned int, netns_ino)
  1867. __field(int, fd)
  1868. ),
  1869. TP_fast_assign(
  1870. __entry->netns_ino = net->ns.inum;
  1871. __entry->fd = fd;
  1872. ),
  1873. TP_printk("fd=%d",
  1874. __entry->fd
  1875. )
  1876. );
  1877. TRACE_EVENT(nfsd_ctl_ports_addxprt,
  1878. TP_PROTO(
  1879. const struct net *net,
  1880. const char *transport,
  1881. int port
  1882. ),
  1883. TP_ARGS(net, transport, port),
  1884. TP_STRUCT__entry(
  1885. __field(unsigned int, netns_ino)
  1886. __field(int, port)
  1887. __string(transport, transport)
  1888. ),
  1889. TP_fast_assign(
  1890. __entry->netns_ino = net->ns.inum;
  1891. __entry->port = port;
  1892. __assign_str(transport);
  1893. ),
  1894. TP_printk("transport=%s port=%d",
  1895. __get_str(transport), __entry->port
  1896. )
  1897. );
  1898. TRACE_EVENT(nfsd_ctl_maxblksize,
  1899. TP_PROTO(
  1900. const struct net *net,
  1901. int bsize
  1902. ),
  1903. TP_ARGS(net, bsize),
  1904. TP_STRUCT__entry(
  1905. __field(unsigned int, netns_ino)
  1906. __field(int, bsize)
  1907. ),
  1908. TP_fast_assign(
  1909. __entry->netns_ino = net->ns.inum;
  1910. __entry->bsize = bsize;
  1911. ),
  1912. TP_printk("bsize=%d",
  1913. __entry->bsize
  1914. )
  1915. );
  1916. TRACE_EVENT(nfsd_ctl_maxconn,
  1917. TP_PROTO(
  1918. const struct net *net,
  1919. int maxconn
  1920. ),
  1921. TP_ARGS(net, maxconn),
  1922. TP_STRUCT__entry(
  1923. __field(unsigned int, netns_ino)
  1924. __field(int, maxconn)
  1925. ),
  1926. TP_fast_assign(
  1927. __entry->netns_ino = net->ns.inum;
  1928. __entry->maxconn = maxconn;
  1929. ),
  1930. TP_printk("maxconn=%d",
  1931. __entry->maxconn
  1932. )
  1933. );
  1934. TRACE_EVENT(nfsd_ctl_time,
  1935. TP_PROTO(
  1936. const struct net *net,
  1937. const char *name,
  1938. size_t namelen,
  1939. int time
  1940. ),
  1941. TP_ARGS(net, name, namelen, time),
  1942. TP_STRUCT__entry(
  1943. __field(unsigned int, netns_ino)
  1944. __field(int, time)
  1945. __string_len(name, name, namelen)
  1946. ),
  1947. TP_fast_assign(
  1948. __entry->netns_ino = net->ns.inum;
  1949. __entry->time = time;
  1950. __assign_str(name);
  1951. ),
  1952. TP_printk("file=%s time=%d",
  1953. __get_str(name), __entry->time
  1954. )
  1955. );
  1956. TRACE_EVENT(nfsd_ctl_recoverydir,
  1957. TP_PROTO(
  1958. const struct net *net,
  1959. const char *recdir
  1960. ),
  1961. TP_ARGS(net, recdir),
  1962. TP_STRUCT__entry(
  1963. __field(unsigned int, netns_ino)
  1964. __string(recdir, recdir)
  1965. ),
  1966. TP_fast_assign(
  1967. __entry->netns_ino = net->ns.inum;
  1968. __assign_str(recdir);
  1969. ),
  1970. TP_printk("recdir=%s",
  1971. __get_str(recdir)
  1972. )
  1973. );
  1974. TRACE_EVENT(nfsd_end_grace,
  1975. TP_PROTO(
  1976. const struct net *net
  1977. ),
  1978. TP_ARGS(net),
  1979. TP_STRUCT__entry(
  1980. __field(unsigned int, netns_ino)
  1981. ),
  1982. TP_fast_assign(
  1983. __entry->netns_ino = net->ns.inum;
  1984. ),
  1985. TP_printk("nn=%d", __entry->netns_ino
  1986. )
  1987. );
  1988. DECLARE_EVENT_CLASS(nfsd_copy_class,
  1989. TP_PROTO(
  1990. const struct nfsd4_copy *copy
  1991. ),
  1992. TP_ARGS(copy),
  1993. TP_STRUCT__entry(
  1994. __field(bool, intra)
  1995. __field(bool, async)
  1996. __field(u32, src_cl_boot)
  1997. __field(u32, src_cl_id)
  1998. __field(u32, src_so_id)
  1999. __field(u32, src_si_generation)
  2000. __field(u32, dst_cl_boot)
  2001. __field(u32, dst_cl_id)
  2002. __field(u32, dst_so_id)
  2003. __field(u32, dst_si_generation)
  2004. __field(u32, cb_cl_boot)
  2005. __field(u32, cb_cl_id)
  2006. __field(u32, cb_so_id)
  2007. __field(u32, cb_si_generation)
  2008. __field(u64, src_cp_pos)
  2009. __field(u64, dst_cp_pos)
  2010. __field(u64, cp_count)
  2011. __sockaddr(addr, sizeof(struct sockaddr_in6))
  2012. ),
  2013. TP_fast_assign(
  2014. const stateid_t *src_stp = &copy->cp_src_stateid;
  2015. const stateid_t *dst_stp = &copy->cp_dst_stateid;
  2016. const stateid_t *cb_stp = &copy->cp_res.cb_stateid;
  2017. __entry->intra = test_bit(NFSD4_COPY_F_INTRA, &copy->cp_flags);
  2018. __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, &copy->cp_flags);
  2019. __entry->src_cl_boot = src_stp->si_opaque.so_clid.cl_boot;
  2020. __entry->src_cl_id = src_stp->si_opaque.so_clid.cl_id;
  2021. __entry->src_so_id = src_stp->si_opaque.so_id;
  2022. __entry->src_si_generation = src_stp->si_generation;
  2023. __entry->dst_cl_boot = dst_stp->si_opaque.so_clid.cl_boot;
  2024. __entry->dst_cl_id = dst_stp->si_opaque.so_clid.cl_id;
  2025. __entry->dst_so_id = dst_stp->si_opaque.so_id;
  2026. __entry->dst_si_generation = dst_stp->si_generation;
  2027. __entry->cb_cl_boot = cb_stp->si_opaque.so_clid.cl_boot;
  2028. __entry->cb_cl_id = cb_stp->si_opaque.so_clid.cl_id;
  2029. __entry->cb_so_id = cb_stp->si_opaque.so_id;
  2030. __entry->cb_si_generation = cb_stp->si_generation;
  2031. __entry->src_cp_pos = copy->cp_src_pos;
  2032. __entry->dst_cp_pos = copy->cp_dst_pos;
  2033. __entry->cp_count = copy->cp_count;
  2034. __assign_sockaddr(addr, &copy->cp_clp->cl_addr,
  2035. sizeof(struct sockaddr_in6));
  2036. ),
  2037. TP_printk("client=%pISpc intra=%d async=%d "
  2038. "src_client %08x:%08x src_stateid %08x:%08x "
  2039. "dst_client %08x:%08x dst_stateid %08x:%08x "
  2040. "cb_client %08x:%08x cb_stateid %08x:%08x "
  2041. "cp_src_pos=%llu cp_dst_pos=%llu cp_count=%llu",
  2042. __get_sockaddr(addr), __entry->intra, __entry->async,
  2043. __entry->src_cl_boot, __entry->src_cl_id,
  2044. __entry->src_so_id, __entry->src_si_generation,
  2045. __entry->dst_cl_boot, __entry->dst_cl_id,
  2046. __entry->dst_so_id, __entry->dst_si_generation,
  2047. __entry->cb_cl_boot, __entry->cb_cl_id,
  2048. __entry->cb_so_id, __entry->cb_si_generation,
  2049. __entry->src_cp_pos, __entry->dst_cp_pos, __entry->cp_count
  2050. )
  2051. );
  2052. #define DEFINE_COPY_EVENT(name) \
  2053. DEFINE_EVENT(nfsd_copy_class, nfsd_copy_##name, \
  2054. TP_PROTO(const struct nfsd4_copy *copy), \
  2055. TP_ARGS(copy))
  2056. DEFINE_COPY_EVENT(inter);
  2057. DEFINE_COPY_EVENT(intra);
  2058. DEFINE_COPY_EVENT(async);
  2059. TRACE_EVENT(nfsd_copy_done,
  2060. TP_PROTO(
  2061. const struct nfsd4_copy *copy,
  2062. __be32 status
  2063. ),
  2064. TP_ARGS(copy, status),
  2065. TP_STRUCT__entry(
  2066. __field(int, status)
  2067. __field(bool, intra)
  2068. __field(bool, async)
  2069. __sockaddr(addr, sizeof(struct sockaddr_in6))
  2070. ),
  2071. TP_fast_assign(
  2072. __entry->status = be32_to_cpu(status);
  2073. __entry->intra = test_bit(NFSD4_COPY_F_INTRA, &copy->cp_flags);
  2074. __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, &copy->cp_flags);
  2075. __assign_sockaddr(addr, &copy->cp_clp->cl_addr,
  2076. sizeof(struct sockaddr_in6));
  2077. ),
  2078. TP_printk("addr=%pISpc status=%d intra=%d async=%d",
  2079. __get_sockaddr(addr), __entry->status, __entry->intra, __entry->async
  2080. )
  2081. );
  2082. TRACE_EVENT(nfsd_copy_async_done,
  2083. TP_PROTO(
  2084. const struct nfsd4_copy *copy
  2085. ),
  2086. TP_ARGS(copy),
  2087. TP_STRUCT__entry(
  2088. __field(int, status)
  2089. __field(bool, intra)
  2090. __field(bool, async)
  2091. __field(u32, src_cl_boot)
  2092. __field(u32, src_cl_id)
  2093. __field(u32, src_so_id)
  2094. __field(u32, src_si_generation)
  2095. __field(u32, dst_cl_boot)
  2096. __field(u32, dst_cl_id)
  2097. __field(u32, dst_so_id)
  2098. __field(u32, dst_si_generation)
  2099. __field(u32, cb_cl_boot)
  2100. __field(u32, cb_cl_id)
  2101. __field(u32, cb_so_id)
  2102. __field(u32, cb_si_generation)
  2103. __field(u64, src_cp_pos)
  2104. __field(u64, dst_cp_pos)
  2105. __field(u64, cp_count)
  2106. __sockaddr(addr, sizeof(struct sockaddr_in6))
  2107. ),
  2108. TP_fast_assign(
  2109. const stateid_t *src_stp = &copy->cp_src_stateid;
  2110. const stateid_t *dst_stp = &copy->cp_dst_stateid;
  2111. const stateid_t *cb_stp = &copy->cp_res.cb_stateid;
  2112. __entry->status = be32_to_cpu(copy->nfserr);
  2113. __entry->intra = test_bit(NFSD4_COPY_F_INTRA, &copy->cp_flags);
  2114. __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, &copy->cp_flags);
  2115. __entry->src_cl_boot = src_stp->si_opaque.so_clid.cl_boot;
  2116. __entry->src_cl_id = src_stp->si_opaque.so_clid.cl_id;
  2117. __entry->src_so_id = src_stp->si_opaque.so_id;
  2118. __entry->src_si_generation = src_stp->si_generation;
  2119. __entry->dst_cl_boot = dst_stp->si_opaque.so_clid.cl_boot;
  2120. __entry->dst_cl_id = dst_stp->si_opaque.so_clid.cl_id;
  2121. __entry->dst_so_id = dst_stp->si_opaque.so_id;
  2122. __entry->dst_si_generation = dst_stp->si_generation;
  2123. __entry->cb_cl_boot = cb_stp->si_opaque.so_clid.cl_boot;
  2124. __entry->cb_cl_id = cb_stp->si_opaque.so_clid.cl_id;
  2125. __entry->cb_so_id = cb_stp->si_opaque.so_id;
  2126. __entry->cb_si_generation = cb_stp->si_generation;
  2127. __entry->src_cp_pos = copy->cp_src_pos;
  2128. __entry->dst_cp_pos = copy->cp_dst_pos;
  2129. __entry->cp_count = copy->cp_count;
  2130. __assign_sockaddr(addr, &copy->cp_clp->cl_addr,
  2131. sizeof(struct sockaddr_in6));
  2132. ),
  2133. TP_printk("client=%pISpc status=%d intra=%d async=%d "
  2134. "src_client %08x:%08x src_stateid %08x:%08x "
  2135. "dst_client %08x:%08x dst_stateid %08x:%08x "
  2136. "cb_client %08x:%08x cb_stateid %08x:%08x "
  2137. "cp_src_pos=%llu cp_dst_pos=%llu cp_count=%llu",
  2138. __get_sockaddr(addr),
  2139. __entry->status, __entry->intra, __entry->async,
  2140. __entry->src_cl_boot, __entry->src_cl_id,
  2141. __entry->src_so_id, __entry->src_si_generation,
  2142. __entry->dst_cl_boot, __entry->dst_cl_id,
  2143. __entry->dst_so_id, __entry->dst_si_generation,
  2144. __entry->cb_cl_boot, __entry->cb_cl_id,
  2145. __entry->cb_so_id, __entry->cb_si_generation,
  2146. __entry->src_cp_pos, __entry->dst_cp_pos, __entry->cp_count
  2147. )
  2148. );
  2149. #endif /* _NFSD_TRACE_H */
  2150. #undef TRACE_INCLUDE_PATH
  2151. #define TRACE_INCLUDE_PATH .
  2152. #define TRACE_INCLUDE_FILE trace
  2153. #include <trace/define_trace.h>