trace.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM lockd
  4. #if !defined(_TRACE_LOCKD_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_LOCKD_H
  6. #include <linux/tracepoint.h>
  7. #include <linux/crc32.h>
  8. #include <linux/nfs.h>
  9. #include <linux/lockd/lockd.h>
  10. #ifdef CONFIG_LOCKD_V4
  11. #define NLM_STATUS_LIST \
  12. nlm_status_code(LCK_GRANTED) \
  13. nlm_status_code(LCK_DENIED) \
  14. nlm_status_code(LCK_DENIED_NOLOCKS) \
  15. nlm_status_code(LCK_BLOCKED) \
  16. nlm_status_code(LCK_DENIED_GRACE_PERIOD) \
  17. nlm_status_code(DEADLCK) \
  18. nlm_status_code(ROFS) \
  19. nlm_status_code(STALE_FH) \
  20. nlm_status_code(FBIG) \
  21. nlm_status_code_end(FAILED)
  22. #else
  23. #define NLM_STATUS_LIST \
  24. nlm_status_code(LCK_GRANTED) \
  25. nlm_status_code(LCK_DENIED) \
  26. nlm_status_code(LCK_DENIED_NOLOCKS) \
  27. nlm_status_code(LCK_BLOCKED) \
  28. nlm_status_code_end(LCK_DENIED_GRACE_PERIOD)
  29. #endif
  30. #undef nlm_status_code
  31. #undef nlm_status_code_end
  32. #define nlm_status_code(x) TRACE_DEFINE_ENUM(NLM_##x);
  33. #define nlm_status_code_end(x) TRACE_DEFINE_ENUM(NLM_##x);
  34. NLM_STATUS_LIST
  35. #undef nlm_status_code
  36. #undef nlm_status_code_end
  37. #define nlm_status_code(x) { NLM_##x, #x },
  38. #define nlm_status_code_end(x) { NLM_##x, #x }
  39. #define show_nlm_status(x) __print_symbolic(x, NLM_STATUS_LIST)
  40. DECLARE_EVENT_CLASS(nlmclnt_lock_event,
  41. TP_PROTO(
  42. const struct nlm_lock *lock,
  43. const struct sockaddr *addr,
  44. unsigned int addrlen,
  45. __be32 status
  46. ),
  47. TP_ARGS(lock, addr, addrlen, status),
  48. TP_STRUCT__entry(
  49. __field(u32, oh)
  50. __field(u32, svid)
  51. __field(u32, fh)
  52. __field(unsigned long, status)
  53. __field(u64, start)
  54. __field(u64, len)
  55. __sockaddr(addr, addrlen)
  56. ),
  57. TP_fast_assign(
  58. __entry->oh = ~crc32_le(0xffffffff, lock->oh.data, lock->oh.len);
  59. __entry->svid = lock->svid;
  60. __entry->fh = nfs_fhandle_hash(&lock->fh);
  61. __entry->start = lock->lock_start;
  62. __entry->len = lock->lock_len;
  63. __entry->status = be32_to_cpu(status);
  64. __assign_sockaddr(addr, addr, addrlen);
  65. ),
  66. TP_printk(
  67. "addr=%pISpc oh=0x%08x svid=0x%08x fh=0x%08x start=%llu len=%llu status=%s",
  68. __get_sockaddr(addr), __entry->oh, __entry->svid,
  69. __entry->fh, __entry->start, __entry->len,
  70. show_nlm_status(__entry->status)
  71. )
  72. );
  73. #define DEFINE_NLMCLNT_EVENT(name) \
  74. DEFINE_EVENT(nlmclnt_lock_event, name, \
  75. TP_PROTO( \
  76. const struct nlm_lock *lock, \
  77. const struct sockaddr *addr, \
  78. unsigned int addrlen, \
  79. __be32 status \
  80. ), \
  81. TP_ARGS(lock, addr, addrlen, status))
  82. DEFINE_NLMCLNT_EVENT(nlmclnt_test);
  83. DEFINE_NLMCLNT_EVENT(nlmclnt_lock);
  84. DEFINE_NLMCLNT_EVENT(nlmclnt_unlock);
  85. DEFINE_NLMCLNT_EVENT(nlmclnt_grant);
  86. #endif /* _TRACE_LOCKD_H */
  87. #undef TRACE_INCLUDE_PATH
  88. #define TRACE_INCLUDE_PATH .
  89. #define TRACE_INCLUDE_FILE trace
  90. #include <trace/define_trace.h>