xref: /openbmc/linux/fs/nfsd/trace.h (revision f01274a9)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
231ef83dcSChristoph Hellwig /*
331ef83dcSChristoph Hellwig  * Copyright (c) 2014 Christoph Hellwig.
431ef83dcSChristoph Hellwig  */
531ef83dcSChristoph Hellwig #undef TRACE_SYSTEM
631ef83dcSChristoph Hellwig #define TRACE_SYSTEM nfsd
731ef83dcSChristoph Hellwig 
831ef83dcSChristoph Hellwig #if !defined(_NFSD_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
931ef83dcSChristoph Hellwig #define _NFSD_TRACE_H
1031ef83dcSChristoph Hellwig 
1131ef83dcSChristoph Hellwig #include <linux/tracepoint.h>
126e8b50d1SJeff Layton #include "nfsfh.h"
136e8b50d1SJeff Layton 
14fff4080bSChuck Lever TRACE_EVENT(nfsd_compound,
15fff4080bSChuck Lever 	TP_PROTO(const struct svc_rqst *rqst,
16fff4080bSChuck Lever 		 u32 args_opcnt),
17fff4080bSChuck Lever 	TP_ARGS(rqst, args_opcnt),
18fff4080bSChuck Lever 	TP_STRUCT__entry(
19fff4080bSChuck Lever 		__field(u32, xid)
20fff4080bSChuck Lever 		__field(u32, args_opcnt)
21fff4080bSChuck Lever 	),
22fff4080bSChuck Lever 	TP_fast_assign(
23fff4080bSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
24fff4080bSChuck Lever 		__entry->args_opcnt = args_opcnt;
25fff4080bSChuck Lever 	),
26fff4080bSChuck Lever 	TP_printk("xid=0x%08x opcnt=%u",
27fff4080bSChuck Lever 		__entry->xid, __entry->args_opcnt)
28fff4080bSChuck Lever )
29fff4080bSChuck Lever 
30fff4080bSChuck Lever TRACE_EVENT(nfsd_compound_status,
31fff4080bSChuck Lever 	TP_PROTO(u32 args_opcnt,
32fff4080bSChuck Lever 		 u32 resp_opcnt,
33fff4080bSChuck Lever 		 __be32 status,
34fff4080bSChuck Lever 		 const char *name),
35fff4080bSChuck Lever 	TP_ARGS(args_opcnt, resp_opcnt, status, name),
36fff4080bSChuck Lever 	TP_STRUCT__entry(
37fff4080bSChuck Lever 		__field(u32, args_opcnt)
38fff4080bSChuck Lever 		__field(u32, resp_opcnt)
39fff4080bSChuck Lever 		__field(int, status)
40fff4080bSChuck Lever 		__string(name, name)
41fff4080bSChuck Lever 	),
42fff4080bSChuck Lever 	TP_fast_assign(
43fff4080bSChuck Lever 		__entry->args_opcnt = args_opcnt;
44fff4080bSChuck Lever 		__entry->resp_opcnt = resp_opcnt;
45fff4080bSChuck Lever 		__entry->status = be32_to_cpu(status);
46fff4080bSChuck Lever 		__assign_str(name, name);
47fff4080bSChuck Lever 	),
48fff4080bSChuck Lever 	TP_printk("op=%u/%u %s status=%d",
49fff4080bSChuck Lever 		__entry->resp_opcnt, __entry->args_opcnt,
50fff4080bSChuck Lever 		__get_str(name), __entry->status)
51fff4080bSChuck Lever )
52fff4080bSChuck Lever 
53f01274a9STrond Myklebust DECLARE_EVENT_CLASS(nfsd_fh_err_class,
54f01274a9STrond Myklebust 	TP_PROTO(struct svc_rqst *rqstp,
55f01274a9STrond Myklebust 		 struct svc_fh	*fhp,
56f01274a9STrond Myklebust 		 int		status),
57f01274a9STrond Myklebust 	TP_ARGS(rqstp, fhp, status),
58f01274a9STrond Myklebust 	TP_STRUCT__entry(
59f01274a9STrond Myklebust 		__field(u32, xid)
60f01274a9STrond Myklebust 		__field(u32, fh_hash)
61f01274a9STrond Myklebust 		__field(int, status)
62f01274a9STrond Myklebust 	),
63f01274a9STrond Myklebust 	TP_fast_assign(
64f01274a9STrond Myklebust 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
65f01274a9STrond Myklebust 		__entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
66f01274a9STrond Myklebust 		__entry->status = status;
67f01274a9STrond Myklebust 	),
68f01274a9STrond Myklebust 	TP_printk("xid=0x%08x fh_hash=0x%08x status=%d",
69f01274a9STrond Myklebust 		  __entry->xid, __entry->fh_hash,
70f01274a9STrond Myklebust 		  __entry->status)
71f01274a9STrond Myklebust )
72f01274a9STrond Myklebust 
73f01274a9STrond Myklebust #define DEFINE_NFSD_FH_ERR_EVENT(name)		\
74f01274a9STrond Myklebust DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name,	\
75f01274a9STrond Myklebust 	TP_PROTO(struct svc_rqst *rqstp,	\
76f01274a9STrond Myklebust 		 struct svc_fh	*fhp,		\
77f01274a9STrond Myklebust 		 int		status),	\
78f01274a9STrond Myklebust 	TP_ARGS(rqstp, fhp, status))
79f01274a9STrond Myklebust 
80f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport);
81f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
82f01274a9STrond Myklebust 
836e8b50d1SJeff Layton DECLARE_EVENT_CLASS(nfsd_io_class,
846e8b50d1SJeff Layton 	TP_PROTO(struct svc_rqst *rqstp,
856e8b50d1SJeff Layton 		 struct svc_fh	*fhp,
866e8b50d1SJeff Layton 		 loff_t		offset,
8779e0b4e2SChuck Lever 		 unsigned long	len),
886e8b50d1SJeff Layton 	TP_ARGS(rqstp, fhp, offset, len),
896e8b50d1SJeff Layton 	TP_STRUCT__entry(
90afa720a0SChuck Lever 		__field(u32, xid)
91afa720a0SChuck Lever 		__field(u32, fh_hash)
926e8b50d1SJeff Layton 		__field(loff_t, offset)
9379e0b4e2SChuck Lever 		__field(unsigned long, len)
946e8b50d1SJeff Layton 	),
956e8b50d1SJeff Layton 	TP_fast_assign(
96afa720a0SChuck Lever 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
9779e0b4e2SChuck Lever 		__entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
986e8b50d1SJeff Layton 		__entry->offset = offset;
996e8b50d1SJeff Layton 		__entry->len = len;
1006e8b50d1SJeff Layton 	),
10179e0b4e2SChuck Lever 	TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld len=%lu",
102afa720a0SChuck Lever 		  __entry->xid, __entry->fh_hash,
1036e8b50d1SJeff Layton 		  __entry->offset, __entry->len)
1046e8b50d1SJeff Layton )
1056e8b50d1SJeff Layton 
1066e8b50d1SJeff Layton #define DEFINE_NFSD_IO_EVENT(name)		\
107f394b62bSChuck Lever DEFINE_EVENT(nfsd_io_class, nfsd_##name,	\
1086e8b50d1SJeff Layton 	TP_PROTO(struct svc_rqst *rqstp,	\
1096e8b50d1SJeff Layton 		 struct svc_fh	*fhp,		\
1106e8b50d1SJeff Layton 		 loff_t		offset,		\
11179e0b4e2SChuck Lever 		 unsigned long	len),		\
1126e8b50d1SJeff Layton 	TP_ARGS(rqstp, fhp, offset, len))
1136e8b50d1SJeff Layton 
1146e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_start);
11587c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_splice);
11687c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_vector);
1176e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_io_done);
1186e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_done);
1196e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_start);
1206e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_opened);
1216e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_io_done);
1226e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_done);
12331ef83dcSChristoph Hellwig 
124d890be15SChuck Lever DECLARE_EVENT_CLASS(nfsd_err_class,
125d890be15SChuck Lever 	TP_PROTO(struct svc_rqst *rqstp,
126d890be15SChuck Lever 		 struct svc_fh	*fhp,
127d890be15SChuck Lever 		 loff_t		offset,
128d890be15SChuck Lever 		 int		status),
129d890be15SChuck Lever 	TP_ARGS(rqstp, fhp, offset, status),
130d890be15SChuck Lever 	TP_STRUCT__entry(
131d890be15SChuck Lever 		__field(u32, xid)
132d890be15SChuck Lever 		__field(u32, fh_hash)
133d890be15SChuck Lever 		__field(loff_t, offset)
134d890be15SChuck Lever 		__field(int, status)
135d890be15SChuck Lever 	),
136d890be15SChuck Lever 	TP_fast_assign(
137d890be15SChuck Lever 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
138d890be15SChuck Lever 		__entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
139d890be15SChuck Lever 		__entry->offset = offset;
140d890be15SChuck Lever 		__entry->status = status;
141d890be15SChuck Lever 	),
142d890be15SChuck Lever 	TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d",
143d890be15SChuck Lever 		  __entry->xid, __entry->fh_hash,
144d890be15SChuck Lever 		  __entry->offset, __entry->status)
145d890be15SChuck Lever )
146d890be15SChuck Lever 
147d890be15SChuck Lever #define DEFINE_NFSD_ERR_EVENT(name)		\
148d890be15SChuck Lever DEFINE_EVENT(nfsd_err_class, nfsd_##name,	\
149d890be15SChuck Lever 	TP_PROTO(struct svc_rqst *rqstp,	\
150d890be15SChuck Lever 		 struct svc_fh	*fhp,		\
151d890be15SChuck Lever 		 loff_t		offset,		\
152d890be15SChuck Lever 		 int		len),		\
153d890be15SChuck Lever 	TP_ARGS(rqstp, fhp, offset, len))
154d890be15SChuck Lever 
15587c5942eSChuck Lever DEFINE_NFSD_ERR_EVENT(read_err);
156d890be15SChuck Lever DEFINE_NFSD_ERR_EVENT(write_err);
157d890be15SChuck Lever 
158825213e5SJeff Layton #include "state.h"
15965294c1fSJeff Layton #include "filecache.h"
16065294c1fSJeff Layton #include "vfs.h"
161825213e5SJeff Layton 
16231ef83dcSChristoph Hellwig DECLARE_EVENT_CLASS(nfsd_stateid_class,
16331ef83dcSChristoph Hellwig 	TP_PROTO(stateid_t *stp),
16431ef83dcSChristoph Hellwig 	TP_ARGS(stp),
16531ef83dcSChristoph Hellwig 	TP_STRUCT__entry(
16631ef83dcSChristoph Hellwig 		__field(u32, cl_boot)
16731ef83dcSChristoph Hellwig 		__field(u32, cl_id)
16831ef83dcSChristoph Hellwig 		__field(u32, si_id)
16931ef83dcSChristoph Hellwig 		__field(u32, si_generation)
17031ef83dcSChristoph Hellwig 	),
17131ef83dcSChristoph Hellwig 	TP_fast_assign(
17231ef83dcSChristoph Hellwig 		__entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
17331ef83dcSChristoph Hellwig 		__entry->cl_id = stp->si_opaque.so_clid.cl_id;
17431ef83dcSChristoph Hellwig 		__entry->si_id = stp->si_opaque.so_id;
17531ef83dcSChristoph Hellwig 		__entry->si_generation = stp->si_generation;
17631ef83dcSChristoph Hellwig 	),
17731ef83dcSChristoph Hellwig 	TP_printk("client %08x:%08x stateid %08x:%08x",
17831ef83dcSChristoph Hellwig 		__entry->cl_boot,
17931ef83dcSChristoph Hellwig 		__entry->cl_id,
18031ef83dcSChristoph Hellwig 		__entry->si_id,
18131ef83dcSChristoph Hellwig 		__entry->si_generation)
18231ef83dcSChristoph Hellwig )
18331ef83dcSChristoph Hellwig 
18431ef83dcSChristoph Hellwig #define DEFINE_STATEID_EVENT(name) \
185f394b62bSChuck Lever DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \
18631ef83dcSChristoph Hellwig 	TP_PROTO(stateid_t *stp), \
18731ef83dcSChristoph Hellwig 	TP_ARGS(stp))
18831ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_alloc);
18931ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_unhash);
19031ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_free);
19131ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_get_lookup_fail);
19231ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_commit_lookup_fail);
19331ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_return_lookup_fail);
19431ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall);
19531ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_done);
19631ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_fail);
19731ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_release);
19831ef83dcSChristoph Hellwig 
199c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_HASHED);
200c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_PENDING);
201c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_BREAK_READ);
202c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_BREAK_WRITE);
203c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_REFERENCED);
204c1928559STrond Myklebust 
20565294c1fSJeff Layton #define show_nf_flags(val)						\
20665294c1fSJeff Layton 	__print_flags(val, "|",						\
20765294c1fSJeff Layton 		{ 1 << NFSD_FILE_HASHED,	"HASHED" },		\
20865294c1fSJeff Layton 		{ 1 << NFSD_FILE_PENDING,	"PENDING" },		\
20965294c1fSJeff Layton 		{ 1 << NFSD_FILE_BREAK_READ,	"BREAK_READ" },		\
21065294c1fSJeff Layton 		{ 1 << NFSD_FILE_BREAK_WRITE,	"BREAK_WRITE" },	\
21165294c1fSJeff Layton 		{ 1 << NFSD_FILE_REFERENCED,	"REFERENCED"})
21265294c1fSJeff Layton 
21365294c1fSJeff Layton /* FIXME: This should probably be fleshed out in the future. */
21465294c1fSJeff Layton #define show_nf_may(val)						\
21565294c1fSJeff Layton 	__print_flags(val, "|",						\
21665294c1fSJeff Layton 		{ NFSD_MAY_READ,		"READ" },		\
21765294c1fSJeff Layton 		{ NFSD_MAY_WRITE,		"WRITE" },		\
21865294c1fSJeff Layton 		{ NFSD_MAY_NOT_BREAK_LEASE,	"NOT_BREAK_LEASE" })
21965294c1fSJeff Layton 
22065294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_class,
22165294c1fSJeff Layton 	TP_PROTO(struct nfsd_file *nf),
22265294c1fSJeff Layton 	TP_ARGS(nf),
22365294c1fSJeff Layton 	TP_STRUCT__entry(
22465294c1fSJeff Layton 		__field(unsigned int, nf_hashval)
22565294c1fSJeff Layton 		__field(void *, nf_inode)
22665294c1fSJeff Layton 		__field(int, nf_ref)
22765294c1fSJeff Layton 		__field(unsigned long, nf_flags)
22865294c1fSJeff Layton 		__field(unsigned char, nf_may)
22965294c1fSJeff Layton 		__field(struct file *, nf_file)
23065294c1fSJeff Layton 	),
23165294c1fSJeff Layton 	TP_fast_assign(
23265294c1fSJeff Layton 		__entry->nf_hashval = nf->nf_hashval;
23365294c1fSJeff Layton 		__entry->nf_inode = nf->nf_inode;
234689827cdSTrond Myklebust 		__entry->nf_ref = refcount_read(&nf->nf_ref);
23565294c1fSJeff Layton 		__entry->nf_flags = nf->nf_flags;
23665294c1fSJeff Layton 		__entry->nf_may = nf->nf_may;
23765294c1fSJeff Layton 		__entry->nf_file = nf->nf_file;
23865294c1fSJeff Layton 	),
23965294c1fSJeff Layton 	TP_printk("hash=0x%x inode=0x%p ref=%d flags=%s may=%s file=%p",
24065294c1fSJeff Layton 		__entry->nf_hashval,
24165294c1fSJeff Layton 		__entry->nf_inode,
24265294c1fSJeff Layton 		__entry->nf_ref,
24365294c1fSJeff Layton 		show_nf_flags(__entry->nf_flags),
24465294c1fSJeff Layton 		show_nf_may(__entry->nf_may),
24565294c1fSJeff Layton 		__entry->nf_file)
24665294c1fSJeff Layton )
24765294c1fSJeff Layton 
24865294c1fSJeff Layton #define DEFINE_NFSD_FILE_EVENT(name) \
24965294c1fSJeff Layton DEFINE_EVENT(nfsd_file_class, name, \
25065294c1fSJeff Layton 	TP_PROTO(struct nfsd_file *nf), \
25165294c1fSJeff Layton 	TP_ARGS(nf))
25265294c1fSJeff Layton 
25365294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_alloc);
25465294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put_final);
25565294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash);
25665294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put);
25765294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_release_locked);
25865294c1fSJeff Layton 
25965294c1fSJeff Layton TRACE_EVENT(nfsd_file_acquire,
26065294c1fSJeff Layton 	TP_PROTO(struct svc_rqst *rqstp, unsigned int hash,
26165294c1fSJeff Layton 		 struct inode *inode, unsigned int may_flags,
26265294c1fSJeff Layton 		 struct nfsd_file *nf, __be32 status),
26365294c1fSJeff Layton 
26465294c1fSJeff Layton 	TP_ARGS(rqstp, hash, inode, may_flags, nf, status),
26565294c1fSJeff Layton 
26665294c1fSJeff Layton 	TP_STRUCT__entry(
267a9ceb060STrond Myklebust 		__field(u32, xid)
26865294c1fSJeff Layton 		__field(unsigned int, hash)
26965294c1fSJeff Layton 		__field(void *, inode)
27065294c1fSJeff Layton 		__field(unsigned int, may_flags)
27165294c1fSJeff Layton 		__field(int, nf_ref)
27265294c1fSJeff Layton 		__field(unsigned long, nf_flags)
27365294c1fSJeff Layton 		__field(unsigned char, nf_may)
27465294c1fSJeff Layton 		__field(struct file *, nf_file)
275a9ceb060STrond Myklebust 		__field(u32, status)
27665294c1fSJeff Layton 	),
27765294c1fSJeff Layton 
27865294c1fSJeff Layton 	TP_fast_assign(
279a9ceb060STrond Myklebust 		__entry->xid = be32_to_cpu(rqstp->rq_xid);
28065294c1fSJeff Layton 		__entry->hash = hash;
28165294c1fSJeff Layton 		__entry->inode = inode;
28265294c1fSJeff Layton 		__entry->may_flags = may_flags;
283689827cdSTrond Myklebust 		__entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0;
28465294c1fSJeff Layton 		__entry->nf_flags = nf ? nf->nf_flags : 0;
28565294c1fSJeff Layton 		__entry->nf_may = nf ? nf->nf_may : 0;
28665294c1fSJeff Layton 		__entry->nf_file = nf ? nf->nf_file : NULL;
287a9ceb060STrond Myklebust 		__entry->status = be32_to_cpu(status);
28865294c1fSJeff Layton 	),
28965294c1fSJeff Layton 
29065294c1fSJeff Layton 	TP_printk("xid=0x%x hash=0x%x inode=0x%p may_flags=%s ref=%d nf_flags=%s nf_may=%s nf_file=0x%p status=%u",
291a9ceb060STrond Myklebust 			__entry->xid, __entry->hash, __entry->inode,
29265294c1fSJeff Layton 			show_nf_may(__entry->may_flags), __entry->nf_ref,
29365294c1fSJeff Layton 			show_nf_flags(__entry->nf_flags),
29465294c1fSJeff Layton 			show_nf_may(__entry->nf_may), __entry->nf_file,
295a9ceb060STrond Myklebust 			__entry->status)
29665294c1fSJeff Layton );
29765294c1fSJeff Layton 
29865294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_search_class,
29965294c1fSJeff Layton 	TP_PROTO(struct inode *inode, unsigned int hash, int found),
30065294c1fSJeff Layton 	TP_ARGS(inode, hash, found),
30165294c1fSJeff Layton 	TP_STRUCT__entry(
30265294c1fSJeff Layton 		__field(struct inode *, inode)
30365294c1fSJeff Layton 		__field(unsigned int, hash)
30465294c1fSJeff Layton 		__field(int, found)
30565294c1fSJeff Layton 	),
30665294c1fSJeff Layton 	TP_fast_assign(
30765294c1fSJeff Layton 		__entry->inode = inode;
30865294c1fSJeff Layton 		__entry->hash = hash;
30965294c1fSJeff Layton 		__entry->found = found;
31065294c1fSJeff Layton 	),
31165294c1fSJeff Layton 	TP_printk("hash=0x%x inode=0x%p found=%d", __entry->hash,
31265294c1fSJeff Layton 			__entry->inode, __entry->found)
31365294c1fSJeff Layton );
31465294c1fSJeff Layton 
31565294c1fSJeff Layton #define DEFINE_NFSD_FILE_SEARCH_EVENT(name)				\
31665294c1fSJeff Layton DEFINE_EVENT(nfsd_file_search_class, name,				\
31765294c1fSJeff Layton 	TP_PROTO(struct inode *inode, unsigned int hash, int found),	\
31865294c1fSJeff Layton 	TP_ARGS(inode, hash, found))
31965294c1fSJeff Layton 
32065294c1fSJeff Layton DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode_sync);
32165294c1fSJeff Layton DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode);
32265294c1fSJeff Layton DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_is_cached);
32365294c1fSJeff Layton 
32465294c1fSJeff Layton TRACE_EVENT(nfsd_file_fsnotify_handle_event,
32565294c1fSJeff Layton 	TP_PROTO(struct inode *inode, u32 mask),
32665294c1fSJeff Layton 	TP_ARGS(inode, mask),
32765294c1fSJeff Layton 	TP_STRUCT__entry(
32865294c1fSJeff Layton 		__field(struct inode *, inode)
32965294c1fSJeff Layton 		__field(unsigned int, nlink)
33065294c1fSJeff Layton 		__field(umode_t, mode)
33165294c1fSJeff Layton 		__field(u32, mask)
33265294c1fSJeff Layton 	),
33365294c1fSJeff Layton 	TP_fast_assign(
33465294c1fSJeff Layton 		__entry->inode = inode;
33565294c1fSJeff Layton 		__entry->nlink = inode->i_nlink;
33665294c1fSJeff Layton 		__entry->mode = inode->i_mode;
33765294c1fSJeff Layton 		__entry->mask = mask;
33865294c1fSJeff Layton 	),
33965294c1fSJeff Layton 	TP_printk("inode=0x%p nlink=%u mode=0%ho mask=0x%x", __entry->inode,
34065294c1fSJeff Layton 			__entry->nlink, __entry->mode, __entry->mask)
34165294c1fSJeff Layton );
34265294c1fSJeff Layton 
34331ef83dcSChristoph Hellwig #endif /* _NFSD_TRACE_H */
34431ef83dcSChristoph Hellwig 
34531ef83dcSChristoph Hellwig #undef TRACE_INCLUDE_PATH
34631ef83dcSChristoph Hellwig #define TRACE_INCLUDE_PATH .
34731ef83dcSChristoph Hellwig #define TRACE_INCLUDE_FILE trace
34831ef83dcSChristoph Hellwig #include <trace/define_trace.h>
349