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> 128791545eSChuck Lever 13cf749f3cSTrond Myklebust #include "export.h" 146e8b50d1SJeff Layton #include "nfsfh.h" 156e8b50d1SJeff Layton 1608281341SChuck Lever #define NFSD_TRACE_PROC_RES_FIELDS \ 1708281341SChuck Lever __field(unsigned int, netns_ino) \ 1808281341SChuck Lever __field(u32, xid) \ 1908281341SChuck Lever __field(unsigned long, status) \ 2008281341SChuck Lever __array(unsigned char, server, sizeof(struct sockaddr_in6)) \ 2108281341SChuck Lever __array(unsigned char, client, sizeof(struct sockaddr_in6)) 2208281341SChuck Lever 2308281341SChuck Lever #define NFSD_TRACE_PROC_RES_ASSIGNMENTS(error) \ 2408281341SChuck Lever do { \ 2508281341SChuck Lever __entry->netns_ino = SVC_NET(rqstp)->ns.inum; \ 2608281341SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); \ 2708281341SChuck Lever __entry->status = be32_to_cpu(error); \ 2808281341SChuck Lever memcpy(__entry->server, &rqstp->rq_xprt->xpt_local, \ 2908281341SChuck Lever rqstp->rq_xprt->xpt_locallen); \ 3008281341SChuck Lever memcpy(__entry->client, &rqstp->rq_xprt->xpt_remote, \ 3108281341SChuck Lever rqstp->rq_xprt->xpt_remotelen); \ 3208281341SChuck Lever } while (0); 3308281341SChuck Lever 3470e94d75SChuck Lever DECLARE_EVENT_CLASS(nfsd_xdr_err_class, 350dfdad1cSChuck Lever TP_PROTO( 360dfdad1cSChuck Lever const struct svc_rqst *rqstp 370dfdad1cSChuck Lever ), 380dfdad1cSChuck Lever TP_ARGS(rqstp), 390dfdad1cSChuck Lever TP_STRUCT__entry( 40c1a3f2ceSChuck Lever __field(unsigned int, netns_ino) 41c1a3f2ceSChuck Lever __field(u32, xid) 420dfdad1cSChuck Lever __field(u32, vers) 430dfdad1cSChuck Lever __field(u32, proc) 44c1a3f2ceSChuck Lever __sockaddr(server, rqstp->rq_xprt->xpt_locallen) 45c1a3f2ceSChuck Lever __sockaddr(client, rqstp->rq_xprt->xpt_remotelen) 460dfdad1cSChuck Lever ), 470dfdad1cSChuck Lever TP_fast_assign( 48c1a3f2ceSChuck Lever const struct svc_xprt *xprt = rqstp->rq_xprt; 490dfdad1cSChuck Lever 50c1a3f2ceSChuck Lever __entry->netns_ino = xprt->xpt_net->ns.inum; 51c1a3f2ceSChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 520dfdad1cSChuck Lever __entry->vers = rqstp->rq_vers; 530dfdad1cSChuck Lever __entry->proc = rqstp->rq_proc; 54c1a3f2ceSChuck Lever __assign_sockaddr(server, &xprt->xpt_local, xprt->xpt_locallen); 55c1a3f2ceSChuck Lever __assign_sockaddr(client, &xprt->xpt_remote, xprt->xpt_remotelen); 560dfdad1cSChuck Lever ), 570dfdad1cSChuck Lever TP_printk("xid=0x%08x vers=%u proc=%u", 580dfdad1cSChuck Lever __entry->xid, __entry->vers, __entry->proc 590dfdad1cSChuck Lever ) 600dfdad1cSChuck Lever ); 610dfdad1cSChuck Lever 6270e94d75SChuck Lever #define DEFINE_NFSD_XDR_ERR_EVENT(name) \ 6370e94d75SChuck Lever DEFINE_EVENT(nfsd_xdr_err_class, nfsd_##name##_err, \ 6470e94d75SChuck Lever TP_PROTO(const struct svc_rqst *rqstp), \ 6570e94d75SChuck Lever TP_ARGS(rqstp)) 660dfdad1cSChuck Lever 6770e94d75SChuck Lever DEFINE_NFSD_XDR_ERR_EVENT(garbage_args); 6870e94d75SChuck Lever DEFINE_NFSD_XDR_ERR_EVENT(cant_encode); 690dfdad1cSChuck Lever 70b76278aeSChuck Lever #define show_nfsd_may_flags(x) \ 71b76278aeSChuck Lever __print_flags(x, "|", \ 72b76278aeSChuck Lever { NFSD_MAY_EXEC, "EXEC" }, \ 73b76278aeSChuck Lever { NFSD_MAY_WRITE, "WRITE" }, \ 74b76278aeSChuck Lever { NFSD_MAY_READ, "READ" }, \ 75b76278aeSChuck Lever { NFSD_MAY_SATTR, "SATTR" }, \ 76b76278aeSChuck Lever { NFSD_MAY_TRUNC, "TRUNC" }, \ 77b76278aeSChuck Lever { NFSD_MAY_LOCK, "LOCK" }, \ 78b76278aeSChuck Lever { NFSD_MAY_OWNER_OVERRIDE, "OWNER_OVERRIDE" }, \ 79b76278aeSChuck Lever { NFSD_MAY_LOCAL_ACCESS, "LOCAL_ACCESS" }, \ 80b76278aeSChuck Lever { NFSD_MAY_BYPASS_GSS_ON_ROOT, "BYPASS_GSS_ON_ROOT" }, \ 81b76278aeSChuck Lever { NFSD_MAY_NOT_BREAK_LEASE, "NOT_BREAK_LEASE" }, \ 82b76278aeSChuck Lever { NFSD_MAY_BYPASS_GSS, "BYPASS_GSS" }, \ 83b76278aeSChuck Lever { NFSD_MAY_READ_IF_EXEC, "READ_IF_EXEC" }, \ 84b76278aeSChuck Lever { NFSD_MAY_64BIT_COOKIE, "64BIT_COOKIE" }) 85b76278aeSChuck Lever 86fff4080bSChuck Lever TRACE_EVENT(nfsd_compound, 87fff4080bSChuck Lever TP_PROTO(const struct svc_rqst *rqst, 88fff4080bSChuck Lever u32 args_opcnt), 89fff4080bSChuck Lever TP_ARGS(rqst, args_opcnt), 90fff4080bSChuck Lever TP_STRUCT__entry( 91fff4080bSChuck Lever __field(u32, xid) 92fff4080bSChuck Lever __field(u32, args_opcnt) 93fff4080bSChuck Lever ), 94fff4080bSChuck Lever TP_fast_assign( 95fff4080bSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 96fff4080bSChuck Lever __entry->args_opcnt = args_opcnt; 97fff4080bSChuck Lever ), 98fff4080bSChuck Lever TP_printk("xid=0x%08x opcnt=%u", 99fff4080bSChuck Lever __entry->xid, __entry->args_opcnt) 100fff4080bSChuck Lever ) 101fff4080bSChuck Lever 102fff4080bSChuck Lever TRACE_EVENT(nfsd_compound_status, 103fff4080bSChuck Lever TP_PROTO(u32 args_opcnt, 104fff4080bSChuck Lever u32 resp_opcnt, 105fff4080bSChuck Lever __be32 status, 106fff4080bSChuck Lever const char *name), 107fff4080bSChuck Lever TP_ARGS(args_opcnt, resp_opcnt, status, name), 108fff4080bSChuck Lever TP_STRUCT__entry( 109fff4080bSChuck Lever __field(u32, args_opcnt) 110fff4080bSChuck Lever __field(u32, resp_opcnt) 111fff4080bSChuck Lever __field(int, status) 112fff4080bSChuck Lever __string(name, name) 113fff4080bSChuck Lever ), 114fff4080bSChuck Lever TP_fast_assign( 115fff4080bSChuck Lever __entry->args_opcnt = args_opcnt; 116fff4080bSChuck Lever __entry->resp_opcnt = resp_opcnt; 117fff4080bSChuck Lever __entry->status = be32_to_cpu(status); 118fff4080bSChuck Lever __assign_str(name, name); 119fff4080bSChuck Lever ), 120fff4080bSChuck Lever TP_printk("op=%u/%u %s status=%d", 121fff4080bSChuck Lever __entry->resp_opcnt, __entry->args_opcnt, 122fff4080bSChuck Lever __get_str(name), __entry->status) 123fff4080bSChuck Lever ) 124fff4080bSChuck Lever 12508281341SChuck Lever TRACE_EVENT(nfsd_compound_decode_err, 12608281341SChuck Lever TP_PROTO( 12708281341SChuck Lever const struct svc_rqst *rqstp, 12808281341SChuck Lever u32 args_opcnt, 12908281341SChuck Lever u32 resp_opcnt, 13008281341SChuck Lever u32 opnum, 13108281341SChuck Lever __be32 status 13208281341SChuck Lever ), 13308281341SChuck Lever TP_ARGS(rqstp, args_opcnt, resp_opcnt, opnum, status), 13408281341SChuck Lever TP_STRUCT__entry( 13508281341SChuck Lever NFSD_TRACE_PROC_RES_FIELDS 13608281341SChuck Lever 13708281341SChuck Lever __field(u32, args_opcnt) 13808281341SChuck Lever __field(u32, resp_opcnt) 13908281341SChuck Lever __field(u32, opnum) 14008281341SChuck Lever ), 14108281341SChuck Lever TP_fast_assign( 14208281341SChuck Lever NFSD_TRACE_PROC_RES_ASSIGNMENTS(status) 14308281341SChuck Lever 14408281341SChuck Lever __entry->args_opcnt = args_opcnt; 14508281341SChuck Lever __entry->resp_opcnt = resp_opcnt; 14608281341SChuck Lever __entry->opnum = opnum; 14708281341SChuck Lever ), 14808281341SChuck Lever TP_printk("op=%u/%u opnum=%u status=%lu", 14908281341SChuck Lever __entry->resp_opcnt, __entry->args_opcnt, 15008281341SChuck Lever __entry->opnum, __entry->status) 15108281341SChuck Lever ); 15208281341SChuck Lever 15308281341SChuck Lever TRACE_EVENT(nfsd_compound_encode_err, 15408281341SChuck Lever TP_PROTO( 15508281341SChuck Lever const struct svc_rqst *rqstp, 15608281341SChuck Lever u32 opnum, 15708281341SChuck Lever __be32 status 15808281341SChuck Lever ), 15908281341SChuck Lever TP_ARGS(rqstp, opnum, status), 16008281341SChuck Lever TP_STRUCT__entry( 16108281341SChuck Lever NFSD_TRACE_PROC_RES_FIELDS 16208281341SChuck Lever 16308281341SChuck Lever __field(u32, opnum) 16408281341SChuck Lever ), 16508281341SChuck Lever TP_fast_assign( 16608281341SChuck Lever NFSD_TRACE_PROC_RES_ASSIGNMENTS(status) 16708281341SChuck Lever 16808281341SChuck Lever __entry->opnum = opnum; 16908281341SChuck Lever ), 17008281341SChuck Lever TP_printk("opnum=%u status=%lu", 17108281341SChuck Lever __entry->opnum, __entry->status) 17208281341SChuck Lever ); 17308281341SChuck Lever 17405138288SChuck Lever #define show_fs_file_type(x) \ 17505138288SChuck Lever __print_symbolic(x, \ 17605138288SChuck Lever { S_IFLNK, "LNK" }, \ 17705138288SChuck Lever { S_IFREG, "REG" }, \ 17805138288SChuck Lever { S_IFDIR, "DIR" }, \ 17905138288SChuck Lever { S_IFCHR, "CHR" }, \ 18005138288SChuck Lever { S_IFBLK, "BLK" }, \ 18105138288SChuck Lever { S_IFIFO, "FIFO" }, \ 18205138288SChuck Lever { S_IFSOCK, "SOCK" }) 18305138288SChuck Lever 18405138288SChuck Lever TRACE_EVENT(nfsd_fh_verify, 18505138288SChuck Lever TP_PROTO( 18605138288SChuck Lever const struct svc_rqst *rqstp, 18705138288SChuck Lever const struct svc_fh *fhp, 18805138288SChuck Lever umode_t type, 18905138288SChuck Lever int access 19005138288SChuck Lever ), 19105138288SChuck Lever TP_ARGS(rqstp, fhp, type, access), 19205138288SChuck Lever TP_STRUCT__entry( 19305138288SChuck Lever __field(unsigned int, netns_ino) 19405138288SChuck Lever __sockaddr(server, rqstp->rq_xprt->xpt_remotelen) 19505138288SChuck Lever __sockaddr(client, rqstp->rq_xprt->xpt_remotelen) 19605138288SChuck Lever __field(u32, xid) 19705138288SChuck Lever __field(u32, fh_hash) 19805138288SChuck Lever __field(void *, inode) 19905138288SChuck Lever __field(unsigned long, type) 20005138288SChuck Lever __field(unsigned long, access) 20105138288SChuck Lever ), 20205138288SChuck Lever TP_fast_assign( 20305138288SChuck Lever __entry->netns_ino = SVC_NET(rqstp)->ns.inum; 20405138288SChuck Lever __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local, 20505138288SChuck Lever rqstp->rq_xprt->xpt_locallen); 20605138288SChuck Lever __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote, 20705138288SChuck Lever rqstp->rq_xprt->xpt_remotelen); 20805138288SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 20905138288SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 21005138288SChuck Lever __entry->inode = d_inode(fhp->fh_dentry); 21105138288SChuck Lever __entry->type = type; 21205138288SChuck Lever __entry->access = access; 21305138288SChuck Lever ), 21405138288SChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x inode=%p type=%s access=%s", 21505138288SChuck Lever __entry->xid, __entry->fh_hash, __entry->inode, 21605138288SChuck Lever show_fs_file_type(__entry->type), 21705138288SChuck Lever show_nfsd_may_flags(__entry->access) 21805138288SChuck Lever ) 21905138288SChuck Lever ); 22008281341SChuck Lever 221f01274a9STrond Myklebust DECLARE_EVENT_CLASS(nfsd_fh_err_class, 222f01274a9STrond Myklebust TP_PROTO(struct svc_rqst *rqstp, 223f01274a9STrond Myklebust struct svc_fh *fhp, 224f01274a9STrond Myklebust int status), 225f01274a9STrond Myklebust TP_ARGS(rqstp, fhp, status), 226f01274a9STrond Myklebust TP_STRUCT__entry( 227f01274a9STrond Myklebust __field(u32, xid) 228f01274a9STrond Myklebust __field(u32, fh_hash) 229f01274a9STrond Myklebust __field(int, status) 230f01274a9STrond Myklebust ), 231f01274a9STrond Myklebust TP_fast_assign( 232f01274a9STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 233f01274a9STrond Myklebust __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 234f01274a9STrond Myklebust __entry->status = status; 235f01274a9STrond Myklebust ), 236f01274a9STrond Myklebust TP_printk("xid=0x%08x fh_hash=0x%08x status=%d", 237f01274a9STrond Myklebust __entry->xid, __entry->fh_hash, 238f01274a9STrond Myklebust __entry->status) 239f01274a9STrond Myklebust ) 240f01274a9STrond Myklebust 241f01274a9STrond Myklebust #define DEFINE_NFSD_FH_ERR_EVENT(name) \ 242f01274a9STrond Myklebust DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name, \ 243f01274a9STrond Myklebust TP_PROTO(struct svc_rqst *rqstp, \ 244f01274a9STrond Myklebust struct svc_fh *fhp, \ 245f01274a9STrond Myklebust int status), \ 246f01274a9STrond Myklebust TP_ARGS(rqstp, fhp, status)) 247f01274a9STrond Myklebust 248f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport); 249f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle); 250f01274a9STrond Myklebust 251cf749f3cSTrond Myklebust TRACE_EVENT(nfsd_exp_find_key, 252cf749f3cSTrond Myklebust TP_PROTO(const struct svc_expkey *key, 253cf749f3cSTrond Myklebust int status), 254cf749f3cSTrond Myklebust TP_ARGS(key, status), 255cf749f3cSTrond Myklebust TP_STRUCT__entry( 256cf749f3cSTrond Myklebust __field(int, fsidtype) 257cf749f3cSTrond Myklebust __array(u32, fsid, 6) 258cf749f3cSTrond Myklebust __string(auth_domain, key->ek_client->name) 259cf749f3cSTrond Myklebust __field(int, status) 260cf749f3cSTrond Myklebust ), 261cf749f3cSTrond Myklebust TP_fast_assign( 262cf749f3cSTrond Myklebust __entry->fsidtype = key->ek_fsidtype; 263cf749f3cSTrond Myklebust memcpy(__entry->fsid, key->ek_fsid, 4*6); 264cf749f3cSTrond Myklebust __assign_str(auth_domain, key->ek_client->name); 265cf749f3cSTrond Myklebust __entry->status = status; 266cf749f3cSTrond Myklebust ), 267cf749f3cSTrond Myklebust TP_printk("fsid=%x::%s domain=%s status=%d", 268cf749f3cSTrond Myklebust __entry->fsidtype, 269cf749f3cSTrond Myklebust __print_array(__entry->fsid, 6, 4), 270cf749f3cSTrond Myklebust __get_str(auth_domain), 271cf749f3cSTrond Myklebust __entry->status 272cf749f3cSTrond Myklebust ) 273cf749f3cSTrond Myklebust ); 274cf749f3cSTrond Myklebust 2756a30e47fSTrond Myklebust TRACE_EVENT(nfsd_expkey_update, 2766a30e47fSTrond Myklebust TP_PROTO(const struct svc_expkey *key, const char *exp_path), 2776a30e47fSTrond Myklebust TP_ARGS(key, exp_path), 2786a30e47fSTrond Myklebust TP_STRUCT__entry( 2796a30e47fSTrond Myklebust __field(int, fsidtype) 2806a30e47fSTrond Myklebust __array(u32, fsid, 6) 2816a30e47fSTrond Myklebust __string(auth_domain, key->ek_client->name) 2826a30e47fSTrond Myklebust __string(path, exp_path) 2836a30e47fSTrond Myklebust __field(bool, cache) 2846a30e47fSTrond Myklebust ), 2856a30e47fSTrond Myklebust TP_fast_assign( 2866a30e47fSTrond Myklebust __entry->fsidtype = key->ek_fsidtype; 2876a30e47fSTrond Myklebust memcpy(__entry->fsid, key->ek_fsid, 4*6); 2886a30e47fSTrond Myklebust __assign_str(auth_domain, key->ek_client->name); 2896a30e47fSTrond Myklebust __assign_str(path, exp_path); 2906a30e47fSTrond Myklebust __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags); 2916a30e47fSTrond Myklebust ), 2926a30e47fSTrond Myklebust TP_printk("fsid=%x::%s domain=%s path=%s cache=%s", 2936a30e47fSTrond Myklebust __entry->fsidtype, 2946a30e47fSTrond Myklebust __print_array(__entry->fsid, 6, 4), 2956a30e47fSTrond Myklebust __get_str(auth_domain), 2966a30e47fSTrond Myklebust __get_str(path), 2976a30e47fSTrond Myklebust __entry->cache ? "pos" : "neg" 2986a30e47fSTrond Myklebust ) 2996a30e47fSTrond Myklebust ); 3006a30e47fSTrond Myklebust 301cf749f3cSTrond Myklebust TRACE_EVENT(nfsd_exp_get_by_name, 302cf749f3cSTrond Myklebust TP_PROTO(const struct svc_export *key, 303cf749f3cSTrond Myklebust int status), 304cf749f3cSTrond Myklebust TP_ARGS(key, status), 305cf749f3cSTrond Myklebust TP_STRUCT__entry( 306cf749f3cSTrond Myklebust __string(path, key->ex_path.dentry->d_name.name) 307cf749f3cSTrond Myklebust __string(auth_domain, key->ex_client->name) 308cf749f3cSTrond Myklebust __field(int, status) 309cf749f3cSTrond Myklebust ), 310cf749f3cSTrond Myklebust TP_fast_assign( 311cf749f3cSTrond Myklebust __assign_str(path, key->ex_path.dentry->d_name.name); 312cf749f3cSTrond Myklebust __assign_str(auth_domain, key->ex_client->name); 313cf749f3cSTrond Myklebust __entry->status = status; 314cf749f3cSTrond Myklebust ), 315cf749f3cSTrond Myklebust TP_printk("path=%s domain=%s status=%d", 316cf749f3cSTrond Myklebust __get_str(path), 317cf749f3cSTrond Myklebust __get_str(auth_domain), 318cf749f3cSTrond Myklebust __entry->status 319cf749f3cSTrond Myklebust ) 320cf749f3cSTrond Myklebust ); 321cf749f3cSTrond Myklebust 3226a30e47fSTrond Myklebust TRACE_EVENT(nfsd_export_update, 3236a30e47fSTrond Myklebust TP_PROTO(const struct svc_export *key), 3246a30e47fSTrond Myklebust TP_ARGS(key), 3256a30e47fSTrond Myklebust TP_STRUCT__entry( 3266a30e47fSTrond Myklebust __string(path, key->ex_path.dentry->d_name.name) 3276a30e47fSTrond Myklebust __string(auth_domain, key->ex_client->name) 3286a30e47fSTrond Myklebust __field(bool, cache) 3296a30e47fSTrond Myklebust ), 3306a30e47fSTrond Myklebust TP_fast_assign( 3316a30e47fSTrond Myklebust __assign_str(path, key->ex_path.dentry->d_name.name); 3326a30e47fSTrond Myklebust __assign_str(auth_domain, key->ex_client->name); 3336a30e47fSTrond Myklebust __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags); 3346a30e47fSTrond Myklebust ), 3356a30e47fSTrond Myklebust TP_printk("path=%s domain=%s cache=%s", 3366a30e47fSTrond Myklebust __get_str(path), 3376a30e47fSTrond Myklebust __get_str(auth_domain), 3386a30e47fSTrond Myklebust __entry->cache ? "pos" : "neg" 3396a30e47fSTrond Myklebust ) 3406a30e47fSTrond Myklebust ); 3416a30e47fSTrond Myklebust 3426e8b50d1SJeff Layton DECLARE_EVENT_CLASS(nfsd_io_class, 3436e8b50d1SJeff Layton TP_PROTO(struct svc_rqst *rqstp, 3446e8b50d1SJeff Layton struct svc_fh *fhp, 3456a4d333dSChuck Lever u64 offset, 3466a4d333dSChuck Lever u32 len), 3476e8b50d1SJeff Layton TP_ARGS(rqstp, fhp, offset, len), 3486e8b50d1SJeff Layton TP_STRUCT__entry( 349afa720a0SChuck Lever __field(u32, xid) 350afa720a0SChuck Lever __field(u32, fh_hash) 3516a4d333dSChuck Lever __field(u64, offset) 3526a4d333dSChuck Lever __field(u32, len) 3536e8b50d1SJeff Layton ), 3546e8b50d1SJeff Layton TP_fast_assign( 355afa720a0SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 35679e0b4e2SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 3576e8b50d1SJeff Layton __entry->offset = offset; 3586e8b50d1SJeff Layton __entry->len = len; 3596e8b50d1SJeff Layton ), 3606a4d333dSChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x offset=%llu len=%u", 361afa720a0SChuck Lever __entry->xid, __entry->fh_hash, 3626e8b50d1SJeff Layton __entry->offset, __entry->len) 3636e8b50d1SJeff Layton ) 3646e8b50d1SJeff Layton 3656e8b50d1SJeff Layton #define DEFINE_NFSD_IO_EVENT(name) \ 366f394b62bSChuck Lever DEFINE_EVENT(nfsd_io_class, nfsd_##name, \ 3676e8b50d1SJeff Layton TP_PROTO(struct svc_rqst *rqstp, \ 3686e8b50d1SJeff Layton struct svc_fh *fhp, \ 3696a4d333dSChuck Lever u64 offset, \ 3706a4d333dSChuck Lever u32 len), \ 3716e8b50d1SJeff Layton TP_ARGS(rqstp, fhp, offset, len)) 3726e8b50d1SJeff Layton 3736e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_start); 37487c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_splice); 37587c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_vector); 3766e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_io_done); 3776e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_done); 3786e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_start); 3796e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_opened); 3806e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_io_done); 3816e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_done); 38231ef83dcSChristoph Hellwig 383d890be15SChuck Lever DECLARE_EVENT_CLASS(nfsd_err_class, 384d890be15SChuck Lever TP_PROTO(struct svc_rqst *rqstp, 385d890be15SChuck Lever struct svc_fh *fhp, 386d890be15SChuck Lever loff_t offset, 387d890be15SChuck Lever int status), 388d890be15SChuck Lever TP_ARGS(rqstp, fhp, offset, status), 389d890be15SChuck Lever TP_STRUCT__entry( 390d890be15SChuck Lever __field(u32, xid) 391d890be15SChuck Lever __field(u32, fh_hash) 392d890be15SChuck Lever __field(loff_t, offset) 393d890be15SChuck Lever __field(int, status) 394d890be15SChuck Lever ), 395d890be15SChuck Lever TP_fast_assign( 396d890be15SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 397d890be15SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 398d890be15SChuck Lever __entry->offset = offset; 399d890be15SChuck Lever __entry->status = status; 400d890be15SChuck Lever ), 401d890be15SChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d", 402d890be15SChuck Lever __entry->xid, __entry->fh_hash, 403d890be15SChuck Lever __entry->offset, __entry->status) 404d890be15SChuck Lever ) 405d890be15SChuck Lever 406d890be15SChuck Lever #define DEFINE_NFSD_ERR_EVENT(name) \ 407d890be15SChuck Lever DEFINE_EVENT(nfsd_err_class, nfsd_##name, \ 408d890be15SChuck Lever TP_PROTO(struct svc_rqst *rqstp, \ 409d890be15SChuck Lever struct svc_fh *fhp, \ 410d890be15SChuck Lever loff_t offset, \ 411d890be15SChuck Lever int len), \ 412d890be15SChuck Lever TP_ARGS(rqstp, fhp, offset, len)) 413d890be15SChuck Lever 41487c5942eSChuck Lever DEFINE_NFSD_ERR_EVENT(read_err); 415d890be15SChuck Lever DEFINE_NFSD_ERR_EVENT(write_err); 416d890be15SChuck Lever 4176019ce07SChuck Lever TRACE_EVENT(nfsd_dirent, 4186019ce07SChuck Lever TP_PROTO(struct svc_fh *fhp, 4196019ce07SChuck Lever u64 ino, 4206019ce07SChuck Lever const char *name, 4216019ce07SChuck Lever int namlen), 4226019ce07SChuck Lever TP_ARGS(fhp, ino, name, namlen), 4236019ce07SChuck Lever TP_STRUCT__entry( 4246019ce07SChuck Lever __field(u32, fh_hash) 4256019ce07SChuck Lever __field(u64, ino) 426408c0de7SChuck Lever __string_len(name, name, namlen) 4276019ce07SChuck Lever ), 4286019ce07SChuck Lever TP_fast_assign( 4296019ce07SChuck Lever __entry->fh_hash = fhp ? knfsd_fh_hash(&fhp->fh_handle) : 0; 4306019ce07SChuck Lever __entry->ino = ino; 431408c0de7SChuck Lever __assign_str_len(name, name, namlen) 4326019ce07SChuck Lever ), 433408c0de7SChuck Lever TP_printk("fh_hash=0x%08x ino=%llu name=%s", 434408c0de7SChuck Lever __entry->fh_hash, __entry->ino, __get_str(name) 435408c0de7SChuck Lever ) 4366019ce07SChuck Lever ) 4376019ce07SChuck Lever 438a2f4c3faSTrond Myklebust DECLARE_EVENT_CLASS(nfsd_copy_err_class, 439a2f4c3faSTrond Myklebust TP_PROTO(struct svc_rqst *rqstp, 440a2f4c3faSTrond Myklebust struct svc_fh *src_fhp, 441a2f4c3faSTrond Myklebust loff_t src_offset, 442a2f4c3faSTrond Myklebust struct svc_fh *dst_fhp, 443a2f4c3faSTrond Myklebust loff_t dst_offset, 444a2f4c3faSTrond Myklebust u64 count, 445a2f4c3faSTrond Myklebust int status), 446a2f4c3faSTrond Myklebust TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, count, status), 447a2f4c3faSTrond Myklebust TP_STRUCT__entry( 448a2f4c3faSTrond Myklebust __field(u32, xid) 449a2f4c3faSTrond Myklebust __field(u32, src_fh_hash) 450a2f4c3faSTrond Myklebust __field(loff_t, src_offset) 451a2f4c3faSTrond Myklebust __field(u32, dst_fh_hash) 452a2f4c3faSTrond Myklebust __field(loff_t, dst_offset) 453a2f4c3faSTrond Myklebust __field(u64, count) 454a2f4c3faSTrond Myklebust __field(int, status) 455a2f4c3faSTrond Myklebust ), 456a2f4c3faSTrond Myklebust TP_fast_assign( 457a2f4c3faSTrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 458a2f4c3faSTrond Myklebust __entry->src_fh_hash = knfsd_fh_hash(&src_fhp->fh_handle); 459a2f4c3faSTrond Myklebust __entry->src_offset = src_offset; 460a2f4c3faSTrond Myklebust __entry->dst_fh_hash = knfsd_fh_hash(&dst_fhp->fh_handle); 461a2f4c3faSTrond Myklebust __entry->dst_offset = dst_offset; 462a2f4c3faSTrond Myklebust __entry->count = count; 463a2f4c3faSTrond Myklebust __entry->status = status; 464a2f4c3faSTrond Myklebust ), 465a2f4c3faSTrond Myklebust TP_printk("xid=0x%08x src_fh_hash=0x%08x src_offset=%lld " 466a2f4c3faSTrond Myklebust "dst_fh_hash=0x%08x dst_offset=%lld " 467a2f4c3faSTrond Myklebust "count=%llu status=%d", 468a2f4c3faSTrond Myklebust __entry->xid, __entry->src_fh_hash, __entry->src_offset, 469a2f4c3faSTrond Myklebust __entry->dst_fh_hash, __entry->dst_offset, 470a2f4c3faSTrond Myklebust (unsigned long long)__entry->count, 471a2f4c3faSTrond Myklebust __entry->status) 472a2f4c3faSTrond Myklebust ) 473a2f4c3faSTrond Myklebust 474a2f4c3faSTrond Myklebust #define DEFINE_NFSD_COPY_ERR_EVENT(name) \ 475a2f4c3faSTrond Myklebust DEFINE_EVENT(nfsd_copy_err_class, nfsd_##name, \ 476a2f4c3faSTrond Myklebust TP_PROTO(struct svc_rqst *rqstp, \ 477a2f4c3faSTrond Myklebust struct svc_fh *src_fhp, \ 478a2f4c3faSTrond Myklebust loff_t src_offset, \ 479a2f4c3faSTrond Myklebust struct svc_fh *dst_fhp, \ 480a2f4c3faSTrond Myklebust loff_t dst_offset, \ 481a2f4c3faSTrond Myklebust u64 count, \ 482a2f4c3faSTrond Myklebust int status), \ 483a2f4c3faSTrond Myklebust TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, \ 484a2f4c3faSTrond Myklebust count, status)) 485a2f4c3faSTrond Myklebust 486a2f4c3faSTrond Myklebust DEFINE_NFSD_COPY_ERR_EVENT(clone_file_range_err); 487a2f4c3faSTrond Myklebust 488825213e5SJeff Layton #include "state.h" 48965294c1fSJeff Layton #include "filecache.h" 49065294c1fSJeff Layton #include "vfs.h" 491825213e5SJeff Layton 49231ef83dcSChristoph Hellwig DECLARE_EVENT_CLASS(nfsd_stateid_class, 49331ef83dcSChristoph Hellwig TP_PROTO(stateid_t *stp), 49431ef83dcSChristoph Hellwig TP_ARGS(stp), 49531ef83dcSChristoph Hellwig TP_STRUCT__entry( 49631ef83dcSChristoph Hellwig __field(u32, cl_boot) 49731ef83dcSChristoph Hellwig __field(u32, cl_id) 49831ef83dcSChristoph Hellwig __field(u32, si_id) 49931ef83dcSChristoph Hellwig __field(u32, si_generation) 50031ef83dcSChristoph Hellwig ), 50131ef83dcSChristoph Hellwig TP_fast_assign( 50231ef83dcSChristoph Hellwig __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 50331ef83dcSChristoph Hellwig __entry->cl_id = stp->si_opaque.so_clid.cl_id; 50431ef83dcSChristoph Hellwig __entry->si_id = stp->si_opaque.so_id; 50531ef83dcSChristoph Hellwig __entry->si_generation = stp->si_generation; 50631ef83dcSChristoph Hellwig ), 50731ef83dcSChristoph Hellwig TP_printk("client %08x:%08x stateid %08x:%08x", 50831ef83dcSChristoph Hellwig __entry->cl_boot, 50931ef83dcSChristoph Hellwig __entry->cl_id, 51031ef83dcSChristoph Hellwig __entry->si_id, 51131ef83dcSChristoph Hellwig __entry->si_generation) 51231ef83dcSChristoph Hellwig ) 51331ef83dcSChristoph Hellwig 51431ef83dcSChristoph Hellwig #define DEFINE_STATEID_EVENT(name) \ 515f394b62bSChuck Lever DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \ 51631ef83dcSChristoph Hellwig TP_PROTO(stateid_t *stp), \ 51731ef83dcSChristoph Hellwig TP_ARGS(stp)) 518dd5e3fbcSChuck Lever 51931ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_alloc); 52031ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_unhash); 52131ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_free); 52231ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_get_lookup_fail); 52331ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_commit_lookup_fail); 52431ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_return_lookup_fail); 52531ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall); 52631ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_done); 52731ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_fail); 52831ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_release); 52931ef83dcSChristoph Hellwig 5303caf9175SHou Tao DEFINE_STATEID_EVENT(open); 5313caf9175SHou Tao DEFINE_STATEID_EVENT(deleg_read); 532dd5e3fbcSChuck Lever DEFINE_STATEID_EVENT(deleg_recall); 533dd5e3fbcSChuck Lever 534dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_stateseqid_class, 535dd5e3fbcSChuck Lever TP_PROTO(u32 seqid, const stateid_t *stp), 536dd5e3fbcSChuck Lever TP_ARGS(seqid, stp), 537dd5e3fbcSChuck Lever TP_STRUCT__entry( 538dd5e3fbcSChuck Lever __field(u32, seqid) 539dd5e3fbcSChuck Lever __field(u32, cl_boot) 540dd5e3fbcSChuck Lever __field(u32, cl_id) 541dd5e3fbcSChuck Lever __field(u32, si_id) 542dd5e3fbcSChuck Lever __field(u32, si_generation) 543dd5e3fbcSChuck Lever ), 544dd5e3fbcSChuck Lever TP_fast_assign( 545dd5e3fbcSChuck Lever __entry->seqid = seqid; 546dd5e3fbcSChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 547dd5e3fbcSChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 548dd5e3fbcSChuck Lever __entry->si_id = stp->si_opaque.so_id; 549dd5e3fbcSChuck Lever __entry->si_generation = stp->si_generation; 550dd5e3fbcSChuck Lever ), 551dd5e3fbcSChuck Lever TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x", 552dd5e3fbcSChuck Lever __entry->seqid, __entry->cl_boot, __entry->cl_id, 553dd5e3fbcSChuck Lever __entry->si_id, __entry->si_generation) 554dd5e3fbcSChuck Lever ) 555dd5e3fbcSChuck Lever 556dd5e3fbcSChuck Lever #define DEFINE_STATESEQID_EVENT(name) \ 557dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \ 558dd5e3fbcSChuck Lever TP_PROTO(u32 seqid, const stateid_t *stp), \ 559dd5e3fbcSChuck Lever TP_ARGS(seqid, stp)) 560dd5e3fbcSChuck Lever 561dd5e3fbcSChuck Lever DEFINE_STATESEQID_EVENT(preprocess); 562dd5e3fbcSChuck Lever DEFINE_STATESEQID_EVENT(open_confirm); 563dd5e3fbcSChuck Lever 564dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_clientid_class, 565dd5e3fbcSChuck Lever TP_PROTO(const clientid_t *clid), 566dd5e3fbcSChuck Lever TP_ARGS(clid), 567dd5e3fbcSChuck Lever TP_STRUCT__entry( 568dd5e3fbcSChuck Lever __field(u32, cl_boot) 569dd5e3fbcSChuck Lever __field(u32, cl_id) 570dd5e3fbcSChuck Lever ), 571dd5e3fbcSChuck Lever TP_fast_assign( 572dd5e3fbcSChuck Lever __entry->cl_boot = clid->cl_boot; 573dd5e3fbcSChuck Lever __entry->cl_id = clid->cl_id; 574dd5e3fbcSChuck Lever ), 575dd5e3fbcSChuck Lever TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 576dd5e3fbcSChuck Lever ) 577dd5e3fbcSChuck Lever 578dd5e3fbcSChuck Lever #define DEFINE_CLIENTID_EVENT(name) \ 579dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \ 580dd5e3fbcSChuck Lever TP_PROTO(const clientid_t *clid), \ 581dd5e3fbcSChuck Lever TP_ARGS(clid)) 582dd5e3fbcSChuck Lever 583237f91c8SChuck Lever DEFINE_CLIENTID_EVENT(expire_unconf); 584cee8aa07SChuck Lever DEFINE_CLIENTID_EVENT(reclaim_complete); 5857e3b32acSChuck Lever DEFINE_CLIENTID_EVENT(confirmed); 586c41a9b7aSChuck Lever DEFINE_CLIENTID_EVENT(destroyed); 5872958d2eeSChuck Lever DEFINE_CLIENTID_EVENT(admin_expired); 5882958d2eeSChuck Lever DEFINE_CLIENTID_EVENT(replaced); 589dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(purged); 590dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(renew); 591dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(stale); 592dd5e3fbcSChuck Lever 593dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_net_class, 594dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn), 595dd5e3fbcSChuck Lever TP_ARGS(nn), 596dd5e3fbcSChuck Lever TP_STRUCT__entry( 597dd5e3fbcSChuck Lever __field(unsigned long long, boot_time) 598dd5e3fbcSChuck Lever ), 599dd5e3fbcSChuck Lever TP_fast_assign( 600dd5e3fbcSChuck Lever __entry->boot_time = nn->boot_time; 601dd5e3fbcSChuck Lever ), 602dd5e3fbcSChuck Lever TP_printk("boot_time=%16llx", __entry->boot_time) 603dd5e3fbcSChuck Lever ) 604dd5e3fbcSChuck Lever 605dd5e3fbcSChuck Lever #define DEFINE_NET_EVENT(name) \ 606dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_net_class, nfsd_##name, \ 607dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn), \ 608dd5e3fbcSChuck Lever TP_ARGS(nn)) 609dd5e3fbcSChuck Lever 610dd5e3fbcSChuck Lever DEFINE_NET_EVENT(grace_start); 611dd5e3fbcSChuck Lever DEFINE_NET_EVENT(grace_complete); 612dd5e3fbcSChuck Lever 61375acacb6SChuck Lever TRACE_EVENT(nfsd_writeverf_reset, 61475acacb6SChuck Lever TP_PROTO( 61575acacb6SChuck Lever const struct nfsd_net *nn, 61675acacb6SChuck Lever const struct svc_rqst *rqstp, 61775acacb6SChuck Lever int error 61875acacb6SChuck Lever ), 61975acacb6SChuck Lever TP_ARGS(nn, rqstp, error), 62075acacb6SChuck Lever TP_STRUCT__entry( 62175acacb6SChuck Lever __field(unsigned long long, boot_time) 62275acacb6SChuck Lever __field(u32, xid) 62375acacb6SChuck Lever __field(int, error) 62475acacb6SChuck Lever __array(unsigned char, verifier, NFS4_VERIFIER_SIZE) 62575acacb6SChuck Lever ), 62675acacb6SChuck Lever TP_fast_assign( 62775acacb6SChuck Lever __entry->boot_time = nn->boot_time; 62875acacb6SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 62975acacb6SChuck Lever __entry->error = error; 63075acacb6SChuck Lever 63175acacb6SChuck Lever /* avoid seqlock inside TP_fast_assign */ 63275acacb6SChuck Lever memcpy(__entry->verifier, nn->writeverf, 63375acacb6SChuck Lever NFS4_VERIFIER_SIZE); 63475acacb6SChuck Lever ), 63575acacb6SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x error=%d new verifier=0x%s", 63675acacb6SChuck Lever __entry->boot_time, __entry->xid, __entry->error, 63775acacb6SChuck Lever __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 63875acacb6SChuck Lever ) 63975acacb6SChuck Lever ); 64075acacb6SChuck Lever 64127787733SChuck Lever TRACE_EVENT(nfsd_clid_cred_mismatch, 64227787733SChuck Lever TP_PROTO( 64327787733SChuck Lever const struct nfs4_client *clp, 64427787733SChuck Lever const struct svc_rqst *rqstp 64527787733SChuck Lever ), 64627787733SChuck Lever TP_ARGS(clp, rqstp), 64727787733SChuck Lever TP_STRUCT__entry( 64827787733SChuck Lever __field(u32, cl_boot) 64927787733SChuck Lever __field(u32, cl_id) 65027787733SChuck Lever __field(unsigned long, cl_flavor) 65127787733SChuck Lever __field(unsigned long, new_flavor) 6529db0e15fSChuck Lever __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen) 65327787733SChuck Lever ), 65427787733SChuck Lever TP_fast_assign( 65527787733SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 65627787733SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 65727787733SChuck Lever __entry->cl_flavor = clp->cl_cred.cr_flavor; 65827787733SChuck Lever __entry->new_flavor = rqstp->rq_cred.cr_flavor; 6599db0e15fSChuck Lever __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote, 6609db0e15fSChuck Lever rqstp->rq_xprt->xpt_remotelen); 66127787733SChuck Lever ), 66227787733SChuck Lever TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc", 66327787733SChuck Lever __entry->cl_boot, __entry->cl_id, 66427787733SChuck Lever show_nfsd_authflavor(__entry->cl_flavor), 6659db0e15fSChuck Lever show_nfsd_authflavor(__entry->new_flavor), 6669db0e15fSChuck Lever __get_sockaddr(addr) 66727787733SChuck Lever ) 66827787733SChuck Lever ) 66927787733SChuck Lever 670744ea54cSChuck Lever TRACE_EVENT(nfsd_clid_verf_mismatch, 671744ea54cSChuck Lever TP_PROTO( 672744ea54cSChuck Lever const struct nfs4_client *clp, 673744ea54cSChuck Lever const struct svc_rqst *rqstp, 674744ea54cSChuck Lever const nfs4_verifier *verf 675744ea54cSChuck Lever ), 676744ea54cSChuck Lever TP_ARGS(clp, rqstp, verf), 677744ea54cSChuck Lever TP_STRUCT__entry( 678744ea54cSChuck Lever __field(u32, cl_boot) 679744ea54cSChuck Lever __field(u32, cl_id) 680744ea54cSChuck Lever __array(unsigned char, cl_verifier, NFS4_VERIFIER_SIZE) 681744ea54cSChuck Lever __array(unsigned char, new_verifier, NFS4_VERIFIER_SIZE) 6829db0e15fSChuck Lever __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen) 683744ea54cSChuck Lever ), 684744ea54cSChuck Lever TP_fast_assign( 685744ea54cSChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 686744ea54cSChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 687744ea54cSChuck Lever memcpy(__entry->cl_verifier, (void *)&clp->cl_verifier, 688744ea54cSChuck Lever NFS4_VERIFIER_SIZE); 689744ea54cSChuck Lever memcpy(__entry->new_verifier, (void *)verf, 690744ea54cSChuck Lever NFS4_VERIFIER_SIZE); 6919db0e15fSChuck Lever __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote, 6929db0e15fSChuck Lever rqstp->rq_xprt->xpt_remotelen); 693744ea54cSChuck Lever ), 694744ea54cSChuck Lever TP_printk("client %08x:%08x verf=0x%s, updated=0x%s from addr=%pISpc", 695744ea54cSChuck Lever __entry->cl_boot, __entry->cl_id, 696744ea54cSChuck Lever __print_hex_str(__entry->cl_verifier, NFS4_VERIFIER_SIZE), 697744ea54cSChuck Lever __print_hex_str(__entry->new_verifier, NFS4_VERIFIER_SIZE), 6989db0e15fSChuck Lever __get_sockaddr(addr) 699744ea54cSChuck Lever ) 700744ea54cSChuck Lever ); 701744ea54cSChuck Lever 702237f91c8SChuck Lever DECLARE_EVENT_CLASS(nfsd_clid_class, 703237f91c8SChuck Lever TP_PROTO(const struct nfs4_client *clp), 704237f91c8SChuck Lever TP_ARGS(clp), 705237f91c8SChuck Lever TP_STRUCT__entry( 706237f91c8SChuck Lever __field(u32, cl_boot) 707237f91c8SChuck Lever __field(u32, cl_id) 708237f91c8SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 709237f91c8SChuck Lever __field(unsigned long, flavor) 710237f91c8SChuck Lever __array(unsigned char, verifier, NFS4_VERIFIER_SIZE) 711d27b74a8SChuck Lever __string_len(name, name, clp->cl_name.len) 712237f91c8SChuck Lever ), 713237f91c8SChuck Lever TP_fast_assign( 714237f91c8SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 715237f91c8SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 716237f91c8SChuck Lever memcpy(__entry->addr, &clp->cl_addr, 717237f91c8SChuck Lever sizeof(struct sockaddr_in6)); 718237f91c8SChuck Lever __entry->flavor = clp->cl_cred.cr_flavor; 719237f91c8SChuck Lever memcpy(__entry->verifier, (void *)&clp->cl_verifier, 720237f91c8SChuck Lever NFS4_VERIFIER_SIZE); 721d27b74a8SChuck Lever __assign_str_len(name, clp->cl_name.data, clp->cl_name.len); 722237f91c8SChuck Lever ), 723237f91c8SChuck Lever TP_printk("addr=%pISpc name='%s' verifier=0x%s flavor=%s client=%08x:%08x", 724237f91c8SChuck Lever __entry->addr, __get_str(name), 725237f91c8SChuck Lever __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE), 726237f91c8SChuck Lever show_nfsd_authflavor(__entry->flavor), 727237f91c8SChuck Lever __entry->cl_boot, __entry->cl_id) 728237f91c8SChuck Lever ); 729237f91c8SChuck Lever 730237f91c8SChuck Lever #define DEFINE_CLID_EVENT(name) \ 731237f91c8SChuck Lever DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \ 732237f91c8SChuck Lever TP_PROTO(const struct nfs4_client *clp), \ 733237f91c8SChuck Lever TP_ARGS(clp)) 734237f91c8SChuck Lever 735237f91c8SChuck Lever DEFINE_CLID_EVENT(fresh); 736e8f80c55SChuck Lever DEFINE_CLID_EVENT(confirmed_r); 737237f91c8SChuck Lever 738b76278aeSChuck Lever /* 739b76278aeSChuck Lever * from fs/nfsd/filecache.h 740b76278aeSChuck Lever */ 74165294c1fSJeff Layton #define show_nf_flags(val) \ 74265294c1fSJeff Layton __print_flags(val, "|", \ 74365294c1fSJeff Layton { 1 << NFSD_FILE_HASHED, "HASHED" }, \ 74465294c1fSJeff Layton { 1 << NFSD_FILE_PENDING, "PENDING" }, \ 74565294c1fSJeff Layton { 1 << NFSD_FILE_REFERENCED, "REFERENCED"}) 74665294c1fSJeff Layton 74765294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_class, 74865294c1fSJeff Layton TP_PROTO(struct nfsd_file *nf), 74965294c1fSJeff Layton TP_ARGS(nf), 75065294c1fSJeff Layton TP_STRUCT__entry( 75165294c1fSJeff Layton __field(void *, nf_inode) 75265294c1fSJeff Layton __field(int, nf_ref) 75365294c1fSJeff Layton __field(unsigned long, nf_flags) 75465294c1fSJeff Layton __field(unsigned char, nf_may) 75565294c1fSJeff Layton __field(struct file *, nf_file) 75665294c1fSJeff Layton ), 75765294c1fSJeff Layton TP_fast_assign( 75865294c1fSJeff Layton __entry->nf_inode = nf->nf_inode; 759689827cdSTrond Myklebust __entry->nf_ref = refcount_read(&nf->nf_ref); 76065294c1fSJeff Layton __entry->nf_flags = nf->nf_flags; 76165294c1fSJeff Layton __entry->nf_may = nf->nf_may; 76265294c1fSJeff Layton __entry->nf_file = nf->nf_file; 76365294c1fSJeff Layton ), 76454f7df70SChuck Lever TP_printk("inode=%p ref=%d flags=%s may=%s nf_file=%p", 76565294c1fSJeff Layton __entry->nf_inode, 76665294c1fSJeff Layton __entry->nf_ref, 76765294c1fSJeff Layton show_nf_flags(__entry->nf_flags), 768b76278aeSChuck Lever show_nfsd_may_flags(__entry->nf_may), 76965294c1fSJeff Layton __entry->nf_file) 77065294c1fSJeff Layton ) 77165294c1fSJeff Layton 77265294c1fSJeff Layton #define DEFINE_NFSD_FILE_EVENT(name) \ 77365294c1fSJeff Layton DEFINE_EVENT(nfsd_file_class, name, \ 77465294c1fSJeff Layton TP_PROTO(struct nfsd_file *nf), \ 77565294c1fSJeff Layton TP_ARGS(nf)) 77665294c1fSJeff Layton 77765294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_alloc); 77865294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put_final); 77965294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash); 78065294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put); 781ce502f81SChuck Lever DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_dispose); 78265294c1fSJeff Layton 78365294c1fSJeff Layton TRACE_EVENT(nfsd_file_acquire, 78454f7df70SChuck Lever TP_PROTO( 785*be023006SChuck Lever const struct svc_rqst *rqstp, 786*be023006SChuck Lever const struct inode *inode, 78754f7df70SChuck Lever unsigned int may_flags, 788*be023006SChuck Lever const struct nfsd_file *nf, 78954f7df70SChuck Lever __be32 status 79054f7df70SChuck Lever ), 79165294c1fSJeff Layton 79254f7df70SChuck Lever TP_ARGS(rqstp, inode, may_flags, nf, status), 79365294c1fSJeff Layton 79465294c1fSJeff Layton TP_STRUCT__entry( 795a9ceb060STrond Myklebust __field(u32, xid) 796*be023006SChuck Lever __field(const void *, inode) 797b76278aeSChuck Lever __field(unsigned long, may_flags) 798*be023006SChuck Lever __field(unsigned int, nf_ref) 79965294c1fSJeff Layton __field(unsigned long, nf_flags) 800b76278aeSChuck Lever __field(unsigned long, nf_may) 801*be023006SChuck Lever __field(const void *, nf_file) 802a9ceb060STrond Myklebust __field(u32, status) 80365294c1fSJeff Layton ), 80465294c1fSJeff Layton 80565294c1fSJeff Layton TP_fast_assign( 806a9ceb060STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 80765294c1fSJeff Layton __entry->inode = inode; 80865294c1fSJeff Layton __entry->may_flags = may_flags; 809689827cdSTrond Myklebust __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0; 81065294c1fSJeff Layton __entry->nf_flags = nf ? nf->nf_flags : 0; 81165294c1fSJeff Layton __entry->nf_may = nf ? nf->nf_may : 0; 81265294c1fSJeff Layton __entry->nf_file = nf ? nf->nf_file : NULL; 813a9ceb060STrond Myklebust __entry->status = be32_to_cpu(status); 81465294c1fSJeff Layton ), 81565294c1fSJeff Layton 816*be023006SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u", 81754f7df70SChuck Lever __entry->xid, __entry->inode, 818b76278aeSChuck Lever show_nfsd_may_flags(__entry->may_flags), 819b76278aeSChuck Lever __entry->nf_ref, show_nf_flags(__entry->nf_flags), 820b76278aeSChuck Lever show_nfsd_may_flags(__entry->nf_may), 821*be023006SChuck Lever __entry->nf_file, __entry->status 822*be023006SChuck Lever ) 823*be023006SChuck Lever ); 824*be023006SChuck Lever 825*be023006SChuck Lever TRACE_EVENT(nfsd_file_create, 826*be023006SChuck Lever TP_PROTO( 827*be023006SChuck Lever const struct svc_rqst *rqstp, 828*be023006SChuck Lever unsigned int may_flags, 829*be023006SChuck Lever const struct nfsd_file *nf 830*be023006SChuck Lever ), 831*be023006SChuck Lever 832*be023006SChuck Lever TP_ARGS(rqstp, may_flags, nf), 833*be023006SChuck Lever 834*be023006SChuck Lever TP_STRUCT__entry( 835*be023006SChuck Lever __field(const void *, nf_inode) 836*be023006SChuck Lever __field(const void *, nf_file) 837*be023006SChuck Lever __field(unsigned long, may_flags) 838*be023006SChuck Lever __field(unsigned long, nf_flags) 839*be023006SChuck Lever __field(unsigned long, nf_may) 840*be023006SChuck Lever __field(unsigned int, nf_ref) 841*be023006SChuck Lever __field(u32, xid) 842*be023006SChuck Lever ), 843*be023006SChuck Lever 844*be023006SChuck Lever TP_fast_assign( 845*be023006SChuck Lever __entry->nf_inode = nf->nf_inode; 846*be023006SChuck Lever __entry->nf_file = nf->nf_file; 847*be023006SChuck Lever __entry->may_flags = may_flags; 848*be023006SChuck Lever __entry->nf_flags = nf->nf_flags; 849*be023006SChuck Lever __entry->nf_may = nf->nf_may; 850*be023006SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 851*be023006SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 852*be023006SChuck Lever ), 853*be023006SChuck Lever 854*be023006SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p", 855*be023006SChuck Lever __entry->xid, __entry->nf_inode, 856*be023006SChuck Lever show_nfsd_may_flags(__entry->may_flags), 857*be023006SChuck Lever __entry->nf_ref, show_nf_flags(__entry->nf_flags), 858*be023006SChuck Lever show_nfsd_may_flags(__entry->nf_may), __entry->nf_file 859*be023006SChuck Lever ) 86065294c1fSJeff Layton ); 86165294c1fSJeff Layton 862ce502f81SChuck Lever TRACE_EVENT(nfsd_file_insert_err, 863ce502f81SChuck Lever TP_PROTO( 864ce502f81SChuck Lever const struct svc_rqst *rqstp, 865ce502f81SChuck Lever const struct inode *inode, 866ce502f81SChuck Lever unsigned int may_flags, 867ce502f81SChuck Lever long error 868ce502f81SChuck Lever ), 869ce502f81SChuck Lever TP_ARGS(rqstp, inode, may_flags, error), 870ce502f81SChuck Lever TP_STRUCT__entry( 871ce502f81SChuck Lever __field(u32, xid) 872ce502f81SChuck Lever __field(const void *, inode) 873ce502f81SChuck Lever __field(unsigned long, may_flags) 874ce502f81SChuck Lever __field(long, error) 875ce502f81SChuck Lever ), 876ce502f81SChuck Lever TP_fast_assign( 877ce502f81SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 878ce502f81SChuck Lever __entry->inode = inode; 879ce502f81SChuck Lever __entry->may_flags = may_flags; 880ce502f81SChuck Lever __entry->error = error; 881ce502f81SChuck Lever ), 882ce502f81SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s error=%ld", 883ce502f81SChuck Lever __entry->xid, __entry->inode, 884ce502f81SChuck Lever show_nfsd_may_flags(__entry->may_flags), 885ce502f81SChuck Lever __entry->error 886ce502f81SChuck Lever ) 887ce502f81SChuck Lever ); 888ce502f81SChuck Lever 889ce502f81SChuck Lever TRACE_EVENT(nfsd_file_cons_err, 890ce502f81SChuck Lever TP_PROTO( 891ce502f81SChuck Lever const struct svc_rqst *rqstp, 892ce502f81SChuck Lever const struct inode *inode, 893ce502f81SChuck Lever unsigned int may_flags, 894ce502f81SChuck Lever const struct nfsd_file *nf 895ce502f81SChuck Lever ), 896ce502f81SChuck Lever TP_ARGS(rqstp, inode, may_flags, nf), 897ce502f81SChuck Lever TP_STRUCT__entry( 898ce502f81SChuck Lever __field(u32, xid) 899ce502f81SChuck Lever __field(const void *, inode) 900ce502f81SChuck Lever __field(unsigned long, may_flags) 901ce502f81SChuck Lever __field(unsigned int, nf_ref) 902ce502f81SChuck Lever __field(unsigned long, nf_flags) 903ce502f81SChuck Lever __field(unsigned long, nf_may) 904ce502f81SChuck Lever __field(const void *, nf_file) 905ce502f81SChuck Lever ), 906ce502f81SChuck Lever TP_fast_assign( 907ce502f81SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 908ce502f81SChuck Lever __entry->inode = inode; 909ce502f81SChuck Lever __entry->may_flags = may_flags; 910ce502f81SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 911ce502f81SChuck Lever __entry->nf_flags = nf->nf_flags; 912ce502f81SChuck Lever __entry->nf_may = nf->nf_may; 913ce502f81SChuck Lever __entry->nf_file = nf->nf_file; 914ce502f81SChuck Lever ), 915ce502f81SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p", 916ce502f81SChuck Lever __entry->xid, __entry->inode, 917ce502f81SChuck Lever show_nfsd_may_flags(__entry->may_flags), __entry->nf_ref, 918ce502f81SChuck Lever show_nf_flags(__entry->nf_flags), 919ce502f81SChuck Lever show_nfsd_may_flags(__entry->nf_may), __entry->nf_file 920ce502f81SChuck Lever ) 921ce502f81SChuck Lever ); 922ce502f81SChuck Lever 9230122e882SChuck Lever TRACE_EVENT(nfsd_file_open, 9240122e882SChuck Lever TP_PROTO(struct nfsd_file *nf, __be32 status), 9250122e882SChuck Lever TP_ARGS(nf, status), 9260122e882SChuck Lever TP_STRUCT__entry( 9270122e882SChuck Lever __field(void *, nf_inode) /* cannot be dereferenced */ 9280122e882SChuck Lever __field(int, nf_ref) 9290122e882SChuck Lever __field(unsigned long, nf_flags) 9300122e882SChuck Lever __field(unsigned long, nf_may) 9310122e882SChuck Lever __field(void *, nf_file) /* cannot be dereferenced */ 9320122e882SChuck Lever ), 9330122e882SChuck Lever TP_fast_assign( 9340122e882SChuck Lever __entry->nf_inode = nf->nf_inode; 9350122e882SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 9360122e882SChuck Lever __entry->nf_flags = nf->nf_flags; 9370122e882SChuck Lever __entry->nf_may = nf->nf_may; 9380122e882SChuck Lever __entry->nf_file = nf->nf_file; 9390122e882SChuck Lever ), 94054f7df70SChuck Lever TP_printk("inode=%p ref=%d flags=%s may=%s file=%p", 9410122e882SChuck Lever __entry->nf_inode, 9420122e882SChuck Lever __entry->nf_ref, 9430122e882SChuck Lever show_nf_flags(__entry->nf_flags), 9440122e882SChuck Lever show_nfsd_may_flags(__entry->nf_may), 9450122e882SChuck Lever __entry->nf_file) 9460122e882SChuck Lever ) 9470122e882SChuck Lever 94865294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_search_class, 94954f7df70SChuck Lever TP_PROTO( 950a8455110SChuck Lever const struct inode *inode, 951a8455110SChuck Lever unsigned int count 952a8455110SChuck Lever ), 953a8455110SChuck Lever TP_ARGS(inode, count), 954a8455110SChuck Lever TP_STRUCT__entry( 955a8455110SChuck Lever __field(const struct inode *, inode) 956a8455110SChuck Lever __field(unsigned int, count) 957a8455110SChuck Lever ), 958a8455110SChuck Lever TP_fast_assign( 959a8455110SChuck Lever __entry->inode = inode; 960a8455110SChuck Lever __entry->count = count; 961a8455110SChuck Lever ), 962a8455110SChuck Lever TP_printk("inode=%p count=%u", 963a8455110SChuck Lever __entry->inode, __entry->count) 964a8455110SChuck Lever ); 965a8455110SChuck Lever 966a8455110SChuck Lever #define DEFINE_NFSD_FILE_SEARCH_EVENT(name) \ 967a8455110SChuck Lever DEFINE_EVENT(nfsd_file_search_class, name, \ 968a8455110SChuck Lever TP_PROTO( \ 969a8455110SChuck Lever const struct inode *inode, \ 970a8455110SChuck Lever unsigned int count \ 971a8455110SChuck Lever ), \ 972a8455110SChuck Lever TP_ARGS(inode, count)) 973a8455110SChuck Lever 974a8455110SChuck Lever DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode_sync); 975a8455110SChuck Lever DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode); 976a8455110SChuck Lever 977a8455110SChuck Lever TRACE_EVENT(nfsd_file_is_cached, 978a8455110SChuck Lever TP_PROTO( 979a8455110SChuck Lever const struct inode *inode, 98054f7df70SChuck Lever int found 98154f7df70SChuck Lever ), 98254f7df70SChuck Lever TP_ARGS(inode, found), 98365294c1fSJeff Layton TP_STRUCT__entry( 984a8455110SChuck Lever __field(const struct inode *, inode) 98565294c1fSJeff Layton __field(int, found) 98665294c1fSJeff Layton ), 98765294c1fSJeff Layton TP_fast_assign( 98865294c1fSJeff Layton __entry->inode = inode; 98965294c1fSJeff Layton __entry->found = found; 99065294c1fSJeff Layton ), 991a8455110SChuck Lever TP_printk("inode=%p is %scached", 992a8455110SChuck Lever __entry->inode, 993a8455110SChuck Lever __entry->found ? "" : "not " 994a8455110SChuck Lever ) 99565294c1fSJeff Layton ); 99665294c1fSJeff Layton 99765294c1fSJeff Layton TRACE_EVENT(nfsd_file_fsnotify_handle_event, 99865294c1fSJeff Layton TP_PROTO(struct inode *inode, u32 mask), 99965294c1fSJeff Layton TP_ARGS(inode, mask), 100065294c1fSJeff Layton TP_STRUCT__entry( 100165294c1fSJeff Layton __field(struct inode *, inode) 100265294c1fSJeff Layton __field(unsigned int, nlink) 100365294c1fSJeff Layton __field(umode_t, mode) 100465294c1fSJeff Layton __field(u32, mask) 100565294c1fSJeff Layton ), 100665294c1fSJeff Layton TP_fast_assign( 100765294c1fSJeff Layton __entry->inode = inode; 100865294c1fSJeff Layton __entry->nlink = inode->i_nlink; 100965294c1fSJeff Layton __entry->mode = inode->i_mode; 101065294c1fSJeff Layton __entry->mask = mask; 101165294c1fSJeff Layton ), 10123a90e1dfSChuck Lever TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry->inode, 101365294c1fSJeff Layton __entry->nlink, __entry->mode, __entry->mask) 101465294c1fSJeff Layton ); 101565294c1fSJeff Layton 1016c46203acSChuck Lever DECLARE_EVENT_CLASS(nfsd_file_gc_class, 1017c46203acSChuck Lever TP_PROTO( 1018c46203acSChuck Lever const struct nfsd_file *nf 1019c46203acSChuck Lever ), 1020c46203acSChuck Lever TP_ARGS(nf), 1021c46203acSChuck Lever TP_STRUCT__entry( 1022c46203acSChuck Lever __field(void *, nf_inode) 1023c46203acSChuck Lever __field(void *, nf_file) 1024c46203acSChuck Lever __field(int, nf_ref) 1025c46203acSChuck Lever __field(unsigned long, nf_flags) 1026c46203acSChuck Lever ), 1027c46203acSChuck Lever TP_fast_assign( 1028c46203acSChuck Lever __entry->nf_inode = nf->nf_inode; 1029c46203acSChuck Lever __entry->nf_file = nf->nf_file; 1030c46203acSChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 1031c46203acSChuck Lever __entry->nf_flags = nf->nf_flags; 1032c46203acSChuck Lever ), 1033c46203acSChuck Lever TP_printk("inode=%p ref=%d nf_flags=%s nf_file=%p", 1034c46203acSChuck Lever __entry->nf_inode, __entry->nf_ref, 1035c46203acSChuck Lever show_nf_flags(__entry->nf_flags), 1036c46203acSChuck Lever __entry->nf_file 1037c46203acSChuck Lever ) 1038c46203acSChuck Lever ); 1039c46203acSChuck Lever 1040c46203acSChuck Lever #define DEFINE_NFSD_FILE_GC_EVENT(name) \ 1041c46203acSChuck Lever DEFINE_EVENT(nfsd_file_gc_class, name, \ 1042c46203acSChuck Lever TP_PROTO( \ 1043c46203acSChuck Lever const struct nfsd_file *nf \ 1044c46203acSChuck Lever ), \ 1045c46203acSChuck Lever TP_ARGS(nf)) 1046c46203acSChuck Lever 1047c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add); 10484a0e73e6SChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add_disposed); 1049c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del); 10504a0e73e6SChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del_disposed); 1051c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_in_use); 1052c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_writeback); 1053c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_referenced); 1054c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_hashed); 1055c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_disposed); 1056c46203acSChuck Lever 105794660cc1SChuck Lever DECLARE_EVENT_CLASS(nfsd_file_lruwalk_class, 105894660cc1SChuck Lever TP_PROTO( 105994660cc1SChuck Lever unsigned long removed, 106094660cc1SChuck Lever unsigned long remaining 106194660cc1SChuck Lever ), 106294660cc1SChuck Lever TP_ARGS(removed, remaining), 106394660cc1SChuck Lever TP_STRUCT__entry( 106494660cc1SChuck Lever __field(unsigned long, removed) 106594660cc1SChuck Lever __field(unsigned long, remaining) 106694660cc1SChuck Lever ), 106794660cc1SChuck Lever TP_fast_assign( 106894660cc1SChuck Lever __entry->removed = removed; 106994660cc1SChuck Lever __entry->remaining = remaining; 107094660cc1SChuck Lever ), 107194660cc1SChuck Lever TP_printk("%lu entries removed, %lu remaining", 107294660cc1SChuck Lever __entry->removed, __entry->remaining) 107394660cc1SChuck Lever ); 107494660cc1SChuck Lever 107594660cc1SChuck Lever #define DEFINE_NFSD_FILE_LRUWALK_EVENT(name) \ 107694660cc1SChuck Lever DEFINE_EVENT(nfsd_file_lruwalk_class, name, \ 107794660cc1SChuck Lever TP_PROTO( \ 107894660cc1SChuck Lever unsigned long removed, \ 107994660cc1SChuck Lever unsigned long remaining \ 108094660cc1SChuck Lever ), \ 108194660cc1SChuck Lever TP_ARGS(removed, remaining)) 108294660cc1SChuck Lever 108394660cc1SChuck Lever DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_gc_removed); 108494660cc1SChuck Lever DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_shrinker_removed); 108594660cc1SChuck Lever 10860b175b18SChuck Lever #include "cache.h" 10870b175b18SChuck Lever 10880b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_DROPIT); 10890b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_REPLY); 10900b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_DOIT); 10910b175b18SChuck Lever 10920b175b18SChuck Lever #define show_drc_retval(x) \ 10930b175b18SChuck Lever __print_symbolic(x, \ 10940b175b18SChuck Lever { RC_DROPIT, "DROPIT" }, \ 10950b175b18SChuck Lever { RC_REPLY, "REPLY" }, \ 10960b175b18SChuck Lever { RC_DOIT, "DOIT" }) 10970b175b18SChuck Lever 10980b175b18SChuck Lever TRACE_EVENT(nfsd_drc_found, 10990b175b18SChuck Lever TP_PROTO( 11000b175b18SChuck Lever const struct nfsd_net *nn, 11010b175b18SChuck Lever const struct svc_rqst *rqstp, 11020b175b18SChuck Lever int result 11030b175b18SChuck Lever ), 11040b175b18SChuck Lever TP_ARGS(nn, rqstp, result), 11050b175b18SChuck Lever TP_STRUCT__entry( 11060b175b18SChuck Lever __field(unsigned long long, boot_time) 11070b175b18SChuck Lever __field(unsigned long, result) 11080b175b18SChuck Lever __field(u32, xid) 11090b175b18SChuck Lever ), 11100b175b18SChuck Lever TP_fast_assign( 11110b175b18SChuck Lever __entry->boot_time = nn->boot_time; 11120b175b18SChuck Lever __entry->result = result; 11130b175b18SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 11140b175b18SChuck Lever ), 11150b175b18SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x result=%s", 11160b175b18SChuck Lever __entry->boot_time, __entry->xid, 11170b175b18SChuck Lever show_drc_retval(__entry->result)) 11180b175b18SChuck Lever 11190b175b18SChuck Lever ); 11200b175b18SChuck Lever 11210b175b18SChuck Lever TRACE_EVENT(nfsd_drc_mismatch, 11220b175b18SChuck Lever TP_PROTO( 11230b175b18SChuck Lever const struct nfsd_net *nn, 11240b175b18SChuck Lever const struct svc_cacherep *key, 11250b175b18SChuck Lever const struct svc_cacherep *rp 11260b175b18SChuck Lever ), 11270b175b18SChuck Lever TP_ARGS(nn, key, rp), 11280b175b18SChuck Lever TP_STRUCT__entry( 11290b175b18SChuck Lever __field(unsigned long long, boot_time) 11300b175b18SChuck Lever __field(u32, xid) 11310b175b18SChuck Lever __field(u32, cached) 11320b175b18SChuck Lever __field(u32, ingress) 11330b175b18SChuck Lever ), 11340b175b18SChuck Lever TP_fast_assign( 11350b175b18SChuck Lever __entry->boot_time = nn->boot_time; 11360b175b18SChuck Lever __entry->xid = be32_to_cpu(key->c_key.k_xid); 11370b175b18SChuck Lever __entry->cached = (__force u32)key->c_key.k_csum; 11380b175b18SChuck Lever __entry->ingress = (__force u32)rp->c_key.k_csum; 11390b175b18SChuck Lever ), 11400b175b18SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x", 11410b175b18SChuck Lever __entry->boot_time, __entry->xid, __entry->cached, 11420b175b18SChuck Lever __entry->ingress) 11430b175b18SChuck Lever ); 11440b175b18SChuck Lever 11451eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_args, 11461eace0d1SChuck Lever TP_PROTO( 11471eace0d1SChuck Lever const struct nfs4_client *clp, 11481eace0d1SChuck Lever const struct nfs4_cb_conn *conn 11491eace0d1SChuck Lever ), 11501eace0d1SChuck Lever TP_ARGS(clp, conn), 11511eace0d1SChuck Lever TP_STRUCT__entry( 11521eace0d1SChuck Lever __field(u32, cl_boot) 11531eace0d1SChuck Lever __field(u32, cl_id) 11541eace0d1SChuck Lever __field(u32, prog) 11551eace0d1SChuck Lever __field(u32, ident) 11569db0e15fSChuck Lever __sockaddr(addr, conn->cb_addrlen) 11571eace0d1SChuck Lever ), 11581eace0d1SChuck Lever TP_fast_assign( 11591eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 11601eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 11611eace0d1SChuck Lever __entry->prog = conn->cb_prog; 11621eace0d1SChuck Lever __entry->ident = conn->cb_ident; 11639db0e15fSChuck Lever __assign_sockaddr(addr, &conn->cb_addr, conn->cb_addrlen); 11641eace0d1SChuck Lever ), 1165d6cbe98fSChuck Lever TP_printk("addr=%pISpc client %08x:%08x prog=%u ident=%u", 11669db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1167d6cbe98fSChuck Lever __entry->prog, __entry->ident) 11681eace0d1SChuck Lever ); 11691eace0d1SChuck Lever 11701eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_nodelegs, 11711eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), 11721eace0d1SChuck Lever TP_ARGS(clp), 11731eace0d1SChuck Lever TP_STRUCT__entry( 11741eace0d1SChuck Lever __field(u32, cl_boot) 11751eace0d1SChuck Lever __field(u32, cl_id) 11761eace0d1SChuck Lever ), 11771eace0d1SChuck Lever TP_fast_assign( 11781eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 11791eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 11801eace0d1SChuck Lever ), 11811eace0d1SChuck Lever TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 11821eace0d1SChuck Lever ) 11831eace0d1SChuck Lever 11841eace0d1SChuck Lever #define show_cb_state(val) \ 11851eace0d1SChuck Lever __print_symbolic(val, \ 11861eace0d1SChuck Lever { NFSD4_CB_UP, "UP" }, \ 11871eace0d1SChuck Lever { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \ 11881eace0d1SChuck Lever { NFSD4_CB_DOWN, "DOWN" }, \ 11891eace0d1SChuck Lever { NFSD4_CB_FAULT, "FAULT"}) 11901eace0d1SChuck Lever 11911eace0d1SChuck Lever DECLARE_EVENT_CLASS(nfsd_cb_class, 11921eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), 11931eace0d1SChuck Lever TP_ARGS(clp), 11941eace0d1SChuck Lever TP_STRUCT__entry( 11951eace0d1SChuck Lever __field(unsigned long, state) 11961eace0d1SChuck Lever __field(u32, cl_boot) 11971eace0d1SChuck Lever __field(u32, cl_id) 11989db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 11991eace0d1SChuck Lever ), 12001eace0d1SChuck Lever TP_fast_assign( 12011eace0d1SChuck Lever __entry->state = clp->cl_cb_state; 12021eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 12031eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 12049db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 12059db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 12061eace0d1SChuck Lever ), 12071eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x state=%s", 12089db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 12091eace0d1SChuck Lever show_cb_state(__entry->state)) 12101eace0d1SChuck Lever ); 12111eace0d1SChuck Lever 12121eace0d1SChuck Lever #define DEFINE_NFSD_CB_EVENT(name) \ 12131eace0d1SChuck Lever DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \ 12141eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), \ 12151eace0d1SChuck Lever TP_ARGS(clp)) 12161eace0d1SChuck Lever 12171eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(state); 12184ade892aSChuck Lever DEFINE_NFSD_CB_EVENT(probe); 1219806d65b6SChuck Lever DEFINE_NFSD_CB_EVENT(lost); 12201eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(shutdown); 12211eace0d1SChuck Lever 122287b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_NULL); 122387b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_UNIX); 122487b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS); 122587b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5); 122687b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I); 122787b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P); 122887b2394dSChuck Lever 122987b2394dSChuck Lever #define show_nfsd_authflavor(val) \ 123087b2394dSChuck Lever __print_symbolic(val, \ 123187b2394dSChuck Lever { RPC_AUTH_NULL, "none" }, \ 123287b2394dSChuck Lever { RPC_AUTH_UNIX, "sys" }, \ 123387b2394dSChuck Lever { RPC_AUTH_GSS, "gss" }, \ 123487b2394dSChuck Lever { RPC_AUTH_GSS_KRB5, "krb5" }, \ 123587b2394dSChuck Lever { RPC_AUTH_GSS_KRB5I, "krb5i" }, \ 123687b2394dSChuck Lever { RPC_AUTH_GSS_KRB5P, "krb5p" }) 123787b2394dSChuck Lever 12383c92fba5SChuck Lever TRACE_EVENT(nfsd_cb_setup, 12393c92fba5SChuck Lever TP_PROTO(const struct nfs4_client *clp, 12403c92fba5SChuck Lever const char *netid, 12413c92fba5SChuck Lever rpc_authflavor_t authflavor 12423c92fba5SChuck Lever ), 12433c92fba5SChuck Lever TP_ARGS(clp, netid, authflavor), 12443c92fba5SChuck Lever TP_STRUCT__entry( 12453c92fba5SChuck Lever __field(u32, cl_boot) 12463c92fba5SChuck Lever __field(u32, cl_id) 12473c92fba5SChuck Lever __field(unsigned long, authflavor) 12489db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 12493c92fba5SChuck Lever __array(unsigned char, netid, 8) 12503c92fba5SChuck Lever ), 12513c92fba5SChuck Lever TP_fast_assign( 12523c92fba5SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 12533c92fba5SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 12543c92fba5SChuck Lever strlcpy(__entry->netid, netid, sizeof(__entry->netid)); 12553c92fba5SChuck Lever __entry->authflavor = authflavor; 12569db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 12579db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 12583c92fba5SChuck Lever ), 12593c92fba5SChuck Lever TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s", 12609db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 12613c92fba5SChuck Lever __entry->netid, show_nfsd_authflavor(__entry->authflavor)) 12623c92fba5SChuck Lever ); 12633c92fba5SChuck Lever 12641eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_setup_err, 12651eace0d1SChuck Lever TP_PROTO( 12661eace0d1SChuck Lever const struct nfs4_client *clp, 12671eace0d1SChuck Lever long error 12681eace0d1SChuck Lever ), 12691eace0d1SChuck Lever TP_ARGS(clp, error), 12701eace0d1SChuck Lever TP_STRUCT__entry( 12711eace0d1SChuck Lever __field(long, error) 12721eace0d1SChuck Lever __field(u32, cl_boot) 12731eace0d1SChuck Lever __field(u32, cl_id) 12749db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 12751eace0d1SChuck Lever ), 12761eace0d1SChuck Lever TP_fast_assign( 12771eace0d1SChuck Lever __entry->error = error; 12781eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 12791eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 12809db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 12819db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 12821eace0d1SChuck Lever ), 12831eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x error=%ld", 12849db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 12859db0e15fSChuck Lever __entry->error) 12861eace0d1SChuck Lever ); 12871eace0d1SChuck Lever 12889db0e15fSChuck Lever TRACE_EVENT_CONDITION(nfsd_cb_recall, 128917d76ddfSChuck Lever TP_PROTO( 129017d76ddfSChuck Lever const struct nfs4_stid *stid 129117d76ddfSChuck Lever ), 129217d76ddfSChuck Lever TP_ARGS(stid), 12939db0e15fSChuck Lever TP_CONDITION(stid->sc_client), 129417d76ddfSChuck Lever TP_STRUCT__entry( 129517d76ddfSChuck Lever __field(u32, cl_boot) 129617d76ddfSChuck Lever __field(u32, cl_id) 129717d76ddfSChuck Lever __field(u32, si_id) 129817d76ddfSChuck Lever __field(u32, si_generation) 12999db0e15fSChuck Lever __sockaddr(addr, stid->sc_client->cl_cb_conn.cb_addrlen) 130017d76ddfSChuck Lever ), 130117d76ddfSChuck Lever TP_fast_assign( 130217d76ddfSChuck Lever const stateid_t *stp = &stid->sc_stateid; 130317d76ddfSChuck Lever const struct nfs4_client *clp = stid->sc_client; 130417d76ddfSChuck Lever 130517d76ddfSChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 130617d76ddfSChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 130717d76ddfSChuck Lever __entry->si_id = stp->si_opaque.so_id; 130817d76ddfSChuck Lever __entry->si_generation = stp->si_generation; 13099db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 13109db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 131117d76ddfSChuck Lever ), 131217d76ddfSChuck Lever TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x", 13139db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 131417d76ddfSChuck Lever __entry->si_id, __entry->si_generation) 131517d76ddfSChuck Lever ); 131617d76ddfSChuck Lever 13172cde7f81SChuck Lever TRACE_EVENT(nfsd_cb_notify_lock, 13182cde7f81SChuck Lever TP_PROTO( 13192cde7f81SChuck Lever const struct nfs4_lockowner *lo, 13202cde7f81SChuck Lever const struct nfsd4_blocked_lock *nbl 13212cde7f81SChuck Lever ), 13222cde7f81SChuck Lever TP_ARGS(lo, nbl), 13232cde7f81SChuck Lever TP_STRUCT__entry( 13242cde7f81SChuck Lever __field(u32, cl_boot) 13252cde7f81SChuck Lever __field(u32, cl_id) 13262cde7f81SChuck Lever __field(u32, fh_hash) 13279db0e15fSChuck Lever __sockaddr(addr, lo->lo_owner.so_client->cl_cb_conn.cb_addrlen) 13282cde7f81SChuck Lever ), 13292cde7f81SChuck Lever TP_fast_assign( 13302cde7f81SChuck Lever const struct nfs4_client *clp = lo->lo_owner.so_client; 13312cde7f81SChuck Lever 13322cde7f81SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 13332cde7f81SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 13342cde7f81SChuck Lever __entry->fh_hash = knfsd_fh_hash(&nbl->nbl_fh); 13359db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 13369db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 13372cde7f81SChuck Lever ), 13382cde7f81SChuck Lever TP_printk("addr=%pISpc client %08x:%08x fh_hash=0x%08x", 13399db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 13402cde7f81SChuck Lever __entry->fh_hash) 13412cde7f81SChuck Lever ); 13422cde7f81SChuck Lever 134387512386SChuck Lever TRACE_EVENT(nfsd_cb_offload, 134487512386SChuck Lever TP_PROTO( 134587512386SChuck Lever const struct nfs4_client *clp, 134687512386SChuck Lever const stateid_t *stp, 134787512386SChuck Lever const struct knfsd_fh *fh, 134887512386SChuck Lever u64 count, 134987512386SChuck Lever __be32 status 135087512386SChuck Lever ), 135187512386SChuck Lever TP_ARGS(clp, stp, fh, count, status), 135287512386SChuck Lever TP_STRUCT__entry( 135387512386SChuck Lever __field(u32, cl_boot) 135487512386SChuck Lever __field(u32, cl_id) 135587512386SChuck Lever __field(u32, si_id) 135687512386SChuck Lever __field(u32, si_generation) 135787512386SChuck Lever __field(u32, fh_hash) 135887512386SChuck Lever __field(int, status) 135987512386SChuck Lever __field(u64, count) 13609db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 136187512386SChuck Lever ), 136287512386SChuck Lever TP_fast_assign( 136387512386SChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 136487512386SChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 136587512386SChuck Lever __entry->si_id = stp->si_opaque.so_id; 136687512386SChuck Lever __entry->si_generation = stp->si_generation; 136787512386SChuck Lever __entry->fh_hash = knfsd_fh_hash(fh); 136887512386SChuck Lever __entry->status = be32_to_cpu(status); 136987512386SChuck Lever __entry->count = count; 13709db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 13719db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 137287512386SChuck Lever ), 137387512386SChuck Lever TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x fh_hash=0x%08x count=%llu status=%d", 13749db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 137587512386SChuck Lever __entry->si_id, __entry->si_generation, 137687512386SChuck Lever __entry->fh_hash, __entry->count, __entry->status) 137787512386SChuck Lever ); 137887512386SChuck Lever 137931ef83dcSChristoph Hellwig #endif /* _NFSD_TRACE_H */ 138031ef83dcSChristoph Hellwig 138131ef83dcSChristoph Hellwig #undef TRACE_INCLUDE_PATH 138231ef83dcSChristoph Hellwig #define TRACE_INCLUDE_PATH . 138331ef83dcSChristoph Hellwig #define TRACE_INCLUDE_FILE trace 138431ef83dcSChristoph Hellwig #include <trace/define_trace.h> 1385