afs.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. /* AFS tracepoints
  2. *
  3. * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
  4. * Written by David Howells (dhowells@redhat.com)
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public Licence
  8. * as published by the Free Software Foundation; either version
  9. * 2 of the Licence, or (at your option) any later version.
  10. */
  11. #undef TRACE_SYSTEM
  12. #define TRACE_SYSTEM afs
  13. #if !defined(_TRACE_AFS_H) || defined(TRACE_HEADER_MULTI_READ)
  14. #define _TRACE_AFS_H
  15. #include <linux/tracepoint.h>
  16. /*
  17. * Define enums for tracing information.
  18. */
  19. #ifndef __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
  20. #define __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
  21. enum afs_call_trace {
  22. afs_call_trace_alloc,
  23. afs_call_trace_free,
  24. afs_call_trace_put,
  25. afs_call_trace_wake,
  26. afs_call_trace_work,
  27. };
  28. enum afs_fs_operation {
  29. afs_FS_FetchData = 130, /* AFS Fetch file data */
  30. afs_FS_FetchStatus = 132, /* AFS Fetch file status */
  31. afs_FS_StoreData = 133, /* AFS Store file data */
  32. afs_FS_StoreStatus = 135, /* AFS Store file status */
  33. afs_FS_RemoveFile = 136, /* AFS Remove a file */
  34. afs_FS_CreateFile = 137, /* AFS Create a file */
  35. afs_FS_Rename = 138, /* AFS Rename or move a file or directory */
  36. afs_FS_Symlink = 139, /* AFS Create a symbolic link */
  37. afs_FS_Link = 140, /* AFS Create a hard link */
  38. afs_FS_MakeDir = 141, /* AFS Create a directory */
  39. afs_FS_RemoveDir = 142, /* AFS Remove a directory */
  40. afs_FS_GetVolumeInfo = 148, /* AFS Get information about a volume */
  41. afs_FS_GetVolumeStatus = 149, /* AFS Get volume status information */
  42. afs_FS_GetRootVolume = 151, /* AFS Get root volume name */
  43. afs_FS_SetLock = 156, /* AFS Request a file lock */
  44. afs_FS_ExtendLock = 157, /* AFS Extend a file lock */
  45. afs_FS_ReleaseLock = 158, /* AFS Release a file lock */
  46. afs_FS_Lookup = 161, /* AFS lookup file in directory */
  47. afs_FS_InlineBulkStatus = 65536, /* AFS Fetch multiple file statuses with errors */
  48. afs_FS_FetchData64 = 65537, /* AFS Fetch file data */
  49. afs_FS_StoreData64 = 65538, /* AFS Store file data */
  50. afs_FS_GiveUpAllCallBacks = 65539, /* AFS Give up all our callbacks on a server */
  51. afs_FS_GetCapabilities = 65540, /* AFS Get FS server capabilities */
  52. };
  53. enum afs_vl_operation {
  54. afs_VL_GetEntryByNameU = 527, /* AFS Get Vol Entry By Name operation ID */
  55. afs_VL_GetAddrsU = 533, /* AFS Get FS server addresses */
  56. afs_YFSVL_GetEndpoints = 64002, /* YFS Get FS & Vol server addresses */
  57. afs_VL_GetCapabilities = 65537, /* AFS Get VL server capabilities */
  58. };
  59. enum afs_edit_dir_op {
  60. afs_edit_dir_create,
  61. afs_edit_dir_create_error,
  62. afs_edit_dir_create_inval,
  63. afs_edit_dir_create_nospc,
  64. afs_edit_dir_delete,
  65. afs_edit_dir_delete_error,
  66. afs_edit_dir_delete_inval,
  67. afs_edit_dir_delete_noent,
  68. };
  69. enum afs_edit_dir_reason {
  70. afs_edit_dir_for_create,
  71. afs_edit_dir_for_link,
  72. afs_edit_dir_for_mkdir,
  73. afs_edit_dir_for_rename,
  74. afs_edit_dir_for_rmdir,
  75. afs_edit_dir_for_symlink,
  76. afs_edit_dir_for_unlink,
  77. };
  78. #endif /* end __AFS_DECLARE_TRACE_ENUMS_ONCE_ONLY */
  79. /*
  80. * Declare tracing information enums and their string mappings for display.
  81. */
  82. #define afs_call_traces \
  83. EM(afs_call_trace_alloc, "ALLOC") \
  84. EM(afs_call_trace_free, "FREE ") \
  85. EM(afs_call_trace_put, "PUT ") \
  86. EM(afs_call_trace_wake, "WAKE ") \
  87. E_(afs_call_trace_work, "QUEUE")
  88. #define afs_fs_operations \
  89. EM(afs_FS_FetchData, "FS.FetchData") \
  90. EM(afs_FS_FetchStatus, "FS.FetchStatus") \
  91. EM(afs_FS_StoreData, "FS.StoreData") \
  92. EM(afs_FS_StoreStatus, "FS.StoreStatus") \
  93. EM(afs_FS_RemoveFile, "FS.RemoveFile") \
  94. EM(afs_FS_CreateFile, "FS.CreateFile") \
  95. EM(afs_FS_Rename, "FS.Rename") \
  96. EM(afs_FS_Symlink, "FS.Symlink") \
  97. EM(afs_FS_Link, "FS.Link") \
  98. EM(afs_FS_MakeDir, "FS.MakeDir") \
  99. EM(afs_FS_RemoveDir, "FS.RemoveDir") \
  100. EM(afs_FS_GetVolumeInfo, "FS.GetVolumeInfo") \
  101. EM(afs_FS_GetVolumeStatus, "FS.GetVolumeStatus") \
  102. EM(afs_FS_GetRootVolume, "FS.GetRootVolume") \
  103. EM(afs_FS_SetLock, "FS.SetLock") \
  104. EM(afs_FS_ExtendLock, "FS.ExtendLock") \
  105. EM(afs_FS_ReleaseLock, "FS.ReleaseLock") \
  106. EM(afs_FS_Lookup, "FS.Lookup") \
  107. EM(afs_FS_InlineBulkStatus, "FS.InlineBulkStatus") \
  108. EM(afs_FS_FetchData64, "FS.FetchData64") \
  109. EM(afs_FS_StoreData64, "FS.StoreData64") \
  110. EM(afs_FS_GiveUpAllCallBacks, "FS.GiveUpAllCallBacks") \
  111. E_(afs_FS_GetCapabilities, "FS.GetCapabilities")
  112. #define afs_vl_operations \
  113. EM(afs_VL_GetEntryByNameU, "VL.GetEntryByNameU") \
  114. EM(afs_VL_GetAddrsU, "VL.GetAddrsU") \
  115. EM(afs_YFSVL_GetEndpoints, "YFSVL.GetEndpoints") \
  116. E_(afs_VL_GetCapabilities, "VL.GetCapabilities")
  117. #define afs_edit_dir_ops \
  118. EM(afs_edit_dir_create, "create") \
  119. EM(afs_edit_dir_create_error, "c_fail") \
  120. EM(afs_edit_dir_create_inval, "c_invl") \
  121. EM(afs_edit_dir_create_nospc, "c_nspc") \
  122. EM(afs_edit_dir_delete, "delete") \
  123. EM(afs_edit_dir_delete_error, "d_err ") \
  124. EM(afs_edit_dir_delete_inval, "d_invl") \
  125. E_(afs_edit_dir_delete_noent, "d_nent")
  126. #define afs_edit_dir_reasons \
  127. EM(afs_edit_dir_for_create, "Create") \
  128. EM(afs_edit_dir_for_link, "Link ") \
  129. EM(afs_edit_dir_for_mkdir, "MkDir ") \
  130. EM(afs_edit_dir_for_rename, "Rename") \
  131. EM(afs_edit_dir_for_rmdir, "RmDir ") \
  132. EM(afs_edit_dir_for_symlink, "Symlnk") \
  133. E_(afs_edit_dir_for_unlink, "Unlink")
  134. /*
  135. * Export enum symbols via userspace.
  136. */
  137. #undef EM
  138. #undef E_
  139. #define EM(a, b) TRACE_DEFINE_ENUM(a);
  140. #define E_(a, b) TRACE_DEFINE_ENUM(a);
  141. afs_call_traces;
  142. afs_fs_operations;
  143. afs_vl_operations;
  144. afs_edit_dir_ops;
  145. afs_edit_dir_reasons;
  146. /*
  147. * Now redefine the EM() and E_() macros to map the enums to the strings that
  148. * will be printed in the output.
  149. */
  150. #undef EM
  151. #undef E_
  152. #define EM(a, b) { a, b },
  153. #define E_(a, b) { a, b }
  154. TRACE_EVENT(afs_recv_data,
  155. TP_PROTO(struct afs_call *call, unsigned count, unsigned offset,
  156. bool want_more, int ret),
  157. TP_ARGS(call, count, offset, want_more, ret),
  158. TP_STRUCT__entry(
  159. __field(unsigned int, call )
  160. __field(enum afs_call_state, state )
  161. __field(unsigned int, count )
  162. __field(unsigned int, offset )
  163. __field(unsigned short, unmarshall )
  164. __field(bool, want_more )
  165. __field(int, ret )
  166. ),
  167. TP_fast_assign(
  168. __entry->call = call->debug_id;
  169. __entry->state = call->state;
  170. __entry->unmarshall = call->unmarshall;
  171. __entry->count = count;
  172. __entry->offset = offset;
  173. __entry->want_more = want_more;
  174. __entry->ret = ret;
  175. ),
  176. TP_printk("c=%08x s=%u u=%u %u/%u wm=%u ret=%d",
  177. __entry->call,
  178. __entry->state, __entry->unmarshall,
  179. __entry->offset, __entry->count,
  180. __entry->want_more, __entry->ret)
  181. );
  182. TRACE_EVENT(afs_notify_call,
  183. TP_PROTO(struct rxrpc_call *rxcall, struct afs_call *call),
  184. TP_ARGS(rxcall, call),
  185. TP_STRUCT__entry(
  186. __field(unsigned int, call )
  187. __field(enum afs_call_state, state )
  188. __field(unsigned short, unmarshall )
  189. ),
  190. TP_fast_assign(
  191. __entry->call = call->debug_id;
  192. __entry->state = call->state;
  193. __entry->unmarshall = call->unmarshall;
  194. ),
  195. TP_printk("c=%08x s=%u u=%u",
  196. __entry->call,
  197. __entry->state, __entry->unmarshall)
  198. );
  199. TRACE_EVENT(afs_cb_call,
  200. TP_PROTO(struct afs_call *call),
  201. TP_ARGS(call),
  202. TP_STRUCT__entry(
  203. __field(unsigned int, call )
  204. __field(const char *, name )
  205. __field(u32, op )
  206. ),
  207. TP_fast_assign(
  208. __entry->call = call->debug_id;
  209. __entry->name = call->type->name;
  210. __entry->op = call->operation_ID;
  211. ),
  212. TP_printk("c=%08x %s o=%u",
  213. __entry->call,
  214. __entry->name,
  215. __entry->op)
  216. );
  217. TRACE_EVENT(afs_call,
  218. TP_PROTO(struct afs_call *call, enum afs_call_trace op,
  219. int usage, int outstanding, const void *where),
  220. TP_ARGS(call, op, usage, outstanding, where),
  221. TP_STRUCT__entry(
  222. __field(unsigned int, call )
  223. __field(int, op )
  224. __field(int, usage )
  225. __field(int, outstanding )
  226. __field(const void *, where )
  227. ),
  228. TP_fast_assign(
  229. __entry->call = call->debug_id;
  230. __entry->op = op;
  231. __entry->usage = usage;
  232. __entry->outstanding = outstanding;
  233. __entry->where = where;
  234. ),
  235. TP_printk("c=%08x %s u=%d o=%d sp=%pSR",
  236. __entry->call,
  237. __print_symbolic(__entry->op, afs_call_traces),
  238. __entry->usage,
  239. __entry->outstanding,
  240. __entry->where)
  241. );
  242. TRACE_EVENT(afs_make_fs_call,
  243. TP_PROTO(struct afs_call *call, const struct afs_fid *fid),
  244. TP_ARGS(call, fid),
  245. TP_STRUCT__entry(
  246. __field(unsigned int, call )
  247. __field(enum afs_fs_operation, op )
  248. __field_struct(struct afs_fid, fid )
  249. ),
  250. TP_fast_assign(
  251. __entry->call = call->debug_id;
  252. __entry->op = call->operation_ID;
  253. if (fid) {
  254. __entry->fid = *fid;
  255. } else {
  256. __entry->fid.vid = 0;
  257. __entry->fid.vnode = 0;
  258. __entry->fid.unique = 0;
  259. }
  260. ),
  261. TP_printk("c=%08x %06x:%06x:%06x %s",
  262. __entry->call,
  263. __entry->fid.vid,
  264. __entry->fid.vnode,
  265. __entry->fid.unique,
  266. __print_symbolic(__entry->op, afs_fs_operations))
  267. );
  268. TRACE_EVENT(afs_make_vl_call,
  269. TP_PROTO(struct afs_call *call),
  270. TP_ARGS(call),
  271. TP_STRUCT__entry(
  272. __field(unsigned int, call )
  273. __field(enum afs_vl_operation, op )
  274. ),
  275. TP_fast_assign(
  276. __entry->call = call->debug_id;
  277. __entry->op = call->operation_ID;
  278. ),
  279. TP_printk("c=%08x %s",
  280. __entry->call,
  281. __print_symbolic(__entry->op, afs_vl_operations))
  282. );
  283. TRACE_EVENT(afs_call_done,
  284. TP_PROTO(struct afs_call *call),
  285. TP_ARGS(call),
  286. TP_STRUCT__entry(
  287. __field(unsigned int, call )
  288. __field(struct rxrpc_call *, rx_call )
  289. __field(int, ret )
  290. __field(u32, abort_code )
  291. ),
  292. TP_fast_assign(
  293. __entry->call = call->debug_id;
  294. __entry->rx_call = call->rxcall;
  295. __entry->ret = call->error;
  296. __entry->abort_code = call->abort_code;
  297. ),
  298. TP_printk(" c=%08x ret=%d ab=%d [%p]",
  299. __entry->call,
  300. __entry->ret,
  301. __entry->abort_code,
  302. __entry->rx_call)
  303. );
  304. TRACE_EVENT(afs_send_pages,
  305. TP_PROTO(struct afs_call *call, struct msghdr *msg,
  306. pgoff_t first, pgoff_t last, unsigned int offset),
  307. TP_ARGS(call, msg, first, last, offset),
  308. TP_STRUCT__entry(
  309. __field(unsigned int, call )
  310. __field(pgoff_t, first )
  311. __field(pgoff_t, last )
  312. __field(unsigned int, nr )
  313. __field(unsigned int, bytes )
  314. __field(unsigned int, offset )
  315. __field(unsigned int, flags )
  316. ),
  317. TP_fast_assign(
  318. __entry->call = call->debug_id;
  319. __entry->first = first;
  320. __entry->last = last;
  321. __entry->nr = msg->msg_iter.nr_segs;
  322. __entry->bytes = msg->msg_iter.count;
  323. __entry->offset = offset;
  324. __entry->flags = msg->msg_flags;
  325. ),
  326. TP_printk(" c=%08x %lx-%lx-%lx b=%x o=%x f=%x",
  327. __entry->call,
  328. __entry->first, __entry->first + __entry->nr - 1, __entry->last,
  329. __entry->bytes, __entry->offset,
  330. __entry->flags)
  331. );
  332. TRACE_EVENT(afs_sent_pages,
  333. TP_PROTO(struct afs_call *call, pgoff_t first, pgoff_t last,
  334. pgoff_t cursor, int ret),
  335. TP_ARGS(call, first, last, cursor, ret),
  336. TP_STRUCT__entry(
  337. __field(unsigned int, call )
  338. __field(pgoff_t, first )
  339. __field(pgoff_t, last )
  340. __field(pgoff_t, cursor )
  341. __field(int, ret )
  342. ),
  343. TP_fast_assign(
  344. __entry->call = call->debug_id;
  345. __entry->first = first;
  346. __entry->last = last;
  347. __entry->cursor = cursor;
  348. __entry->ret = ret;
  349. ),
  350. TP_printk(" c=%08x %lx-%lx c=%lx r=%d",
  351. __entry->call,
  352. __entry->first, __entry->last,
  353. __entry->cursor, __entry->ret)
  354. );
  355. TRACE_EVENT(afs_dir_check_failed,
  356. TP_PROTO(struct afs_vnode *vnode, loff_t off, loff_t i_size),
  357. TP_ARGS(vnode, off, i_size),
  358. TP_STRUCT__entry(
  359. __field(struct afs_vnode *, vnode )
  360. __field(loff_t, off )
  361. __field(loff_t, i_size )
  362. ),
  363. TP_fast_assign(
  364. __entry->vnode = vnode;
  365. __entry->off = off;
  366. __entry->i_size = i_size;
  367. ),
  368. TP_printk("vn=%p %llx/%llx",
  369. __entry->vnode, __entry->off, __entry->i_size)
  370. );
  371. /*
  372. * We use page->private to hold the amount of the page that we've written to,
  373. * splitting the field into two parts. However, we need to represent a range
  374. * 0...PAGE_SIZE inclusive, so we can't support 64K pages on a 32-bit system.
  375. */
  376. #if PAGE_SIZE > 32768
  377. #define AFS_PRIV_MAX 0xffffffff
  378. #define AFS_PRIV_SHIFT 32
  379. #else
  380. #define AFS_PRIV_MAX 0xffff
  381. #define AFS_PRIV_SHIFT 16
  382. #endif
  383. TRACE_EVENT(afs_page_dirty,
  384. TP_PROTO(struct afs_vnode *vnode, const char *where,
  385. pgoff_t page, unsigned long priv),
  386. TP_ARGS(vnode, where, page, priv),
  387. TP_STRUCT__entry(
  388. __field(struct afs_vnode *, vnode )
  389. __field(const char *, where )
  390. __field(pgoff_t, page )
  391. __field(unsigned long, priv )
  392. ),
  393. TP_fast_assign(
  394. __entry->vnode = vnode;
  395. __entry->where = where;
  396. __entry->page = page;
  397. __entry->priv = priv;
  398. ),
  399. TP_printk("vn=%p %lx %s %lu-%lu",
  400. __entry->vnode, __entry->page, __entry->where,
  401. __entry->priv & AFS_PRIV_MAX,
  402. __entry->priv >> AFS_PRIV_SHIFT)
  403. );
  404. TRACE_EVENT(afs_call_state,
  405. TP_PROTO(struct afs_call *call,
  406. enum afs_call_state from,
  407. enum afs_call_state to,
  408. int ret, u32 remote_abort),
  409. TP_ARGS(call, from, to, ret, remote_abort),
  410. TP_STRUCT__entry(
  411. __field(unsigned int, call )
  412. __field(enum afs_call_state, from )
  413. __field(enum afs_call_state, to )
  414. __field(int, ret )
  415. __field(u32, abort )
  416. ),
  417. TP_fast_assign(
  418. __entry->call = call->debug_id;
  419. __entry->from = from;
  420. __entry->to = to;
  421. __entry->ret = ret;
  422. __entry->abort = remote_abort;
  423. ),
  424. TP_printk("c=%08x %u->%u r=%d ab=%d",
  425. __entry->call,
  426. __entry->from, __entry->to,
  427. __entry->ret, __entry->abort)
  428. );
  429. TRACE_EVENT(afs_edit_dir,
  430. TP_PROTO(struct afs_vnode *dvnode,
  431. enum afs_edit_dir_reason why,
  432. enum afs_edit_dir_op op,
  433. unsigned int block,
  434. unsigned int slot,
  435. unsigned int f_vnode,
  436. unsigned int f_unique,
  437. const char *name),
  438. TP_ARGS(dvnode, why, op, block, slot, f_vnode, f_unique, name),
  439. TP_STRUCT__entry(
  440. __field(unsigned int, vnode )
  441. __field(unsigned int, unique )
  442. __field(enum afs_edit_dir_reason, why )
  443. __field(enum afs_edit_dir_op, op )
  444. __field(unsigned int, block )
  445. __field(unsigned short, slot )
  446. __field(unsigned int, f_vnode )
  447. __field(unsigned int, f_unique )
  448. __array(char, name, 18 )
  449. ),
  450. TP_fast_assign(
  451. int __len = strlen(name);
  452. __len = min(__len, 17);
  453. __entry->vnode = dvnode->fid.vnode;
  454. __entry->unique = dvnode->fid.unique;
  455. __entry->why = why;
  456. __entry->op = op;
  457. __entry->block = block;
  458. __entry->slot = slot;
  459. __entry->f_vnode = f_vnode;
  460. __entry->f_unique = f_unique;
  461. memcpy(__entry->name, name, __len);
  462. __entry->name[__len] = 0;
  463. ),
  464. TP_printk("d=%x:%x %s %s %u[%u] f=%x:%x %s",
  465. __entry->vnode, __entry->unique,
  466. __print_symbolic(__entry->why, afs_edit_dir_reasons),
  467. __print_symbolic(__entry->op, afs_edit_dir_ops),
  468. __entry->block, __entry->slot,
  469. __entry->f_vnode, __entry->f_unique,
  470. __entry->name)
  471. );
  472. TRACE_EVENT(afs_protocol_error,
  473. TP_PROTO(struct afs_call *call, int error, const void *where),
  474. TP_ARGS(call, error, where),
  475. TP_STRUCT__entry(
  476. __field(unsigned int, call )
  477. __field(int, error )
  478. __field(const void *, where )
  479. ),
  480. TP_fast_assign(
  481. __entry->call = call ? call->debug_id : 0;
  482. __entry->error = error;
  483. __entry->where = where;
  484. ),
  485. TP_printk("c=%08x r=%d sp=%pSR",
  486. __entry->call, __entry->error, __entry->where)
  487. );
  488. TRACE_EVENT(afs_cm_no_server,
  489. TP_PROTO(struct afs_call *call, struct sockaddr_rxrpc *srx),
  490. TP_ARGS(call, srx),
  491. TP_STRUCT__entry(
  492. __field(unsigned int, call )
  493. __field(unsigned int, op_id )
  494. __field_struct(struct sockaddr_rxrpc, srx )
  495. ),
  496. TP_fast_assign(
  497. __entry->call = call->debug_id;
  498. __entry->op_id = call->operation_ID;
  499. memcpy(&__entry->srx, srx, sizeof(__entry->srx));
  500. ),
  501. TP_printk("c=%08x op=%u %pISpc",
  502. __entry->call, __entry->op_id, &__entry->srx.transport)
  503. );
  504. TRACE_EVENT(afs_cm_no_server_u,
  505. TP_PROTO(struct afs_call *call, const uuid_t *uuid),
  506. TP_ARGS(call, uuid),
  507. TP_STRUCT__entry(
  508. __field(unsigned int, call )
  509. __field(unsigned int, op_id )
  510. __field_struct(uuid_t, uuid )
  511. ),
  512. TP_fast_assign(
  513. __entry->call = call->debug_id;
  514. __entry->op_id = call->operation_ID;
  515. memcpy(&__entry->uuid, uuid, sizeof(__entry->uuid));
  516. ),
  517. TP_printk("c=%08x op=%u %pU",
  518. __entry->call, __entry->op_id, &__entry->uuid)
  519. );
  520. #endif /* _TRACE_AFS_H */
  521. /* This part must be outside protection */
  522. #include <trace/define_trace.h>