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