sunrpc.h 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM sunrpc
  4. #if !defined(_TRACE_SUNRPC_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_SUNRPC_H
  6. #include <linux/sunrpc/sched.h>
  7. #include <linux/sunrpc/clnt.h>
  8. #include <linux/sunrpc/svc.h>
  9. #include <linux/sunrpc/xprtsock.h>
  10. #include <linux/sunrpc/svc_xprt.h>
  11. #include <net/tcp_states.h>
  12. #include <linux/net.h>
  13. #include <linux/tracepoint.h>
  14. #include <trace/misc/sunrpc.h>
  15. TRACE_DEFINE_ENUM(SOCK_STREAM);
  16. TRACE_DEFINE_ENUM(SOCK_DGRAM);
  17. TRACE_DEFINE_ENUM(SOCK_RAW);
  18. TRACE_DEFINE_ENUM(SOCK_RDM);
  19. TRACE_DEFINE_ENUM(SOCK_SEQPACKET);
  20. TRACE_DEFINE_ENUM(SOCK_DCCP);
  21. TRACE_DEFINE_ENUM(SOCK_PACKET);
  22. #define show_socket_type(type) \
  23. __print_symbolic(type, \
  24. { SOCK_STREAM, "STREAM" }, \
  25. { SOCK_DGRAM, "DGRAM" }, \
  26. { SOCK_RAW, "RAW" }, \
  27. { SOCK_RDM, "RDM" }, \
  28. { SOCK_SEQPACKET, "SEQPACKET" }, \
  29. { SOCK_DCCP, "DCCP" }, \
  30. { SOCK_PACKET, "PACKET" })
  31. /* This list is known to be incomplete, add new enums as needed. */
  32. TRACE_DEFINE_ENUM(AF_UNSPEC);
  33. TRACE_DEFINE_ENUM(AF_UNIX);
  34. TRACE_DEFINE_ENUM(AF_LOCAL);
  35. TRACE_DEFINE_ENUM(AF_INET);
  36. TRACE_DEFINE_ENUM(AF_INET6);
  37. #define rpc_show_address_family(family) \
  38. __print_symbolic(family, \
  39. { AF_UNSPEC, "AF_UNSPEC" }, \
  40. { AF_UNIX, "AF_UNIX" }, \
  41. { AF_LOCAL, "AF_LOCAL" }, \
  42. { AF_INET, "AF_INET" }, \
  43. { AF_INET6, "AF_INET6" })
  44. DECLARE_EVENT_CLASS(rpc_xdr_buf_class,
  45. TP_PROTO(
  46. const struct rpc_task *task,
  47. const struct xdr_buf *xdr
  48. ),
  49. TP_ARGS(task, xdr),
  50. TP_STRUCT__entry(
  51. __field(unsigned int, task_id)
  52. __field(unsigned int, client_id)
  53. __field(const void *, head_base)
  54. __field(size_t, head_len)
  55. __field(const void *, tail_base)
  56. __field(size_t, tail_len)
  57. __field(unsigned int, page_base)
  58. __field(unsigned int, page_len)
  59. __field(unsigned int, msg_len)
  60. ),
  61. TP_fast_assign(
  62. __entry->task_id = task->tk_pid;
  63. __entry->client_id = task->tk_client ?
  64. task->tk_client->cl_clid : -1;
  65. __entry->head_base = xdr->head[0].iov_base;
  66. __entry->head_len = xdr->head[0].iov_len;
  67. __entry->tail_base = xdr->tail[0].iov_base;
  68. __entry->tail_len = xdr->tail[0].iov_len;
  69. __entry->page_base = xdr->page_base;
  70. __entry->page_len = xdr->page_len;
  71. __entry->msg_len = xdr->len;
  72. ),
  73. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  74. " head=[%p,%zu] page=%u(%u) tail=[%p,%zu] len=%u",
  75. __entry->task_id, __entry->client_id,
  76. __entry->head_base, __entry->head_len,
  77. __entry->page_len, __entry->page_base,
  78. __entry->tail_base, __entry->tail_len,
  79. __entry->msg_len
  80. )
  81. );
  82. #define DEFINE_RPCXDRBUF_EVENT(name) \
  83. DEFINE_EVENT(rpc_xdr_buf_class, \
  84. rpc_xdr_##name, \
  85. TP_PROTO( \
  86. const struct rpc_task *task, \
  87. const struct xdr_buf *xdr \
  88. ), \
  89. TP_ARGS(task, xdr))
  90. DEFINE_RPCXDRBUF_EVENT(sendto);
  91. DEFINE_RPCXDRBUF_EVENT(recvfrom);
  92. DEFINE_RPCXDRBUF_EVENT(reply_pages);
  93. DECLARE_EVENT_CLASS(rpc_clnt_class,
  94. TP_PROTO(
  95. const struct rpc_clnt *clnt
  96. ),
  97. TP_ARGS(clnt),
  98. TP_STRUCT__entry(
  99. __field(unsigned int, client_id)
  100. ),
  101. TP_fast_assign(
  102. __entry->client_id = clnt->cl_clid;
  103. ),
  104. TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER, __entry->client_id)
  105. );
  106. #define DEFINE_RPC_CLNT_EVENT(name) \
  107. DEFINE_EVENT(rpc_clnt_class, \
  108. rpc_clnt_##name, \
  109. TP_PROTO( \
  110. const struct rpc_clnt *clnt \
  111. ), \
  112. TP_ARGS(clnt))
  113. DEFINE_RPC_CLNT_EVENT(free);
  114. DEFINE_RPC_CLNT_EVENT(killall);
  115. DEFINE_RPC_CLNT_EVENT(shutdown);
  116. DEFINE_RPC_CLNT_EVENT(release);
  117. DEFINE_RPC_CLNT_EVENT(replace_xprt);
  118. DEFINE_RPC_CLNT_EVENT(replace_xprt_err);
  119. TRACE_DEFINE_ENUM(RPC_XPRTSEC_NONE);
  120. TRACE_DEFINE_ENUM(RPC_XPRTSEC_TLS_X509);
  121. #define rpc_show_xprtsec_policy(policy) \
  122. __print_symbolic(policy, \
  123. { RPC_XPRTSEC_NONE, "none" }, \
  124. { RPC_XPRTSEC_TLS_ANON, "tls-anon" }, \
  125. { RPC_XPRTSEC_TLS_X509, "tls-x509" })
  126. #define rpc_show_create_flags(flags) \
  127. __print_flags(flags, "|", \
  128. { RPC_CLNT_CREATE_HARDRTRY, "HARDRTRY" }, \
  129. { RPC_CLNT_CREATE_AUTOBIND, "AUTOBIND" }, \
  130. { RPC_CLNT_CREATE_NONPRIVPORT, "NONPRIVPORT" }, \
  131. { RPC_CLNT_CREATE_NOPING, "NOPING" }, \
  132. { RPC_CLNT_CREATE_DISCRTRY, "DISCRTRY" }, \
  133. { RPC_CLNT_CREATE_QUIET, "QUIET" }, \
  134. { RPC_CLNT_CREATE_INFINITE_SLOTS, \
  135. "INFINITE_SLOTS" }, \
  136. { RPC_CLNT_CREATE_NO_IDLE_TIMEOUT, \
  137. "NO_IDLE_TIMEOUT" }, \
  138. { RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT, \
  139. "NO_RETRANS_TIMEOUT" }, \
  140. { RPC_CLNT_CREATE_SOFTERR, "SOFTERR" }, \
  141. { RPC_CLNT_CREATE_REUSEPORT, "REUSEPORT" })
  142. TRACE_EVENT(rpc_clnt_new,
  143. TP_PROTO(
  144. const struct rpc_clnt *clnt,
  145. const struct rpc_xprt *xprt,
  146. const struct rpc_create_args *args
  147. ),
  148. TP_ARGS(clnt, xprt, args),
  149. TP_STRUCT__entry(
  150. __field(unsigned int, client_id)
  151. __field(unsigned long, xprtsec)
  152. __field(unsigned long, flags)
  153. __string(program, clnt->cl_program->name)
  154. __string(server, xprt->servername)
  155. __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
  156. __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
  157. ),
  158. TP_fast_assign(
  159. __entry->client_id = clnt->cl_clid;
  160. __entry->xprtsec = args->xprtsec.policy;
  161. __entry->flags = args->flags;
  162. __assign_str(program);
  163. __assign_str(server);
  164. __assign_str(addr);
  165. __assign_str(port);
  166. ),
  167. TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER " peer=[%s]:%s"
  168. " program=%s server=%s xprtsec=%s flags=%s",
  169. __entry->client_id, __get_str(addr), __get_str(port),
  170. __get_str(program), __get_str(server),
  171. rpc_show_xprtsec_policy(__entry->xprtsec),
  172. rpc_show_create_flags(__entry->flags)
  173. )
  174. );
  175. TRACE_EVENT(rpc_clnt_new_err,
  176. TP_PROTO(
  177. const char *program,
  178. const char *server,
  179. int error
  180. ),
  181. TP_ARGS(program, server, error),
  182. TP_STRUCT__entry(
  183. __field(int, error)
  184. __string(program, program)
  185. __string(server, server)
  186. ),
  187. TP_fast_assign(
  188. __entry->error = error;
  189. __assign_str(program);
  190. __assign_str(server);
  191. ),
  192. TP_printk("program=%s server=%s error=%d",
  193. __get_str(program), __get_str(server), __entry->error)
  194. );
  195. TRACE_EVENT(rpc_clnt_clone_err,
  196. TP_PROTO(
  197. const struct rpc_clnt *clnt,
  198. int error
  199. ),
  200. TP_ARGS(clnt, error),
  201. TP_STRUCT__entry(
  202. __field(unsigned int, client_id)
  203. __field(int, error)
  204. ),
  205. TP_fast_assign(
  206. __entry->client_id = clnt->cl_clid;
  207. __entry->error = error;
  208. ),
  209. TP_printk("client=" SUNRPC_TRACE_CLID_SPECIFIER " error=%d",
  210. __entry->client_id, __entry->error)
  211. );
  212. TRACE_DEFINE_ENUM(RPC_AUTH_OK);
  213. TRACE_DEFINE_ENUM(RPC_AUTH_BADCRED);
  214. TRACE_DEFINE_ENUM(RPC_AUTH_REJECTEDCRED);
  215. TRACE_DEFINE_ENUM(RPC_AUTH_BADVERF);
  216. TRACE_DEFINE_ENUM(RPC_AUTH_REJECTEDVERF);
  217. TRACE_DEFINE_ENUM(RPC_AUTH_TOOWEAK);
  218. TRACE_DEFINE_ENUM(RPCSEC_GSS_CREDPROBLEM);
  219. TRACE_DEFINE_ENUM(RPCSEC_GSS_CTXPROBLEM);
  220. #define rpc_show_auth_stat(status) \
  221. __print_symbolic(status, \
  222. { RPC_AUTH_OK, "AUTH_OK" }, \
  223. { RPC_AUTH_BADCRED, "BADCRED" }, \
  224. { RPC_AUTH_REJECTEDCRED, "REJECTEDCRED" }, \
  225. { RPC_AUTH_BADVERF, "BADVERF" }, \
  226. { RPC_AUTH_REJECTEDVERF, "REJECTEDVERF" }, \
  227. { RPC_AUTH_TOOWEAK, "TOOWEAK" }, \
  228. { RPCSEC_GSS_CREDPROBLEM, "GSS_CREDPROBLEM" }, \
  229. { RPCSEC_GSS_CTXPROBLEM, "GSS_CTXPROBLEM" }) \
  230. DECLARE_EVENT_CLASS(rpc_task_status,
  231. TP_PROTO(const struct rpc_task *task),
  232. TP_ARGS(task),
  233. TP_STRUCT__entry(
  234. __field(unsigned int, task_id)
  235. __field(unsigned int, client_id)
  236. __field(int, status)
  237. ),
  238. TP_fast_assign(
  239. __entry->task_id = task->tk_pid;
  240. __entry->client_id = task->tk_client->cl_clid;
  241. __entry->status = task->tk_status;
  242. ),
  243. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " status=%d",
  244. __entry->task_id, __entry->client_id,
  245. __entry->status)
  246. );
  247. #define DEFINE_RPC_STATUS_EVENT(name) \
  248. DEFINE_EVENT(rpc_task_status, rpc_##name##_status, \
  249. TP_PROTO( \
  250. const struct rpc_task *task \
  251. ), \
  252. TP_ARGS(task))
  253. DEFINE_RPC_STATUS_EVENT(call);
  254. DEFINE_RPC_STATUS_EVENT(connect);
  255. DEFINE_RPC_STATUS_EVENT(timeout);
  256. DEFINE_RPC_STATUS_EVENT(retry_refresh);
  257. DEFINE_RPC_STATUS_EVENT(refresh);
  258. TRACE_EVENT(rpc_request,
  259. TP_PROTO(const struct rpc_task *task),
  260. TP_ARGS(task),
  261. TP_STRUCT__entry(
  262. __field(unsigned int, task_id)
  263. __field(unsigned int, client_id)
  264. __field(int, version)
  265. __field(bool, async)
  266. __string(progname, task->tk_client->cl_program->name)
  267. __string(procname, rpc_proc_name(task))
  268. ),
  269. TP_fast_assign(
  270. __entry->task_id = task->tk_pid;
  271. __entry->client_id = task->tk_client->cl_clid;
  272. __entry->version = task->tk_client->cl_vers;
  273. __entry->async = RPC_IS_ASYNC(task);
  274. __assign_str(progname);
  275. __assign_str(procname);
  276. ),
  277. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " %sv%d %s (%ssync)",
  278. __entry->task_id, __entry->client_id,
  279. __get_str(progname), __entry->version,
  280. __get_str(procname), __entry->async ? "a": ""
  281. )
  282. );
  283. #define rpc_show_task_flags(flags) \
  284. __print_flags(flags, "|", \
  285. { RPC_TASK_ASYNC, "ASYNC" }, \
  286. { RPC_TASK_SWAPPER, "SWAPPER" }, \
  287. { RPC_TASK_MOVEABLE, "MOVEABLE" }, \
  288. { RPC_TASK_NULLCREDS, "NULLCREDS" }, \
  289. { RPC_CALL_MAJORSEEN, "MAJORSEEN" }, \
  290. { RPC_TASK_DYNAMIC, "DYNAMIC" }, \
  291. { RPC_TASK_NO_ROUND_ROBIN, "NO_ROUND_ROBIN" }, \
  292. { RPC_TASK_SOFT, "SOFT" }, \
  293. { RPC_TASK_SOFTCONN, "SOFTCONN" }, \
  294. { RPC_TASK_SENT, "SENT" }, \
  295. { RPC_TASK_TIMEOUT, "TIMEOUT" }, \
  296. { RPC_TASK_NOCONNECT, "NOCONNECT" }, \
  297. { RPC_TASK_NO_RETRANS_TIMEOUT, "NORTO" }, \
  298. { RPC_TASK_CRED_NOREF, "CRED_NOREF" })
  299. #define rpc_show_runstate(flags) \
  300. __print_flags(flags, "|", \
  301. { (1UL << RPC_TASK_RUNNING), "RUNNING" }, \
  302. { (1UL << RPC_TASK_QUEUED), "QUEUED" }, \
  303. { (1UL << RPC_TASK_ACTIVE), "ACTIVE" }, \
  304. { (1UL << RPC_TASK_NEED_XMIT), "NEED_XMIT" }, \
  305. { (1UL << RPC_TASK_NEED_RECV), "NEED_RECV" }, \
  306. { (1UL << RPC_TASK_MSG_PIN_WAIT), "MSG_PIN_WAIT" })
  307. DECLARE_EVENT_CLASS(rpc_task_running,
  308. TP_PROTO(const struct rpc_task *task, const void *action),
  309. TP_ARGS(task, action),
  310. TP_STRUCT__entry(
  311. __field(unsigned int, task_id)
  312. __field(unsigned int, client_id)
  313. __field(const void *, action)
  314. __field(unsigned long, runstate)
  315. __field(int, status)
  316. __field(unsigned short, flags)
  317. ),
  318. TP_fast_assign(
  319. __entry->client_id = task->tk_client ?
  320. task->tk_client->cl_clid : -1;
  321. __entry->task_id = task->tk_pid;
  322. __entry->action = action;
  323. __entry->runstate = task->tk_runstate;
  324. __entry->status = task->tk_status;
  325. __entry->flags = task->tk_flags;
  326. ),
  327. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  328. " flags=%s runstate=%s status=%d action=%ps",
  329. __entry->task_id, __entry->client_id,
  330. rpc_show_task_flags(__entry->flags),
  331. rpc_show_runstate(__entry->runstate),
  332. __entry->status,
  333. __entry->action
  334. )
  335. );
  336. #define DEFINE_RPC_RUNNING_EVENT(name) \
  337. DEFINE_EVENT(rpc_task_running, rpc_task_##name, \
  338. TP_PROTO( \
  339. const struct rpc_task *task, \
  340. const void *action \
  341. ), \
  342. TP_ARGS(task, action))
  343. DEFINE_RPC_RUNNING_EVENT(begin);
  344. DEFINE_RPC_RUNNING_EVENT(run_action);
  345. DEFINE_RPC_RUNNING_EVENT(sync_sleep);
  346. DEFINE_RPC_RUNNING_EVENT(sync_wake);
  347. DEFINE_RPC_RUNNING_EVENT(complete);
  348. DEFINE_RPC_RUNNING_EVENT(timeout);
  349. DEFINE_RPC_RUNNING_EVENT(signalled);
  350. DEFINE_RPC_RUNNING_EVENT(end);
  351. DEFINE_RPC_RUNNING_EVENT(call_done);
  352. DECLARE_EVENT_CLASS(rpc_task_queued,
  353. TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
  354. TP_ARGS(task, q),
  355. TP_STRUCT__entry(
  356. __field(unsigned int, task_id)
  357. __field(unsigned int, client_id)
  358. __field(unsigned long, timeout)
  359. __field(unsigned long, runstate)
  360. __field(int, status)
  361. __field(unsigned short, flags)
  362. __string(q_name, rpc_qname(q))
  363. ),
  364. TP_fast_assign(
  365. __entry->client_id = task->tk_client ?
  366. task->tk_client->cl_clid : -1;
  367. __entry->task_id = task->tk_pid;
  368. __entry->timeout = rpc_task_timeout(task);
  369. __entry->runstate = task->tk_runstate;
  370. __entry->status = task->tk_status;
  371. __entry->flags = task->tk_flags;
  372. __assign_str(q_name);
  373. ),
  374. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  375. " flags=%s runstate=%s status=%d timeout=%lu queue=%s",
  376. __entry->task_id, __entry->client_id,
  377. rpc_show_task_flags(__entry->flags),
  378. rpc_show_runstate(__entry->runstate),
  379. __entry->status,
  380. __entry->timeout,
  381. __get_str(q_name)
  382. )
  383. );
  384. #define DEFINE_RPC_QUEUED_EVENT(name) \
  385. DEFINE_EVENT(rpc_task_queued, rpc_task_##name, \
  386. TP_PROTO( \
  387. const struct rpc_task *task, \
  388. const struct rpc_wait_queue *q \
  389. ), \
  390. TP_ARGS(task, q))
  391. DEFINE_RPC_QUEUED_EVENT(sleep);
  392. DEFINE_RPC_QUEUED_EVENT(wakeup);
  393. DECLARE_EVENT_CLASS(rpc_failure,
  394. TP_PROTO(const struct rpc_task *task),
  395. TP_ARGS(task),
  396. TP_STRUCT__entry(
  397. __field(unsigned int, task_id)
  398. __field(unsigned int, client_id)
  399. ),
  400. TP_fast_assign(
  401. __entry->task_id = task->tk_pid;
  402. __entry->client_id = task->tk_client->cl_clid;
  403. ),
  404. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER,
  405. __entry->task_id, __entry->client_id)
  406. );
  407. #define DEFINE_RPC_FAILURE(name) \
  408. DEFINE_EVENT(rpc_failure, rpc_bad_##name, \
  409. TP_PROTO( \
  410. const struct rpc_task *task \
  411. ), \
  412. TP_ARGS(task))
  413. DEFINE_RPC_FAILURE(callhdr);
  414. DEFINE_RPC_FAILURE(verifier);
  415. DECLARE_EVENT_CLASS(rpc_reply_event,
  416. TP_PROTO(
  417. const struct rpc_task *task
  418. ),
  419. TP_ARGS(task),
  420. TP_STRUCT__entry(
  421. __field(unsigned int, task_id)
  422. __field(unsigned int, client_id)
  423. __field(u32, xid)
  424. __string(progname, task->tk_client->cl_program->name)
  425. __field(u32, version)
  426. __string(procname, rpc_proc_name(task))
  427. __string(servername, task->tk_xprt->servername)
  428. ),
  429. TP_fast_assign(
  430. __entry->task_id = task->tk_pid;
  431. __entry->client_id = task->tk_client->cl_clid;
  432. __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
  433. __assign_str(progname);
  434. __entry->version = task->tk_client->cl_vers;
  435. __assign_str(procname);
  436. __assign_str(servername);
  437. ),
  438. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  439. " server=%s xid=0x%08x %sv%d %s",
  440. __entry->task_id, __entry->client_id, __get_str(servername),
  441. __entry->xid, __get_str(progname), __entry->version,
  442. __get_str(procname))
  443. )
  444. #define DEFINE_RPC_REPLY_EVENT(name) \
  445. DEFINE_EVENT(rpc_reply_event, rpc__##name, \
  446. TP_PROTO( \
  447. const struct rpc_task *task \
  448. ), \
  449. TP_ARGS(task))
  450. DEFINE_RPC_REPLY_EVENT(prog_unavail);
  451. DEFINE_RPC_REPLY_EVENT(prog_mismatch);
  452. DEFINE_RPC_REPLY_EVENT(proc_unavail);
  453. DEFINE_RPC_REPLY_EVENT(garbage_args);
  454. DEFINE_RPC_REPLY_EVENT(unparsable);
  455. DEFINE_RPC_REPLY_EVENT(mismatch);
  456. DEFINE_RPC_REPLY_EVENT(stale_creds);
  457. DEFINE_RPC_REPLY_EVENT(bad_creds);
  458. DEFINE_RPC_REPLY_EVENT(auth_tooweak);
  459. #define DEFINE_RPCB_ERROR_EVENT(name) \
  460. DEFINE_EVENT(rpc_reply_event, rpcb_##name##_err, \
  461. TP_PROTO( \
  462. const struct rpc_task *task \
  463. ), \
  464. TP_ARGS(task))
  465. DEFINE_RPCB_ERROR_EVENT(prog_unavail);
  466. DEFINE_RPCB_ERROR_EVENT(timeout);
  467. DEFINE_RPCB_ERROR_EVENT(bind_version);
  468. DEFINE_RPCB_ERROR_EVENT(unreachable);
  469. DEFINE_RPCB_ERROR_EVENT(unrecognized);
  470. TRACE_EVENT(rpc_buf_alloc,
  471. TP_PROTO(
  472. const struct rpc_task *task,
  473. int status
  474. ),
  475. TP_ARGS(task, status),
  476. TP_STRUCT__entry(
  477. __field(unsigned int, task_id)
  478. __field(unsigned int, client_id)
  479. __field(size_t, callsize)
  480. __field(size_t, recvsize)
  481. __field(int, status)
  482. ),
  483. TP_fast_assign(
  484. __entry->task_id = task->tk_pid;
  485. __entry->client_id = task->tk_client->cl_clid;
  486. __entry->callsize = task->tk_rqstp->rq_callsize;
  487. __entry->recvsize = task->tk_rqstp->rq_rcvsize;
  488. __entry->status = status;
  489. ),
  490. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  491. " callsize=%zu recvsize=%zu status=%d",
  492. __entry->task_id, __entry->client_id,
  493. __entry->callsize, __entry->recvsize, __entry->status
  494. )
  495. );
  496. TRACE_EVENT(rpc_call_rpcerror,
  497. TP_PROTO(
  498. const struct rpc_task *task,
  499. int tk_status,
  500. int rpc_status
  501. ),
  502. TP_ARGS(task, tk_status, rpc_status),
  503. TP_STRUCT__entry(
  504. __field(unsigned int, task_id)
  505. __field(unsigned int, client_id)
  506. __field(int, tk_status)
  507. __field(int, rpc_status)
  508. ),
  509. TP_fast_assign(
  510. __entry->client_id = task->tk_client->cl_clid;
  511. __entry->task_id = task->tk_pid;
  512. __entry->tk_status = tk_status;
  513. __entry->rpc_status = rpc_status;
  514. ),
  515. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  516. " tk_status=%d rpc_status=%d",
  517. __entry->task_id, __entry->client_id,
  518. __entry->tk_status, __entry->rpc_status)
  519. );
  520. TRACE_EVENT(rpc_stats_latency,
  521. TP_PROTO(
  522. const struct rpc_task *task,
  523. ktime_t backlog,
  524. ktime_t rtt,
  525. ktime_t execute
  526. ),
  527. TP_ARGS(task, backlog, rtt, execute),
  528. TP_STRUCT__entry(
  529. __field(unsigned int, task_id)
  530. __field(unsigned int, client_id)
  531. __field(u32, xid)
  532. __field(int, version)
  533. __string(progname, task->tk_client->cl_program->name)
  534. __string(procname, rpc_proc_name(task))
  535. __field(unsigned long, backlog)
  536. __field(unsigned long, rtt)
  537. __field(unsigned long, execute)
  538. __field(u32, xprt_id)
  539. ),
  540. TP_fast_assign(
  541. __entry->client_id = task->tk_client->cl_clid;
  542. __entry->task_id = task->tk_pid;
  543. __entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
  544. __entry->version = task->tk_client->cl_vers;
  545. __assign_str(progname);
  546. __assign_str(procname);
  547. __entry->backlog = ktime_to_us(backlog);
  548. __entry->rtt = ktime_to_us(rtt);
  549. __entry->execute = ktime_to_us(execute);
  550. __entry->xprt_id = task->tk_xprt->id;
  551. ),
  552. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  553. " xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu"
  554. " xprt_id=%d",
  555. __entry->task_id, __entry->client_id, __entry->xid,
  556. __get_str(progname), __entry->version, __get_str(procname),
  557. __entry->backlog, __entry->rtt, __entry->execute,
  558. __entry->xprt_id)
  559. );
  560. TRACE_EVENT(rpc_xdr_overflow,
  561. TP_PROTO(
  562. const struct xdr_stream *xdr,
  563. size_t requested
  564. ),
  565. TP_ARGS(xdr, requested),
  566. TP_STRUCT__entry(
  567. __field(unsigned int, task_id)
  568. __field(unsigned int, client_id)
  569. __field(int, version)
  570. __field(size_t, requested)
  571. __field(const void *, end)
  572. __field(const void *, p)
  573. __field(const void *, head_base)
  574. __field(size_t, head_len)
  575. __field(const void *, tail_base)
  576. __field(size_t, tail_len)
  577. __field(unsigned int, page_len)
  578. __field(unsigned int, len)
  579. __string(progname, xdr->rqst ?
  580. xdr->rqst->rq_task->tk_client->cl_program->name : "unknown")
  581. __string(procedure, xdr->rqst ?
  582. xdr->rqst->rq_task->tk_msg.rpc_proc->p_name : "unknown")
  583. ),
  584. TP_fast_assign(
  585. if (xdr->rqst) {
  586. const struct rpc_task *task = xdr->rqst->rq_task;
  587. __entry->task_id = task->tk_pid;
  588. __entry->client_id = task->tk_client->cl_clid;
  589. __assign_str(progname);
  590. __entry->version = task->tk_client->cl_vers;
  591. __assign_str(procedure);
  592. } else {
  593. __entry->task_id = -1;
  594. __entry->client_id = -1;
  595. __assign_str(progname);
  596. __entry->version = 0;
  597. __assign_str(procedure);
  598. }
  599. __entry->requested = requested;
  600. __entry->end = xdr->end;
  601. __entry->p = xdr->p;
  602. __entry->head_base = xdr->buf->head[0].iov_base,
  603. __entry->head_len = xdr->buf->head[0].iov_len,
  604. __entry->page_len = xdr->buf->page_len,
  605. __entry->tail_base = xdr->buf->tail[0].iov_base,
  606. __entry->tail_len = xdr->buf->tail[0].iov_len,
  607. __entry->len = xdr->buf->len;
  608. ),
  609. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  610. " %sv%d %s requested=%zu p=%p end=%p xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
  611. __entry->task_id, __entry->client_id,
  612. __get_str(progname), __entry->version, __get_str(procedure),
  613. __entry->requested, __entry->p, __entry->end,
  614. __entry->head_base, __entry->head_len,
  615. __entry->page_len,
  616. __entry->tail_base, __entry->tail_len,
  617. __entry->len
  618. )
  619. );
  620. TRACE_EVENT(rpc_xdr_alignment,
  621. TP_PROTO(
  622. const struct xdr_stream *xdr,
  623. size_t offset,
  624. unsigned int copied
  625. ),
  626. TP_ARGS(xdr, offset, copied),
  627. TP_STRUCT__entry(
  628. __field(unsigned int, task_id)
  629. __field(unsigned int, client_id)
  630. __field(int, version)
  631. __field(size_t, offset)
  632. __field(unsigned int, copied)
  633. __field(const void *, head_base)
  634. __field(size_t, head_len)
  635. __field(const void *, tail_base)
  636. __field(size_t, tail_len)
  637. __field(unsigned int, page_len)
  638. __field(unsigned int, len)
  639. __string(progname,
  640. xdr->rqst->rq_task->tk_client->cl_program->name)
  641. __string(procedure,
  642. xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
  643. ),
  644. TP_fast_assign(
  645. const struct rpc_task *task = xdr->rqst->rq_task;
  646. __entry->task_id = task->tk_pid;
  647. __entry->client_id = task->tk_client->cl_clid;
  648. __assign_str(progname);
  649. __entry->version = task->tk_client->cl_vers;
  650. __assign_str(procedure);
  651. __entry->offset = offset;
  652. __entry->copied = copied;
  653. __entry->head_base = xdr->buf->head[0].iov_base,
  654. __entry->head_len = xdr->buf->head[0].iov_len,
  655. __entry->page_len = xdr->buf->page_len,
  656. __entry->tail_base = xdr->buf->tail[0].iov_base,
  657. __entry->tail_len = xdr->buf->tail[0].iov_len,
  658. __entry->len = xdr->buf->len;
  659. ),
  660. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  661. " %sv%d %s offset=%zu copied=%u xdr=[%p,%zu]/%u/[%p,%zu]/%u\n",
  662. __entry->task_id, __entry->client_id,
  663. __get_str(progname), __entry->version, __get_str(procedure),
  664. __entry->offset, __entry->copied,
  665. __entry->head_base, __entry->head_len,
  666. __entry->page_len,
  667. __entry->tail_base, __entry->tail_len,
  668. __entry->len
  669. )
  670. );
  671. /*
  672. * First define the enums in the below macros to be exported to userspace
  673. * via TRACE_DEFINE_ENUM().
  674. */
  675. #undef EM
  676. #undef EMe
  677. #define EM(a, b) TRACE_DEFINE_ENUM(a);
  678. #define EMe(a, b) TRACE_DEFINE_ENUM(a);
  679. #define RPC_SHOW_SOCKET \
  680. EM( SS_FREE, "FREE" ) \
  681. EM( SS_UNCONNECTED, "UNCONNECTED" ) \
  682. EM( SS_CONNECTING, "CONNECTING" ) \
  683. EM( SS_CONNECTED, "CONNECTED" ) \
  684. EMe( SS_DISCONNECTING, "DISCONNECTING" )
  685. #define rpc_show_socket_state(state) \
  686. __print_symbolic(state, RPC_SHOW_SOCKET)
  687. RPC_SHOW_SOCKET
  688. #define RPC_SHOW_SOCK \
  689. EM( TCP_ESTABLISHED, "ESTABLISHED" ) \
  690. EM( TCP_SYN_SENT, "SYN_SENT" ) \
  691. EM( TCP_SYN_RECV, "SYN_RECV" ) \
  692. EM( TCP_FIN_WAIT1, "FIN_WAIT1" ) \
  693. EM( TCP_FIN_WAIT2, "FIN_WAIT2" ) \
  694. EM( TCP_TIME_WAIT, "TIME_WAIT" ) \
  695. EM( TCP_CLOSE, "CLOSE" ) \
  696. EM( TCP_CLOSE_WAIT, "CLOSE_WAIT" ) \
  697. EM( TCP_LAST_ACK, "LAST_ACK" ) \
  698. EM( TCP_LISTEN, "LISTEN" ) \
  699. EMe( TCP_CLOSING, "CLOSING" )
  700. #define rpc_show_sock_state(state) \
  701. __print_symbolic(state, RPC_SHOW_SOCK)
  702. RPC_SHOW_SOCK
  703. #include <trace/events/net_probe_common.h>
  704. /*
  705. * Now redefine the EM() and EMe() macros to map the enums to the strings
  706. * that will be printed in the output.
  707. */
  708. #undef EM
  709. #undef EMe
  710. #define EM(a, b) {a, b},
  711. #define EMe(a, b) {a, b}
  712. DECLARE_EVENT_CLASS(xs_socket_event,
  713. TP_PROTO(
  714. struct rpc_xprt *xprt,
  715. struct socket *socket
  716. ),
  717. TP_ARGS(xprt, socket),
  718. TP_STRUCT__entry(
  719. __field(unsigned int, socket_state)
  720. __field(unsigned int, sock_state)
  721. __field(unsigned long long, ino)
  722. __array(__u8, saddr, sizeof(struct sockaddr_in6))
  723. __array(__u8, daddr, sizeof(struct sockaddr_in6))
  724. ),
  725. TP_fast_assign(
  726. struct inode *inode = SOCK_INODE(socket);
  727. const struct sock *sk = socket->sk;
  728. const struct inet_sock *inet = inet_sk(sk);
  729. memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
  730. memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
  731. TP_STORE_ADDR_PORTS(__entry, inet, sk);
  732. __entry->socket_state = socket->state;
  733. __entry->sock_state = socket->sk->sk_state;
  734. __entry->ino = (unsigned long long)inode->i_ino;
  735. ),
  736. TP_printk(
  737. "socket:[%llu] srcaddr=%pISpc dstaddr=%pISpc "
  738. "state=%u (%s) sk_state=%u (%s)",
  739. __entry->ino,
  740. __entry->saddr,
  741. __entry->daddr,
  742. __entry->socket_state,
  743. rpc_show_socket_state(__entry->socket_state),
  744. __entry->sock_state,
  745. rpc_show_sock_state(__entry->sock_state)
  746. )
  747. );
  748. #define DEFINE_RPC_SOCKET_EVENT(name) \
  749. DEFINE_EVENT(xs_socket_event, name, \
  750. TP_PROTO( \
  751. struct rpc_xprt *xprt, \
  752. struct socket *socket \
  753. ), \
  754. TP_ARGS(xprt, socket))
  755. DECLARE_EVENT_CLASS(xs_socket_event_done,
  756. TP_PROTO(
  757. struct rpc_xprt *xprt,
  758. struct socket *socket,
  759. int error
  760. ),
  761. TP_ARGS(xprt, socket, error),
  762. TP_STRUCT__entry(
  763. __field(int, error)
  764. __field(unsigned int, socket_state)
  765. __field(unsigned int, sock_state)
  766. __field(unsigned long long, ino)
  767. __array(__u8, saddr, sizeof(struct sockaddr_in6))
  768. __array(__u8, daddr, sizeof(struct sockaddr_in6))
  769. ),
  770. TP_fast_assign(
  771. struct inode *inode = SOCK_INODE(socket);
  772. const struct sock *sk = socket->sk;
  773. const struct inet_sock *inet = inet_sk(sk);
  774. memset(__entry->saddr, 0, sizeof(struct sockaddr_in6));
  775. memset(__entry->daddr, 0, sizeof(struct sockaddr_in6));
  776. TP_STORE_ADDR_PORTS(__entry, inet, sk);
  777. __entry->socket_state = socket->state;
  778. __entry->sock_state = socket->sk->sk_state;
  779. __entry->ino = (unsigned long long)inode->i_ino;
  780. __entry->error = error;
  781. ),
  782. TP_printk(
  783. "error=%d socket:[%llu] srcaddr=%pISpc dstaddr=%pISpc "
  784. "state=%u (%s) sk_state=%u (%s)",
  785. __entry->error,
  786. __entry->ino,
  787. __entry->saddr,
  788. __entry->daddr,
  789. __entry->socket_state,
  790. rpc_show_socket_state(__entry->socket_state),
  791. __entry->sock_state,
  792. rpc_show_sock_state(__entry->sock_state)
  793. )
  794. );
  795. #define DEFINE_RPC_SOCKET_EVENT_DONE(name) \
  796. DEFINE_EVENT(xs_socket_event_done, name, \
  797. TP_PROTO( \
  798. struct rpc_xprt *xprt, \
  799. struct socket *socket, \
  800. int error \
  801. ), \
  802. TP_ARGS(xprt, socket, error))
  803. DEFINE_RPC_SOCKET_EVENT(rpc_socket_state_change);
  804. DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_connect);
  805. DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_error);
  806. DEFINE_RPC_SOCKET_EVENT_DONE(rpc_socket_reset_connection);
  807. DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
  808. DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
  809. TRACE_EVENT(rpc_socket_nospace,
  810. TP_PROTO(
  811. const struct rpc_rqst *rqst,
  812. const struct sock_xprt *transport
  813. ),
  814. TP_ARGS(rqst, transport),
  815. TP_STRUCT__entry(
  816. __field(unsigned int, task_id)
  817. __field(unsigned int, client_id)
  818. __field(unsigned int, total)
  819. __field(unsigned int, remaining)
  820. ),
  821. TP_fast_assign(
  822. __entry->task_id = rqst->rq_task->tk_pid;
  823. __entry->client_id = rqst->rq_task->tk_client->cl_clid;
  824. __entry->total = rqst->rq_slen;
  825. __entry->remaining = rqst->rq_slen - transport->xmit.offset;
  826. ),
  827. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  828. " total=%u remaining=%u",
  829. __entry->task_id, __entry->client_id,
  830. __entry->total, __entry->remaining
  831. )
  832. );
  833. #define rpc_show_xprt_state(x) \
  834. __print_flags(x, "|", \
  835. { BIT(XPRT_LOCKED), "LOCKED" }, \
  836. { BIT(XPRT_CONNECTED), "CONNECTED" }, \
  837. { BIT(XPRT_CONNECTING), "CONNECTING" }, \
  838. { BIT(XPRT_CLOSE_WAIT), "CLOSE_WAIT" }, \
  839. { BIT(XPRT_BOUND), "BOUND" }, \
  840. { BIT(XPRT_BINDING), "BINDING" }, \
  841. { BIT(XPRT_CLOSING), "CLOSING" }, \
  842. { BIT(XPRT_OFFLINE), "OFFLINE" }, \
  843. { BIT(XPRT_REMOVE), "REMOVE" }, \
  844. { BIT(XPRT_CONGESTED), "CONGESTED" }, \
  845. { BIT(XPRT_CWND_WAIT), "CWND_WAIT" }, \
  846. { BIT(XPRT_WRITE_SPACE), "WRITE_SPACE" }, \
  847. { BIT(XPRT_SND_IS_COOKIE), "SND_IS_COOKIE" })
  848. DECLARE_EVENT_CLASS(rpc_xprt_lifetime_class,
  849. TP_PROTO(
  850. const struct rpc_xprt *xprt
  851. ),
  852. TP_ARGS(xprt),
  853. TP_STRUCT__entry(
  854. __field(unsigned long, state)
  855. __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
  856. __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
  857. ),
  858. TP_fast_assign(
  859. __entry->state = xprt->state;
  860. __assign_str(addr);
  861. __assign_str(port);
  862. ),
  863. TP_printk("peer=[%s]:%s state=%s",
  864. __get_str(addr), __get_str(port),
  865. rpc_show_xprt_state(__entry->state))
  866. );
  867. #define DEFINE_RPC_XPRT_LIFETIME_EVENT(name) \
  868. DEFINE_EVENT(rpc_xprt_lifetime_class, \
  869. xprt_##name, \
  870. TP_PROTO( \
  871. const struct rpc_xprt *xprt \
  872. ), \
  873. TP_ARGS(xprt))
  874. DEFINE_RPC_XPRT_LIFETIME_EVENT(create);
  875. DEFINE_RPC_XPRT_LIFETIME_EVENT(connect);
  876. DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_auto);
  877. DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_done);
  878. DEFINE_RPC_XPRT_LIFETIME_EVENT(disconnect_force);
  879. DEFINE_RPC_XPRT_LIFETIME_EVENT(destroy);
  880. DECLARE_EVENT_CLASS(rpc_xprt_event,
  881. TP_PROTO(
  882. const struct rpc_xprt *xprt,
  883. __be32 xid,
  884. int status
  885. ),
  886. TP_ARGS(xprt, xid, status),
  887. TP_STRUCT__entry(
  888. __field(u32, xid)
  889. __field(int, status)
  890. __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
  891. __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
  892. ),
  893. TP_fast_assign(
  894. __entry->xid = be32_to_cpu(xid);
  895. __entry->status = status;
  896. __assign_str(addr);
  897. __assign_str(port);
  898. ),
  899. TP_printk("peer=[%s]:%s xid=0x%08x status=%d", __get_str(addr),
  900. __get_str(port), __entry->xid,
  901. __entry->status)
  902. );
  903. #define DEFINE_RPC_XPRT_EVENT(name) \
  904. DEFINE_EVENT(rpc_xprt_event, xprt_##name, \
  905. TP_PROTO( \
  906. const struct rpc_xprt *xprt, \
  907. __be32 xid, \
  908. int status \
  909. ), \
  910. TP_ARGS(xprt, xid, status))
  911. DEFINE_RPC_XPRT_EVENT(timer);
  912. DEFINE_RPC_XPRT_EVENT(lookup_rqst);
  913. TRACE_EVENT(xprt_transmit,
  914. TP_PROTO(
  915. const struct rpc_rqst *rqst,
  916. int status
  917. ),
  918. TP_ARGS(rqst, status),
  919. TP_STRUCT__entry(
  920. __field(unsigned int, task_id)
  921. __field(unsigned int, client_id)
  922. __field(u32, xid)
  923. __field(u32, seqno)
  924. __field(int, status)
  925. ),
  926. TP_fast_assign(
  927. __entry->task_id = rqst->rq_task->tk_pid;
  928. __entry->client_id = rqst->rq_task->tk_client ?
  929. rqst->rq_task->tk_client->cl_clid : -1;
  930. __entry->xid = be32_to_cpu(rqst->rq_xid);
  931. __entry->seqno = rqst->rq_seqno;
  932. __entry->status = status;
  933. ),
  934. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  935. " xid=0x%08x seqno=%u status=%d",
  936. __entry->task_id, __entry->client_id, __entry->xid,
  937. __entry->seqno, __entry->status)
  938. );
  939. TRACE_EVENT(xprt_retransmit,
  940. TP_PROTO(
  941. const struct rpc_rqst *rqst
  942. ),
  943. TP_ARGS(rqst),
  944. TP_STRUCT__entry(
  945. __field(unsigned int, task_id)
  946. __field(unsigned int, client_id)
  947. __field(u32, xid)
  948. __field(int, ntrans)
  949. __field(int, version)
  950. __field(unsigned long, timeout)
  951. __string(progname,
  952. rqst->rq_task->tk_client->cl_program->name)
  953. __string(procname, rpc_proc_name(rqst->rq_task))
  954. ),
  955. TP_fast_assign(
  956. struct rpc_task *task = rqst->rq_task;
  957. __entry->task_id = task->tk_pid;
  958. __entry->client_id = task->tk_client ?
  959. task->tk_client->cl_clid : -1;
  960. __entry->xid = be32_to_cpu(rqst->rq_xid);
  961. __entry->ntrans = rqst->rq_ntrans;
  962. __entry->timeout = task->tk_timeout;
  963. __assign_str(progname);
  964. __entry->version = task->tk_client->cl_vers;
  965. __assign_str(procname);
  966. ),
  967. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  968. " xid=0x%08x %sv%d %s ntrans=%d timeout=%lu",
  969. __entry->task_id, __entry->client_id, __entry->xid,
  970. __get_str(progname), __entry->version, __get_str(procname),
  971. __entry->ntrans, __entry->timeout
  972. )
  973. );
  974. TRACE_EVENT(xprt_ping,
  975. TP_PROTO(const struct rpc_xprt *xprt, int status),
  976. TP_ARGS(xprt, status),
  977. TP_STRUCT__entry(
  978. __field(int, status)
  979. __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
  980. __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
  981. ),
  982. TP_fast_assign(
  983. __entry->status = status;
  984. __assign_str(addr);
  985. __assign_str(port);
  986. ),
  987. TP_printk("peer=[%s]:%s status=%d",
  988. __get_str(addr), __get_str(port), __entry->status)
  989. );
  990. DECLARE_EVENT_CLASS(xprt_writelock_event,
  991. TP_PROTO(
  992. const struct rpc_xprt *xprt, const struct rpc_task *task
  993. ),
  994. TP_ARGS(xprt, task),
  995. TP_STRUCT__entry(
  996. __field(unsigned int, task_id)
  997. __field(unsigned int, client_id)
  998. __field(unsigned int, snd_task_id)
  999. ),
  1000. TP_fast_assign(
  1001. if (task) {
  1002. __entry->task_id = task->tk_pid;
  1003. __entry->client_id = task->tk_client ?
  1004. task->tk_client->cl_clid : -1;
  1005. } else {
  1006. __entry->task_id = -1;
  1007. __entry->client_id = -1;
  1008. }
  1009. if (xprt->snd_task &&
  1010. !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
  1011. __entry->snd_task_id = xprt->snd_task->tk_pid;
  1012. else
  1013. __entry->snd_task_id = -1;
  1014. ),
  1015. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  1016. " snd_task:" SUNRPC_TRACE_PID_SPECIFIER,
  1017. __entry->task_id, __entry->client_id,
  1018. __entry->snd_task_id)
  1019. );
  1020. #define DEFINE_WRITELOCK_EVENT(name) \
  1021. DEFINE_EVENT(xprt_writelock_event, xprt_##name, \
  1022. TP_PROTO( \
  1023. const struct rpc_xprt *xprt, \
  1024. const struct rpc_task *task \
  1025. ), \
  1026. TP_ARGS(xprt, task))
  1027. DEFINE_WRITELOCK_EVENT(reserve_xprt);
  1028. DEFINE_WRITELOCK_EVENT(release_xprt);
  1029. DECLARE_EVENT_CLASS(xprt_cong_event,
  1030. TP_PROTO(
  1031. const struct rpc_xprt *xprt, const struct rpc_task *task
  1032. ),
  1033. TP_ARGS(xprt, task),
  1034. TP_STRUCT__entry(
  1035. __field(unsigned int, task_id)
  1036. __field(unsigned int, client_id)
  1037. __field(unsigned int, snd_task_id)
  1038. __field(unsigned long, cong)
  1039. __field(unsigned long, cwnd)
  1040. __field(bool, wait)
  1041. ),
  1042. TP_fast_assign(
  1043. if (task) {
  1044. __entry->task_id = task->tk_pid;
  1045. __entry->client_id = task->tk_client ?
  1046. task->tk_client->cl_clid : -1;
  1047. } else {
  1048. __entry->task_id = -1;
  1049. __entry->client_id = -1;
  1050. }
  1051. if (xprt->snd_task &&
  1052. !test_bit(XPRT_SND_IS_COOKIE, &xprt->state))
  1053. __entry->snd_task_id = xprt->snd_task->tk_pid;
  1054. else
  1055. __entry->snd_task_id = -1;
  1056. __entry->cong = xprt->cong;
  1057. __entry->cwnd = xprt->cwnd;
  1058. __entry->wait = test_bit(XPRT_CWND_WAIT, &xprt->state);
  1059. ),
  1060. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  1061. " snd_task:" SUNRPC_TRACE_PID_SPECIFIER
  1062. " cong=%lu cwnd=%lu%s",
  1063. __entry->task_id, __entry->client_id,
  1064. __entry->snd_task_id, __entry->cong, __entry->cwnd,
  1065. __entry->wait ? " (wait)" : "")
  1066. );
  1067. #define DEFINE_CONG_EVENT(name) \
  1068. DEFINE_EVENT(xprt_cong_event, xprt_##name, \
  1069. TP_PROTO( \
  1070. const struct rpc_xprt *xprt, \
  1071. const struct rpc_task *task \
  1072. ), \
  1073. TP_ARGS(xprt, task))
  1074. DEFINE_CONG_EVENT(reserve_cong);
  1075. DEFINE_CONG_EVENT(release_cong);
  1076. DEFINE_CONG_EVENT(get_cong);
  1077. DEFINE_CONG_EVENT(put_cong);
  1078. TRACE_EVENT(xprt_reserve,
  1079. TP_PROTO(
  1080. const struct rpc_rqst *rqst
  1081. ),
  1082. TP_ARGS(rqst),
  1083. TP_STRUCT__entry(
  1084. __field(unsigned int, task_id)
  1085. __field(unsigned int, client_id)
  1086. __field(u32, xid)
  1087. ),
  1088. TP_fast_assign(
  1089. __entry->task_id = rqst->rq_task->tk_pid;
  1090. __entry->client_id = rqst->rq_task->tk_client->cl_clid;
  1091. __entry->xid = be32_to_cpu(rqst->rq_xid);
  1092. ),
  1093. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x",
  1094. __entry->task_id, __entry->client_id, __entry->xid
  1095. )
  1096. );
  1097. TRACE_EVENT(xs_data_ready,
  1098. TP_PROTO(
  1099. const struct rpc_xprt *xprt
  1100. ),
  1101. TP_ARGS(xprt),
  1102. TP_STRUCT__entry(
  1103. __string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
  1104. __string(port, xprt->address_strings[RPC_DISPLAY_PORT])
  1105. ),
  1106. TP_fast_assign(
  1107. __assign_str(addr);
  1108. __assign_str(port);
  1109. ),
  1110. TP_printk("peer=[%s]:%s", __get_str(addr), __get_str(port))
  1111. );
  1112. TRACE_EVENT(xs_stream_read_data,
  1113. TP_PROTO(struct rpc_xprt *xprt, ssize_t err, size_t total),
  1114. TP_ARGS(xprt, err, total),
  1115. TP_STRUCT__entry(
  1116. __field(ssize_t, err)
  1117. __field(size_t, total)
  1118. __string(addr, xprt ? xprt->address_strings[RPC_DISPLAY_ADDR] :
  1119. EVENT_NULL_STR)
  1120. __string(port, xprt ? xprt->address_strings[RPC_DISPLAY_PORT] :
  1121. EVENT_NULL_STR)
  1122. ),
  1123. TP_fast_assign(
  1124. __entry->err = err;
  1125. __entry->total = total;
  1126. __assign_str(addr);
  1127. __assign_str(port);
  1128. ),
  1129. TP_printk("peer=[%s]:%s err=%zd total=%zu", __get_str(addr),
  1130. __get_str(port), __entry->err, __entry->total)
  1131. );
  1132. TRACE_EVENT(xs_stream_read_request,
  1133. TP_PROTO(struct sock_xprt *xs),
  1134. TP_ARGS(xs),
  1135. TP_STRUCT__entry(
  1136. __string(addr, xs->xprt.address_strings[RPC_DISPLAY_ADDR])
  1137. __string(port, xs->xprt.address_strings[RPC_DISPLAY_PORT])
  1138. __field(u32, xid)
  1139. __field(unsigned long, copied)
  1140. __field(unsigned int, reclen)
  1141. __field(unsigned int, offset)
  1142. ),
  1143. TP_fast_assign(
  1144. __assign_str(addr);
  1145. __assign_str(port);
  1146. __entry->xid = be32_to_cpu(xs->recv.xid);
  1147. __entry->copied = xs->recv.copied;
  1148. __entry->reclen = xs->recv.len;
  1149. __entry->offset = xs->recv.offset;
  1150. ),
  1151. TP_printk("peer=[%s]:%s xid=0x%08x copied=%lu reclen=%u offset=%u",
  1152. __get_str(addr), __get_str(port), __entry->xid,
  1153. __entry->copied, __entry->reclen, __entry->offset)
  1154. );
  1155. TRACE_EVENT(rpcb_getport,
  1156. TP_PROTO(
  1157. const struct rpc_clnt *clnt,
  1158. const struct rpc_task *task,
  1159. unsigned int bind_version
  1160. ),
  1161. TP_ARGS(clnt, task, bind_version),
  1162. TP_STRUCT__entry(
  1163. __field(unsigned int, task_id)
  1164. __field(unsigned int, client_id)
  1165. __field(unsigned int, program)
  1166. __field(unsigned int, version)
  1167. __field(int, protocol)
  1168. __field(unsigned int, bind_version)
  1169. __string(servername, task->tk_xprt->servername)
  1170. ),
  1171. TP_fast_assign(
  1172. __entry->task_id = task->tk_pid;
  1173. __entry->client_id = clnt->cl_clid;
  1174. __entry->program = clnt->cl_prog;
  1175. __entry->version = clnt->cl_vers;
  1176. __entry->protocol = task->tk_xprt->prot;
  1177. __entry->bind_version = bind_version;
  1178. __assign_str(servername);
  1179. ),
  1180. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
  1181. " server=%s program=%u version=%u protocol=%d bind_version=%u",
  1182. __entry->task_id, __entry->client_id, __get_str(servername),
  1183. __entry->program, __entry->version, __entry->protocol,
  1184. __entry->bind_version
  1185. )
  1186. );
  1187. TRACE_EVENT(rpcb_setport,
  1188. TP_PROTO(
  1189. const struct rpc_task *task,
  1190. int status,
  1191. unsigned short port
  1192. ),
  1193. TP_ARGS(task, status, port),
  1194. TP_STRUCT__entry(
  1195. __field(unsigned int, task_id)
  1196. __field(unsigned int, client_id)
  1197. __field(int, status)
  1198. __field(unsigned short, port)
  1199. ),
  1200. TP_fast_assign(
  1201. __entry->task_id = task->tk_pid;
  1202. __entry->client_id = task->tk_client->cl_clid;
  1203. __entry->status = status;
  1204. __entry->port = port;
  1205. ),
  1206. TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " status=%d port=%u",
  1207. __entry->task_id, __entry->client_id,
  1208. __entry->status, __entry->port
  1209. )
  1210. );
  1211. TRACE_EVENT(pmap_register,
  1212. TP_PROTO(
  1213. u32 program,
  1214. u32 version,
  1215. int protocol,
  1216. unsigned short port
  1217. ),
  1218. TP_ARGS(program, version, protocol, port),
  1219. TP_STRUCT__entry(
  1220. __field(unsigned int, program)
  1221. __field(unsigned int, version)
  1222. __field(int, protocol)
  1223. __field(unsigned int, port)
  1224. ),
  1225. TP_fast_assign(
  1226. __entry->program = program;
  1227. __entry->version = version;
  1228. __entry->protocol = protocol;
  1229. __entry->port = port;
  1230. ),
  1231. TP_printk("program=%u version=%u protocol=%d port=%u",
  1232. __entry->program, __entry->version,
  1233. __entry->protocol, __entry->port
  1234. )
  1235. );
  1236. TRACE_EVENT(rpcb_register,
  1237. TP_PROTO(
  1238. u32 program,
  1239. u32 version,
  1240. const char *addr,
  1241. const char *netid
  1242. ),
  1243. TP_ARGS(program, version, addr, netid),
  1244. TP_STRUCT__entry(
  1245. __field(unsigned int, program)
  1246. __field(unsigned int, version)
  1247. __string(addr, addr)
  1248. __string(netid, netid)
  1249. ),
  1250. TP_fast_assign(
  1251. __entry->program = program;
  1252. __entry->version = version;
  1253. __assign_str(addr);
  1254. __assign_str(netid);
  1255. ),
  1256. TP_printk("program=%u version=%u addr=%s netid=%s",
  1257. __entry->program, __entry->version,
  1258. __get_str(addr), __get_str(netid)
  1259. )
  1260. );
  1261. TRACE_EVENT(rpcb_unregister,
  1262. TP_PROTO(
  1263. u32 program,
  1264. u32 version,
  1265. const char *netid
  1266. ),
  1267. TP_ARGS(program, version, netid),
  1268. TP_STRUCT__entry(
  1269. __field(unsigned int, program)
  1270. __field(unsigned int, version)
  1271. __string(netid, netid)
  1272. ),
  1273. TP_fast_assign(
  1274. __entry->program = program;
  1275. __entry->version = version;
  1276. __assign_str(netid);
  1277. ),
  1278. TP_printk("program=%u version=%u netid=%s",
  1279. __entry->program, __entry->version, __get_str(netid)
  1280. )
  1281. );
  1282. /**
  1283. ** RPC-over-TLS tracepoints
  1284. **/
  1285. DECLARE_EVENT_CLASS(rpc_tls_class,
  1286. TP_PROTO(
  1287. const struct rpc_clnt *clnt,
  1288. const struct rpc_xprt *xprt
  1289. ),
  1290. TP_ARGS(clnt, xprt),
  1291. TP_STRUCT__entry(
  1292. __field(unsigned long, requested_policy)
  1293. __field(u32, version)
  1294. __string(servername, xprt->servername)
  1295. __string(progname, clnt->cl_program->name)
  1296. ),
  1297. TP_fast_assign(
  1298. __entry->requested_policy = clnt->cl_xprtsec.policy;
  1299. __entry->version = clnt->cl_vers;
  1300. __assign_str(servername);
  1301. __assign_str(progname);
  1302. ),
  1303. TP_printk("server=%s %sv%u requested_policy=%s",
  1304. __get_str(servername), __get_str(progname), __entry->version,
  1305. rpc_show_xprtsec_policy(__entry->requested_policy)
  1306. )
  1307. );
  1308. #define DEFINE_RPC_TLS_EVENT(name) \
  1309. DEFINE_EVENT(rpc_tls_class, rpc_tls_##name, \
  1310. TP_PROTO( \
  1311. const struct rpc_clnt *clnt, \
  1312. const struct rpc_xprt *xprt \
  1313. ), \
  1314. TP_ARGS(clnt, xprt))
  1315. DEFINE_RPC_TLS_EVENT(unavailable);
  1316. DEFINE_RPC_TLS_EVENT(not_started);
  1317. /* Record an xdr_buf containing a fully-formed RPC message */
  1318. DECLARE_EVENT_CLASS(svc_xdr_msg_class,
  1319. TP_PROTO(
  1320. const struct xdr_buf *xdr
  1321. ),
  1322. TP_ARGS(xdr),
  1323. TP_STRUCT__entry(
  1324. __field(u32, xid)
  1325. __field(const void *, head_base)
  1326. __field(size_t, head_len)
  1327. __field(const void *, tail_base)
  1328. __field(size_t, tail_len)
  1329. __field(unsigned int, page_len)
  1330. __field(unsigned int, msg_len)
  1331. ),
  1332. TP_fast_assign(
  1333. __be32 *p = (__be32 *)xdr->head[0].iov_base;
  1334. __entry->xid = be32_to_cpu(*p);
  1335. __entry->head_base = p;
  1336. __entry->head_len = xdr->head[0].iov_len;
  1337. __entry->tail_base = xdr->tail[0].iov_base;
  1338. __entry->tail_len = xdr->tail[0].iov_len;
  1339. __entry->page_len = xdr->page_len;
  1340. __entry->msg_len = xdr->len;
  1341. ),
  1342. TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
  1343. __entry->xid,
  1344. __entry->head_base, __entry->head_len, __entry->page_len,
  1345. __entry->tail_base, __entry->tail_len, __entry->msg_len
  1346. )
  1347. );
  1348. #define DEFINE_SVCXDRMSG_EVENT(name) \
  1349. DEFINE_EVENT(svc_xdr_msg_class, \
  1350. svc_xdr_##name, \
  1351. TP_PROTO( \
  1352. const struct xdr_buf *xdr \
  1353. ), \
  1354. TP_ARGS(xdr))
  1355. DEFINE_SVCXDRMSG_EVENT(recvfrom);
  1356. /* Record an xdr_buf containing arbitrary data, tagged with an XID */
  1357. DECLARE_EVENT_CLASS(svc_xdr_buf_class,
  1358. TP_PROTO(
  1359. __be32 xid,
  1360. const struct xdr_buf *xdr
  1361. ),
  1362. TP_ARGS(xid, xdr),
  1363. TP_STRUCT__entry(
  1364. __field(u32, xid)
  1365. __field(const void *, head_base)
  1366. __field(size_t, head_len)
  1367. __field(const void *, tail_base)
  1368. __field(size_t, tail_len)
  1369. __field(unsigned int, page_base)
  1370. __field(unsigned int, page_len)
  1371. __field(unsigned int, msg_len)
  1372. ),
  1373. TP_fast_assign(
  1374. __entry->xid = be32_to_cpu(xid);
  1375. __entry->head_base = xdr->head[0].iov_base;
  1376. __entry->head_len = xdr->head[0].iov_len;
  1377. __entry->tail_base = xdr->tail[0].iov_base;
  1378. __entry->tail_len = xdr->tail[0].iov_len;
  1379. __entry->page_base = xdr->page_base;
  1380. __entry->page_len = xdr->page_len;
  1381. __entry->msg_len = xdr->len;
  1382. ),
  1383. TP_printk("xid=0x%08x head=[%p,%zu] page=%u(%u) tail=[%p,%zu] len=%u",
  1384. __entry->xid,
  1385. __entry->head_base, __entry->head_len,
  1386. __entry->page_len, __entry->page_base,
  1387. __entry->tail_base, __entry->tail_len,
  1388. __entry->msg_len
  1389. )
  1390. );
  1391. #define DEFINE_SVCXDRBUF_EVENT(name) \
  1392. DEFINE_EVENT(svc_xdr_buf_class, \
  1393. svc_xdr_##name, \
  1394. TP_PROTO( \
  1395. __be32 xid, \
  1396. const struct xdr_buf *xdr \
  1397. ), \
  1398. TP_ARGS(xid, xdr))
  1399. DEFINE_SVCXDRBUF_EVENT(sendto);
  1400. /*
  1401. * from include/linux/sunrpc/svc.h
  1402. */
  1403. #define SVC_RQST_FLAG_LIST \
  1404. svc_rqst_flag(SECURE) \
  1405. svc_rqst_flag(LOCAL) \
  1406. svc_rqst_flag(USEDEFERRAL) \
  1407. svc_rqst_flag(DROPME) \
  1408. svc_rqst_flag(VICTIM) \
  1409. svc_rqst_flag_end(DATA)
  1410. #undef svc_rqst_flag
  1411. #undef svc_rqst_flag_end
  1412. #define svc_rqst_flag(x) TRACE_DEFINE_ENUM(RQ_##x);
  1413. #define svc_rqst_flag_end(x) TRACE_DEFINE_ENUM(RQ_##x);
  1414. SVC_RQST_FLAG_LIST
  1415. #undef svc_rqst_flag
  1416. #undef svc_rqst_flag_end
  1417. #define svc_rqst_flag(x) { BIT(RQ_##x), #x },
  1418. #define svc_rqst_flag_end(x) { BIT(RQ_##x), #x }
  1419. #define show_rqstp_flags(flags) \
  1420. __print_flags(flags, "|", SVC_RQST_FLAG_LIST)
  1421. TRACE_DEFINE_ENUM(SVC_GARBAGE);
  1422. TRACE_DEFINE_ENUM(SVC_SYSERR);
  1423. TRACE_DEFINE_ENUM(SVC_VALID);
  1424. TRACE_DEFINE_ENUM(SVC_NEGATIVE);
  1425. TRACE_DEFINE_ENUM(SVC_OK);
  1426. TRACE_DEFINE_ENUM(SVC_DROP);
  1427. TRACE_DEFINE_ENUM(SVC_CLOSE);
  1428. TRACE_DEFINE_ENUM(SVC_DENIED);
  1429. TRACE_DEFINE_ENUM(SVC_PENDING);
  1430. TRACE_DEFINE_ENUM(SVC_COMPLETE);
  1431. #define show_svc_auth_status(status) \
  1432. __print_symbolic(status, \
  1433. { SVC_GARBAGE, "SVC_GARBAGE" }, \
  1434. { SVC_SYSERR, "SVC_SYSERR" }, \
  1435. { SVC_VALID, "SVC_VALID" }, \
  1436. { SVC_NEGATIVE, "SVC_NEGATIVE" }, \
  1437. { SVC_OK, "SVC_OK" }, \
  1438. { SVC_DROP, "SVC_DROP" }, \
  1439. { SVC_CLOSE, "SVC_CLOSE" }, \
  1440. { SVC_DENIED, "SVC_DENIED" }, \
  1441. { SVC_PENDING, "SVC_PENDING" }, \
  1442. { SVC_COMPLETE, "SVC_COMPLETE" })
  1443. #define SVC_RQST_ENDPOINT_FIELDS(r) \
  1444. __sockaddr(server, (r)->rq_xprt->xpt_locallen) \
  1445. __sockaddr(client, (r)->rq_xprt->xpt_remotelen) \
  1446. __field(unsigned int, netns_ino) \
  1447. __field(u32, xid)
  1448. #define SVC_RQST_ENDPOINT_ASSIGNMENTS(r) \
  1449. do { \
  1450. struct svc_xprt *xprt = (r)->rq_xprt; \
  1451. __assign_sockaddr(server, &xprt->xpt_local, \
  1452. xprt->xpt_locallen); \
  1453. __assign_sockaddr(client, &xprt->xpt_remote, \
  1454. xprt->xpt_remotelen); \
  1455. __entry->netns_ino = xprt->xpt_net->ns.inum; \
  1456. __entry->xid = be32_to_cpu((r)->rq_xid); \
  1457. } while (0)
  1458. #define SVC_RQST_ENDPOINT_FORMAT \
  1459. "xid=0x%08x server=%pISpc client=%pISpc"
  1460. #define SVC_RQST_ENDPOINT_VARARGS \
  1461. __entry->xid, __get_sockaddr(server), __get_sockaddr(client)
  1462. TRACE_EVENT_CONDITION(svc_authenticate,
  1463. TP_PROTO(
  1464. const struct svc_rqst *rqst,
  1465. enum svc_auth_status auth_res
  1466. ),
  1467. TP_ARGS(rqst, auth_res),
  1468. TP_CONDITION(auth_res != SVC_OK && auth_res != SVC_COMPLETE),
  1469. TP_STRUCT__entry(
  1470. SVC_RQST_ENDPOINT_FIELDS(rqst)
  1471. __field(unsigned long, svc_status)
  1472. __field(unsigned long, auth_stat)
  1473. ),
  1474. TP_fast_assign(
  1475. SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
  1476. __entry->svc_status = auth_res;
  1477. __entry->auth_stat = be32_to_cpu(rqst->rq_auth_stat);
  1478. ),
  1479. TP_printk(SVC_RQST_ENDPOINT_FORMAT
  1480. " auth_res=%s auth_stat=%s",
  1481. SVC_RQST_ENDPOINT_VARARGS,
  1482. show_svc_auth_status(__entry->svc_status),
  1483. rpc_show_auth_stat(__entry->auth_stat))
  1484. );
  1485. TRACE_EVENT(svc_process,
  1486. TP_PROTO(const struct svc_rqst *rqst, const char *name),
  1487. TP_ARGS(rqst, name),
  1488. TP_STRUCT__entry(
  1489. __field(u32, xid)
  1490. __field(u32, vers)
  1491. __field(u32, proc)
  1492. __string(service, name)
  1493. __string(procedure, svc_proc_name(rqst))
  1494. __string(addr, rqst->rq_xprt ?
  1495. rqst->rq_xprt->xpt_remotebuf : EVENT_NULL_STR)
  1496. ),
  1497. TP_fast_assign(
  1498. __entry->xid = be32_to_cpu(rqst->rq_xid);
  1499. __entry->vers = rqst->rq_vers;
  1500. __entry->proc = rqst->rq_proc;
  1501. __assign_str(service);
  1502. __assign_str(procedure);
  1503. __assign_str(addr);
  1504. ),
  1505. TP_printk("addr=%s xid=0x%08x service=%s vers=%u proc=%s",
  1506. __get_str(addr), __entry->xid,
  1507. __get_str(service), __entry->vers,
  1508. __get_str(procedure)
  1509. )
  1510. );
  1511. DECLARE_EVENT_CLASS(svc_rqst_event,
  1512. TP_PROTO(
  1513. const struct svc_rqst *rqst
  1514. ),
  1515. TP_ARGS(rqst),
  1516. TP_STRUCT__entry(
  1517. SVC_RQST_ENDPOINT_FIELDS(rqst)
  1518. __field(unsigned long, flags)
  1519. ),
  1520. TP_fast_assign(
  1521. SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
  1522. __entry->flags = rqst->rq_flags;
  1523. ),
  1524. TP_printk(SVC_RQST_ENDPOINT_FORMAT " flags=%s",
  1525. SVC_RQST_ENDPOINT_VARARGS,
  1526. show_rqstp_flags(__entry->flags))
  1527. );
  1528. #define DEFINE_SVC_RQST_EVENT(name) \
  1529. DEFINE_EVENT(svc_rqst_event, svc_##name, \
  1530. TP_PROTO( \
  1531. const struct svc_rqst *rqst \
  1532. ), \
  1533. TP_ARGS(rqst))
  1534. DEFINE_SVC_RQST_EVENT(defer);
  1535. DEFINE_SVC_RQST_EVENT(drop);
  1536. DECLARE_EVENT_CLASS(svc_rqst_status,
  1537. TP_PROTO(
  1538. const struct svc_rqst *rqst,
  1539. int status
  1540. ),
  1541. TP_ARGS(rqst, status),
  1542. TP_STRUCT__entry(
  1543. SVC_RQST_ENDPOINT_FIELDS(rqst)
  1544. __field(int, status)
  1545. __field(unsigned long, flags)
  1546. ),
  1547. TP_fast_assign(
  1548. SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
  1549. __entry->status = status;
  1550. __entry->flags = rqst->rq_flags;
  1551. ),
  1552. TP_printk(SVC_RQST_ENDPOINT_FORMAT " status=%d flags=%s",
  1553. SVC_RQST_ENDPOINT_VARARGS,
  1554. __entry->status, show_rqstp_flags(__entry->flags))
  1555. );
  1556. DEFINE_EVENT(svc_rqst_status, svc_send,
  1557. TP_PROTO(const struct svc_rqst *rqst, int status),
  1558. TP_ARGS(rqst, status));
  1559. TRACE_EVENT(svc_replace_page_err,
  1560. TP_PROTO(const struct svc_rqst *rqst),
  1561. TP_ARGS(rqst),
  1562. TP_STRUCT__entry(
  1563. SVC_RQST_ENDPOINT_FIELDS(rqst)
  1564. __field(const void *, begin)
  1565. __field(const void *, respages)
  1566. __field(const void *, nextpage)
  1567. ),
  1568. TP_fast_assign(
  1569. SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
  1570. __entry->begin = rqst->rq_pages;
  1571. __entry->respages = rqst->rq_respages;
  1572. __entry->nextpage = rqst->rq_next_page;
  1573. ),
  1574. TP_printk(SVC_RQST_ENDPOINT_FORMAT " begin=%p respages=%p nextpage=%p",
  1575. SVC_RQST_ENDPOINT_VARARGS,
  1576. __entry->begin, __entry->respages, __entry->nextpage)
  1577. );
  1578. TRACE_EVENT(svc_stats_latency,
  1579. TP_PROTO(
  1580. const struct svc_rqst *rqst
  1581. ),
  1582. TP_ARGS(rqst),
  1583. TP_STRUCT__entry(
  1584. SVC_RQST_ENDPOINT_FIELDS(rqst)
  1585. __field(unsigned long, execute)
  1586. __string(procedure, svc_proc_name(rqst))
  1587. ),
  1588. TP_fast_assign(
  1589. SVC_RQST_ENDPOINT_ASSIGNMENTS(rqst);
  1590. __entry->execute = ktime_to_us(ktime_sub(ktime_get(),
  1591. rqst->rq_stime));
  1592. __assign_str(procedure);
  1593. ),
  1594. TP_printk(SVC_RQST_ENDPOINT_FORMAT " proc=%s execute-us=%lu",
  1595. SVC_RQST_ENDPOINT_VARARGS,
  1596. __get_str(procedure), __entry->execute)
  1597. );
  1598. /*
  1599. * from include/linux/sunrpc/svc_xprt.h
  1600. */
  1601. #define SVC_XPRT_FLAG_LIST \
  1602. svc_xprt_flag(BUSY) \
  1603. svc_xprt_flag(CONN) \
  1604. svc_xprt_flag(CLOSE) \
  1605. svc_xprt_flag(DATA) \
  1606. svc_xprt_flag(TEMP) \
  1607. svc_xprt_flag(DEAD) \
  1608. svc_xprt_flag(CHNGBUF) \
  1609. svc_xprt_flag(DEFERRED) \
  1610. svc_xprt_flag(OLD) \
  1611. svc_xprt_flag(LISTENER) \
  1612. svc_xprt_flag(CACHE_AUTH) \
  1613. svc_xprt_flag(LOCAL) \
  1614. svc_xprt_flag(KILL_TEMP) \
  1615. svc_xprt_flag(CONG_CTRL) \
  1616. svc_xprt_flag(HANDSHAKE) \
  1617. svc_xprt_flag(TLS_SESSION) \
  1618. svc_xprt_flag_end(PEER_AUTH)
  1619. #undef svc_xprt_flag
  1620. #undef svc_xprt_flag_end
  1621. #define svc_xprt_flag(x) TRACE_DEFINE_ENUM(XPT_##x);
  1622. #define svc_xprt_flag_end(x) TRACE_DEFINE_ENUM(XPT_##x);
  1623. SVC_XPRT_FLAG_LIST
  1624. #undef svc_xprt_flag
  1625. #undef svc_xprt_flag_end
  1626. #define svc_xprt_flag(x) { BIT(XPT_##x), #x },
  1627. #define svc_xprt_flag_end(x) { BIT(XPT_##x), #x }
  1628. #define show_svc_xprt_flags(flags) \
  1629. __print_flags(flags, "|", SVC_XPRT_FLAG_LIST)
  1630. TRACE_EVENT(svc_xprt_create_err,
  1631. TP_PROTO(
  1632. const char *program,
  1633. const char *protocol,
  1634. struct sockaddr *sap,
  1635. size_t salen,
  1636. const struct svc_xprt *xprt
  1637. ),
  1638. TP_ARGS(program, protocol, sap, salen, xprt),
  1639. TP_STRUCT__entry(
  1640. __field(long, error)
  1641. __string(program, program)
  1642. __string(protocol, protocol)
  1643. __sockaddr(addr, salen)
  1644. ),
  1645. TP_fast_assign(
  1646. __entry->error = PTR_ERR(xprt);
  1647. __assign_str(program);
  1648. __assign_str(protocol);
  1649. __assign_sockaddr(addr, sap, salen);
  1650. ),
  1651. TP_printk("addr=%pISpc program=%s protocol=%s error=%ld",
  1652. __get_sockaddr(addr), __get_str(program), __get_str(protocol),
  1653. __entry->error)
  1654. );
  1655. #define SVC_XPRT_ENDPOINT_FIELDS(x) \
  1656. __sockaddr(server, (x)->xpt_locallen) \
  1657. __sockaddr(client, (x)->xpt_remotelen) \
  1658. __field(unsigned long, flags) \
  1659. __field(unsigned int, netns_ino)
  1660. #define SVC_XPRT_ENDPOINT_ASSIGNMENTS(x) \
  1661. do { \
  1662. __assign_sockaddr(server, &(x)->xpt_local, \
  1663. (x)->xpt_locallen); \
  1664. __assign_sockaddr(client, &(x)->xpt_remote, \
  1665. (x)->xpt_remotelen); \
  1666. __entry->flags = (x)->xpt_flags; \
  1667. __entry->netns_ino = (x)->xpt_net->ns.inum; \
  1668. } while (0)
  1669. #define SVC_XPRT_ENDPOINT_FORMAT \
  1670. "server=%pISpc client=%pISpc flags=%s"
  1671. #define SVC_XPRT_ENDPOINT_VARARGS \
  1672. __get_sockaddr(server), __get_sockaddr(client), \
  1673. show_svc_xprt_flags(__entry->flags)
  1674. TRACE_EVENT(svc_xprt_enqueue,
  1675. TP_PROTO(
  1676. const struct svc_xprt *xprt,
  1677. unsigned long flags
  1678. ),
  1679. TP_ARGS(xprt, flags),
  1680. TP_STRUCT__entry(
  1681. SVC_XPRT_ENDPOINT_FIELDS(xprt)
  1682. ),
  1683. TP_fast_assign(
  1684. __assign_sockaddr(server, &xprt->xpt_local,
  1685. xprt->xpt_locallen);
  1686. __assign_sockaddr(client, &xprt->xpt_remote,
  1687. xprt->xpt_remotelen);
  1688. __entry->flags = flags;
  1689. __entry->netns_ino = xprt->xpt_net->ns.inum;
  1690. ),
  1691. TP_printk(SVC_XPRT_ENDPOINT_FORMAT, SVC_XPRT_ENDPOINT_VARARGS)
  1692. );
  1693. TRACE_EVENT(svc_xprt_dequeue,
  1694. TP_PROTO(
  1695. const struct svc_rqst *rqst
  1696. ),
  1697. TP_ARGS(rqst),
  1698. TP_STRUCT__entry(
  1699. SVC_XPRT_ENDPOINT_FIELDS(rqst->rq_xprt)
  1700. __field(unsigned long, wakeup)
  1701. ),
  1702. TP_fast_assign(
  1703. SVC_XPRT_ENDPOINT_ASSIGNMENTS(rqst->rq_xprt);
  1704. __entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
  1705. rqst->rq_qtime));
  1706. ),
  1707. TP_printk(SVC_XPRT_ENDPOINT_FORMAT " wakeup-us=%lu",
  1708. SVC_XPRT_ENDPOINT_VARARGS, __entry->wakeup)
  1709. );
  1710. DECLARE_EVENT_CLASS(svc_xprt_event,
  1711. TP_PROTO(
  1712. const struct svc_xprt *xprt
  1713. ),
  1714. TP_ARGS(xprt),
  1715. TP_STRUCT__entry(
  1716. SVC_XPRT_ENDPOINT_FIELDS(xprt)
  1717. ),
  1718. TP_fast_assign(
  1719. SVC_XPRT_ENDPOINT_ASSIGNMENTS(xprt);
  1720. ),
  1721. TP_printk(SVC_XPRT_ENDPOINT_FORMAT, SVC_XPRT_ENDPOINT_VARARGS)
  1722. );
  1723. #define DEFINE_SVC_XPRT_EVENT(name) \
  1724. DEFINE_EVENT(svc_xprt_event, svc_xprt_##name, \
  1725. TP_PROTO( \
  1726. const struct svc_xprt *xprt \
  1727. ), \
  1728. TP_ARGS(xprt))
  1729. DEFINE_SVC_XPRT_EVENT(no_write_space);
  1730. DEFINE_SVC_XPRT_EVENT(close);
  1731. DEFINE_SVC_XPRT_EVENT(detach);
  1732. DEFINE_SVC_XPRT_EVENT(free);
  1733. #define DEFINE_SVC_TLS_EVENT(name) \
  1734. DEFINE_EVENT(svc_xprt_event, svc_tls_##name, \
  1735. TP_PROTO(const struct svc_xprt *xprt), \
  1736. TP_ARGS(xprt))
  1737. DEFINE_SVC_TLS_EVENT(start);
  1738. DEFINE_SVC_TLS_EVENT(upcall);
  1739. DEFINE_SVC_TLS_EVENT(unavailable);
  1740. DEFINE_SVC_TLS_EVENT(not_started);
  1741. DEFINE_SVC_TLS_EVENT(timed_out);
  1742. TRACE_EVENT(svc_xprt_accept,
  1743. TP_PROTO(
  1744. const struct svc_xprt *xprt,
  1745. const char *service
  1746. ),
  1747. TP_ARGS(xprt, service),
  1748. TP_STRUCT__entry(
  1749. SVC_XPRT_ENDPOINT_FIELDS(xprt)
  1750. __string(protocol, xprt->xpt_class->xcl_name)
  1751. __string(service, service)
  1752. ),
  1753. TP_fast_assign(
  1754. SVC_XPRT_ENDPOINT_ASSIGNMENTS(xprt);
  1755. __assign_str(protocol);
  1756. __assign_str(service);
  1757. ),
  1758. TP_printk(SVC_XPRT_ENDPOINT_FORMAT " protocol=%s service=%s",
  1759. SVC_XPRT_ENDPOINT_VARARGS,
  1760. __get_str(protocol), __get_str(service)
  1761. )
  1762. );
  1763. TRACE_EVENT(svc_wake_up,
  1764. TP_PROTO(int pid),
  1765. TP_ARGS(pid),
  1766. TP_STRUCT__entry(
  1767. __field(int, pid)
  1768. ),
  1769. TP_fast_assign(
  1770. __entry->pid = pid;
  1771. ),
  1772. TP_printk("pid=%d", __entry->pid)
  1773. );
  1774. TRACE_EVENT(svc_alloc_arg_err,
  1775. TP_PROTO(
  1776. unsigned int requested,
  1777. unsigned int allocated
  1778. ),
  1779. TP_ARGS(requested, allocated),
  1780. TP_STRUCT__entry(
  1781. __field(unsigned int, requested)
  1782. __field(unsigned int, allocated)
  1783. ),
  1784. TP_fast_assign(
  1785. __entry->requested = requested;
  1786. __entry->allocated = allocated;
  1787. ),
  1788. TP_printk("requested=%u allocated=%u",
  1789. __entry->requested, __entry->allocated)
  1790. );
  1791. DECLARE_EVENT_CLASS(svc_deferred_event,
  1792. TP_PROTO(
  1793. const struct svc_deferred_req *dr
  1794. ),
  1795. TP_ARGS(dr),
  1796. TP_STRUCT__entry(
  1797. __field(const void *, dr)
  1798. __field(u32, xid)
  1799. __sockaddr(addr, dr->addrlen)
  1800. ),
  1801. TP_fast_assign(
  1802. __entry->dr = dr;
  1803. __entry->xid = be32_to_cpu(*(__be32 *)dr->args);
  1804. __assign_sockaddr(addr, &dr->addr, dr->addrlen);
  1805. ),
  1806. TP_printk("addr=%pISpc dr=%p xid=0x%08x", __get_sockaddr(addr),
  1807. __entry->dr, __entry->xid)
  1808. );
  1809. #define DEFINE_SVC_DEFERRED_EVENT(name) \
  1810. DEFINE_EVENT(svc_deferred_event, svc_defer_##name, \
  1811. TP_PROTO( \
  1812. const struct svc_deferred_req *dr \
  1813. ), \
  1814. TP_ARGS(dr))
  1815. DEFINE_SVC_DEFERRED_EVENT(drop);
  1816. DEFINE_SVC_DEFERRED_EVENT(queue);
  1817. DEFINE_SVC_DEFERRED_EVENT(recv);
  1818. DECLARE_EVENT_CLASS(svcsock_lifetime_class,
  1819. TP_PROTO(
  1820. const void *svsk,
  1821. const struct socket *socket
  1822. ),
  1823. TP_ARGS(svsk, socket),
  1824. TP_STRUCT__entry(
  1825. __field(unsigned int, netns_ino)
  1826. __field(const void *, svsk)
  1827. __field(const void *, sk)
  1828. __field(unsigned long, type)
  1829. __field(unsigned long, family)
  1830. __field(unsigned long, state)
  1831. ),
  1832. TP_fast_assign(
  1833. struct sock *sk = socket->sk;
  1834. __entry->netns_ino = sock_net(sk)->ns.inum;
  1835. __entry->svsk = svsk;
  1836. __entry->sk = sk;
  1837. __entry->type = socket->type;
  1838. __entry->family = sk->sk_family;
  1839. __entry->state = sk->sk_state;
  1840. ),
  1841. TP_printk("svsk=%p type=%s family=%s%s",
  1842. __entry->svsk, show_socket_type(__entry->type),
  1843. rpc_show_address_family(__entry->family),
  1844. __entry->state == TCP_LISTEN ? " (listener)" : ""
  1845. )
  1846. );
  1847. #define DEFINE_SVCSOCK_LIFETIME_EVENT(name) \
  1848. DEFINE_EVENT(svcsock_lifetime_class, name, \
  1849. TP_PROTO( \
  1850. const void *svsk, \
  1851. const struct socket *socket \
  1852. ), \
  1853. TP_ARGS(svsk, socket))
  1854. DEFINE_SVCSOCK_LIFETIME_EVENT(svcsock_new);
  1855. DEFINE_SVCSOCK_LIFETIME_EVENT(svcsock_free);
  1856. TRACE_EVENT(svcsock_marker,
  1857. TP_PROTO(
  1858. const struct svc_xprt *xprt,
  1859. __be32 marker
  1860. ),
  1861. TP_ARGS(xprt, marker),
  1862. TP_STRUCT__entry(
  1863. __field(unsigned int, length)
  1864. __field(bool, last)
  1865. __string(addr, xprt->xpt_remotebuf)
  1866. ),
  1867. TP_fast_assign(
  1868. __entry->length = be32_to_cpu(marker) & RPC_FRAGMENT_SIZE_MASK;
  1869. __entry->last = be32_to_cpu(marker) & RPC_LAST_STREAM_FRAGMENT;
  1870. __assign_str(addr);
  1871. ),
  1872. TP_printk("addr=%s length=%u%s", __get_str(addr),
  1873. __entry->length, __entry->last ? " (last)" : "")
  1874. );
  1875. DECLARE_EVENT_CLASS(svcsock_class,
  1876. TP_PROTO(
  1877. const struct svc_xprt *xprt,
  1878. ssize_t result
  1879. ),
  1880. TP_ARGS(xprt, result),
  1881. TP_STRUCT__entry(
  1882. __field(ssize_t, result)
  1883. __field(unsigned long, flags)
  1884. __string(addr, xprt->xpt_remotebuf)
  1885. ),
  1886. TP_fast_assign(
  1887. __entry->result = result;
  1888. __entry->flags = xprt->xpt_flags;
  1889. __assign_str(addr);
  1890. ),
  1891. TP_printk("addr=%s result=%zd flags=%s", __get_str(addr),
  1892. __entry->result, show_svc_xprt_flags(__entry->flags)
  1893. )
  1894. );
  1895. #define DEFINE_SVCSOCK_EVENT(name) \
  1896. DEFINE_EVENT(svcsock_class, svcsock_##name, \
  1897. TP_PROTO( \
  1898. const struct svc_xprt *xprt, \
  1899. ssize_t result \
  1900. ), \
  1901. TP_ARGS(xprt, result))
  1902. DEFINE_SVCSOCK_EVENT(udp_send);
  1903. DEFINE_SVCSOCK_EVENT(udp_recv);
  1904. DEFINE_SVCSOCK_EVENT(udp_recv_err);
  1905. DEFINE_SVCSOCK_EVENT(tcp_send);
  1906. DEFINE_SVCSOCK_EVENT(tcp_recv);
  1907. DEFINE_SVCSOCK_EVENT(tcp_recv_eagain);
  1908. DEFINE_SVCSOCK_EVENT(tcp_recv_err);
  1909. DEFINE_SVCSOCK_EVENT(data_ready);
  1910. DEFINE_SVCSOCK_EVENT(write_space);
  1911. TRACE_EVENT(svcsock_tcp_recv_short,
  1912. TP_PROTO(
  1913. const struct svc_xprt *xprt,
  1914. u32 expected,
  1915. u32 received
  1916. ),
  1917. TP_ARGS(xprt, expected, received),
  1918. TP_STRUCT__entry(
  1919. __field(u32, expected)
  1920. __field(u32, received)
  1921. __field(unsigned long, flags)
  1922. __string(addr, xprt->xpt_remotebuf)
  1923. ),
  1924. TP_fast_assign(
  1925. __entry->expected = expected;
  1926. __entry->received = received;
  1927. __entry->flags = xprt->xpt_flags;
  1928. __assign_str(addr);
  1929. ),
  1930. TP_printk("addr=%s flags=%s expected=%u received=%u",
  1931. __get_str(addr), show_svc_xprt_flags(__entry->flags),
  1932. __entry->expected, __entry->received
  1933. )
  1934. );
  1935. TRACE_EVENT(svcsock_tcp_state,
  1936. TP_PROTO(
  1937. const struct svc_xprt *xprt,
  1938. const struct socket *socket
  1939. ),
  1940. TP_ARGS(xprt, socket),
  1941. TP_STRUCT__entry(
  1942. __field(unsigned long, socket_state)
  1943. __field(unsigned long, sock_state)
  1944. __field(unsigned long, flags)
  1945. __string(addr, xprt->xpt_remotebuf)
  1946. ),
  1947. TP_fast_assign(
  1948. __entry->socket_state = socket->state;
  1949. __entry->sock_state = socket->sk->sk_state;
  1950. __entry->flags = xprt->xpt_flags;
  1951. __assign_str(addr);
  1952. ),
  1953. TP_printk("addr=%s state=%s sk_state=%s flags=%s", __get_str(addr),
  1954. rpc_show_socket_state(__entry->socket_state),
  1955. rpc_show_sock_state(__entry->sock_state),
  1956. show_svc_xprt_flags(__entry->flags)
  1957. )
  1958. );
  1959. DECLARE_EVENT_CLASS(svcsock_accept_class,
  1960. TP_PROTO(
  1961. const struct svc_xprt *xprt,
  1962. const char *service,
  1963. long status
  1964. ),
  1965. TP_ARGS(xprt, service, status),
  1966. TP_STRUCT__entry(
  1967. __field(long, status)
  1968. __string(service, service)
  1969. __field(unsigned int, netns_ino)
  1970. ),
  1971. TP_fast_assign(
  1972. __entry->status = status;
  1973. __assign_str(service);
  1974. __entry->netns_ino = xprt->xpt_net->ns.inum;
  1975. ),
  1976. TP_printk("addr=listener service=%s status=%ld",
  1977. __get_str(service), __entry->status
  1978. )
  1979. );
  1980. #define DEFINE_ACCEPT_EVENT(name) \
  1981. DEFINE_EVENT(svcsock_accept_class, svcsock_##name##_err, \
  1982. TP_PROTO( \
  1983. const struct svc_xprt *xprt, \
  1984. const char *service, \
  1985. long status \
  1986. ), \
  1987. TP_ARGS(xprt, service, status))
  1988. DEFINE_ACCEPT_EVENT(accept);
  1989. DEFINE_ACCEPT_EVENT(getpeername);
  1990. DECLARE_EVENT_CLASS(cache_event,
  1991. TP_PROTO(
  1992. const struct cache_detail *cd,
  1993. const struct cache_head *h
  1994. ),
  1995. TP_ARGS(cd, h),
  1996. TP_STRUCT__entry(
  1997. __field(const struct cache_head *, h)
  1998. __string(name, cd->name)
  1999. ),
  2000. TP_fast_assign(
  2001. __entry->h = h;
  2002. __assign_str(name);
  2003. ),
  2004. TP_printk("cache=%s entry=%p", __get_str(name), __entry->h)
  2005. );
  2006. #define DEFINE_CACHE_EVENT(name) \
  2007. DEFINE_EVENT(cache_event, name, \
  2008. TP_PROTO( \
  2009. const struct cache_detail *cd, \
  2010. const struct cache_head *h \
  2011. ), \
  2012. TP_ARGS(cd, h))
  2013. DEFINE_CACHE_EVENT(cache_entry_expired);
  2014. DEFINE_CACHE_EVENT(cache_entry_upcall);
  2015. DEFINE_CACHE_EVENT(cache_entry_update);
  2016. DEFINE_CACHE_EVENT(cache_entry_make_negative);
  2017. DEFINE_CACHE_EVENT(cache_entry_no_listener);
  2018. DECLARE_EVENT_CLASS(register_class,
  2019. TP_PROTO(
  2020. const char *program,
  2021. const u32 version,
  2022. const int family,
  2023. const unsigned short protocol,
  2024. const unsigned short port,
  2025. int error
  2026. ),
  2027. TP_ARGS(program, version, family, protocol, port, error),
  2028. TP_STRUCT__entry(
  2029. __field(u32, version)
  2030. __field(unsigned long, family)
  2031. __field(unsigned short, protocol)
  2032. __field(unsigned short, port)
  2033. __field(int, error)
  2034. __string(program, program)
  2035. ),
  2036. TP_fast_assign(
  2037. __entry->version = version;
  2038. __entry->family = family;
  2039. __entry->protocol = protocol;
  2040. __entry->port = port;
  2041. __entry->error = error;
  2042. __assign_str(program);
  2043. ),
  2044. TP_printk("program=%sv%u proto=%s port=%u family=%s error=%d",
  2045. __get_str(program), __entry->version,
  2046. __entry->protocol == IPPROTO_UDP ? "udp" : "tcp",
  2047. __entry->port, rpc_show_address_family(__entry->family),
  2048. __entry->error
  2049. )
  2050. );
  2051. #define DEFINE_REGISTER_EVENT(name) \
  2052. DEFINE_EVENT(register_class, svc_##name, \
  2053. TP_PROTO( \
  2054. const char *program, \
  2055. const u32 version, \
  2056. const int family, \
  2057. const unsigned short protocol, \
  2058. const unsigned short port, \
  2059. int error \
  2060. ), \
  2061. TP_ARGS(program, version, family, protocol, \
  2062. port, error))
  2063. DEFINE_REGISTER_EVENT(register);
  2064. DEFINE_REGISTER_EVENT(noregister);
  2065. TRACE_EVENT(svc_unregister,
  2066. TP_PROTO(
  2067. const char *program,
  2068. const u32 version,
  2069. int error
  2070. ),
  2071. TP_ARGS(program, version, error),
  2072. TP_STRUCT__entry(
  2073. __field(u32, version)
  2074. __field(int, error)
  2075. __string(program, program)
  2076. ),
  2077. TP_fast_assign(
  2078. __entry->version = version;
  2079. __entry->error = error;
  2080. __assign_str(program);
  2081. ),
  2082. TP_printk("program=%sv%u error=%d",
  2083. __get_str(program), __entry->version, __entry->error
  2084. )
  2085. );
  2086. #endif /* _TRACE_SUNRPC_H */
  2087. #include <trace/define_trace.h>