trace.h 71 KB

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