trace.h 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2018, Microsoft Corporation.
  4. *
  5. * Author(s): Steve French <[email protected]>
  6. */
  7. #undef TRACE_SYSTEM
  8. #define TRACE_SYSTEM cifs
  9. #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  10. #define _CIFS_TRACE_H
  11. #include <linux/tracepoint.h>
  12. #include <linux/net.h>
  13. #include <linux/inet.h>
  14. /*
  15. * Please use this 3-part article as a reference for writing new tracepoints:
  16. * https://lwn.net/Articles/379903/
  17. */
  18. /* For logging errors in read or write */
  19. DECLARE_EVENT_CLASS(smb3_rw_err_class,
  20. TP_PROTO(unsigned int xid,
  21. __u64 fid,
  22. __u32 tid,
  23. __u64 sesid,
  24. __u64 offset,
  25. __u32 len,
  26. int rc),
  27. TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
  28. TP_STRUCT__entry(
  29. __field(unsigned int, xid)
  30. __field(__u64, fid)
  31. __field(__u32, tid)
  32. __field(__u64, sesid)
  33. __field(__u64, offset)
  34. __field(__u32, len)
  35. __field(int, rc)
  36. ),
  37. TP_fast_assign(
  38. __entry->xid = xid;
  39. __entry->fid = fid;
  40. __entry->tid = tid;
  41. __entry->sesid = sesid;
  42. __entry->offset = offset;
  43. __entry->len = len;
  44. __entry->rc = rc;
  45. ),
  46. TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
  47. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  48. __entry->offset, __entry->len, __entry->rc)
  49. )
  50. #define DEFINE_SMB3_RW_ERR_EVENT(name) \
  51. DEFINE_EVENT(smb3_rw_err_class, smb3_##name, \
  52. TP_PROTO(unsigned int xid, \
  53. __u64 fid, \
  54. __u32 tid, \
  55. __u64 sesid, \
  56. __u64 offset, \
  57. __u32 len, \
  58. int rc), \
  59. TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
  60. DEFINE_SMB3_RW_ERR_EVENT(write_err);
  61. DEFINE_SMB3_RW_ERR_EVENT(read_err);
  62. DEFINE_SMB3_RW_ERR_EVENT(query_dir_err);
  63. DEFINE_SMB3_RW_ERR_EVENT(zero_err);
  64. DEFINE_SMB3_RW_ERR_EVENT(falloc_err);
  65. /* For logging successful read or write */
  66. DECLARE_EVENT_CLASS(smb3_rw_done_class,
  67. TP_PROTO(unsigned int xid,
  68. __u64 fid,
  69. __u32 tid,
  70. __u64 sesid,
  71. __u64 offset,
  72. __u32 len),
  73. TP_ARGS(xid, fid, tid, sesid, offset, len),
  74. TP_STRUCT__entry(
  75. __field(unsigned int, xid)
  76. __field(__u64, fid)
  77. __field(__u32, tid)
  78. __field(__u64, sesid)
  79. __field(__u64, offset)
  80. __field(__u32, len)
  81. ),
  82. TP_fast_assign(
  83. __entry->xid = xid;
  84. __entry->fid = fid;
  85. __entry->tid = tid;
  86. __entry->sesid = sesid;
  87. __entry->offset = offset;
  88. __entry->len = len;
  89. ),
  90. TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
  91. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  92. __entry->offset, __entry->len)
  93. )
  94. #define DEFINE_SMB3_RW_DONE_EVENT(name) \
  95. DEFINE_EVENT(smb3_rw_done_class, smb3_##name, \
  96. TP_PROTO(unsigned int xid, \
  97. __u64 fid, \
  98. __u32 tid, \
  99. __u64 sesid, \
  100. __u64 offset, \
  101. __u32 len), \
  102. TP_ARGS(xid, fid, tid, sesid, offset, len))
  103. DEFINE_SMB3_RW_DONE_EVENT(write_enter);
  104. DEFINE_SMB3_RW_DONE_EVENT(read_enter);
  105. DEFINE_SMB3_RW_DONE_EVENT(query_dir_enter);
  106. DEFINE_SMB3_RW_DONE_EVENT(zero_enter);
  107. DEFINE_SMB3_RW_DONE_EVENT(falloc_enter);
  108. DEFINE_SMB3_RW_DONE_EVENT(write_done);
  109. DEFINE_SMB3_RW_DONE_EVENT(read_done);
  110. DEFINE_SMB3_RW_DONE_EVENT(query_dir_done);
  111. DEFINE_SMB3_RW_DONE_EVENT(zero_done);
  112. DEFINE_SMB3_RW_DONE_EVENT(falloc_done);
  113. /* For logging successful set EOF (truncate) */
  114. DECLARE_EVENT_CLASS(smb3_eof_class,
  115. TP_PROTO(unsigned int xid,
  116. __u64 fid,
  117. __u32 tid,
  118. __u64 sesid,
  119. __u64 offset),
  120. TP_ARGS(xid, fid, tid, sesid, offset),
  121. TP_STRUCT__entry(
  122. __field(unsigned int, xid)
  123. __field(__u64, fid)
  124. __field(__u32, tid)
  125. __field(__u64, sesid)
  126. __field(__u64, offset)
  127. ),
  128. TP_fast_assign(
  129. __entry->xid = xid;
  130. __entry->fid = fid;
  131. __entry->tid = tid;
  132. __entry->sesid = sesid;
  133. __entry->offset = offset;
  134. ),
  135. TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx",
  136. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  137. __entry->offset)
  138. )
  139. #define DEFINE_SMB3_EOF_EVENT(name) \
  140. DEFINE_EVENT(smb3_eof_class, smb3_##name, \
  141. TP_PROTO(unsigned int xid, \
  142. __u64 fid, \
  143. __u32 tid, \
  144. __u64 sesid, \
  145. __u64 offset), \
  146. TP_ARGS(xid, fid, tid, sesid, offset))
  147. DEFINE_SMB3_EOF_EVENT(set_eof);
  148. /*
  149. * For handle based calls other than read and write, and get/set info
  150. */
  151. DECLARE_EVENT_CLASS(smb3_fd_class,
  152. TP_PROTO(unsigned int xid,
  153. __u64 fid,
  154. __u32 tid,
  155. __u64 sesid),
  156. TP_ARGS(xid, fid, tid, sesid),
  157. TP_STRUCT__entry(
  158. __field(unsigned int, xid)
  159. __field(__u64, fid)
  160. __field(__u32, tid)
  161. __field(__u64, sesid)
  162. ),
  163. TP_fast_assign(
  164. __entry->xid = xid;
  165. __entry->fid = fid;
  166. __entry->tid = tid;
  167. __entry->sesid = sesid;
  168. ),
  169. TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx",
  170. __entry->xid, __entry->sesid, __entry->tid, __entry->fid)
  171. )
  172. #define DEFINE_SMB3_FD_EVENT(name) \
  173. DEFINE_EVENT(smb3_fd_class, smb3_##name, \
  174. TP_PROTO(unsigned int xid, \
  175. __u64 fid, \
  176. __u32 tid, \
  177. __u64 sesid), \
  178. TP_ARGS(xid, fid, tid, sesid))
  179. DEFINE_SMB3_FD_EVENT(flush_enter);
  180. DEFINE_SMB3_FD_EVENT(flush_done);
  181. DEFINE_SMB3_FD_EVENT(close_enter);
  182. DEFINE_SMB3_FD_EVENT(close_done);
  183. DEFINE_SMB3_FD_EVENT(oplock_not_found);
  184. DECLARE_EVENT_CLASS(smb3_fd_err_class,
  185. TP_PROTO(unsigned int xid,
  186. __u64 fid,
  187. __u32 tid,
  188. __u64 sesid,
  189. int rc),
  190. TP_ARGS(xid, fid, tid, sesid, rc),
  191. TP_STRUCT__entry(
  192. __field(unsigned int, xid)
  193. __field(__u64, fid)
  194. __field(__u32, tid)
  195. __field(__u64, sesid)
  196. __field(int, rc)
  197. ),
  198. TP_fast_assign(
  199. __entry->xid = xid;
  200. __entry->fid = fid;
  201. __entry->tid = tid;
  202. __entry->sesid = sesid;
  203. __entry->rc = rc;
  204. ),
  205. TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
  206. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  207. __entry->rc)
  208. )
  209. #define DEFINE_SMB3_FD_ERR_EVENT(name) \
  210. DEFINE_EVENT(smb3_fd_err_class, smb3_##name, \
  211. TP_PROTO(unsigned int xid, \
  212. __u64 fid, \
  213. __u32 tid, \
  214. __u64 sesid, \
  215. int rc), \
  216. TP_ARGS(xid, fid, tid, sesid, rc))
  217. DEFINE_SMB3_FD_ERR_EVENT(flush_err);
  218. DEFINE_SMB3_FD_ERR_EVENT(lock_err);
  219. DEFINE_SMB3_FD_ERR_EVENT(close_err);
  220. /*
  221. * For handle based query/set info calls
  222. */
  223. DECLARE_EVENT_CLASS(smb3_inf_enter_class,
  224. TP_PROTO(unsigned int xid,
  225. __u64 fid,
  226. __u32 tid,
  227. __u64 sesid,
  228. __u8 infclass,
  229. __u32 type),
  230. TP_ARGS(xid, fid, tid, sesid, infclass, type),
  231. TP_STRUCT__entry(
  232. __field(unsigned int, xid)
  233. __field(__u64, fid)
  234. __field(__u32, tid)
  235. __field(__u64, sesid)
  236. __field(__u8, infclass)
  237. __field(__u32, type)
  238. ),
  239. TP_fast_assign(
  240. __entry->xid = xid;
  241. __entry->fid = fid;
  242. __entry->tid = tid;
  243. __entry->sesid = sesid;
  244. __entry->infclass = infclass;
  245. __entry->type = type;
  246. ),
  247. TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x",
  248. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  249. __entry->infclass, __entry->type)
  250. )
  251. #define DEFINE_SMB3_INF_ENTER_EVENT(name) \
  252. DEFINE_EVENT(smb3_inf_enter_class, smb3_##name, \
  253. TP_PROTO(unsigned int xid, \
  254. __u64 fid, \
  255. __u32 tid, \
  256. __u64 sesid, \
  257. __u8 infclass, \
  258. __u32 type), \
  259. TP_ARGS(xid, fid, tid, sesid, infclass, type))
  260. DEFINE_SMB3_INF_ENTER_EVENT(query_info_enter);
  261. DEFINE_SMB3_INF_ENTER_EVENT(query_info_done);
  262. DEFINE_SMB3_INF_ENTER_EVENT(notify_enter);
  263. DEFINE_SMB3_INF_ENTER_EVENT(notify_done);
  264. DECLARE_EVENT_CLASS(smb3_inf_err_class,
  265. TP_PROTO(unsigned int xid,
  266. __u64 fid,
  267. __u32 tid,
  268. __u64 sesid,
  269. __u8 infclass,
  270. __u32 type,
  271. int rc),
  272. TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
  273. TP_STRUCT__entry(
  274. __field(unsigned int, xid)
  275. __field(__u64, fid)
  276. __field(__u32, tid)
  277. __field(__u64, sesid)
  278. __field(__u8, infclass)
  279. __field(__u32, type)
  280. __field(int, rc)
  281. ),
  282. TP_fast_assign(
  283. __entry->xid = xid;
  284. __entry->fid = fid;
  285. __entry->tid = tid;
  286. __entry->sesid = sesid;
  287. __entry->infclass = infclass;
  288. __entry->type = type;
  289. __entry->rc = rc;
  290. ),
  291. TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
  292. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  293. __entry->infclass, __entry->type, __entry->rc)
  294. )
  295. #define DEFINE_SMB3_INF_ERR_EVENT(name) \
  296. DEFINE_EVENT(smb3_inf_err_class, smb3_##name, \
  297. TP_PROTO(unsigned int xid, \
  298. __u64 fid, \
  299. __u32 tid, \
  300. __u64 sesid, \
  301. __u8 infclass, \
  302. __u32 type, \
  303. int rc), \
  304. TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
  305. DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
  306. DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
  307. DEFINE_SMB3_INF_ERR_EVENT(notify_err);
  308. DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
  309. DECLARE_EVENT_CLASS(smb3_inf_compound_enter_class,
  310. TP_PROTO(unsigned int xid,
  311. __u32 tid,
  312. __u64 sesid,
  313. const char *full_path),
  314. TP_ARGS(xid, tid, sesid, full_path),
  315. TP_STRUCT__entry(
  316. __field(unsigned int, xid)
  317. __field(__u32, tid)
  318. __field(__u64, sesid)
  319. __string(path, full_path)
  320. ),
  321. TP_fast_assign(
  322. __entry->xid = xid;
  323. __entry->tid = tid;
  324. __entry->sesid = sesid;
  325. __assign_str(path, full_path);
  326. ),
  327. TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s",
  328. __entry->xid, __entry->sesid, __entry->tid,
  329. __get_str(path))
  330. )
  331. #define DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(name) \
  332. DEFINE_EVENT(smb3_inf_compound_enter_class, smb3_##name, \
  333. TP_PROTO(unsigned int xid, \
  334. __u32 tid, \
  335. __u64 sesid, \
  336. const char *full_path), \
  337. TP_ARGS(xid, tid, sesid, full_path))
  338. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_info_compound_enter);
  339. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(posix_query_info_compound_enter);
  340. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(hardlink_enter);
  341. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rename_enter);
  342. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rmdir_enter);
  343. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_eof_enter);
  344. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_info_compound_enter);
  345. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(delete_enter);
  346. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mkdir_enter);
  347. DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(tdis_enter);
  348. DECLARE_EVENT_CLASS(smb3_inf_compound_done_class,
  349. TP_PROTO(unsigned int xid,
  350. __u32 tid,
  351. __u64 sesid),
  352. TP_ARGS(xid, tid, sesid),
  353. TP_STRUCT__entry(
  354. __field(unsigned int, xid)
  355. __field(__u32, tid)
  356. __field(__u64, sesid)
  357. ),
  358. TP_fast_assign(
  359. __entry->xid = xid;
  360. __entry->tid = tid;
  361. __entry->sesid = sesid;
  362. ),
  363. TP_printk("xid=%u sid=0x%llx tid=0x%x",
  364. __entry->xid, __entry->sesid, __entry->tid)
  365. )
  366. #define DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(name) \
  367. DEFINE_EVENT(smb3_inf_compound_done_class, smb3_##name, \
  368. TP_PROTO(unsigned int xid, \
  369. __u32 tid, \
  370. __u64 sesid), \
  371. TP_ARGS(xid, tid, sesid))
  372. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_info_compound_done);
  373. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(posix_query_info_compound_done);
  374. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(hardlink_done);
  375. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rename_done);
  376. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rmdir_done);
  377. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_eof_done);
  378. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_info_compound_done);
  379. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(delete_done);
  380. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mkdir_done);
  381. DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(tdis_done);
  382. DECLARE_EVENT_CLASS(smb3_inf_compound_err_class,
  383. TP_PROTO(unsigned int xid,
  384. __u32 tid,
  385. __u64 sesid,
  386. int rc),
  387. TP_ARGS(xid, tid, sesid, rc),
  388. TP_STRUCT__entry(
  389. __field(unsigned int, xid)
  390. __field(__u32, tid)
  391. __field(__u64, sesid)
  392. __field(int, rc)
  393. ),
  394. TP_fast_assign(
  395. __entry->xid = xid;
  396. __entry->tid = tid;
  397. __entry->sesid = sesid;
  398. __entry->rc = rc;
  399. ),
  400. TP_printk("xid=%u sid=0x%llx tid=0x%x rc=%d",
  401. __entry->xid, __entry->sesid, __entry->tid,
  402. __entry->rc)
  403. )
  404. #define DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(name) \
  405. DEFINE_EVENT(smb3_inf_compound_err_class, smb3_##name, \
  406. TP_PROTO(unsigned int xid, \
  407. __u32 tid, \
  408. __u64 sesid, \
  409. int rc), \
  410. TP_ARGS(xid, tid, sesid, rc))
  411. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_info_compound_err);
  412. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(posix_query_info_compound_err);
  413. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(hardlink_err);
  414. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rename_err);
  415. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rmdir_err);
  416. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_eof_err);
  417. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_info_compound_err);
  418. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mkdir_err);
  419. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(delete_err);
  420. DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(tdis_err);
  421. /*
  422. * For logging SMB3 Status code and Command for responses which return errors
  423. */
  424. DECLARE_EVENT_CLASS(smb3_cmd_err_class,
  425. TP_PROTO(__u32 tid,
  426. __u64 sesid,
  427. __u16 cmd,
  428. __u64 mid,
  429. __u32 status,
  430. int rc),
  431. TP_ARGS(tid, sesid, cmd, mid, status, rc),
  432. TP_STRUCT__entry(
  433. __field(__u32, tid)
  434. __field(__u64, sesid)
  435. __field(__u16, cmd)
  436. __field(__u64, mid)
  437. __field(__u32, status)
  438. __field(int, rc)
  439. ),
  440. TP_fast_assign(
  441. __entry->tid = tid;
  442. __entry->sesid = sesid;
  443. __entry->cmd = cmd;
  444. __entry->mid = mid;
  445. __entry->status = status;
  446. __entry->rc = rc;
  447. ),
  448. TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
  449. __entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
  450. __entry->status, __entry->rc)
  451. )
  452. #define DEFINE_SMB3_CMD_ERR_EVENT(name) \
  453. DEFINE_EVENT(smb3_cmd_err_class, smb3_##name, \
  454. TP_PROTO(__u32 tid, \
  455. __u64 sesid, \
  456. __u16 cmd, \
  457. __u64 mid, \
  458. __u32 status, \
  459. int rc), \
  460. TP_ARGS(tid, sesid, cmd, mid, status, rc))
  461. DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
  462. DECLARE_EVENT_CLASS(smb3_cmd_done_class,
  463. TP_PROTO(__u32 tid,
  464. __u64 sesid,
  465. __u16 cmd,
  466. __u64 mid),
  467. TP_ARGS(tid, sesid, cmd, mid),
  468. TP_STRUCT__entry(
  469. __field(__u32, tid)
  470. __field(__u64, sesid)
  471. __field(__u16, cmd)
  472. __field(__u64, mid)
  473. ),
  474. TP_fast_assign(
  475. __entry->tid = tid;
  476. __entry->sesid = sesid;
  477. __entry->cmd = cmd;
  478. __entry->mid = mid;
  479. ),
  480. TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu",
  481. __entry->sesid, __entry->tid,
  482. __entry->cmd, __entry->mid)
  483. )
  484. #define DEFINE_SMB3_CMD_DONE_EVENT(name) \
  485. DEFINE_EVENT(smb3_cmd_done_class, smb3_##name, \
  486. TP_PROTO(__u32 tid, \
  487. __u64 sesid, \
  488. __u16 cmd, \
  489. __u64 mid), \
  490. TP_ARGS(tid, sesid, cmd, mid))
  491. DEFINE_SMB3_CMD_DONE_EVENT(cmd_enter);
  492. DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
  493. DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
  494. DECLARE_EVENT_CLASS(smb3_mid_class,
  495. TP_PROTO(__u16 cmd,
  496. __u64 mid,
  497. __u32 pid,
  498. unsigned long when_sent,
  499. unsigned long when_received),
  500. TP_ARGS(cmd, mid, pid, when_sent, when_received),
  501. TP_STRUCT__entry(
  502. __field(__u16, cmd)
  503. __field(__u64, mid)
  504. __field(__u32, pid)
  505. __field(unsigned long, when_sent)
  506. __field(unsigned long, when_received)
  507. ),
  508. TP_fast_assign(
  509. __entry->cmd = cmd;
  510. __entry->mid = mid;
  511. __entry->pid = pid;
  512. __entry->when_sent = when_sent;
  513. __entry->when_received = when_received;
  514. ),
  515. TP_printk("\tcmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
  516. __entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
  517. __entry->when_received)
  518. )
  519. #define DEFINE_SMB3_MID_EVENT(name) \
  520. DEFINE_EVENT(smb3_mid_class, smb3_##name, \
  521. TP_PROTO(__u16 cmd, \
  522. __u64 mid, \
  523. __u32 pid, \
  524. unsigned long when_sent, \
  525. unsigned long when_received), \
  526. TP_ARGS(cmd, mid, pid, when_sent, when_received))
  527. DEFINE_SMB3_MID_EVENT(slow_rsp);
  528. DECLARE_EVENT_CLASS(smb3_exit_err_class,
  529. TP_PROTO(unsigned int xid,
  530. const char *func_name,
  531. int rc),
  532. TP_ARGS(xid, func_name, rc),
  533. TP_STRUCT__entry(
  534. __field(unsigned int, xid)
  535. __string(func_name, func_name)
  536. __field(int, rc)
  537. ),
  538. TP_fast_assign(
  539. __entry->xid = xid;
  540. __assign_str(func_name, func_name);
  541. __entry->rc = rc;
  542. ),
  543. TP_printk("\t%s: xid=%u rc=%d",
  544. __get_str(func_name), __entry->xid, __entry->rc)
  545. )
  546. #define DEFINE_SMB3_EXIT_ERR_EVENT(name) \
  547. DEFINE_EVENT(smb3_exit_err_class, smb3_##name, \
  548. TP_PROTO(unsigned int xid, \
  549. const char *func_name, \
  550. int rc), \
  551. TP_ARGS(xid, func_name, rc))
  552. DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
  553. DECLARE_EVENT_CLASS(smb3_sync_err_class,
  554. TP_PROTO(unsigned long ino,
  555. int rc),
  556. TP_ARGS(ino, rc),
  557. TP_STRUCT__entry(
  558. __field(unsigned long, ino)
  559. __field(int, rc)
  560. ),
  561. TP_fast_assign(
  562. __entry->ino = ino;
  563. __entry->rc = rc;
  564. ),
  565. TP_printk("\tino=%lu rc=%d",
  566. __entry->ino, __entry->rc)
  567. )
  568. #define DEFINE_SMB3_SYNC_ERR_EVENT(name) \
  569. DEFINE_EVENT(smb3_sync_err_class, cifs_##name, \
  570. TP_PROTO(unsigned long ino, \
  571. int rc), \
  572. TP_ARGS(ino, rc))
  573. DEFINE_SMB3_SYNC_ERR_EVENT(fsync_err);
  574. DEFINE_SMB3_SYNC_ERR_EVENT(flush_err);
  575. DECLARE_EVENT_CLASS(smb3_enter_exit_class,
  576. TP_PROTO(unsigned int xid,
  577. const char *func_name),
  578. TP_ARGS(xid, func_name),
  579. TP_STRUCT__entry(
  580. __field(unsigned int, xid)
  581. __string(func_name, func_name)
  582. ),
  583. TP_fast_assign(
  584. __entry->xid = xid;
  585. __assign_str(func_name, func_name);
  586. ),
  587. TP_printk("\t%s: xid=%u",
  588. __get_str(func_name), __entry->xid)
  589. )
  590. #define DEFINE_SMB3_ENTER_EXIT_EVENT(name) \
  591. DEFINE_EVENT(smb3_enter_exit_class, smb3_##name, \
  592. TP_PROTO(unsigned int xid, \
  593. const char *func_name), \
  594. TP_ARGS(xid, func_name))
  595. DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
  596. DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
  597. /*
  598. * For SMB2/SMB3 tree connect
  599. */
  600. DECLARE_EVENT_CLASS(smb3_tcon_class,
  601. TP_PROTO(unsigned int xid,
  602. __u32 tid,
  603. __u64 sesid,
  604. const char *unc_name,
  605. int rc),
  606. TP_ARGS(xid, tid, sesid, unc_name, rc),
  607. TP_STRUCT__entry(
  608. __field(unsigned int, xid)
  609. __field(__u32, tid)
  610. __field(__u64, sesid)
  611. __string(name, unc_name)
  612. __field(int, rc)
  613. ),
  614. TP_fast_assign(
  615. __entry->xid = xid;
  616. __entry->tid = tid;
  617. __entry->sesid = sesid;
  618. __assign_str(name, unc_name);
  619. __entry->rc = rc;
  620. ),
  621. TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d",
  622. __entry->xid, __entry->sesid, __entry->tid,
  623. __get_str(name), __entry->rc)
  624. )
  625. #define DEFINE_SMB3_TCON_EVENT(name) \
  626. DEFINE_EVENT(smb3_tcon_class, smb3_##name, \
  627. TP_PROTO(unsigned int xid, \
  628. __u32 tid, \
  629. __u64 sesid, \
  630. const char *unc_name, \
  631. int rc), \
  632. TP_ARGS(xid, tid, sesid, unc_name, rc))
  633. DEFINE_SMB3_TCON_EVENT(tcon);
  634. /*
  635. * For smb2/smb3 open (including create and mkdir) calls
  636. */
  637. DECLARE_EVENT_CLASS(smb3_open_enter_class,
  638. TP_PROTO(unsigned int xid,
  639. __u32 tid,
  640. __u64 sesid,
  641. const char *full_path,
  642. int create_options,
  643. int desired_access),
  644. TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access),
  645. TP_STRUCT__entry(
  646. __field(unsigned int, xid)
  647. __field(__u32, tid)
  648. __field(__u64, sesid)
  649. __string(path, full_path)
  650. __field(int, create_options)
  651. __field(int, desired_access)
  652. ),
  653. TP_fast_assign(
  654. __entry->xid = xid;
  655. __entry->tid = tid;
  656. __entry->sesid = sesid;
  657. __assign_str(path, full_path);
  658. __entry->create_options = create_options;
  659. __entry->desired_access = desired_access;
  660. ),
  661. TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s cr_opts=0x%x des_access=0x%x",
  662. __entry->xid, __entry->sesid, __entry->tid, __get_str(path),
  663. __entry->create_options, __entry->desired_access)
  664. )
  665. #define DEFINE_SMB3_OPEN_ENTER_EVENT(name) \
  666. DEFINE_EVENT(smb3_open_enter_class, smb3_##name, \
  667. TP_PROTO(unsigned int xid, \
  668. __u32 tid, \
  669. __u64 sesid, \
  670. const char *full_path, \
  671. int create_options, \
  672. int desired_access), \
  673. TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access))
  674. DEFINE_SMB3_OPEN_ENTER_EVENT(open_enter);
  675. DEFINE_SMB3_OPEN_ENTER_EVENT(posix_mkdir_enter);
  676. DECLARE_EVENT_CLASS(smb3_open_err_class,
  677. TP_PROTO(unsigned int xid,
  678. __u32 tid,
  679. __u64 sesid,
  680. int create_options,
  681. int desired_access,
  682. int rc),
  683. TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
  684. TP_STRUCT__entry(
  685. __field(unsigned int, xid)
  686. __field(__u32, tid)
  687. __field(__u64, sesid)
  688. __field(int, create_options)
  689. __field(int, desired_access)
  690. __field(int, rc)
  691. ),
  692. TP_fast_assign(
  693. __entry->xid = xid;
  694. __entry->tid = tid;
  695. __entry->sesid = sesid;
  696. __entry->create_options = create_options;
  697. __entry->desired_access = desired_access;
  698. __entry->rc = rc;
  699. ),
  700. TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
  701. __entry->xid, __entry->sesid, __entry->tid,
  702. __entry->create_options, __entry->desired_access, __entry->rc)
  703. )
  704. #define DEFINE_SMB3_OPEN_ERR_EVENT(name) \
  705. DEFINE_EVENT(smb3_open_err_class, smb3_##name, \
  706. TP_PROTO(unsigned int xid, \
  707. __u32 tid, \
  708. __u64 sesid, \
  709. int create_options, \
  710. int desired_access, \
  711. int rc), \
  712. TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
  713. DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
  714. DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
  715. DECLARE_EVENT_CLASS(smb3_open_done_class,
  716. TP_PROTO(unsigned int xid,
  717. __u64 fid,
  718. __u32 tid,
  719. __u64 sesid,
  720. int create_options,
  721. int desired_access),
  722. TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
  723. TP_STRUCT__entry(
  724. __field(unsigned int, xid)
  725. __field(__u64, fid)
  726. __field(__u32, tid)
  727. __field(__u64, sesid)
  728. __field(int, create_options)
  729. __field(int, desired_access)
  730. ),
  731. TP_fast_assign(
  732. __entry->xid = xid;
  733. __entry->fid = fid;
  734. __entry->tid = tid;
  735. __entry->sesid = sesid;
  736. __entry->create_options = create_options;
  737. __entry->desired_access = desired_access;
  738. ),
  739. TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x",
  740. __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
  741. __entry->create_options, __entry->desired_access)
  742. )
  743. #define DEFINE_SMB3_OPEN_DONE_EVENT(name) \
  744. DEFINE_EVENT(smb3_open_done_class, smb3_##name, \
  745. TP_PROTO(unsigned int xid, \
  746. __u64 fid, \
  747. __u32 tid, \
  748. __u64 sesid, \
  749. int create_options, \
  750. int desired_access), \
  751. TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
  752. DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
  753. DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
  754. DECLARE_EVENT_CLASS(smb3_lease_done_class,
  755. TP_PROTO(__u32 lease_state,
  756. __u32 tid,
  757. __u64 sesid,
  758. __u64 lease_key_low,
  759. __u64 lease_key_high),
  760. TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
  761. TP_STRUCT__entry(
  762. __field(__u32, lease_state)
  763. __field(__u32, tid)
  764. __field(__u64, sesid)
  765. __field(__u64, lease_key_low)
  766. __field(__u64, lease_key_high)
  767. ),
  768. TP_fast_assign(
  769. __entry->lease_state = lease_state;
  770. __entry->tid = tid;
  771. __entry->sesid = sesid;
  772. __entry->lease_key_low = lease_key_low;
  773. __entry->lease_key_high = lease_key_high;
  774. ),
  775. TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
  776. __entry->sesid, __entry->tid, __entry->lease_key_high,
  777. __entry->lease_key_low, __entry->lease_state)
  778. )
  779. #define DEFINE_SMB3_LEASE_DONE_EVENT(name) \
  780. DEFINE_EVENT(smb3_lease_done_class, smb3_##name, \
  781. TP_PROTO(__u32 lease_state, \
  782. __u32 tid, \
  783. __u64 sesid, \
  784. __u64 lease_key_low, \
  785. __u64 lease_key_high), \
  786. TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
  787. DEFINE_SMB3_LEASE_DONE_EVENT(lease_done);
  788. DEFINE_SMB3_LEASE_DONE_EVENT(lease_not_found);
  789. DECLARE_EVENT_CLASS(smb3_lease_err_class,
  790. TP_PROTO(__u32 lease_state,
  791. __u32 tid,
  792. __u64 sesid,
  793. __u64 lease_key_low,
  794. __u64 lease_key_high,
  795. int rc),
  796. TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
  797. TP_STRUCT__entry(
  798. __field(__u32, lease_state)
  799. __field(__u32, tid)
  800. __field(__u64, sesid)
  801. __field(__u64, lease_key_low)
  802. __field(__u64, lease_key_high)
  803. __field(int, rc)
  804. ),
  805. TP_fast_assign(
  806. __entry->lease_state = lease_state;
  807. __entry->tid = tid;
  808. __entry->sesid = sesid;
  809. __entry->lease_key_low = lease_key_low;
  810. __entry->lease_key_high = lease_key_high;
  811. __entry->rc = rc;
  812. ),
  813. TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
  814. __entry->sesid, __entry->tid, __entry->lease_key_high,
  815. __entry->lease_key_low, __entry->lease_state, __entry->rc)
  816. )
  817. #define DEFINE_SMB3_LEASE_ERR_EVENT(name) \
  818. DEFINE_EVENT(smb3_lease_err_class, smb3_##name, \
  819. TP_PROTO(__u32 lease_state, \
  820. __u32 tid, \
  821. __u64 sesid, \
  822. __u64 lease_key_low, \
  823. __u64 lease_key_high, \
  824. int rc), \
  825. TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
  826. DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
  827. DECLARE_EVENT_CLASS(smb3_connect_class,
  828. TP_PROTO(char *hostname,
  829. __u64 conn_id,
  830. const struct __kernel_sockaddr_storage *dst_addr),
  831. TP_ARGS(hostname, conn_id, dst_addr),
  832. TP_STRUCT__entry(
  833. __string(hostname, hostname)
  834. __field(__u64, conn_id)
  835. __array(__u8, dst_addr, sizeof(struct sockaddr_storage))
  836. ),
  837. TP_fast_assign(
  838. struct sockaddr_storage *pss = NULL;
  839. __entry->conn_id = conn_id;
  840. pss = (struct sockaddr_storage *)__entry->dst_addr;
  841. *pss = *dst_addr;
  842. __assign_str(hostname, hostname);
  843. ),
  844. TP_printk("conn_id=0x%llx server=%s addr=%pISpsfc",
  845. __entry->conn_id,
  846. __get_str(hostname),
  847. __entry->dst_addr)
  848. )
  849. #define DEFINE_SMB3_CONNECT_EVENT(name) \
  850. DEFINE_EVENT(smb3_connect_class, smb3_##name, \
  851. TP_PROTO(char *hostname, \
  852. __u64 conn_id, \
  853. const struct __kernel_sockaddr_storage *addr), \
  854. TP_ARGS(hostname, conn_id, addr))
  855. DEFINE_SMB3_CONNECT_EVENT(connect_done);
  856. DECLARE_EVENT_CLASS(smb3_connect_err_class,
  857. TP_PROTO(char *hostname, __u64 conn_id,
  858. const struct __kernel_sockaddr_storage *dst_addr, int rc),
  859. TP_ARGS(hostname, conn_id, dst_addr, rc),
  860. TP_STRUCT__entry(
  861. __string(hostname, hostname)
  862. __field(__u64, conn_id)
  863. __array(__u8, dst_addr, sizeof(struct sockaddr_storage))
  864. __field(int, rc)
  865. ),
  866. TP_fast_assign(
  867. struct sockaddr_storage *pss = NULL;
  868. __entry->conn_id = conn_id;
  869. __entry->rc = rc;
  870. pss = (struct sockaddr_storage *)__entry->dst_addr;
  871. *pss = *dst_addr;
  872. __assign_str(hostname, hostname);
  873. ),
  874. TP_printk("rc=%d conn_id=0x%llx server=%s addr=%pISpsfc",
  875. __entry->rc,
  876. __entry->conn_id,
  877. __get_str(hostname),
  878. __entry->dst_addr)
  879. )
  880. #define DEFINE_SMB3_CONNECT_ERR_EVENT(name) \
  881. DEFINE_EVENT(smb3_connect_err_class, smb3_##name, \
  882. TP_PROTO(char *hostname, \
  883. __u64 conn_id, \
  884. const struct __kernel_sockaddr_storage *addr, \
  885. int rc), \
  886. TP_ARGS(hostname, conn_id, addr, rc))
  887. DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
  888. DECLARE_EVENT_CLASS(smb3_reconnect_class,
  889. TP_PROTO(__u64 currmid,
  890. __u64 conn_id,
  891. char *hostname),
  892. TP_ARGS(currmid, conn_id, hostname),
  893. TP_STRUCT__entry(
  894. __field(__u64, currmid)
  895. __field(__u64, conn_id)
  896. __string(hostname, hostname)
  897. ),
  898. TP_fast_assign(
  899. __entry->currmid = currmid;
  900. __entry->conn_id = conn_id;
  901. __assign_str(hostname, hostname);
  902. ),
  903. TP_printk("conn_id=0x%llx server=%s current_mid=%llu",
  904. __entry->conn_id,
  905. __get_str(hostname),
  906. __entry->currmid)
  907. )
  908. #define DEFINE_SMB3_RECONNECT_EVENT(name) \
  909. DEFINE_EVENT(smb3_reconnect_class, smb3_##name, \
  910. TP_PROTO(__u64 currmid, \
  911. __u64 conn_id, \
  912. char *hostname), \
  913. TP_ARGS(currmid, conn_id, hostname))
  914. DEFINE_SMB3_RECONNECT_EVENT(reconnect);
  915. DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
  916. DECLARE_EVENT_CLASS(smb3_credit_class,
  917. TP_PROTO(__u64 currmid,
  918. __u64 conn_id,
  919. char *hostname,
  920. int credits,
  921. int credits_to_add,
  922. int in_flight),
  923. TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight),
  924. TP_STRUCT__entry(
  925. __field(__u64, currmid)
  926. __field(__u64, conn_id)
  927. __string(hostname, hostname)
  928. __field(int, credits)
  929. __field(int, credits_to_add)
  930. __field(int, in_flight)
  931. ),
  932. TP_fast_assign(
  933. __entry->currmid = currmid;
  934. __entry->conn_id = conn_id;
  935. __assign_str(hostname, hostname);
  936. __entry->credits = credits;
  937. __entry->credits_to_add = credits_to_add;
  938. __entry->in_flight = in_flight;
  939. ),
  940. TP_printk("conn_id=0x%llx server=%s current_mid=%llu "
  941. "credits=%d credit_change=%d in_flight=%d",
  942. __entry->conn_id,
  943. __get_str(hostname),
  944. __entry->currmid,
  945. __entry->credits,
  946. __entry->credits_to_add,
  947. __entry->in_flight)
  948. )
  949. #define DEFINE_SMB3_CREDIT_EVENT(name) \
  950. DEFINE_EVENT(smb3_credit_class, smb3_##name, \
  951. TP_PROTO(__u64 currmid, \
  952. __u64 conn_id, \
  953. char *hostname, \
  954. int credits, \
  955. int credits_to_add, \
  956. int in_flight), \
  957. TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight))
  958. DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
  959. DEFINE_SMB3_CREDIT_EVENT(reconnect_detected);
  960. DEFINE_SMB3_CREDIT_EVENT(credit_timeout);
  961. DEFINE_SMB3_CREDIT_EVENT(insufficient_credits);
  962. DEFINE_SMB3_CREDIT_EVENT(too_many_credits);
  963. DEFINE_SMB3_CREDIT_EVENT(add_credits);
  964. DEFINE_SMB3_CREDIT_EVENT(adj_credits);
  965. DEFINE_SMB3_CREDIT_EVENT(hdr_credits);
  966. DEFINE_SMB3_CREDIT_EVENT(nblk_credits);
  967. DEFINE_SMB3_CREDIT_EVENT(pend_credits);
  968. DEFINE_SMB3_CREDIT_EVENT(wait_credits);
  969. DEFINE_SMB3_CREDIT_EVENT(waitff_credits);
  970. DEFINE_SMB3_CREDIT_EVENT(overflow_credits);
  971. DEFINE_SMB3_CREDIT_EVENT(set_credits);
  972. #endif /* _CIFS_TRACE_H */
  973. #undef TRACE_INCLUDE_PATH
  974. #define TRACE_INCLUDE_PATH .
  975. #define TRACE_INCLUDE_FILE trace
  976. #include <trace/define_trace.h>