1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (c) 2014 Christoph Hellwig.
6 #define TRACE_SYSTEM nfsd
8 #if !defined(_NFSD_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
11 #include <linux/tracepoint.h>
15 #define NFSD_TRACE_PROC_ARG_FIELDS \
16 __field(unsigned int, netns_ino) \
18 __array(unsigned char, server, sizeof(struct sockaddr_in6)) \
19 __array(unsigned char, client, sizeof(struct sockaddr_in6))
21 #define NFSD_TRACE_PROC_ARG_ASSIGNMENTS \
23 __entry->netns_ino = SVC_NET(rqstp)->ns.inum; \
24 __entry->xid = be32_to_cpu(rqstp->rq_xid); \
25 memcpy(__entry->server, &rqstp->rq_xprt->xpt_local, \
26 rqstp->rq_xprt->xpt_locallen); \
27 memcpy(__entry->client, &rqstp->rq_xprt->xpt_remote, \
28 rqstp->rq_xprt->xpt_remotelen); \
31 #define NFSD_TRACE_PROC_RES_FIELDS \
32 __field(unsigned int, netns_ino) \
34 __field(unsigned long, status) \
35 __array(unsigned char, server, sizeof(struct sockaddr_in6)) \
36 __array(unsigned char, client, sizeof(struct sockaddr_in6))
38 #define NFSD_TRACE_PROC_RES_ASSIGNMENTS(error) \
40 __entry->netns_ino = SVC_NET(rqstp)->ns.inum; \
41 __entry->xid = be32_to_cpu(rqstp->rq_xid); \
42 __entry->status = be32_to_cpu(error); \
43 memcpy(__entry->server, &rqstp->rq_xprt->xpt_local, \
44 rqstp->rq_xprt->xpt_locallen); \
45 memcpy(__entry->client, &rqstp->rq_xprt->xpt_remote, \
46 rqstp->rq_xprt->xpt_remotelen); \
49 TRACE_EVENT(nfsd_garbage_args_err
,
51 const struct svc_rqst
*rqstp
55 NFSD_TRACE_PROC_ARG_FIELDS
61 NFSD_TRACE_PROC_ARG_ASSIGNMENTS
63 __entry
->vers
= rqstp
->rq_vers
;
64 __entry
->proc
= rqstp
->rq_proc
;
66 TP_printk("xid=0x%08x vers=%u proc=%u",
67 __entry
->xid
, __entry
->vers
, __entry
->proc
71 TRACE_EVENT(nfsd_cant_encode_err
,
73 const struct svc_rqst
*rqstp
77 NFSD_TRACE_PROC_ARG_FIELDS
83 NFSD_TRACE_PROC_ARG_ASSIGNMENTS
85 __entry
->vers
= rqstp
->rq_vers
;
86 __entry
->proc
= rqstp
->rq_proc
;
88 TP_printk("xid=0x%08x vers=%u proc=%u",
89 __entry
->xid
, __entry
->vers
, __entry
->proc
93 #define show_nfsd_may_flags(x) \
94 __print_flags(x, "|", \
95 { NFSD_MAY_EXEC, "EXEC" }, \
96 { NFSD_MAY_WRITE, "WRITE" }, \
97 { NFSD_MAY_READ, "READ" }, \
98 { NFSD_MAY_SATTR, "SATTR" }, \
99 { NFSD_MAY_TRUNC, "TRUNC" }, \
100 { NFSD_MAY_LOCK, "LOCK" }, \
101 { NFSD_MAY_OWNER_OVERRIDE, "OWNER_OVERRIDE" }, \
102 { NFSD_MAY_LOCAL_ACCESS, "LOCAL_ACCESS" }, \
103 { NFSD_MAY_BYPASS_GSS_ON_ROOT, "BYPASS_GSS_ON_ROOT" }, \
104 { NFSD_MAY_NOT_BREAK_LEASE, "NOT_BREAK_LEASE" }, \
105 { NFSD_MAY_BYPASS_GSS, "BYPASS_GSS" }, \
106 { NFSD_MAY_READ_IF_EXEC, "READ_IF_EXEC" }, \
107 { NFSD_MAY_64BIT_COOKIE, "64BIT_COOKIE" })
109 TRACE_EVENT(nfsd_compound
,
110 TP_PROTO(const struct svc_rqst
*rqst
,
112 TP_ARGS(rqst
, args_opcnt
),
115 __field(u32
, args_opcnt
)
118 __entry
->xid
= be32_to_cpu(rqst
->rq_xid
);
119 __entry
->args_opcnt
= args_opcnt
;
121 TP_printk("xid=0x%08x opcnt=%u",
122 __entry
->xid
, __entry
->args_opcnt
)
125 TRACE_EVENT(nfsd_compound_status
,
126 TP_PROTO(u32 args_opcnt
,
130 TP_ARGS(args_opcnt
, resp_opcnt
, status
, name
),
132 __field(u32
, args_opcnt
)
133 __field(u32
, resp_opcnt
)
138 __entry
->args_opcnt
= args_opcnt
;
139 __entry
->resp_opcnt
= resp_opcnt
;
140 __entry
->status
= be32_to_cpu(status
);
141 __assign_str(name
, name
);
143 TP_printk("op=%u/%u %s status=%d",
144 __entry
->resp_opcnt
, __entry
->args_opcnt
,
145 __get_str(name
), __entry
->status
)
148 TRACE_EVENT(nfsd_compound_decode_err
,
150 const struct svc_rqst
*rqstp
,
156 TP_ARGS(rqstp
, args_opcnt
, resp_opcnt
, opnum
, status
),
158 NFSD_TRACE_PROC_RES_FIELDS
160 __field(u32
, args_opcnt
)
161 __field(u32
, resp_opcnt
)
165 NFSD_TRACE_PROC_RES_ASSIGNMENTS(status
)
167 __entry
->args_opcnt
= args_opcnt
;
168 __entry
->resp_opcnt
= resp_opcnt
;
169 __entry
->opnum
= opnum
;
171 TP_printk("op=%u/%u opnum=%u status=%lu",
172 __entry
->resp_opcnt
, __entry
->args_opcnt
,
173 __entry
->opnum
, __entry
->status
)
176 TRACE_EVENT(nfsd_compound_encode_err
,
178 const struct svc_rqst
*rqstp
,
182 TP_ARGS(rqstp
, opnum
, status
),
184 NFSD_TRACE_PROC_RES_FIELDS
189 NFSD_TRACE_PROC_RES_ASSIGNMENTS(status
)
191 __entry
->opnum
= opnum
;
193 TP_printk("opnum=%u status=%lu",
194 __entry
->opnum
, __entry
->status
)
198 DECLARE_EVENT_CLASS(nfsd_fh_err_class
,
199 TP_PROTO(struct svc_rqst
*rqstp
,
202 TP_ARGS(rqstp
, fhp
, status
),
205 __field(u32
, fh_hash
)
209 __entry
->xid
= be32_to_cpu(rqstp
->rq_xid
);
210 __entry
->fh_hash
= knfsd_fh_hash(&fhp
->fh_handle
);
211 __entry
->status
= status
;
213 TP_printk("xid=0x%08x fh_hash=0x%08x status=%d",
214 __entry
->xid
, __entry
->fh_hash
,
218 #define DEFINE_NFSD_FH_ERR_EVENT(name) \
219 DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name, \
220 TP_PROTO(struct svc_rqst *rqstp, \
221 struct svc_fh *fhp, \
223 TP_ARGS(rqstp, fhp, status))
225 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport
);
226 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle
);
228 TRACE_EVENT(nfsd_exp_find_key
,
229 TP_PROTO(const struct svc_expkey
*key
,
231 TP_ARGS(key
, status
),
233 __field(int, fsidtype
)
234 __array(u32
, fsid
, 6)
235 __string(auth_domain
, key
->ek_client
->name
)
239 __entry
->fsidtype
= key
->ek_fsidtype
;
240 memcpy(__entry
->fsid
, key
->ek_fsid
, 4*6);
241 __assign_str(auth_domain
, key
->ek_client
->name
);
242 __entry
->status
= status
;
244 TP_printk("fsid=%x::%s domain=%s status=%d",
246 __print_array(__entry
->fsid
, 6, 4),
247 __get_str(auth_domain
),
252 TRACE_EVENT(nfsd_expkey_update
,
253 TP_PROTO(const struct svc_expkey
*key
, const char *exp_path
),
254 TP_ARGS(key
, exp_path
),
256 __field(int, fsidtype
)
257 __array(u32
, fsid
, 6)
258 __string(auth_domain
, key
->ek_client
->name
)
259 __string(path
, exp_path
)
263 __entry
->fsidtype
= key
->ek_fsidtype
;
264 memcpy(__entry
->fsid
, key
->ek_fsid
, 4*6);
265 __assign_str(auth_domain
, key
->ek_client
->name
);
266 __assign_str(path
, exp_path
);
267 __entry
->cache
= !test_bit(CACHE_NEGATIVE
, &key
->h
.flags
);
269 TP_printk("fsid=%x::%s domain=%s path=%s cache=%s",
271 __print_array(__entry
->fsid
, 6, 4),
272 __get_str(auth_domain
),
274 __entry
->cache
? "pos" : "neg"
278 TRACE_EVENT(nfsd_exp_get_by_name
,
279 TP_PROTO(const struct svc_export
*key
,
281 TP_ARGS(key
, status
),
283 __string(path
, key
->ex_path
.dentry
->d_name
.name
)
284 __string(auth_domain
, key
->ex_client
->name
)
288 __assign_str(path
, key
->ex_path
.dentry
->d_name
.name
);
289 __assign_str(auth_domain
, key
->ex_client
->name
);
290 __entry
->status
= status
;
292 TP_printk("path=%s domain=%s status=%d",
294 __get_str(auth_domain
),
299 TRACE_EVENT(nfsd_export_update
,
300 TP_PROTO(const struct svc_export
*key
),
303 __string(path
, key
->ex_path
.dentry
->d_name
.name
)
304 __string(auth_domain
, key
->ex_client
->name
)
308 __assign_str(path
, key
->ex_path
.dentry
->d_name
.name
);
309 __assign_str(auth_domain
, key
->ex_client
->name
);
310 __entry
->cache
= !test_bit(CACHE_NEGATIVE
, &key
->h
.flags
);
312 TP_printk("path=%s domain=%s cache=%s",
314 __get_str(auth_domain
),
315 __entry
->cache
? "pos" : "neg"
319 DECLARE_EVENT_CLASS(nfsd_io_class
,
320 TP_PROTO(struct svc_rqst
*rqstp
,
324 TP_ARGS(rqstp
, fhp
, offset
, len
),
327 __field(u32
, fh_hash
)
328 __field(loff_t
, offset
)
329 __field(unsigned long, len
)
332 __entry
->xid
= be32_to_cpu(rqstp
->rq_xid
);
333 __entry
->fh_hash
= knfsd_fh_hash(&fhp
->fh_handle
);
334 __entry
->offset
= offset
;
337 TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld len=%lu",
338 __entry
->xid
, __entry
->fh_hash
,
339 __entry
->offset
, __entry
->len
)
342 #define DEFINE_NFSD_IO_EVENT(name) \
343 DEFINE_EVENT(nfsd_io_class, nfsd_##name, \
344 TP_PROTO(struct svc_rqst *rqstp, \
345 struct svc_fh *fhp, \
347 unsigned long len), \
348 TP_ARGS(rqstp, fhp, offset, len))
350 DEFINE_NFSD_IO_EVENT(read_start
);
351 DEFINE_NFSD_IO_EVENT(read_splice
);
352 DEFINE_NFSD_IO_EVENT(read_vector
);
353 DEFINE_NFSD_IO_EVENT(read_io_done
);
354 DEFINE_NFSD_IO_EVENT(read_done
);
355 DEFINE_NFSD_IO_EVENT(write_start
);
356 DEFINE_NFSD_IO_EVENT(write_opened
);
357 DEFINE_NFSD_IO_EVENT(write_io_done
);
358 DEFINE_NFSD_IO_EVENT(write_done
);
360 DECLARE_EVENT_CLASS(nfsd_err_class
,
361 TP_PROTO(struct svc_rqst
*rqstp
,
365 TP_ARGS(rqstp
, fhp
, offset
, status
),
368 __field(u32
, fh_hash
)
369 __field(loff_t
, offset
)
373 __entry
->xid
= be32_to_cpu(rqstp
->rq_xid
);
374 __entry
->fh_hash
= knfsd_fh_hash(&fhp
->fh_handle
);
375 __entry
->offset
= offset
;
376 __entry
->status
= status
;
378 TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d",
379 __entry
->xid
, __entry
->fh_hash
,
380 __entry
->offset
, __entry
->status
)
383 #define DEFINE_NFSD_ERR_EVENT(name) \
384 DEFINE_EVENT(nfsd_err_class, nfsd_##name, \
385 TP_PROTO(struct svc_rqst *rqstp, \
386 struct svc_fh *fhp, \
389 TP_ARGS(rqstp, fhp, offset, len))
391 DEFINE_NFSD_ERR_EVENT(read_err
);
392 DEFINE_NFSD_ERR_EVENT(write_err
);
394 TRACE_EVENT(nfsd_dirent
,
395 TP_PROTO(struct svc_fh
*fhp
,
399 TP_ARGS(fhp
, ino
, name
, namlen
),
401 __field(u32
, fh_hash
)
404 __dynamic_array(unsigned char, name
, namlen
)
407 __entry
->fh_hash
= fhp
? knfsd_fh_hash(&fhp
->fh_handle
) : 0;
409 __entry
->len
= namlen
;
410 memcpy(__get_str(name
), name
, namlen
);
411 __assign_str(name
, name
);
413 TP_printk("fh_hash=0x%08x ino=%llu name=%.*s",
414 __entry
->fh_hash
, __entry
->ino
,
415 __entry
->len
, __get_str(name
))
419 #include "filecache.h"
422 DECLARE_EVENT_CLASS(nfsd_stateid_class
,
423 TP_PROTO(stateid_t
*stp
),
426 __field(u32
, cl_boot
)
429 __field(u32
, si_generation
)
432 __entry
->cl_boot
= stp
->si_opaque
.so_clid
.cl_boot
;
433 __entry
->cl_id
= stp
->si_opaque
.so_clid
.cl_id
;
434 __entry
->si_id
= stp
->si_opaque
.so_id
;
435 __entry
->si_generation
= stp
->si_generation
;
437 TP_printk("client %08x:%08x stateid %08x:%08x",
441 __entry
->si_generation
)
444 #define DEFINE_STATEID_EVENT(name) \
445 DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \
446 TP_PROTO(stateid_t *stp), \
449 DEFINE_STATEID_EVENT(layoutstate_alloc
);
450 DEFINE_STATEID_EVENT(layoutstate_unhash
);
451 DEFINE_STATEID_EVENT(layoutstate_free
);
452 DEFINE_STATEID_EVENT(layout_get_lookup_fail
);
453 DEFINE_STATEID_EVENT(layout_commit_lookup_fail
);
454 DEFINE_STATEID_EVENT(layout_return_lookup_fail
);
455 DEFINE_STATEID_EVENT(layout_recall
);
456 DEFINE_STATEID_EVENT(layout_recall_done
);
457 DEFINE_STATEID_EVENT(layout_recall_fail
);
458 DEFINE_STATEID_EVENT(layout_recall_release
);
460 DEFINE_STATEID_EVENT(open
);
461 DEFINE_STATEID_EVENT(deleg_read
);
462 DEFINE_STATEID_EVENT(deleg_break
);
463 DEFINE_STATEID_EVENT(deleg_recall
);
465 DECLARE_EVENT_CLASS(nfsd_stateseqid_class
,
466 TP_PROTO(u32 seqid
, const stateid_t
*stp
),
470 __field(u32
, cl_boot
)
473 __field(u32
, si_generation
)
476 __entry
->seqid
= seqid
;
477 __entry
->cl_boot
= stp
->si_opaque
.so_clid
.cl_boot
;
478 __entry
->cl_id
= stp
->si_opaque
.so_clid
.cl_id
;
479 __entry
->si_id
= stp
->si_opaque
.so_id
;
480 __entry
->si_generation
= stp
->si_generation
;
482 TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x",
483 __entry
->seqid
, __entry
->cl_boot
, __entry
->cl_id
,
484 __entry
->si_id
, __entry
->si_generation
)
487 #define DEFINE_STATESEQID_EVENT(name) \
488 DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \
489 TP_PROTO(u32 seqid, const stateid_t *stp), \
492 DEFINE_STATESEQID_EVENT(preprocess
);
493 DEFINE_STATESEQID_EVENT(open_confirm
);
495 DECLARE_EVENT_CLASS(nfsd_clientid_class
,
496 TP_PROTO(const clientid_t
*clid
),
499 __field(u32
, cl_boot
)
503 __entry
->cl_boot
= clid
->cl_boot
;
504 __entry
->cl_id
= clid
->cl_id
;
506 TP_printk("client %08x:%08x", __entry
->cl_boot
, __entry
->cl_id
)
509 #define DEFINE_CLIENTID_EVENT(name) \
510 DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \
511 TP_PROTO(const clientid_t *clid), \
514 DEFINE_CLIENTID_EVENT(expired
);
515 DEFINE_CLIENTID_EVENT(purged
);
516 DEFINE_CLIENTID_EVENT(renew
);
517 DEFINE_CLIENTID_EVENT(stale
);
519 DECLARE_EVENT_CLASS(nfsd_net_class
,
520 TP_PROTO(const struct nfsd_net
*nn
),
523 __field(unsigned long long, boot_time
)
526 __entry
->boot_time
= nn
->boot_time
;
528 TP_printk("boot_time=%16llx", __entry
->boot_time
)
531 #define DEFINE_NET_EVENT(name) \
532 DEFINE_EVENT(nfsd_net_class, nfsd_##name, \
533 TP_PROTO(const struct nfsd_net *nn), \
536 DEFINE_NET_EVENT(grace_start
);
537 DEFINE_NET_EVENT(grace_complete
);
539 DECLARE_EVENT_CLASS(nfsd_clid_class
,
540 TP_PROTO(const struct nfsd_net
*nn
,
541 unsigned int namelen
,
542 const unsigned char *namedata
),
543 TP_ARGS(nn
, namelen
, namedata
),
545 __field(unsigned long long, boot_time
)
546 __field(unsigned int, namelen
)
547 __dynamic_array(unsigned char, name
, namelen
)
550 __entry
->boot_time
= nn
->boot_time
;
551 __entry
->namelen
= namelen
;
552 memcpy(__get_dynamic_array(name
), namedata
, namelen
);
554 TP_printk("boot_time=%16llx nfs4_clientid=%.*s",
555 __entry
->boot_time
, __entry
->namelen
, __get_str(name
))
558 #define DEFINE_CLID_EVENT(name) \
559 DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \
560 TP_PROTO(const struct nfsd_net *nn, \
561 unsigned int namelen, \
562 const unsigned char *namedata), \
563 TP_ARGS(nn, namelen, namedata))
565 DEFINE_CLID_EVENT(find
);
566 DEFINE_CLID_EVENT(reclaim
);
568 TRACE_EVENT(nfsd_clid_inuse_err
,
569 TP_PROTO(const struct nfs4_client
*clp
),
572 __field(u32
, cl_boot
)
574 __array(unsigned char, addr
, sizeof(struct sockaddr_in6
))
575 __field(unsigned int, namelen
)
576 __dynamic_array(unsigned char, name
, clp
->cl_name
.len
)
579 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
580 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
581 memcpy(__entry
->addr
, &clp
->cl_addr
,
582 sizeof(struct sockaddr_in6
));
583 __entry
->namelen
= clp
->cl_name
.len
;
584 memcpy(__get_dynamic_array(name
), clp
->cl_name
.data
,
587 TP_printk("nfs4_clientid %.*s already in use by %pISpc, client %08x:%08x",
588 __entry
->namelen
, __get_str(name
), __entry
->addr
,
589 __entry
->cl_boot
, __entry
->cl_id
)
593 * from fs/nfsd/filecache.h
595 TRACE_DEFINE_ENUM(NFSD_FILE_HASHED
);
596 TRACE_DEFINE_ENUM(NFSD_FILE_PENDING
);
597 TRACE_DEFINE_ENUM(NFSD_FILE_BREAK_READ
);
598 TRACE_DEFINE_ENUM(NFSD_FILE_BREAK_WRITE
);
599 TRACE_DEFINE_ENUM(NFSD_FILE_REFERENCED
);
601 #define show_nf_flags(val) \
602 __print_flags(val, "|", \
603 { 1 << NFSD_FILE_HASHED, "HASHED" }, \
604 { 1 << NFSD_FILE_PENDING, "PENDING" }, \
605 { 1 << NFSD_FILE_BREAK_READ, "BREAK_READ" }, \
606 { 1 << NFSD_FILE_BREAK_WRITE, "BREAK_WRITE" }, \
607 { 1 << NFSD_FILE_REFERENCED, "REFERENCED"})
609 DECLARE_EVENT_CLASS(nfsd_file_class
,
610 TP_PROTO(struct nfsd_file
*nf
),
613 __field(unsigned int, nf_hashval
)
614 __field(void *, nf_inode
)
616 __field(unsigned long, nf_flags
)
617 __field(unsigned char, nf_may
)
618 __field(struct file
*, nf_file
)
621 __entry
->nf_hashval
= nf
->nf_hashval
;
622 __entry
->nf_inode
= nf
->nf_inode
;
623 __entry
->nf_ref
= refcount_read(&nf
->nf_ref
);
624 __entry
->nf_flags
= nf
->nf_flags
;
625 __entry
->nf_may
= nf
->nf_may
;
626 __entry
->nf_file
= nf
->nf_file
;
628 TP_printk("hash=0x%x inode=%p ref=%d flags=%s may=%s file=%p",
632 show_nf_flags(__entry
->nf_flags
),
633 show_nfsd_may_flags(__entry
->nf_may
),
637 #define DEFINE_NFSD_FILE_EVENT(name) \
638 DEFINE_EVENT(nfsd_file_class, name, \
639 TP_PROTO(struct nfsd_file *nf), \
642 DEFINE_NFSD_FILE_EVENT(nfsd_file_alloc
);
643 DEFINE_NFSD_FILE_EVENT(nfsd_file_put_final
);
644 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash
);
645 DEFINE_NFSD_FILE_EVENT(nfsd_file_put
);
646 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_release_locked
);
648 TRACE_EVENT(nfsd_file_acquire
,
649 TP_PROTO(struct svc_rqst
*rqstp
, unsigned int hash
,
650 struct inode
*inode
, unsigned int may_flags
,
651 struct nfsd_file
*nf
, __be32 status
),
653 TP_ARGS(rqstp
, hash
, inode
, may_flags
, nf
, status
),
657 __field(unsigned int, hash
)
658 __field(void *, inode
)
659 __field(unsigned long, may_flags
)
661 __field(unsigned long, nf_flags
)
662 __field(unsigned long, nf_may
)
663 __field(struct file
*, nf_file
)
668 __entry
->xid
= be32_to_cpu(rqstp
->rq_xid
);
669 __entry
->hash
= hash
;
670 __entry
->inode
= inode
;
671 __entry
->may_flags
= may_flags
;
672 __entry
->nf_ref
= nf
? refcount_read(&nf
->nf_ref
) : 0;
673 __entry
->nf_flags
= nf
? nf
->nf_flags
: 0;
674 __entry
->nf_may
= nf
? nf
->nf_may
: 0;
675 __entry
->nf_file
= nf
? nf
->nf_file
: NULL
;
676 __entry
->status
= be32_to_cpu(status
);
679 TP_printk("xid=0x%x hash=0x%x inode=%p may_flags=%s ref=%d nf_flags=%s nf_may=%s nf_file=%p status=%u",
680 __entry
->xid
, __entry
->hash
, __entry
->inode
,
681 show_nfsd_may_flags(__entry
->may_flags
),
682 __entry
->nf_ref
, show_nf_flags(__entry
->nf_flags
),
683 show_nfsd_may_flags(__entry
->nf_may
),
684 __entry
->nf_file
, __entry
->status
)
687 DECLARE_EVENT_CLASS(nfsd_file_search_class
,
688 TP_PROTO(struct inode
*inode
, unsigned int hash
, int found
),
689 TP_ARGS(inode
, hash
, found
),
691 __field(struct inode
*, inode
)
692 __field(unsigned int, hash
)
696 __entry
->inode
= inode
;
697 __entry
->hash
= hash
;
698 __entry
->found
= found
;
700 TP_printk("hash=0x%x inode=%p found=%d", __entry
->hash
,
701 __entry
->inode
, __entry
->found
)
704 #define DEFINE_NFSD_FILE_SEARCH_EVENT(name) \
705 DEFINE_EVENT(nfsd_file_search_class, name, \
706 TP_PROTO(struct inode *inode, unsigned int hash, int found), \
707 TP_ARGS(inode, hash, found))
709 DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode_sync
);
710 DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode
);
711 DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_is_cached
);
713 TRACE_EVENT(nfsd_file_fsnotify_handle_event
,
714 TP_PROTO(struct inode
*inode
, u32 mask
),
715 TP_ARGS(inode
, mask
),
717 __field(struct inode
*, inode
)
718 __field(unsigned int, nlink
)
719 __field(umode_t
, mode
)
723 __entry
->inode
= inode
;
724 __entry
->nlink
= inode
->i_nlink
;
725 __entry
->mode
= inode
->i_mode
;
726 __entry
->mask
= mask
;
728 TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry
->inode
,
729 __entry
->nlink
, __entry
->mode
, __entry
->mask
)
734 TRACE_DEFINE_ENUM(RC_DROPIT
);
735 TRACE_DEFINE_ENUM(RC_REPLY
);
736 TRACE_DEFINE_ENUM(RC_DOIT
);
738 #define show_drc_retval(x) \
739 __print_symbolic(x, \
740 { RC_DROPIT, "DROPIT" }, \
741 { RC_REPLY, "REPLY" }, \
744 TRACE_EVENT(nfsd_drc_found
,
746 const struct nfsd_net
*nn
,
747 const struct svc_rqst
*rqstp
,
750 TP_ARGS(nn
, rqstp
, result
),
752 __field(unsigned long long, boot_time
)
753 __field(unsigned long, result
)
757 __entry
->boot_time
= nn
->boot_time
;
758 __entry
->result
= result
;
759 __entry
->xid
= be32_to_cpu(rqstp
->rq_xid
);
761 TP_printk("boot_time=%16llx xid=0x%08x result=%s",
762 __entry
->boot_time
, __entry
->xid
,
763 show_drc_retval(__entry
->result
))
767 TRACE_EVENT(nfsd_drc_mismatch
,
769 const struct nfsd_net
*nn
,
770 const struct svc_cacherep
*key
,
771 const struct svc_cacherep
*rp
773 TP_ARGS(nn
, key
, rp
),
775 __field(unsigned long long, boot_time
)
778 __field(u32
, ingress
)
781 __entry
->boot_time
= nn
->boot_time
;
782 __entry
->xid
= be32_to_cpu(key
->c_key
.k_xid
);
783 __entry
->cached
= (__force u32
)key
->c_key
.k_csum
;
784 __entry
->ingress
= (__force u32
)rp
->c_key
.k_csum
;
786 TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x",
787 __entry
->boot_time
, __entry
->xid
, __entry
->cached
,
791 TRACE_EVENT(nfsd_cb_args
,
793 const struct nfs4_client
*clp
,
794 const struct nfs4_cb_conn
*conn
798 __field(u32
, cl_boot
)
802 __array(unsigned char, addr
, sizeof(struct sockaddr_in6
))
805 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
806 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
807 __entry
->prog
= conn
->cb_prog
;
808 __entry
->ident
= conn
->cb_ident
;
809 memcpy(__entry
->addr
, &conn
->cb_addr
,
810 sizeof(struct sockaddr_in6
));
812 TP_printk("client %08x:%08x callback addr=%pISpc prog=%u ident=%u",
813 __entry
->cl_boot
, __entry
->cl_id
,
814 __entry
->addr
, __entry
->prog
, __entry
->ident
)
817 TRACE_EVENT(nfsd_cb_nodelegs
,
818 TP_PROTO(const struct nfs4_client
*clp
),
821 __field(u32
, cl_boot
)
825 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
826 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
828 TP_printk("client %08x:%08x", __entry
->cl_boot
, __entry
->cl_id
)
831 TRACE_DEFINE_ENUM(NFSD4_CB_UP
);
832 TRACE_DEFINE_ENUM(NFSD4_CB_UNKNOWN
);
833 TRACE_DEFINE_ENUM(NFSD4_CB_DOWN
);
834 TRACE_DEFINE_ENUM(NFSD4_CB_FAULT
);
836 #define show_cb_state(val) \
837 __print_symbolic(val, \
838 { NFSD4_CB_UP, "UP" }, \
839 { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \
840 { NFSD4_CB_DOWN, "DOWN" }, \
841 { NFSD4_CB_FAULT, "FAULT"})
843 DECLARE_EVENT_CLASS(nfsd_cb_class
,
844 TP_PROTO(const struct nfs4_client
*clp
),
847 __field(unsigned long, state
)
848 __field(u32
, cl_boot
)
850 __array(unsigned char, addr
, sizeof(struct sockaddr_in6
))
853 __entry
->state
= clp
->cl_cb_state
;
854 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
855 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
856 memcpy(__entry
->addr
, &clp
->cl_cb_conn
.cb_addr
,
857 sizeof(struct sockaddr_in6
));
859 TP_printk("addr=%pISpc client %08x:%08x state=%s",
860 __entry
->addr
, __entry
->cl_boot
, __entry
->cl_id
,
861 show_cb_state(__entry
->state
))
864 #define DEFINE_NFSD_CB_EVENT(name) \
865 DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \
866 TP_PROTO(const struct nfs4_client *clp), \
869 DEFINE_NFSD_CB_EVENT(setup
);
870 DEFINE_NFSD_CB_EVENT(state
);
871 DEFINE_NFSD_CB_EVENT(shutdown
);
873 TRACE_EVENT(nfsd_cb_setup_err
,
875 const struct nfs4_client
*clp
,
881 __field(u32
, cl_boot
)
883 __array(unsigned char, addr
, sizeof(struct sockaddr_in6
))
886 __entry
->error
= error
;
887 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
888 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
889 memcpy(__entry
->addr
, &clp
->cl_cb_conn
.cb_addr
,
890 sizeof(struct sockaddr_in6
));
892 TP_printk("addr=%pISpc client %08x:%08x error=%ld",
893 __entry
->addr
, __entry
->cl_boot
, __entry
->cl_id
, __entry
->error
)
896 TRACE_EVENT(nfsd_cb_work
,
898 const struct nfs4_client
*clp
,
899 const char *procedure
901 TP_ARGS(clp
, procedure
),
903 __field(u32
, cl_boot
)
905 __string(procedure
, procedure
)
906 __array(unsigned char, addr
, sizeof(struct sockaddr_in6
))
909 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
910 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
911 __assign_str(procedure
, procedure
)
912 memcpy(__entry
->addr
, &clp
->cl_cb_conn
.cb_addr
,
913 sizeof(struct sockaddr_in6
));
915 TP_printk("addr=%pISpc client %08x:%08x procedure=%s",
916 __entry
->addr
, __entry
->cl_boot
, __entry
->cl_id
,
917 __get_str(procedure
))
920 TRACE_EVENT(nfsd_cb_done
,
922 const struct nfs4_client
*clp
,
925 TP_ARGS(clp
, status
),
927 __field(u32
, cl_boot
)
930 __array(unsigned char, addr
, sizeof(struct sockaddr_in6
))
933 __entry
->cl_boot
= clp
->cl_clientid
.cl_boot
;
934 __entry
->cl_id
= clp
->cl_clientid
.cl_id
;
935 __entry
->status
= status
;
936 memcpy(__entry
->addr
, &clp
->cl_cb_conn
.cb_addr
,
937 sizeof(struct sockaddr_in6
));
939 TP_printk("addr=%pISpc client %08x:%08x status=%d",
940 __entry
->addr
, __entry
->cl_boot
, __entry
->cl_id
,
944 #endif /* _NFSD_TRACE_H */
946 #undef TRACE_INCLUDE_PATH
947 #define TRACE_INCLUDE_PATH .
948 #define TRACE_INCLUDE_FILE trace
949 #include <trace/define_trace.h>