rnbd-srv-trace.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * RDMA Network Block Driver
  4. *
  5. * Copyright (c) 2022 1&1 IONOS SE. All rights reserved.
  6. */
  7. #undef TRACE_SYSTEM
  8. #define TRACE_SYSTEM rnbd_srv
  9. #if !defined(_TRACE_RNBD_SRV_H) || defined(TRACE_HEADER_MULTI_READ)
  10. #define _TRACE_RNBD_SRV_H
  11. #include <linux/tracepoint.h>
  12. struct rnbd_srv_session;
  13. struct rtrs_srv_op;
  14. DECLARE_EVENT_CLASS(rnbd_srv_link_class,
  15. TP_PROTO(struct rnbd_srv_session *srv),
  16. TP_ARGS(srv),
  17. TP_STRUCT__entry(
  18. __field(int, qdepth)
  19. __string(sessname, srv->sessname)
  20. ),
  21. TP_fast_assign(
  22. __entry->qdepth = srv->queue_depth;
  23. __assign_str(sessname, srv->sessname);
  24. ),
  25. TP_printk("sessname: %s qdepth: %d",
  26. __get_str(sessname),
  27. __entry->qdepth
  28. )
  29. );
  30. #define DEFINE_LINK_EVENT(name) \
  31. DEFINE_EVENT(rnbd_srv_link_class, name, \
  32. TP_PROTO(struct rnbd_srv_session *srv), \
  33. TP_ARGS(srv))
  34. DEFINE_LINK_EVENT(create_sess);
  35. DEFINE_LINK_EVENT(destroy_sess);
  36. TRACE_DEFINE_ENUM(RNBD_OP_READ);
  37. TRACE_DEFINE_ENUM(RNBD_OP_WRITE);
  38. TRACE_DEFINE_ENUM(RNBD_OP_FLUSH);
  39. TRACE_DEFINE_ENUM(RNBD_OP_DISCARD);
  40. TRACE_DEFINE_ENUM(RNBD_OP_SECURE_ERASE);
  41. TRACE_DEFINE_ENUM(RNBD_F_SYNC);
  42. TRACE_DEFINE_ENUM(RNBD_F_FUA);
  43. #define show_rnbd_rw_flags(x) \
  44. __print_flags(x, "|", \
  45. { RNBD_OP_READ, "READ" }, \
  46. { RNBD_OP_WRITE, "WRITE" }, \
  47. { RNBD_OP_FLUSH, "FLUSH" }, \
  48. { RNBD_OP_DISCARD, "DISCARD" }, \
  49. { RNBD_OP_SECURE_ERASE, "SECURE_ERASE" }, \
  50. { RNBD_F_SYNC, "SYNC" }, \
  51. { RNBD_F_FUA, "FUA" })
  52. TRACE_EVENT(process_rdma,
  53. TP_PROTO(struct rnbd_srv_session *srv,
  54. const struct rnbd_msg_io *msg,
  55. struct rtrs_srv_op *id,
  56. u32 datalen,
  57. size_t usrlen),
  58. TP_ARGS(srv, msg, id, datalen, usrlen),
  59. TP_STRUCT__entry(
  60. __string(sessname, srv->sessname)
  61. __field(u8, dir)
  62. __field(u8, ver)
  63. __field(u32, device_id)
  64. __field(u64, sector)
  65. __field(u32, flags)
  66. __field(u32, bi_size)
  67. __field(u16, ioprio)
  68. __field(u32, datalen)
  69. __field(size_t, usrlen)
  70. ),
  71. TP_fast_assign(
  72. __assign_str(sessname, srv->sessname);
  73. __entry->dir = id->dir;
  74. __entry->ver = srv->ver;
  75. __entry->device_id = le32_to_cpu(msg->device_id);
  76. __entry->sector = le64_to_cpu(msg->sector);
  77. __entry->bi_size = le32_to_cpu(msg->bi_size);
  78. __entry->flags = le32_to_cpu(msg->rw);
  79. __entry->ioprio = le16_to_cpu(msg->prio);
  80. __entry->datalen = datalen;
  81. __entry->usrlen = usrlen;
  82. ),
  83. TP_printk("I/O req: sess: %s, type: %s, ver: %d, devid: %u, sector: %llu, bsize: %u, flags: %s, ioprio: %d, datalen: %u, usrlen: %zu",
  84. __get_str(sessname),
  85. __print_symbolic(__entry->dir,
  86. { READ, "READ" },
  87. { WRITE, "WRITE" }),
  88. __entry->ver,
  89. __entry->device_id,
  90. __entry->sector,
  91. __entry->bi_size,
  92. show_rnbd_rw_flags(__entry->flags),
  93. __entry->ioprio,
  94. __entry->datalen,
  95. __entry->usrlen
  96. )
  97. );
  98. TRACE_EVENT(process_msg_sess_info,
  99. TP_PROTO(struct rnbd_srv_session *srv,
  100. const struct rnbd_msg_sess_info *msg),
  101. TP_ARGS(srv, msg),
  102. TP_STRUCT__entry(
  103. __field(u8, proto_ver)
  104. __field(u8, clt_ver)
  105. __field(u8, srv_ver)
  106. __string(sessname, srv->sessname)
  107. ),
  108. TP_fast_assign(
  109. __entry->proto_ver = srv->ver;
  110. __entry->clt_ver = msg->ver;
  111. __entry->srv_ver = RNBD_PROTO_VER_MAJOR;
  112. __assign_str(sessname, srv->sessname);
  113. ),
  114. TP_printk("Session %s using proto-ver %d (clt-ver: %d, srv-ver: %d)",
  115. __get_str(sessname),
  116. __entry->proto_ver,
  117. __entry->clt_ver,
  118. __entry->srv_ver
  119. )
  120. );
  121. TRACE_DEFINE_ENUM(RNBD_ACCESS_RO);
  122. TRACE_DEFINE_ENUM(RNBD_ACCESS_RW);
  123. TRACE_DEFINE_ENUM(RNBD_ACCESS_MIGRATION);
  124. #define show_rnbd_access_mode(x) \
  125. __print_symbolic(x, \
  126. { RNBD_ACCESS_RO, "RO" }, \
  127. { RNBD_ACCESS_RW, "RW" }, \
  128. { RNBD_ACCESS_MIGRATION, "MIGRATION" })
  129. TRACE_EVENT(process_msg_open,
  130. TP_PROTO(struct rnbd_srv_session *srv,
  131. const struct rnbd_msg_open *msg),
  132. TP_ARGS(srv, msg),
  133. TP_STRUCT__entry(
  134. __field(u8, access_mode)
  135. __string(sessname, srv->sessname)
  136. __string(dev_name, msg->dev_name)
  137. ),
  138. TP_fast_assign(
  139. __entry->access_mode = msg->access_mode;
  140. __assign_str(sessname, srv->sessname);
  141. __assign_str(dev_name, msg->dev_name);
  142. ),
  143. TP_printk("Open message received: session='%s' path='%s' access_mode=%s",
  144. __get_str(sessname),
  145. __get_str(dev_name),
  146. show_rnbd_access_mode(__entry->access_mode)
  147. )
  148. );
  149. TRACE_EVENT(process_msg_close,
  150. TP_PROTO(struct rnbd_srv_session *srv,
  151. const struct rnbd_msg_close *msg),
  152. TP_ARGS(srv, msg),
  153. TP_STRUCT__entry(
  154. __field(u32, device_id)
  155. __string(sessname, srv->sessname)
  156. ),
  157. TP_fast_assign(
  158. __entry->device_id = le32_to_cpu(msg->device_id);
  159. __assign_str(sessname, srv->sessname);
  160. ),
  161. TP_printk("Close message received: session='%s' device id='%d'",
  162. __get_str(sessname),
  163. __entry->device_id
  164. )
  165. );
  166. #endif /* _TRACE_RNBD_SRV_H */
  167. #undef TRACE_INCLUDE_PATH
  168. #define TRACE_INCLUDE_PATH .
  169. #define TRACE_INCLUDE_FILE rnbd-srv-trace
  170. #include <trace/define_trace.h>