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