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>
12 #include <linux/sunrpc/clnt.h>
13 #include <linux/sunrpc/xprt.h>
14 #include <trace/misc/nfs.h>
15 #include <trace/misc/sunrpc.h>
21 #define NFSD_TRACE_PROC_RES_FIELDS \
22 __field(unsigned int, netns_ino) \
24 __field(unsigned long, status) \
25 __array(unsigned char, server, sizeof(struct sockaddr_in6)) \
26 __array(unsigned char, client, sizeof(struct sockaddr_in6))
28 #define NFSD_TRACE_PROC_RES_ASSIGNMENTS(error) \
30 __entry->netns_ino = SVC_NET(rqstp)->ns.inum; \
31 __entry->xid = be32_to_cpu(rqstp->rq_xid); \
32 __entry->status = be32_to_cpu(error); \
33 memcpy(__entry->server, &rqstp->rq_xprt->xpt_local, \
34 rqstp->rq_xprt->xpt_locallen); \
35 memcpy(__entry->client, &rqstp->rq_xprt->xpt_remote, \
36 rqstp->rq_xprt->xpt_remotelen); \
39 DECLARE_EVENT_CLASS(nfsd_xdr_err_class,
41 const struct svc_rqst *rqstp
45 __field(unsigned int, netns_ino)
49 __sockaddr(server, rqstp->rq_xprt->xpt_locallen)
50 __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
53 const struct svc_xprt *xprt = rqstp->rq_xprt;
55 __entry->netns_ino = xprt->xpt_net->ns.inum;
56 __entry->xid = be32_to_cpu(rqstp->rq_xid);
57 __entry->vers = rqstp->rq_vers;
58 __entry->proc = rqstp->rq_proc;
59 __assign_sockaddr(server, &xprt->xpt_local, xprt->xpt_locallen);
60 __assign_sockaddr(client, &xprt->xpt_remote, xprt->xpt_remotelen);
62 TP_printk("xid=0x%08x vers=%u proc=%u",
63 __entry->xid, __entry->vers, __entry->proc
67 #define DEFINE_NFSD_XDR_ERR_EVENT(name) \
68 DEFINE_EVENT(nfsd_xdr_err_class, nfsd_##name##_err, \
69 TP_PROTO(const struct svc_rqst *rqstp), \
72 DEFINE_NFSD_XDR_ERR_EVENT(garbage_args);
73 DEFINE_NFSD_XDR_ERR_EVENT(cant_encode);
75 #define show_nfsd_may_flags(x) \
76 __print_flags(x, "|", \
77 { NFSD_MAY_EXEC, "EXEC" }, \
78 { NFSD_MAY_WRITE, "WRITE" }, \
79 { NFSD_MAY_READ, "READ" }, \
80 { NFSD_MAY_SATTR, "SATTR" }, \
81 { NFSD_MAY_TRUNC, "TRUNC" }, \
82 { NFSD_MAY_NLM, "NLM" }, \
83 { NFSD_MAY_OWNER_OVERRIDE, "OWNER_OVERRIDE" }, \
84 { NFSD_MAY_LOCAL_ACCESS, "LOCAL_ACCESS" }, \
85 { NFSD_MAY_BYPASS_GSS_ON_ROOT, "BYPASS_GSS_ON_ROOT" }, \
86 { NFSD_MAY_NOT_BREAK_LEASE, "NOT_BREAK_LEASE" }, \
87 { NFSD_MAY_BYPASS_GSS, "BYPASS_GSS" }, \
88 { NFSD_MAY_READ_IF_EXEC, "READ_IF_EXEC" }, \
89 { NFSD_MAY_64BIT_COOKIE, "64BIT_COOKIE" }, \
90 { NFSD_MAY_LOCALIO, "LOCALIO" })
92 TRACE_EVENT(nfsd_compound,
94 const struct svc_rqst *rqst,
99 TP_ARGS(rqst, tag, taglen, opcnt),
103 __string_len(tag, tag, taglen)
106 __entry->xid = be32_to_cpu(rqst->rq_xid);
107 __entry->opcnt = opcnt;
110 TP_printk("xid=0x%08x opcnt=%u tag=%s",
111 __entry->xid, __entry->opcnt, __get_str(tag)
115 TRACE_EVENT(nfsd_compound_status,
116 TP_PROTO(u32 args_opcnt,
120 TP_ARGS(args_opcnt, resp_opcnt, status, name),
122 __field(u32, args_opcnt)
123 __field(u32, resp_opcnt)
128 __entry->args_opcnt = args_opcnt;
129 __entry->resp_opcnt = resp_opcnt;
130 __entry->status = be32_to_cpu(status);
133 TP_printk("op=%u/%u %s status=%d",
134 __entry->resp_opcnt, __entry->args_opcnt,
135 __get_str(name), __entry->status)
138 TRACE_EVENT(nfsd_compound_decode_err,
140 const struct svc_rqst *rqstp,
146 TP_ARGS(rqstp, args_opcnt, resp_opcnt, opnum, status),
148 NFSD_TRACE_PROC_RES_FIELDS
150 __field(u32, args_opcnt)
151 __field(u32, resp_opcnt)
155 NFSD_TRACE_PROC_RES_ASSIGNMENTS(status)
157 __entry->args_opcnt = args_opcnt;
158 __entry->resp_opcnt = resp_opcnt;
159 __entry->opnum = opnum;
161 TP_printk("op=%u/%u opnum=%u status=%lu",
162 __entry->resp_opcnt, __entry->args_opcnt,
163 __entry->opnum, __entry->status)
166 DECLARE_EVENT_CLASS(nfsd_compound_err_class,
168 const struct svc_rqst *rqstp,
172 TP_ARGS(rqstp, opnum, status),
174 NFSD_TRACE_PROC_RES_FIELDS
179 NFSD_TRACE_PROC_RES_ASSIGNMENTS(status)
181 __entry->opnum = opnum;
183 TP_printk("opnum=%u status=%lu",
184 __entry->opnum, __entry->status)
187 #define DEFINE_NFSD_COMPOUND_ERR_EVENT(name) \
188 DEFINE_EVENT(nfsd_compound_err_class, nfsd_compound_##name##_err, \
190 const struct svc_rqst *rqstp, \
194 TP_ARGS(rqstp, opnum, status))
196 DEFINE_NFSD_COMPOUND_ERR_EVENT(op);
197 DEFINE_NFSD_COMPOUND_ERR_EVENT(encode);
199 #define show_fs_file_type(x) \
200 __print_symbolic(x, \
201 { S_IFLNK, "LNK" }, \
202 { S_IFREG, "REG" }, \
203 { S_IFDIR, "DIR" }, \
204 { S_IFCHR, "CHR" }, \
205 { S_IFBLK, "BLK" }, \
206 { S_IFIFO, "FIFO" }, \
207 { S_IFSOCK, "SOCK" })
209 TRACE_EVENT_CONDITION(nfsd_fh_verify,
211 const struct svc_rqst *rqstp,
212 const struct svc_fh *fhp,
216 TP_ARGS(rqstp, fhp, type, access),
217 TP_CONDITION(rqstp != NULL),
219 __field(unsigned int, netns_ino)
220 __sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
221 __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
223 __field(u32, fh_hash)
224 __field(const void *, inode)
225 __field(unsigned long, type)
226 __field(unsigned long, access)
229 __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
230 __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
231 rqstp->rq_xprt->xpt_locallen);
232 __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote,
233 rqstp->rq_xprt->xpt_remotelen);
234 __entry->xid = be32_to_cpu(rqstp->rq_xid);
235 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
236 __entry->inode = d_inode(fhp->fh_dentry);
237 __entry->type = type;
238 __entry->access = access;
240 TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s",
241 __entry->xid, __entry->fh_hash,
242 show_fs_file_type(__entry->type),
243 show_nfsd_may_flags(__entry->access)
247 TRACE_EVENT_CONDITION(nfsd_fh_verify_err,
249 const struct svc_rqst *rqstp,
250 const struct svc_fh *fhp,
255 TP_ARGS(rqstp, fhp, type, access, error),
256 TP_CONDITION(rqstp != NULL && error),
258 __field(unsigned int, netns_ino)
259 __sockaddr(server, rqstp->rq_xprt->xpt_remotelen)
260 __sockaddr(client, rqstp->rq_xprt->xpt_remotelen)
262 __field(u32, fh_hash)
263 __field(const void *, inode)
264 __field(unsigned long, type)
265 __field(unsigned long, access)
269 __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
270 __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local,
271 rqstp->rq_xprt->xpt_locallen);
272 __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote,
273 rqstp->rq_xprt->xpt_remotelen);
274 __entry->xid = be32_to_cpu(rqstp->rq_xid);
275 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
277 __entry->inode = d_inode(fhp->fh_dentry);
279 __entry->inode = NULL;
280 __entry->type = type;
281 __entry->access = access;
282 __entry->error = be32_to_cpu(error);
284 TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s error=%d",
285 __entry->xid, __entry->fh_hash,
286 show_fs_file_type(__entry->type),
287 show_nfsd_may_flags(__entry->access),
292 DECLARE_EVENT_CLASS(nfsd_fh_err_class,
293 TP_PROTO(struct svc_rqst *rqstp,
296 TP_ARGS(rqstp, fhp, status),
299 __field(u32, fh_hash)
303 __entry->xid = be32_to_cpu(rqstp->rq_xid);
304 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
305 __entry->status = status;
307 TP_printk("xid=0x%08x fh_hash=0x%08x status=%d",
308 __entry->xid, __entry->fh_hash,
312 #define DEFINE_NFSD_FH_ERR_EVENT(name) \
313 DEFINE_EVENT_CONDITION(nfsd_fh_err_class, nfsd_##name, \
314 TP_PROTO(struct svc_rqst *rqstp, \
315 struct svc_fh *fhp, \
317 TP_ARGS(rqstp, fhp, status), \
318 TP_CONDITION(rqstp != NULL))
320 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport);
321 DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle);
323 TRACE_EVENT(nfsd_exp_find_key,
324 TP_PROTO(const struct svc_expkey *key,
326 TP_ARGS(key, status),
328 __field(int, fsidtype)
329 __array(u32, fsid, 6)
330 __string(auth_domain, key->ek_client->name)
334 __entry->fsidtype = key->ek_fsidtype;
335 memcpy(__entry->fsid, key->ek_fsid, 4*6);
336 __assign_str(auth_domain);
337 __entry->status = status;
339 TP_printk("fsid=%x::%s domain=%s status=%d",
341 __print_array(__entry->fsid, 6, 4),
342 __get_str(auth_domain),
347 TRACE_EVENT(nfsd_expkey_update,
348 TP_PROTO(const struct svc_expkey *key, const char *exp_path),
349 TP_ARGS(key, exp_path),
351 __field(int, fsidtype)
352 __array(u32, fsid, 6)
353 __string(auth_domain, key->ek_client->name)
354 __string(path, exp_path)
358 __entry->fsidtype = key->ek_fsidtype;
359 memcpy(__entry->fsid, key->ek_fsid, 4*6);
360 __assign_str(auth_domain);
362 __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
364 TP_printk("fsid=%x::%s domain=%s path=%s cache=%s",
366 __print_array(__entry->fsid, 6, 4),
367 __get_str(auth_domain),
369 __entry->cache ? "pos" : "neg"
373 TRACE_EVENT(nfsd_exp_get_by_name,
374 TP_PROTO(const struct svc_export *key,
376 TP_ARGS(key, status),
378 __string(path, key->ex_path.dentry->d_name.name)
379 __string(auth_domain, key->ex_client->name)
384 __assign_str(auth_domain);
385 __entry->status = status;
387 TP_printk("path=%s domain=%s status=%d",
389 __get_str(auth_domain),
394 TRACE_EVENT(nfsd_export_update,
395 TP_PROTO(const struct svc_export *key),
398 __string(path, key->ex_path.dentry->d_name.name)
399 __string(auth_domain, key->ex_client->name)
404 __assign_str(auth_domain);
405 __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags);
407 TP_printk("path=%s domain=%s cache=%s",
409 __get_str(auth_domain),
410 __entry->cache ? "pos" : "neg"
414 DECLARE_EVENT_CLASS(nfsd_io_class,
415 TP_PROTO(struct svc_rqst *rqstp,
419 TP_ARGS(rqstp, fhp, offset, len),
422 __field(u32, fh_hash)
427 __entry->xid = be32_to_cpu(rqstp->rq_xid);
428 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
429 __entry->offset = offset;
432 TP_printk("xid=0x%08x fh_hash=0x%08x offset=%llu len=%u",
433 __entry->xid, __entry->fh_hash,
434 __entry->offset, __entry->len)
437 #define DEFINE_NFSD_IO_EVENT(name) \
438 DEFINE_EVENT(nfsd_io_class, nfsd_##name, \
439 TP_PROTO(struct svc_rqst *rqstp, \
440 struct svc_fh *fhp, \
443 TP_ARGS(rqstp, fhp, offset, len))
445 DEFINE_NFSD_IO_EVENT(read_start);
446 DEFINE_NFSD_IO_EVENT(read_splice);
447 DEFINE_NFSD_IO_EVENT(read_vector);
448 DEFINE_NFSD_IO_EVENT(read_io_done);
449 DEFINE_NFSD_IO_EVENT(read_done);
450 DEFINE_NFSD_IO_EVENT(write_start);
451 DEFINE_NFSD_IO_EVENT(write_opened);
452 DEFINE_NFSD_IO_EVENT(write_io_done);
453 DEFINE_NFSD_IO_EVENT(write_done);
455 DECLARE_EVENT_CLASS(nfsd_err_class,
456 TP_PROTO(struct svc_rqst *rqstp,
460 TP_ARGS(rqstp, fhp, offset, status),
463 __field(u32, fh_hash)
464 __field(loff_t, offset)
468 __entry->xid = be32_to_cpu(rqstp->rq_xid);
469 __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle);
470 __entry->offset = offset;
471 __entry->status = status;
473 TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d",
474 __entry->xid, __entry->fh_hash,
475 __entry->offset, __entry->status)
478 #define DEFINE_NFSD_ERR_EVENT(name) \
479 DEFINE_EVENT(nfsd_err_class, nfsd_##name, \
480 TP_PROTO(struct svc_rqst *rqstp, \
481 struct svc_fh *fhp, \
484 TP_ARGS(rqstp, fhp, offset, len))
486 DEFINE_NFSD_ERR_EVENT(read_err);
487 DEFINE_NFSD_ERR_EVENT(write_err);
489 TRACE_EVENT(nfsd_dirent,
490 TP_PROTO(struct svc_fh *fhp,
494 TP_ARGS(fhp, ino, name, namlen),
496 __field(u32, fh_hash)
498 __string_len(name, name, namlen)
501 __entry->fh_hash = fhp ? knfsd_fh_hash(&fhp->fh_handle) : 0;
505 TP_printk("fh_hash=0x%08x ino=%llu name=%s",
506 __entry->fh_hash, __entry->ino, __get_str(name)
510 DECLARE_EVENT_CLASS(nfsd_copy_err_class,
511 TP_PROTO(struct svc_rqst *rqstp,
512 struct svc_fh *src_fhp,
514 struct svc_fh *dst_fhp,
518 TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, count, status),
521 __field(u32, src_fh_hash)
522 __field(loff_t, src_offset)
523 __field(u32, dst_fh_hash)
524 __field(loff_t, dst_offset)
529 __entry->xid = be32_to_cpu(rqstp->rq_xid);
530 __entry->src_fh_hash = knfsd_fh_hash(&src_fhp->fh_handle);
531 __entry->src_offset = src_offset;
532 __entry->dst_fh_hash = knfsd_fh_hash(&dst_fhp->fh_handle);
533 __entry->dst_offset = dst_offset;
534 __entry->count = count;
535 __entry->status = status;
537 TP_printk("xid=0x%08x src_fh_hash=0x%08x src_offset=%lld "
538 "dst_fh_hash=0x%08x dst_offset=%lld "
539 "count=%llu status=%d",
540 __entry->xid, __entry->src_fh_hash, __entry->src_offset,
541 __entry->dst_fh_hash, __entry->dst_offset,
542 (unsigned long long)__entry->count,
546 #define DEFINE_NFSD_COPY_ERR_EVENT(name) \
547 DEFINE_EVENT(nfsd_copy_err_class, nfsd_##name, \
548 TP_PROTO(struct svc_rqst *rqstp, \
549 struct svc_fh *src_fhp, \
551 struct svc_fh *dst_fhp, \
555 TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, \
558 DEFINE_NFSD_COPY_ERR_EVENT(clone_file_range_err);
561 #include "filecache.h"
564 TRACE_EVENT(nfsd_delegret_wakeup,
566 const struct svc_rqst *rqstp,
567 const struct inode *inode,
570 TP_ARGS(rqstp, inode, timeo),
573 __field(const void *, inode)
577 __entry->xid = be32_to_cpu(rqstp->rq_xid);
578 __entry->inode = inode;
579 __entry->timeo = timeo;
581 TP_printk("xid=0x%08x inode=%p%s",
582 __entry->xid, __entry->inode,
583 __entry->timeo == 0 ? " (timed out)" : ""
587 DECLARE_EVENT_CLASS(nfsd_stateid_class,
588 TP_PROTO(stateid_t *stp),
591 __field(u32, cl_boot)
594 __field(u32, si_generation)
597 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
598 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
599 __entry->si_id = stp->si_opaque.so_id;
600 __entry->si_generation = stp->si_generation;
602 TP_printk("client %08x:%08x stateid %08x:%08x",
606 __entry->si_generation)
609 #define DEFINE_STATEID_EVENT(name) \
610 DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \
611 TP_PROTO(stateid_t *stp), \
614 DEFINE_STATEID_EVENT(layoutstate_alloc);
615 DEFINE_STATEID_EVENT(layoutstate_unhash);
616 DEFINE_STATEID_EVENT(layoutstate_free);
617 DEFINE_STATEID_EVENT(layout_get_lookup_fail);
618 DEFINE_STATEID_EVENT(layout_commit_lookup_fail);
619 DEFINE_STATEID_EVENT(layout_return_lookup_fail);
620 DEFINE_STATEID_EVENT(layout_recall);
621 DEFINE_STATEID_EVENT(layout_recall_done);
622 DEFINE_STATEID_EVENT(layout_recall_fail);
623 DEFINE_STATEID_EVENT(layout_recall_release);
625 DEFINE_STATEID_EVENT(open);
626 DEFINE_STATEID_EVENT(deleg_read);
627 DEFINE_STATEID_EVENT(deleg_write);
628 DEFINE_STATEID_EVENT(deleg_return);
629 DEFINE_STATEID_EVENT(deleg_recall);
631 DECLARE_EVENT_CLASS(nfsd_stateseqid_class,
632 TP_PROTO(u32 seqid, const stateid_t *stp),
636 __field(u32, cl_boot)
639 __field(u32, si_generation)
642 __entry->seqid = seqid;
643 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
644 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
645 __entry->si_id = stp->si_opaque.so_id;
646 __entry->si_generation = stp->si_generation;
648 TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x",
649 __entry->seqid, __entry->cl_boot, __entry->cl_id,
650 __entry->si_id, __entry->si_generation)
653 #define DEFINE_STATESEQID_EVENT(name) \
654 DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \
655 TP_PROTO(u32 seqid, const stateid_t *stp), \
658 DEFINE_STATESEQID_EVENT(preprocess);
659 DEFINE_STATESEQID_EVENT(open_confirm);
661 #define show_stid_type(x) \
662 __print_flags(x, "|", \
663 { SC_TYPE_OPEN, "OPEN" }, \
664 { SC_TYPE_LOCK, "LOCK" }, \
665 { SC_TYPE_DELEG, "DELEG" }, \
666 { SC_TYPE_LAYOUT, "LAYOUT" })
668 #define show_stid_status(x) \
669 __print_flags(x, "|", \
670 { SC_STATUS_CLOSED, "CLOSED" }, \
671 { SC_STATUS_REVOKED, "REVOKED" }, \
672 { SC_STATUS_ADMIN_REVOKED, "ADMIN_REVOKED" })
674 DECLARE_EVENT_CLASS(nfsd_stid_class,
676 const struct nfs4_stid *stid
680 __field(unsigned long, sc_type)
681 __field(unsigned long, sc_status)
682 __field(int, sc_count)
683 __field(u32, cl_boot)
686 __field(u32, si_generation)
689 const stateid_t *stp = &stid->sc_stateid;
691 __entry->sc_type = stid->sc_type;
692 __entry->sc_status = stid->sc_status;
693 __entry->sc_count = refcount_read(&stid->sc_count);
694 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
695 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
696 __entry->si_id = stp->si_opaque.so_id;
697 __entry->si_generation = stp->si_generation;
699 TP_printk("client %08x:%08x stateid %08x:%08x ref=%d type=%s state=%s",
700 __entry->cl_boot, __entry->cl_id,
701 __entry->si_id, __entry->si_generation,
702 __entry->sc_count, show_stid_type(__entry->sc_type),
703 show_stid_status(__entry->sc_status)
707 #define DEFINE_STID_EVENT(name) \
708 DEFINE_EVENT(nfsd_stid_class, nfsd_stid_##name, \
709 TP_PROTO(const struct nfs4_stid *stid), \
712 DEFINE_STID_EVENT(revoke);
714 TRACE_EVENT(nfsd_stateowner_replay,
717 const struct nfs4_replay *rp
721 __field(unsigned long, status)
725 __entry->status = be32_to_cpu(rp->rp_status);
726 __entry->opnum = opnum;
728 TP_printk("opnum=%u status=%lu",
729 __entry->opnum, __entry->status)
732 TRACE_EVENT_CONDITION(nfsd_seq4_status,
734 const struct svc_rqst *rqstp,
735 const struct nfsd4_sequence *sequence
737 TP_ARGS(rqstp, sequence),
738 TP_CONDITION(sequence->status_flags),
740 __field(unsigned int, netns_ino)
742 __field(u32, cl_boot)
745 __field(u32, reserved)
746 __field(unsigned long, status_flags)
749 const struct nfsd4_sessionid *sid =
750 (struct nfsd4_sessionid *)&sequence->sessionid;
752 __entry->netns_ino = SVC_NET(rqstp)->ns.inum;
753 __entry->xid = be32_to_cpu(rqstp->rq_xid);
754 __entry->cl_boot = sid->clientid.cl_boot;
755 __entry->cl_id = sid->clientid.cl_id;
756 __entry->seqno = sid->sequence;
757 __entry->reserved = sid->reserved;
758 __entry->status_flags = sequence->status_flags;
760 TP_printk("xid=0x%08x sessionid=%08x:%08x:%08x:%08x status_flags=%s",
761 __entry->xid, __entry->cl_boot, __entry->cl_id,
762 __entry->seqno, __entry->reserved,
763 show_nfs4_seq4_status(__entry->status_flags)
767 DECLARE_EVENT_CLASS(nfsd_cs_slot_class,
769 const struct nfs4_client *clp,
770 const struct nfsd4_create_session *cs
775 __field(u32, slot_seqid)
776 __field(u32, cl_boot)
778 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
781 const struct nfsd4_clid_slot *slot = &clp->cl_cs_slot;
783 __entry->cl_boot = clp->cl_clientid.cl_boot;
784 __entry->cl_id = clp->cl_clientid.cl_id;
785 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
786 clp->cl_cb_conn.cb_addrlen);
787 __entry->seqid = cs->seqid;
788 __entry->slot_seqid = slot->sl_seqid;
790 TP_printk("addr=%pISpc client %08x:%08x seqid=%u slot_seqid=%u",
791 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
792 __entry->seqid, __entry->slot_seqid
796 #define DEFINE_CS_SLOT_EVENT(name) \
797 DEFINE_EVENT(nfsd_cs_slot_class, nfsd_##name, \
799 const struct nfs4_client *clp, \
800 const struct nfsd4_create_session *cs \
804 DEFINE_CS_SLOT_EVENT(slot_seqid_conf);
805 DEFINE_CS_SLOT_EVENT(slot_seqid_unconf);
807 TRACE_EVENT(nfsd_slot_seqid_sequence,
809 const struct nfs4_client *clp,
810 const struct nfsd4_sequence *seq,
811 const struct nfsd4_slot *slot
813 TP_ARGS(clp, seq, slot),
816 __field(u32, slot_seqid)
817 __field(u32, cl_boot)
819 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
820 __field(bool, in_use)
823 __entry->cl_boot = clp->cl_clientid.cl_boot;
824 __entry->cl_id = clp->cl_clientid.cl_id;
825 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
826 clp->cl_cb_conn.cb_addrlen);
827 __entry->seqid = seq->seqid;
828 __entry->slot_seqid = slot->sl_seqid;
830 TP_printk("addr=%pISpc client %08x:%08x seqid=%u slot_seqid=%u (%sin use)",
831 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
832 __entry->seqid, __entry->slot_seqid,
833 __entry->in_use ? "" : "not "
837 DECLARE_EVENT_CLASS(nfsd_clientid_class,
838 TP_PROTO(const clientid_t *clid),
841 __field(u32, cl_boot)
845 __entry->cl_boot = clid->cl_boot;
846 __entry->cl_id = clid->cl_id;
848 TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id)
851 #define DEFINE_CLIENTID_EVENT(name) \
852 DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \
853 TP_PROTO(const clientid_t *clid), \
856 DEFINE_CLIENTID_EVENT(expire_unconf);
857 DEFINE_CLIENTID_EVENT(reclaim_complete);
858 DEFINE_CLIENTID_EVENT(confirmed);
859 DEFINE_CLIENTID_EVENT(destroyed);
860 DEFINE_CLIENTID_EVENT(admin_expired);
861 DEFINE_CLIENTID_EVENT(replaced);
862 DEFINE_CLIENTID_EVENT(purged);
863 DEFINE_CLIENTID_EVENT(renew);
864 DEFINE_CLIENTID_EVENT(stale);
866 TRACE_EVENT(nfsd_mark_client_expired,
868 const struct nfs4_client *clp,
871 TP_ARGS(clp, cl_rpc_users),
873 __field(int, cl_rpc_users)
874 __field(u32, cl_boot)
876 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
879 __entry->cl_rpc_users = cl_rpc_users;
880 __entry->cl_boot = clp->cl_clientid.cl_boot;
881 __entry->cl_id = clp->cl_clientid.cl_id;
882 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
883 clp->cl_cb_conn.cb_addrlen)
885 TP_printk("addr=%pISpc client %08x:%08x cl_rpc_users=%d",
886 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
887 __entry->cl_rpc_users)
890 DECLARE_EVENT_CLASS(nfsd_net_class,
891 TP_PROTO(const struct nfsd_net *nn),
894 __field(unsigned long long, boot_time)
897 __entry->boot_time = nn->boot_time;
899 TP_printk("boot_time=%16llx", __entry->boot_time)
902 #define DEFINE_NET_EVENT(name) \
903 DEFINE_EVENT(nfsd_net_class, nfsd_##name, \
904 TP_PROTO(const struct nfsd_net *nn), \
907 DEFINE_NET_EVENT(grace_start);
908 DEFINE_NET_EVENT(grace_complete);
910 TRACE_EVENT(nfsd_writeverf_reset,
912 const struct nfsd_net *nn,
913 const struct svc_rqst *rqstp,
916 TP_ARGS(nn, rqstp, error),
918 __field(unsigned long long, boot_time)
921 __array(unsigned char, verifier, NFS4_VERIFIER_SIZE)
924 __entry->boot_time = nn->boot_time;
925 __entry->xid = be32_to_cpu(rqstp->rq_xid);
926 __entry->error = error;
928 /* avoid seqlock inside TP_fast_assign */
929 memcpy(__entry->verifier, nn->writeverf,
932 TP_printk("boot_time=%16llx xid=0x%08x error=%d new verifier=0x%s",
933 __entry->boot_time, __entry->xid, __entry->error,
934 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE)
938 TRACE_EVENT(nfsd_clid_cred_mismatch,
940 const struct nfs4_client *clp,
941 const struct svc_rqst *rqstp
945 __field(u32, cl_boot)
947 __field(unsigned long, cl_flavor)
948 __field(unsigned long, new_flavor)
949 __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen)
952 __entry->cl_boot = clp->cl_clientid.cl_boot;
953 __entry->cl_id = clp->cl_clientid.cl_id;
954 __entry->cl_flavor = clp->cl_cred.cr_flavor;
955 __entry->new_flavor = rqstp->rq_cred.cr_flavor;
956 __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote,
957 rqstp->rq_xprt->xpt_remotelen);
959 TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc",
960 __entry->cl_boot, __entry->cl_id,
961 show_nfsd_authflavor(__entry->cl_flavor),
962 show_nfsd_authflavor(__entry->new_flavor),
967 TRACE_EVENT(nfsd_clid_verf_mismatch,
969 const struct nfs4_client *clp,
970 const struct svc_rqst *rqstp,
971 const nfs4_verifier *verf
973 TP_ARGS(clp, rqstp, verf),
975 __field(u32, cl_boot)
977 __array(unsigned char, cl_verifier, NFS4_VERIFIER_SIZE)
978 __array(unsigned char, new_verifier, NFS4_VERIFIER_SIZE)
979 __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen)
982 __entry->cl_boot = clp->cl_clientid.cl_boot;
983 __entry->cl_id = clp->cl_clientid.cl_id;
984 memcpy(__entry->cl_verifier, (void *)&clp->cl_verifier,
986 memcpy(__entry->new_verifier, (void *)verf,
988 __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote,
989 rqstp->rq_xprt->xpt_remotelen);
991 TP_printk("client %08x:%08x verf=0x%s, updated=0x%s from addr=%pISpc",
992 __entry->cl_boot, __entry->cl_id,
993 __print_hex_str(__entry->cl_verifier, NFS4_VERIFIER_SIZE),
994 __print_hex_str(__entry->new_verifier, NFS4_VERIFIER_SIZE),
999 DECLARE_EVENT_CLASS(nfsd_clid_class,
1000 TP_PROTO(const struct nfs4_client *clp),
1003 __field(u32, cl_boot)
1005 __array(unsigned char, addr, sizeof(struct sockaddr_in6))
1006 __field(unsigned long, flavor)
1007 __array(unsigned char, verifier, NFS4_VERIFIER_SIZE)
1008 __string_len(name, clp->cl_name.data, clp->cl_name.len)
1011 __entry->cl_boot = clp->cl_clientid.cl_boot;
1012 __entry->cl_id = clp->cl_clientid.cl_id;
1013 memcpy(__entry->addr, &clp->cl_addr,
1014 sizeof(struct sockaddr_in6));
1015 __entry->flavor = clp->cl_cred.cr_flavor;
1016 memcpy(__entry->verifier, (void *)&clp->cl_verifier,
1017 NFS4_VERIFIER_SIZE);
1020 TP_printk("addr=%pISpc name='%s' verifier=0x%s flavor=%s client=%08x:%08x",
1021 __entry->addr, __get_str(name),
1022 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE),
1023 show_nfsd_authflavor(__entry->flavor),
1024 __entry->cl_boot, __entry->cl_id)
1027 #define DEFINE_CLID_EVENT(name) \
1028 DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \
1029 TP_PROTO(const struct nfs4_client *clp), \
1032 DEFINE_CLID_EVENT(fresh);
1033 DEFINE_CLID_EVENT(confirmed_r);
1036 * from fs/nfsd/filecache.h
1038 #define show_nf_flags(val) \
1039 __print_flags(val, "|", \
1040 { 1 << NFSD_FILE_HASHED, "HASHED" }, \
1041 { 1 << NFSD_FILE_PENDING, "PENDING" }, \
1042 { 1 << NFSD_FILE_REFERENCED, "REFERENCED" }, \
1043 { 1 << NFSD_FILE_GC, "GC" })
1045 DECLARE_EVENT_CLASS(nfsd_file_class,
1046 TP_PROTO(struct nfsd_file *nf),
1049 __field(void *, nf_inode)
1050 __field(int, nf_ref)
1051 __field(unsigned long, nf_flags)
1052 __field(unsigned char, nf_may)
1053 __field(struct file *, nf_file)
1056 __entry->nf_inode = nf->nf_inode;
1057 __entry->nf_ref = refcount_read(&nf->nf_ref);
1058 __entry->nf_flags = nf->nf_flags;
1059 __entry->nf_may = nf->nf_may;
1060 __entry->nf_file = nf->nf_file;
1062 TP_printk("inode=%p ref=%d flags=%s may=%s nf_file=%p",
1065 show_nf_flags(__entry->nf_flags),
1066 show_nfsd_may_flags(__entry->nf_may),
1070 #define DEFINE_NFSD_FILE_EVENT(name) \
1071 DEFINE_EVENT(nfsd_file_class, name, \
1072 TP_PROTO(struct nfsd_file *nf), \
1075 DEFINE_NFSD_FILE_EVENT(nfsd_file_free);
1076 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash);
1077 DEFINE_NFSD_FILE_EVENT(nfsd_file_put);
1078 DEFINE_NFSD_FILE_EVENT(nfsd_file_closing);
1079 DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_queue);
1081 TRACE_EVENT(nfsd_file_alloc,
1083 const struct nfsd_file *nf
1087 __field(const void *, nf_inode)
1088 __field(unsigned long, nf_flags)
1089 __field(unsigned long, nf_may)
1090 __field(unsigned int, nf_ref)
1093 __entry->nf_inode = nf->nf_inode;
1094 __entry->nf_flags = nf->nf_flags;
1095 __entry->nf_ref = refcount_read(&nf->nf_ref);
1096 __entry->nf_may = nf->nf_may;
1098 TP_printk("inode=%p ref=%u flags=%s may=%s",
1099 __entry->nf_inode, __entry->nf_ref,
1100 show_nf_flags(__entry->nf_flags),
1101 show_nfsd_may_flags(__entry->nf_may)
1105 TRACE_EVENT(nfsd_file_acquire,
1107 const struct svc_rqst *rqstp,
1108 const struct inode *inode,
1109 unsigned int may_flags,
1110 const struct nfsd_file *nf,
1114 TP_ARGS(rqstp, inode, may_flags, nf, status),
1118 __field(const void *, inode)
1119 __field(unsigned long, may_flags)
1120 __field(unsigned int, nf_ref)
1121 __field(unsigned long, nf_flags)
1122 __field(unsigned long, nf_may)
1123 __field(const void *, nf_file)
1124 __field(u32, status)
1128 __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
1129 __entry->inode = inode;
1130 __entry->may_flags = may_flags;
1131 __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0;
1132 __entry->nf_flags = nf ? nf->nf_flags : 0;
1133 __entry->nf_may = nf ? nf->nf_may : 0;
1134 __entry->nf_file = nf ? nf->nf_file : NULL;
1135 __entry->status = be32_to_cpu(status);
1138 TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u",
1139 __entry->xid, __entry->inode,
1140 show_nfsd_may_flags(__entry->may_flags),
1141 __entry->nf_ref, show_nf_flags(__entry->nf_flags),
1142 show_nfsd_may_flags(__entry->nf_may),
1143 __entry->nf_file, __entry->status
1147 TRACE_EVENT(nfsd_file_insert_err,
1149 const struct svc_rqst *rqstp,
1150 const struct inode *inode,
1151 unsigned int may_flags,
1154 TP_ARGS(rqstp, inode, may_flags, error),
1157 __field(const void *, inode)
1158 __field(unsigned long, may_flags)
1159 __field(long, error)
1162 __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
1163 __entry->inode = inode;
1164 __entry->may_flags = may_flags;
1165 __entry->error = error;
1167 TP_printk("xid=0x%x inode=%p may_flags=%s error=%ld",
1168 __entry->xid, __entry->inode,
1169 show_nfsd_may_flags(__entry->may_flags),
1174 TRACE_EVENT(nfsd_file_cons_err,
1176 const struct svc_rqst *rqstp,
1177 const struct inode *inode,
1178 unsigned int may_flags,
1179 const struct nfsd_file *nf
1181 TP_ARGS(rqstp, inode, may_flags, nf),
1184 __field(const void *, inode)
1185 __field(unsigned long, may_flags)
1186 __field(unsigned int, nf_ref)
1187 __field(unsigned long, nf_flags)
1188 __field(unsigned long, nf_may)
1189 __field(const void *, nf_file)
1192 __entry->xid = rqstp ? be32_to_cpu(rqstp->rq_xid) : 0;
1193 __entry->inode = inode;
1194 __entry->may_flags = may_flags;
1195 __entry->nf_ref = refcount_read(&nf->nf_ref);
1196 __entry->nf_flags = nf->nf_flags;
1197 __entry->nf_may = nf->nf_may;
1198 __entry->nf_file = nf->nf_file;
1200 TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p",
1201 __entry->xid, __entry->inode,
1202 show_nfsd_may_flags(__entry->may_flags), __entry->nf_ref,
1203 show_nf_flags(__entry->nf_flags),
1204 show_nfsd_may_flags(__entry->nf_may), __entry->nf_file
1208 DECLARE_EVENT_CLASS(nfsd_file_open_class,
1209 TP_PROTO(const struct nfsd_file *nf, __be32 status),
1210 TP_ARGS(nf, status),
1212 __field(void *, nf_inode) /* cannot be dereferenced */
1213 __field(int, nf_ref)
1214 __field(unsigned long, nf_flags)
1215 __field(unsigned long, nf_may)
1216 __field(void *, nf_file) /* cannot be dereferenced */
1219 __entry->nf_inode = nf->nf_inode;
1220 __entry->nf_ref = refcount_read(&nf->nf_ref);
1221 __entry->nf_flags = nf->nf_flags;
1222 __entry->nf_may = nf->nf_may;
1223 __entry->nf_file = nf->nf_file;
1225 TP_printk("inode=%p ref=%d flags=%s may=%s file=%p",
1228 show_nf_flags(__entry->nf_flags),
1229 show_nfsd_may_flags(__entry->nf_may),
1233 #define DEFINE_NFSD_FILE_OPEN_EVENT(name) \
1234 DEFINE_EVENT(nfsd_file_open_class, name, \
1236 const struct nfsd_file *nf, \
1239 TP_ARGS(nf, status))
1241 DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_open);
1242 DEFINE_NFSD_FILE_OPEN_EVENT(nfsd_file_opened);
1244 TRACE_EVENT(nfsd_file_is_cached,
1246 const struct inode *inode,
1249 TP_ARGS(inode, found),
1251 __field(const struct inode *, inode)
1255 __entry->inode = inode;
1256 __entry->found = found;
1258 TP_printk("inode=%p is %scached",
1260 __entry->found ? "" : "not "
1264 TRACE_EVENT(nfsd_file_fsnotify_handle_event,
1265 TP_PROTO(struct inode *inode, u32 mask),
1266 TP_ARGS(inode, mask),
1268 __field(struct inode *, inode)
1269 __field(unsigned int, nlink)
1270 __field(umode_t, mode)
1274 __entry->inode = inode;
1275 __entry->nlink = inode->i_nlink;
1276 __entry->mode = inode->i_mode;
1277 __entry->mask = mask;
1279 TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry->inode,
1280 __entry->nlink, __entry->mode, __entry->mask)
1283 DECLARE_EVENT_CLASS(nfsd_file_gc_class,
1285 const struct nfsd_file *nf
1289 __field(void *, nf_inode)
1290 __field(void *, nf_file)
1291 __field(int, nf_ref)
1292 __field(unsigned long, nf_flags)
1295 __entry->nf_inode = nf->nf_inode;
1296 __entry->nf_file = nf->nf_file;
1297 __entry->nf_ref = refcount_read(&nf->nf_ref);
1298 __entry->nf_flags = nf->nf_flags;
1300 TP_printk("inode=%p ref=%d nf_flags=%s nf_file=%p",
1301 __entry->nf_inode, __entry->nf_ref,
1302 show_nf_flags(__entry->nf_flags),
1307 #define DEFINE_NFSD_FILE_GC_EVENT(name) \
1308 DEFINE_EVENT(nfsd_file_gc_class, name, \
1310 const struct nfsd_file *nf \
1314 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add);
1315 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add_disposed);
1316 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del);
1317 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del_disposed);
1318 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_in_use);
1319 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_writeback);
1320 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_referenced);
1321 DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_disposed);
1323 DECLARE_EVENT_CLASS(nfsd_file_lruwalk_class,
1325 unsigned long removed,
1326 unsigned long remaining
1328 TP_ARGS(removed, remaining),
1330 __field(unsigned long, removed)
1331 __field(unsigned long, remaining)
1334 __entry->removed = removed;
1335 __entry->remaining = remaining;
1337 TP_printk("%lu entries removed, %lu remaining",
1338 __entry->removed, __entry->remaining)
1341 #define DEFINE_NFSD_FILE_LRUWALK_EVENT(name) \
1342 DEFINE_EVENT(nfsd_file_lruwalk_class, name, \
1344 unsigned long removed, \
1345 unsigned long remaining \
1347 TP_ARGS(removed, remaining))
1349 DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_gc_removed);
1350 DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_shrinker_removed);
1352 TRACE_EVENT(nfsd_file_close,
1354 const struct inode *inode
1358 __field(const void *, inode)
1361 __entry->inode = inode;
1363 TP_printk("inode=%p",
1370 TRACE_DEFINE_ENUM(RC_DROPIT);
1371 TRACE_DEFINE_ENUM(RC_REPLY);
1372 TRACE_DEFINE_ENUM(RC_DOIT);
1374 #define show_drc_retval(x) \
1375 __print_symbolic(x, \
1376 { RC_DROPIT, "DROPIT" }, \
1377 { RC_REPLY, "REPLY" }, \
1378 { RC_DOIT, "DOIT" })
1380 TRACE_EVENT(nfsd_drc_found,
1382 const struct nfsd_net *nn,
1383 const struct svc_rqst *rqstp,
1386 TP_ARGS(nn, rqstp, result),
1388 __field(unsigned long long, boot_time)
1389 __field(unsigned long, result)
1393 __entry->boot_time = nn->boot_time;
1394 __entry->result = result;
1395 __entry->xid = be32_to_cpu(rqstp->rq_xid);
1397 TP_printk("boot_time=%16llx xid=0x%08x result=%s",
1398 __entry->boot_time, __entry->xid,
1399 show_drc_retval(__entry->result))
1403 TRACE_EVENT(nfsd_drc_mismatch,
1405 const struct nfsd_net *nn,
1406 const struct nfsd_cacherep *key,
1407 const struct nfsd_cacherep *rp
1409 TP_ARGS(nn, key, rp),
1411 __field(unsigned long long, boot_time)
1413 __field(u32, cached)
1414 __field(u32, ingress)
1417 __entry->boot_time = nn->boot_time;
1418 __entry->xid = be32_to_cpu(key->c_key.k_xid);
1419 __entry->cached = (__force u32)key->c_key.k_csum;
1420 __entry->ingress = (__force u32)rp->c_key.k_csum;
1422 TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x",
1423 __entry->boot_time, __entry->xid, __entry->cached,
1427 TRACE_EVENT(nfsd_cb_args,
1429 const struct nfs4_client *clp,
1430 const struct nfs4_cb_conn *conn
1434 __field(u32, cl_boot)
1438 __sockaddr(addr, conn->cb_addrlen)
1441 __entry->cl_boot = clp->cl_clientid.cl_boot;
1442 __entry->cl_id = clp->cl_clientid.cl_id;
1443 __entry->prog = conn->cb_prog;
1444 __entry->ident = conn->cb_ident;
1445 __assign_sockaddr(addr, &conn->cb_addr, conn->cb_addrlen);
1447 TP_printk("addr=%pISpc client %08x:%08x prog=%u ident=%u",
1448 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1449 __entry->prog, __entry->ident)
1452 TRACE_EVENT(nfsd_cb_nodelegs,
1453 TP_PROTO(const struct nfs4_client *clp),
1456 __field(u32, cl_boot)
1460 __entry->cl_boot = clp->cl_clientid.cl_boot;
1461 __entry->cl_id = clp->cl_clientid.cl_id;
1463 TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id)
1466 #define show_cb_state(val) \
1467 __print_symbolic(val, \
1468 { NFSD4_CB_UP, "UP" }, \
1469 { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \
1470 { NFSD4_CB_DOWN, "DOWN" }, \
1471 { NFSD4_CB_FAULT, "FAULT"})
1473 DECLARE_EVENT_CLASS(nfsd_cb_class,
1474 TP_PROTO(const struct nfs4_client *clp),
1477 __field(unsigned long, state)
1478 __field(u32, cl_boot)
1480 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1483 __entry->state = clp->cl_cb_state;
1484 __entry->cl_boot = clp->cl_clientid.cl_boot;
1485 __entry->cl_id = clp->cl_clientid.cl_id;
1486 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1487 clp->cl_cb_conn.cb_addrlen)
1489 TP_printk("addr=%pISpc client %08x:%08x state=%s",
1490 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1491 show_cb_state(__entry->state))
1494 #define DEFINE_NFSD_CB_EVENT(name) \
1495 DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \
1496 TP_PROTO(const struct nfs4_client *clp), \
1499 DEFINE_NFSD_CB_EVENT(start);
1500 DEFINE_NFSD_CB_EVENT(new_state);
1501 DEFINE_NFSD_CB_EVENT(probe);
1502 DEFINE_NFSD_CB_EVENT(lost);
1503 DEFINE_NFSD_CB_EVENT(shutdown);
1504 DEFINE_NFSD_CB_EVENT(rpc_prepare);
1505 DEFINE_NFSD_CB_EVENT(rpc_done);
1506 DEFINE_NFSD_CB_EVENT(rpc_release);
1508 TRACE_DEFINE_ENUM(RPC_AUTH_NULL);
1509 TRACE_DEFINE_ENUM(RPC_AUTH_UNIX);
1510 TRACE_DEFINE_ENUM(RPC_AUTH_GSS);
1511 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5);
1512 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I);
1513 TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P);
1515 #define show_nfsd_authflavor(val) \
1516 __print_symbolic(val, \
1517 { RPC_AUTH_NULL, "none" }, \
1518 { RPC_AUTH_UNIX, "sys" }, \
1519 { RPC_AUTH_GSS, "gss" }, \
1520 { RPC_AUTH_GSS_KRB5, "krb5" }, \
1521 { RPC_AUTH_GSS_KRB5I, "krb5i" }, \
1522 { RPC_AUTH_GSS_KRB5P, "krb5p" })
1524 TRACE_EVENT(nfsd_cb_setup,
1525 TP_PROTO(const struct nfs4_client *clp,
1527 rpc_authflavor_t authflavor
1529 TP_ARGS(clp, netid, authflavor),
1531 __field(u32, cl_boot)
1533 __field(unsigned long, authflavor)
1534 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1535 __string(netid, netid)
1538 __entry->cl_boot = clp->cl_clientid.cl_boot;
1539 __entry->cl_id = clp->cl_clientid.cl_id;
1540 __assign_str(netid);
1541 __entry->authflavor = authflavor;
1542 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1543 clp->cl_cb_conn.cb_addrlen)
1545 TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s",
1546 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1547 __get_str(netid), show_nfsd_authflavor(__entry->authflavor))
1550 TRACE_EVENT(nfsd_cb_setup_err,
1552 const struct nfs4_client *clp,
1555 TP_ARGS(clp, error),
1557 __field(long, error)
1558 __field(u32, cl_boot)
1560 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1563 __entry->error = error;
1564 __entry->cl_boot = clp->cl_clientid.cl_boot;
1565 __entry->cl_id = clp->cl_clientid.cl_id;
1566 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1567 clp->cl_cb_conn.cb_addrlen)
1569 TP_printk("addr=%pISpc client %08x:%08x error=%ld",
1570 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1574 /* Not a real opcode, but there is no 0 operation. */
1577 #define show_nfsd_cb_opcode(val) \
1578 __print_symbolic(val, \
1579 { _CB_NULL, "CB_NULL" }, \
1580 { OP_CB_GETATTR, "CB_GETATTR" }, \
1581 { OP_CB_RECALL, "CB_RECALL" }, \
1582 { OP_CB_LAYOUTRECALL, "CB_LAYOUTRECALL" }, \
1583 { OP_CB_RECALL_ANY, "CB_RECALL_ANY" }, \
1584 { OP_CB_NOTIFY_LOCK, "CB_NOTIFY_LOCK" }, \
1585 { OP_CB_OFFLOAD, "CB_OFFLOAD" })
1587 DECLARE_EVENT_CLASS(nfsd_cb_lifetime_class,
1589 const struct nfs4_client *clp,
1590 const struct nfsd4_callback *cb
1594 __field(u32, cl_boot)
1596 __field(const void *, cb)
1597 __field(unsigned long, opcode)
1598 __field(bool, need_restart)
1599 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1602 __entry->cl_boot = clp->cl_clientid.cl_boot;
1603 __entry->cl_id = clp->cl_clientid.cl_id;
1605 __entry->opcode = cb->cb_ops ? cb->cb_ops->opcode : _CB_NULL;
1606 __entry->need_restart = cb->cb_need_restart;
1607 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1608 clp->cl_cb_conn.cb_addrlen)
1610 TP_printk("addr=%pISpc client %08x:%08x cb=%p%s opcode=%s",
1611 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, __entry->cb,
1612 __entry->need_restart ? " (need restart)" : " (first try)",
1613 show_nfsd_cb_opcode(__entry->opcode)
1617 #define DEFINE_NFSD_CB_LIFETIME_EVENT(name) \
1618 DEFINE_EVENT(nfsd_cb_lifetime_class, nfsd_cb_##name, \
1620 const struct nfs4_client *clp, \
1621 const struct nfsd4_callback *cb \
1625 DEFINE_NFSD_CB_LIFETIME_EVENT(queue);
1626 DEFINE_NFSD_CB_LIFETIME_EVENT(destroy);
1627 DEFINE_NFSD_CB_LIFETIME_EVENT(restart);
1628 DEFINE_NFSD_CB_LIFETIME_EVENT(bc_update);
1629 DEFINE_NFSD_CB_LIFETIME_EVENT(bc_shutdown);
1631 TRACE_EVENT(nfsd_cb_seq_status,
1633 const struct rpc_task *task,
1634 const struct nfsd4_callback *cb
1638 __field(unsigned int, task_id)
1639 __field(unsigned int, client_id)
1640 __field(u32, cl_boot)
1643 __field(u32, reserved)
1644 __field(int, tk_status)
1645 __field(int, seq_status)
1648 const struct nfs4_client *clp = cb->cb_clp;
1649 const struct nfsd4_session *session = clp->cl_cb_session;
1650 const struct nfsd4_sessionid *sid =
1651 (struct nfsd4_sessionid *)&session->se_sessionid;
1653 __entry->task_id = task->tk_pid;
1654 __entry->client_id = task->tk_client ?
1655 task->tk_client->cl_clid : -1;
1656 __entry->cl_boot = sid->clientid.cl_boot;
1657 __entry->cl_id = sid->clientid.cl_id;
1658 __entry->seqno = sid->sequence;
1659 __entry->reserved = sid->reserved;
1660 __entry->tk_status = task->tk_status;
1661 __entry->seq_status = cb->cb_seq_status;
1663 TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1664 " sessionid=%08x:%08x:%08x:%08x tk_status=%d seq_status=%d",
1665 __entry->task_id, __entry->client_id,
1666 __entry->cl_boot, __entry->cl_id,
1667 __entry->seqno, __entry->reserved,
1668 __entry->tk_status, __entry->seq_status
1672 TRACE_EVENT(nfsd_cb_free_slot,
1674 const struct rpc_task *task,
1675 const struct nfsd4_callback *cb
1679 __field(unsigned int, task_id)
1680 __field(unsigned int, client_id)
1681 __field(u32, cl_boot)
1684 __field(u32, reserved)
1685 __field(u32, slot_seqno)
1688 const struct nfs4_client *clp = cb->cb_clp;
1689 const struct nfsd4_session *session = clp->cl_cb_session;
1690 const struct nfsd4_sessionid *sid =
1691 (struct nfsd4_sessionid *)&session->se_sessionid;
1693 __entry->task_id = task->tk_pid;
1694 __entry->client_id = task->tk_client ?
1695 task->tk_client->cl_clid : -1;
1696 __entry->cl_boot = sid->clientid.cl_boot;
1697 __entry->cl_id = sid->clientid.cl_id;
1698 __entry->seqno = sid->sequence;
1699 __entry->reserved = sid->reserved;
1700 __entry->slot_seqno = session->se_cb_seq_nr[cb->cb_held_slot];
1702 TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1703 " sessionid=%08x:%08x:%08x:%08x new slot seqno=%u",
1704 __entry->task_id, __entry->client_id,
1705 __entry->cl_boot, __entry->cl_id,
1706 __entry->seqno, __entry->reserved,
1711 TRACE_EVENT_CONDITION(nfsd_cb_recall,
1713 const struct nfs4_stid *stid
1716 TP_CONDITION(stid->sc_client),
1718 __field(u32, cl_boot)
1721 __field(u32, si_generation)
1722 __sockaddr(addr, stid->sc_client->cl_cb_conn.cb_addrlen)
1725 const stateid_t *stp = &stid->sc_stateid;
1726 const struct nfs4_client *clp = stid->sc_client;
1728 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
1729 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
1730 __entry->si_id = stp->si_opaque.so_id;
1731 __entry->si_generation = stp->si_generation;
1732 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1733 clp->cl_cb_conn.cb_addrlen)
1735 TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x",
1736 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1737 __entry->si_id, __entry->si_generation)
1740 TRACE_EVENT(nfsd_cb_notify_lock,
1742 const struct nfs4_lockowner *lo,
1743 const struct nfsd4_blocked_lock *nbl
1747 __field(u32, cl_boot)
1749 __field(u32, fh_hash)
1750 __sockaddr(addr, lo->lo_owner.so_client->cl_cb_conn.cb_addrlen)
1753 const struct nfs4_client *clp = lo->lo_owner.so_client;
1755 __entry->cl_boot = clp->cl_clientid.cl_boot;
1756 __entry->cl_id = clp->cl_clientid.cl_id;
1757 __entry->fh_hash = knfsd_fh_hash(&nbl->nbl_fh);
1758 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1759 clp->cl_cb_conn.cb_addrlen)
1761 TP_printk("addr=%pISpc client %08x:%08x fh_hash=0x%08x",
1762 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1766 TRACE_EVENT(nfsd_cb_offload,
1768 const struct nfs4_client *clp,
1769 const stateid_t *stp,
1770 const struct knfsd_fh *fh,
1774 TP_ARGS(clp, stp, fh, count, status),
1776 __field(u32, cl_boot)
1779 __field(u32, si_generation)
1780 __field(u32, fh_hash)
1781 __field(int, status)
1783 __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
1786 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
1787 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
1788 __entry->si_id = stp->si_opaque.so_id;
1789 __entry->si_generation = stp->si_generation;
1790 __entry->fh_hash = knfsd_fh_hash(fh);
1791 __entry->status = be32_to_cpu(status);
1792 __entry->count = count;
1793 __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
1794 clp->cl_cb_conn.cb_addrlen)
1796 TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x fh_hash=0x%08x count=%llu status=%d",
1797 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1798 __entry->si_id, __entry->si_generation,
1799 __entry->fh_hash, __entry->count, __entry->status)
1802 TRACE_EVENT(nfsd_cb_recall_any,
1804 const struct nfsd4_cb_recall_any *ra
1808 __field(u32, cl_boot)
1811 __field(unsigned long, bmval0)
1812 __sockaddr(addr, ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen)
1815 __entry->cl_boot = ra->ra_cb.cb_clp->cl_clientid.cl_boot;
1816 __entry->cl_id = ra->ra_cb.cb_clp->cl_clientid.cl_id;
1817 __entry->keep = ra->ra_keep;
1818 __entry->bmval0 = ra->ra_bmval[0];
1819 __assign_sockaddr(addr, &ra->ra_cb.cb_clp->cl_addr,
1820 ra->ra_cb.cb_clp->cl_cb_conn.cb_addrlen);
1822 TP_printk("addr=%pISpc client %08x:%08x keep=%u bmval0=%s",
1823 __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
1824 __entry->keep, show_rca_mask(__entry->bmval0)
1828 DECLARE_EVENT_CLASS(nfsd_cb_done_class,
1830 const stateid_t *stp,
1831 const struct rpc_task *task
1835 __field(u32, cl_boot)
1838 __field(u32, si_generation)
1839 __field(int, status)
1842 __entry->cl_boot = stp->si_opaque.so_clid.cl_boot;
1843 __entry->cl_id = stp->si_opaque.so_clid.cl_id;
1844 __entry->si_id = stp->si_opaque.so_id;
1845 __entry->si_generation = stp->si_generation;
1846 __entry->status = task->tk_status;
1848 TP_printk("client %08x:%08x stateid %08x:%08x status=%d",
1849 __entry->cl_boot, __entry->cl_id, __entry->si_id,
1850 __entry->si_generation, __entry->status
1854 #define DEFINE_NFSD_CB_DONE_EVENT(name) \
1855 DEFINE_EVENT(nfsd_cb_done_class, name, \
1857 const stateid_t *stp, \
1858 const struct rpc_task *task \
1862 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_recall_done);
1863 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_notify_lock_done);
1864 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_layout_done);
1865 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_offload_done);
1866 DEFINE_NFSD_CB_DONE_EVENT(nfsd_cb_getattr_done);
1868 TRACE_EVENT(nfsd_cb_recall_any_done,
1870 const struct nfsd4_callback *cb,
1871 const struct rpc_task *task
1875 __field(u32, cl_boot)
1877 __field(int, status)
1880 __entry->status = task->tk_status;
1881 __entry->cl_boot = cb->cb_clp->cl_clientid.cl_boot;
1882 __entry->cl_id = cb->cb_clp->cl_clientid.cl_id;
1884 TP_printk("client %08x:%08x status=%d",
1885 __entry->cl_boot, __entry->cl_id, __entry->status
1889 TRACE_EVENT(nfsd_ctl_unlock_ip,
1891 const struct net *net,
1894 TP_ARGS(net, address),
1896 __field(unsigned int, netns_ino)
1897 __string(address, address)
1900 __entry->netns_ino = net->ns.inum;
1901 __assign_str(address);
1903 TP_printk("address=%s",
1908 TRACE_EVENT(nfsd_ctl_unlock_fs,
1910 const struct net *net,
1915 __field(unsigned int, netns_ino)
1916 __string(path, path)
1919 __entry->netns_ino = net->ns.inum;
1922 TP_printk("path=%s",
1927 TRACE_EVENT(nfsd_ctl_filehandle,
1929 const struct net *net,
1934 TP_ARGS(net, domain, path, maxsize),
1936 __field(unsigned int, netns_ino)
1937 __field(int, maxsize)
1938 __string(domain, domain)
1939 __string(path, path)
1942 __entry->netns_ino = net->ns.inum;
1943 __entry->maxsize = maxsize;
1944 __assign_str(domain);
1947 TP_printk("domain=%s path=%s maxsize=%d",
1948 __get_str(domain), __get_str(path), __entry->maxsize
1952 TRACE_EVENT(nfsd_ctl_threads,
1954 const struct net *net,
1957 TP_ARGS(net, newthreads),
1959 __field(unsigned int, netns_ino)
1960 __field(int, newthreads)
1963 __entry->netns_ino = net->ns.inum;
1964 __entry->newthreads = newthreads;
1966 TP_printk("newthreads=%d",
1971 TRACE_EVENT(nfsd_ctl_pool_threads,
1973 const struct net *net,
1977 TP_ARGS(net, pool, nrthreads),
1979 __field(unsigned int, netns_ino)
1981 __field(int, nrthreads)
1984 __entry->netns_ino = net->ns.inum;
1985 __entry->pool = pool;
1986 __entry->nrthreads = nrthreads;
1988 TP_printk("pool=%d nrthreads=%d",
1989 __entry->pool, __entry->nrthreads
1993 TRACE_EVENT(nfsd_ctl_version,
1995 const struct net *net,
2000 __field(unsigned int, netns_ino)
2001 __string(mesg, mesg)
2004 __entry->netns_ino = net->ns.inum;
2012 TRACE_EVENT(nfsd_ctl_ports_addfd,
2014 const struct net *net,
2019 __field(unsigned int, netns_ino)
2023 __entry->netns_ino = net->ns.inum;
2031 TRACE_EVENT(nfsd_ctl_ports_addxprt,
2033 const struct net *net,
2034 const char *transport,
2037 TP_ARGS(net, transport, port),
2039 __field(unsigned int, netns_ino)
2041 __string(transport, transport)
2044 __entry->netns_ino = net->ns.inum;
2045 __entry->port = port;
2046 __assign_str(transport);
2048 TP_printk("transport=%s port=%d",
2049 __get_str(transport), __entry->port
2053 TRACE_EVENT(nfsd_ctl_maxblksize,
2055 const struct net *net,
2058 TP_ARGS(net, bsize),
2060 __field(unsigned int, netns_ino)
2064 __entry->netns_ino = net->ns.inum;
2065 __entry->bsize = bsize;
2067 TP_printk("bsize=%d",
2072 TRACE_EVENT(nfsd_ctl_maxconn,
2074 const struct net *net,
2077 TP_ARGS(net, maxconn),
2079 __field(unsigned int, netns_ino)
2080 __field(int, maxconn)
2083 __entry->netns_ino = net->ns.inum;
2084 __entry->maxconn = maxconn;
2086 TP_printk("maxconn=%d",
2091 TRACE_EVENT(nfsd_ctl_time,
2093 const struct net *net,
2098 TP_ARGS(net, name, namelen, time),
2100 __field(unsigned int, netns_ino)
2102 __string_len(name, name, namelen)
2105 __entry->netns_ino = net->ns.inum;
2106 __entry->time = time;
2109 TP_printk("file=%s time=%d",
2110 __get_str(name), __entry->time
2114 TRACE_EVENT(nfsd_ctl_recoverydir,
2116 const struct net *net,
2119 TP_ARGS(net, recdir),
2121 __field(unsigned int, netns_ino)
2122 __string(recdir, recdir)
2125 __entry->netns_ino = net->ns.inum;
2126 __assign_str(recdir);
2128 TP_printk("recdir=%s",
2133 TRACE_EVENT(nfsd_end_grace,
2135 const struct net *net
2139 __field(unsigned int, netns_ino)
2142 __entry->netns_ino = net->ns.inum;
2144 TP_printk("nn=%d", __entry->netns_ino
2148 DECLARE_EVENT_CLASS(nfsd_copy_class,
2150 const struct nfsd4_copy *copy
2154 __field(bool, intra)
2155 __field(bool, async)
2156 __field(u32, src_cl_boot)
2157 __field(u32, src_cl_id)
2158 __field(u32, src_so_id)
2159 __field(u32, src_si_generation)
2160 __field(u32, dst_cl_boot)
2161 __field(u32, dst_cl_id)
2162 __field(u32, dst_so_id)
2163 __field(u32, dst_si_generation)
2164 __field(u32, cb_cl_boot)
2165 __field(u32, cb_cl_id)
2166 __field(u32, cb_so_id)
2167 __field(u32, cb_si_generation)
2168 __field(u64, src_cp_pos)
2169 __field(u64, dst_cp_pos)
2170 __field(u64, cp_count)
2171 __sockaddr(addr, sizeof(struct sockaddr_in6))
2174 const stateid_t *src_stp = ©->cp_src_stateid;
2175 const stateid_t *dst_stp = ©->cp_dst_stateid;
2176 const stateid_t *cb_stp = ©->cp_res.cb_stateid;
2178 __entry->intra = test_bit(NFSD4_COPY_F_INTRA, ©->cp_flags);
2179 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->cp_flags);
2180 __entry->src_cl_boot = src_stp->si_opaque.so_clid.cl_boot;
2181 __entry->src_cl_id = src_stp->si_opaque.so_clid.cl_id;
2182 __entry->src_so_id = src_stp->si_opaque.so_id;
2183 __entry->src_si_generation = src_stp->si_generation;
2184 __entry->dst_cl_boot = dst_stp->si_opaque.so_clid.cl_boot;
2185 __entry->dst_cl_id = dst_stp->si_opaque.so_clid.cl_id;
2186 __entry->dst_so_id = dst_stp->si_opaque.so_id;
2187 __entry->dst_si_generation = dst_stp->si_generation;
2188 __entry->cb_cl_boot = cb_stp->si_opaque.so_clid.cl_boot;
2189 __entry->cb_cl_id = cb_stp->si_opaque.so_clid.cl_id;
2190 __entry->cb_so_id = cb_stp->si_opaque.so_id;
2191 __entry->cb_si_generation = cb_stp->si_generation;
2192 __entry->src_cp_pos = copy->cp_src_pos;
2193 __entry->dst_cp_pos = copy->cp_dst_pos;
2194 __entry->cp_count = copy->cp_count;
2195 __assign_sockaddr(addr, ©->cp_clp->cl_addr,
2196 sizeof(struct sockaddr_in6));
2198 TP_printk("client=%pISpc intra=%d async=%d "
2199 "src_client %08x:%08x src_stateid %08x:%08x "
2200 "dst_client %08x:%08x dst_stateid %08x:%08x "
2201 "cb_client %08x:%08x cb_stateid %08x:%08x "
2202 "cp_src_pos=%llu cp_dst_pos=%llu cp_count=%llu",
2203 __get_sockaddr(addr), __entry->intra, __entry->async,
2204 __entry->src_cl_boot, __entry->src_cl_id,
2205 __entry->src_so_id, __entry->src_si_generation,
2206 __entry->dst_cl_boot, __entry->dst_cl_id,
2207 __entry->dst_so_id, __entry->dst_si_generation,
2208 __entry->cb_cl_boot, __entry->cb_cl_id,
2209 __entry->cb_so_id, __entry->cb_si_generation,
2210 __entry->src_cp_pos, __entry->dst_cp_pos, __entry->cp_count
2214 #define DEFINE_COPY_EVENT(name) \
2215 DEFINE_EVENT(nfsd_copy_class, nfsd_copy_##name, \
2216 TP_PROTO(const struct nfsd4_copy *copy), \
2219 DEFINE_COPY_EVENT(inter);
2220 DEFINE_COPY_EVENT(intra);
2221 DEFINE_COPY_EVENT(async);
2223 TRACE_EVENT(nfsd_copy_done,
2225 const struct nfsd4_copy *copy,
2228 TP_ARGS(copy, status),
2230 __field(int, status)
2231 __field(bool, intra)
2232 __field(bool, async)
2233 __sockaddr(addr, sizeof(struct sockaddr_in6))
2236 __entry->status = be32_to_cpu(status);
2237 __entry->intra = test_bit(NFSD4_COPY_F_INTRA, ©->cp_flags);
2238 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->cp_flags);
2239 __assign_sockaddr(addr, ©->cp_clp->cl_addr,
2240 sizeof(struct sockaddr_in6));
2242 TP_printk("addr=%pISpc status=%d intra=%d async=%d",
2243 __get_sockaddr(addr), __entry->status, __entry->intra, __entry->async
2247 DECLARE_EVENT_CLASS(nfsd_copy_async_done_class,
2249 const struct nfsd4_copy *copy
2253 __field(int, status)
2254 __field(bool, intra)
2255 __field(bool, async)
2256 __field(u32, src_cl_boot)
2257 __field(u32, src_cl_id)
2258 __field(u32, src_so_id)
2259 __field(u32, src_si_generation)
2260 __field(u32, dst_cl_boot)
2261 __field(u32, dst_cl_id)
2262 __field(u32, dst_so_id)
2263 __field(u32, dst_si_generation)
2264 __field(u32, cb_cl_boot)
2265 __field(u32, cb_cl_id)
2266 __field(u32, cb_so_id)
2267 __field(u32, cb_si_generation)
2268 __field(u64, src_cp_pos)
2269 __field(u64, dst_cp_pos)
2270 __field(u64, cp_count)
2271 __sockaddr(addr, sizeof(struct sockaddr_in6))
2274 const stateid_t *src_stp = ©->cp_src_stateid;
2275 const stateid_t *dst_stp = ©->cp_dst_stateid;
2276 const stateid_t *cb_stp = ©->cp_res.cb_stateid;
2278 __entry->status = be32_to_cpu(copy->nfserr);
2279 __entry->intra = test_bit(NFSD4_COPY_F_INTRA, ©->cp_flags);
2280 __entry->async = !test_bit(NFSD4_COPY_F_SYNCHRONOUS, ©->cp_flags);
2281 __entry->src_cl_boot = src_stp->si_opaque.so_clid.cl_boot;
2282 __entry->src_cl_id = src_stp->si_opaque.so_clid.cl_id;
2283 __entry->src_so_id = src_stp->si_opaque.so_id;
2284 __entry->src_si_generation = src_stp->si_generation;
2285 __entry->dst_cl_boot = dst_stp->si_opaque.so_clid.cl_boot;
2286 __entry->dst_cl_id = dst_stp->si_opaque.so_clid.cl_id;
2287 __entry->dst_so_id = dst_stp->si_opaque.so_id;
2288 __entry->dst_si_generation = dst_stp->si_generation;
2289 __entry->cb_cl_boot = cb_stp->si_opaque.so_clid.cl_boot;
2290 __entry->cb_cl_id = cb_stp->si_opaque.so_clid.cl_id;
2291 __entry->cb_so_id = cb_stp->si_opaque.so_id;
2292 __entry->cb_si_generation = cb_stp->si_generation;
2293 __entry->src_cp_pos = copy->cp_src_pos;
2294 __entry->dst_cp_pos = copy->cp_dst_pos;
2295 __entry->cp_count = copy->cp_count;
2296 __assign_sockaddr(addr, ©->cp_clp->cl_addr,
2297 sizeof(struct sockaddr_in6));
2299 TP_printk("client=%pISpc status=%d intra=%d async=%d "
2300 "src_client %08x:%08x src_stateid %08x:%08x "
2301 "dst_client %08x:%08x dst_stateid %08x:%08x "
2302 "cb_client %08x:%08x cb_stateid %08x:%08x "
2303 "cp_src_pos=%llu cp_dst_pos=%llu cp_count=%llu",
2304 __get_sockaddr(addr),
2305 __entry->status, __entry->intra, __entry->async,
2306 __entry->src_cl_boot, __entry->src_cl_id,
2307 __entry->src_so_id, __entry->src_si_generation,
2308 __entry->dst_cl_boot, __entry->dst_cl_id,
2309 __entry->dst_so_id, __entry->dst_si_generation,
2310 __entry->cb_cl_boot, __entry->cb_cl_id,
2311 __entry->cb_so_id, __entry->cb_si_generation,
2312 __entry->src_cp_pos, __entry->dst_cp_pos, __entry->cp_count
2316 #define DEFINE_COPY_ASYNC_DONE_EVENT(name) \
2317 DEFINE_EVENT(nfsd_copy_async_done_class, \
2318 nfsd_copy_async_##name, \
2319 TP_PROTO(const struct nfsd4_copy *copy), \
2322 DEFINE_COPY_ASYNC_DONE_EVENT(done);
2323 DEFINE_COPY_ASYNC_DONE_EVENT(cancel);
2325 #endif /* _NFSD_TRACE_H */
2327 #undef TRACE_INCLUDE_PATH
2328 #define TRACE_INCLUDE_PATH .
2329 #define TRACE_INCLUDE_FILE trace
2330 #include <trace/define_trace.h>