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) 198*948755efSChuck Lever __field(const 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 ), 214*948755efSChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s", 215*948755efSChuck Lever __entry->xid, __entry->fh_hash, 21605138288SChuck Lever show_fs_file_type(__entry->type), 21705138288SChuck Lever show_nfsd_may_flags(__entry->access) 21805138288SChuck Lever ) 21905138288SChuck Lever ); 22008281341SChuck Lever 221*948755efSChuck Lever TRACE_EVENT_CONDITION(nfsd_fh_verify_err, 222*948755efSChuck Lever TP_PROTO( 223*948755efSChuck Lever const struct svc_rqst *rqstp, 224*948755efSChuck Lever const struct svc_fh *fhp, 225*948755efSChuck Lever umode_t type, 226*948755efSChuck Lever int access, 227*948755efSChuck Lever __be32 error 228*948755efSChuck Lever ), 229*948755efSChuck Lever TP_ARGS(rqstp, fhp, type, access, error), 230*948755efSChuck Lever TP_CONDITION(error), 231*948755efSChuck Lever TP_STRUCT__entry( 232*948755efSChuck Lever __field(unsigned int, netns_ino) 233*948755efSChuck Lever __sockaddr(server, rqstp->rq_xprt->xpt_remotelen) 234*948755efSChuck Lever __sockaddr(client, rqstp->rq_xprt->xpt_remotelen) 235*948755efSChuck Lever __field(u32, xid) 236*948755efSChuck Lever __field(u32, fh_hash) 237*948755efSChuck Lever __field(const void *, inode) 238*948755efSChuck Lever __field(unsigned long, type) 239*948755efSChuck Lever __field(unsigned long, access) 240*948755efSChuck Lever __field(int, error) 241*948755efSChuck Lever ), 242*948755efSChuck Lever TP_fast_assign( 243*948755efSChuck Lever __entry->netns_ino = SVC_NET(rqstp)->ns.inum; 244*948755efSChuck Lever __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local, 245*948755efSChuck Lever rqstp->rq_xprt->xpt_locallen); 246*948755efSChuck Lever __assign_sockaddr(client, &rqstp->rq_xprt->xpt_remote, 247*948755efSChuck Lever rqstp->rq_xprt->xpt_remotelen); 248*948755efSChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 249*948755efSChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 250*948755efSChuck Lever __entry->inode = d_inode(fhp->fh_dentry); 251*948755efSChuck Lever __entry->type = type; 252*948755efSChuck Lever __entry->access = access; 253*948755efSChuck Lever __entry->error = be32_to_cpu(error); 254*948755efSChuck Lever ), 255*948755efSChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x type=%s access=%s error=%d", 256*948755efSChuck Lever __entry->xid, __entry->fh_hash, 257*948755efSChuck Lever show_fs_file_type(__entry->type), 258*948755efSChuck Lever show_nfsd_may_flags(__entry->access), 259*948755efSChuck Lever __entry->error 260*948755efSChuck Lever ) 261*948755efSChuck Lever ); 262*948755efSChuck Lever 263f01274a9STrond Myklebust DECLARE_EVENT_CLASS(nfsd_fh_err_class, 264f01274a9STrond Myklebust TP_PROTO(struct svc_rqst *rqstp, 265f01274a9STrond Myklebust struct svc_fh *fhp, 266f01274a9STrond Myklebust int status), 267f01274a9STrond Myklebust TP_ARGS(rqstp, fhp, status), 268f01274a9STrond Myklebust TP_STRUCT__entry( 269f01274a9STrond Myklebust __field(u32, xid) 270f01274a9STrond Myklebust __field(u32, fh_hash) 271f01274a9STrond Myklebust __field(int, status) 272f01274a9STrond Myklebust ), 273f01274a9STrond Myklebust TP_fast_assign( 274f01274a9STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 275f01274a9STrond Myklebust __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 276f01274a9STrond Myklebust __entry->status = status; 277f01274a9STrond Myklebust ), 278f01274a9STrond Myklebust TP_printk("xid=0x%08x fh_hash=0x%08x status=%d", 279f01274a9STrond Myklebust __entry->xid, __entry->fh_hash, 280f01274a9STrond Myklebust __entry->status) 281f01274a9STrond Myklebust ) 282f01274a9STrond Myklebust 283f01274a9STrond Myklebust #define DEFINE_NFSD_FH_ERR_EVENT(name) \ 284f01274a9STrond Myklebust DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name, \ 285f01274a9STrond Myklebust TP_PROTO(struct svc_rqst *rqstp, \ 286f01274a9STrond Myklebust struct svc_fh *fhp, \ 287f01274a9STrond Myklebust int status), \ 288f01274a9STrond Myklebust TP_ARGS(rqstp, fhp, status)) 289f01274a9STrond Myklebust 290f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport); 291f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle); 292f01274a9STrond Myklebust 293cf749f3cSTrond Myklebust TRACE_EVENT(nfsd_exp_find_key, 294cf749f3cSTrond Myklebust TP_PROTO(const struct svc_expkey *key, 295cf749f3cSTrond Myklebust int status), 296cf749f3cSTrond Myklebust TP_ARGS(key, status), 297cf749f3cSTrond Myklebust TP_STRUCT__entry( 298cf749f3cSTrond Myklebust __field(int, fsidtype) 299cf749f3cSTrond Myklebust __array(u32, fsid, 6) 300cf749f3cSTrond Myklebust __string(auth_domain, key->ek_client->name) 301cf749f3cSTrond Myklebust __field(int, status) 302cf749f3cSTrond Myklebust ), 303cf749f3cSTrond Myklebust TP_fast_assign( 304cf749f3cSTrond Myklebust __entry->fsidtype = key->ek_fsidtype; 305cf749f3cSTrond Myklebust memcpy(__entry->fsid, key->ek_fsid, 4*6); 306cf749f3cSTrond Myklebust __assign_str(auth_domain, key->ek_client->name); 307cf749f3cSTrond Myklebust __entry->status = status; 308cf749f3cSTrond Myklebust ), 309cf749f3cSTrond Myklebust TP_printk("fsid=%x::%s domain=%s status=%d", 310cf749f3cSTrond Myklebust __entry->fsidtype, 311cf749f3cSTrond Myklebust __print_array(__entry->fsid, 6, 4), 312cf749f3cSTrond Myklebust __get_str(auth_domain), 313cf749f3cSTrond Myklebust __entry->status 314cf749f3cSTrond Myklebust ) 315cf749f3cSTrond Myklebust ); 316cf749f3cSTrond Myklebust 3176a30e47fSTrond Myklebust TRACE_EVENT(nfsd_expkey_update, 3186a30e47fSTrond Myklebust TP_PROTO(const struct svc_expkey *key, const char *exp_path), 3196a30e47fSTrond Myklebust TP_ARGS(key, exp_path), 3206a30e47fSTrond Myklebust TP_STRUCT__entry( 3216a30e47fSTrond Myklebust __field(int, fsidtype) 3226a30e47fSTrond Myklebust __array(u32, fsid, 6) 3236a30e47fSTrond Myklebust __string(auth_domain, key->ek_client->name) 3246a30e47fSTrond Myklebust __string(path, exp_path) 3256a30e47fSTrond Myklebust __field(bool, cache) 3266a30e47fSTrond Myklebust ), 3276a30e47fSTrond Myklebust TP_fast_assign( 3286a30e47fSTrond Myklebust __entry->fsidtype = key->ek_fsidtype; 3296a30e47fSTrond Myklebust memcpy(__entry->fsid, key->ek_fsid, 4*6); 3306a30e47fSTrond Myklebust __assign_str(auth_domain, key->ek_client->name); 3316a30e47fSTrond Myklebust __assign_str(path, exp_path); 3326a30e47fSTrond Myklebust __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags); 3336a30e47fSTrond Myklebust ), 3346a30e47fSTrond Myklebust TP_printk("fsid=%x::%s domain=%s path=%s cache=%s", 3356a30e47fSTrond Myklebust __entry->fsidtype, 3366a30e47fSTrond Myklebust __print_array(__entry->fsid, 6, 4), 3376a30e47fSTrond Myklebust __get_str(auth_domain), 3386a30e47fSTrond Myklebust __get_str(path), 3396a30e47fSTrond Myklebust __entry->cache ? "pos" : "neg" 3406a30e47fSTrond Myklebust ) 3416a30e47fSTrond Myklebust ); 3426a30e47fSTrond Myklebust 343cf749f3cSTrond Myklebust TRACE_EVENT(nfsd_exp_get_by_name, 344cf749f3cSTrond Myklebust TP_PROTO(const struct svc_export *key, 345cf749f3cSTrond Myklebust int status), 346cf749f3cSTrond Myklebust TP_ARGS(key, status), 347cf749f3cSTrond Myklebust TP_STRUCT__entry( 348cf749f3cSTrond Myklebust __string(path, key->ex_path.dentry->d_name.name) 349cf749f3cSTrond Myklebust __string(auth_domain, key->ex_client->name) 350cf749f3cSTrond Myklebust __field(int, status) 351cf749f3cSTrond Myklebust ), 352cf749f3cSTrond Myklebust TP_fast_assign( 353cf749f3cSTrond Myklebust __assign_str(path, key->ex_path.dentry->d_name.name); 354cf749f3cSTrond Myklebust __assign_str(auth_domain, key->ex_client->name); 355cf749f3cSTrond Myklebust __entry->status = status; 356cf749f3cSTrond Myklebust ), 357cf749f3cSTrond Myklebust TP_printk("path=%s domain=%s status=%d", 358cf749f3cSTrond Myklebust __get_str(path), 359cf749f3cSTrond Myklebust __get_str(auth_domain), 360cf749f3cSTrond Myklebust __entry->status 361cf749f3cSTrond Myklebust ) 362cf749f3cSTrond Myklebust ); 363cf749f3cSTrond Myklebust 3646a30e47fSTrond Myklebust TRACE_EVENT(nfsd_export_update, 3656a30e47fSTrond Myklebust TP_PROTO(const struct svc_export *key), 3666a30e47fSTrond Myklebust TP_ARGS(key), 3676a30e47fSTrond Myklebust TP_STRUCT__entry( 3686a30e47fSTrond Myklebust __string(path, key->ex_path.dentry->d_name.name) 3696a30e47fSTrond Myklebust __string(auth_domain, key->ex_client->name) 3706a30e47fSTrond Myklebust __field(bool, cache) 3716a30e47fSTrond Myklebust ), 3726a30e47fSTrond Myklebust TP_fast_assign( 3736a30e47fSTrond Myklebust __assign_str(path, key->ex_path.dentry->d_name.name); 3746a30e47fSTrond Myklebust __assign_str(auth_domain, key->ex_client->name); 3756a30e47fSTrond Myklebust __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags); 3766a30e47fSTrond Myklebust ), 3776a30e47fSTrond Myklebust TP_printk("path=%s domain=%s cache=%s", 3786a30e47fSTrond Myklebust __get_str(path), 3796a30e47fSTrond Myklebust __get_str(auth_domain), 3806a30e47fSTrond Myklebust __entry->cache ? "pos" : "neg" 3816a30e47fSTrond Myklebust ) 3826a30e47fSTrond Myklebust ); 3836a30e47fSTrond Myklebust 3846e8b50d1SJeff Layton DECLARE_EVENT_CLASS(nfsd_io_class, 3856e8b50d1SJeff Layton TP_PROTO(struct svc_rqst *rqstp, 3866e8b50d1SJeff Layton struct svc_fh *fhp, 3876a4d333dSChuck Lever u64 offset, 3886a4d333dSChuck Lever u32 len), 3896e8b50d1SJeff Layton TP_ARGS(rqstp, fhp, offset, len), 3906e8b50d1SJeff Layton TP_STRUCT__entry( 391afa720a0SChuck Lever __field(u32, xid) 392afa720a0SChuck Lever __field(u32, fh_hash) 3936a4d333dSChuck Lever __field(u64, offset) 3946a4d333dSChuck Lever __field(u32, len) 3956e8b50d1SJeff Layton ), 3966e8b50d1SJeff Layton TP_fast_assign( 397afa720a0SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 39879e0b4e2SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 3996e8b50d1SJeff Layton __entry->offset = offset; 4006e8b50d1SJeff Layton __entry->len = len; 4016e8b50d1SJeff Layton ), 4026a4d333dSChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x offset=%llu len=%u", 403afa720a0SChuck Lever __entry->xid, __entry->fh_hash, 4046e8b50d1SJeff Layton __entry->offset, __entry->len) 4056e8b50d1SJeff Layton ) 4066e8b50d1SJeff Layton 4076e8b50d1SJeff Layton #define DEFINE_NFSD_IO_EVENT(name) \ 408f394b62bSChuck Lever DEFINE_EVENT(nfsd_io_class, nfsd_##name, \ 4096e8b50d1SJeff Layton TP_PROTO(struct svc_rqst *rqstp, \ 4106e8b50d1SJeff Layton struct svc_fh *fhp, \ 4116a4d333dSChuck Lever u64 offset, \ 4126a4d333dSChuck Lever u32 len), \ 4136e8b50d1SJeff Layton TP_ARGS(rqstp, fhp, offset, len)) 4146e8b50d1SJeff Layton 4156e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_start); 41687c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_splice); 41787c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_vector); 4186e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_io_done); 4196e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_done); 4206e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_start); 4216e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_opened); 4226e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_io_done); 4236e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_done); 42431ef83dcSChristoph Hellwig 425d890be15SChuck Lever DECLARE_EVENT_CLASS(nfsd_err_class, 426d890be15SChuck Lever TP_PROTO(struct svc_rqst *rqstp, 427d890be15SChuck Lever struct svc_fh *fhp, 428d890be15SChuck Lever loff_t offset, 429d890be15SChuck Lever int status), 430d890be15SChuck Lever TP_ARGS(rqstp, fhp, offset, status), 431d890be15SChuck Lever TP_STRUCT__entry( 432d890be15SChuck Lever __field(u32, xid) 433d890be15SChuck Lever __field(u32, fh_hash) 434d890be15SChuck Lever __field(loff_t, offset) 435d890be15SChuck Lever __field(int, status) 436d890be15SChuck Lever ), 437d890be15SChuck Lever TP_fast_assign( 438d890be15SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 439d890be15SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 440d890be15SChuck Lever __entry->offset = offset; 441d890be15SChuck Lever __entry->status = status; 442d890be15SChuck Lever ), 443d890be15SChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d", 444d890be15SChuck Lever __entry->xid, __entry->fh_hash, 445d890be15SChuck Lever __entry->offset, __entry->status) 446d890be15SChuck Lever ) 447d890be15SChuck Lever 448d890be15SChuck Lever #define DEFINE_NFSD_ERR_EVENT(name) \ 449d890be15SChuck Lever DEFINE_EVENT(nfsd_err_class, nfsd_##name, \ 450d890be15SChuck Lever TP_PROTO(struct svc_rqst *rqstp, \ 451d890be15SChuck Lever struct svc_fh *fhp, \ 452d890be15SChuck Lever loff_t offset, \ 453d890be15SChuck Lever int len), \ 454d890be15SChuck Lever TP_ARGS(rqstp, fhp, offset, len)) 455d890be15SChuck Lever 45687c5942eSChuck Lever DEFINE_NFSD_ERR_EVENT(read_err); 457d890be15SChuck Lever DEFINE_NFSD_ERR_EVENT(write_err); 458d890be15SChuck Lever 4596019ce07SChuck Lever TRACE_EVENT(nfsd_dirent, 4606019ce07SChuck Lever TP_PROTO(struct svc_fh *fhp, 4616019ce07SChuck Lever u64 ino, 4626019ce07SChuck Lever const char *name, 4636019ce07SChuck Lever int namlen), 4646019ce07SChuck Lever TP_ARGS(fhp, ino, name, namlen), 4656019ce07SChuck Lever TP_STRUCT__entry( 4666019ce07SChuck Lever __field(u32, fh_hash) 4676019ce07SChuck Lever __field(u64, ino) 468408c0de7SChuck Lever __string_len(name, name, namlen) 4696019ce07SChuck Lever ), 4706019ce07SChuck Lever TP_fast_assign( 4716019ce07SChuck Lever __entry->fh_hash = fhp ? knfsd_fh_hash(&fhp->fh_handle) : 0; 4726019ce07SChuck Lever __entry->ino = ino; 473408c0de7SChuck Lever __assign_str_len(name, name, namlen) 4746019ce07SChuck Lever ), 475408c0de7SChuck Lever TP_printk("fh_hash=0x%08x ino=%llu name=%s", 476408c0de7SChuck Lever __entry->fh_hash, __entry->ino, __get_str(name) 477408c0de7SChuck Lever ) 4786019ce07SChuck Lever ) 4796019ce07SChuck Lever 480a2f4c3faSTrond Myklebust DECLARE_EVENT_CLASS(nfsd_copy_err_class, 481a2f4c3faSTrond Myklebust TP_PROTO(struct svc_rqst *rqstp, 482a2f4c3faSTrond Myklebust struct svc_fh *src_fhp, 483a2f4c3faSTrond Myklebust loff_t src_offset, 484a2f4c3faSTrond Myklebust struct svc_fh *dst_fhp, 485a2f4c3faSTrond Myklebust loff_t dst_offset, 486a2f4c3faSTrond Myklebust u64 count, 487a2f4c3faSTrond Myklebust int status), 488a2f4c3faSTrond Myklebust TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, count, status), 489a2f4c3faSTrond Myklebust TP_STRUCT__entry( 490a2f4c3faSTrond Myklebust __field(u32, xid) 491a2f4c3faSTrond Myklebust __field(u32, src_fh_hash) 492a2f4c3faSTrond Myklebust __field(loff_t, src_offset) 493a2f4c3faSTrond Myklebust __field(u32, dst_fh_hash) 494a2f4c3faSTrond Myklebust __field(loff_t, dst_offset) 495a2f4c3faSTrond Myklebust __field(u64, count) 496a2f4c3faSTrond Myklebust __field(int, status) 497a2f4c3faSTrond Myklebust ), 498a2f4c3faSTrond Myklebust TP_fast_assign( 499a2f4c3faSTrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 500a2f4c3faSTrond Myklebust __entry->src_fh_hash = knfsd_fh_hash(&src_fhp->fh_handle); 501a2f4c3faSTrond Myklebust __entry->src_offset = src_offset; 502a2f4c3faSTrond Myklebust __entry->dst_fh_hash = knfsd_fh_hash(&dst_fhp->fh_handle); 503a2f4c3faSTrond Myklebust __entry->dst_offset = dst_offset; 504a2f4c3faSTrond Myklebust __entry->count = count; 505a2f4c3faSTrond Myklebust __entry->status = status; 506a2f4c3faSTrond Myklebust ), 507a2f4c3faSTrond Myklebust TP_printk("xid=0x%08x src_fh_hash=0x%08x src_offset=%lld " 508a2f4c3faSTrond Myklebust "dst_fh_hash=0x%08x dst_offset=%lld " 509a2f4c3faSTrond Myklebust "count=%llu status=%d", 510a2f4c3faSTrond Myklebust __entry->xid, __entry->src_fh_hash, __entry->src_offset, 511a2f4c3faSTrond Myklebust __entry->dst_fh_hash, __entry->dst_offset, 512a2f4c3faSTrond Myklebust (unsigned long long)__entry->count, 513a2f4c3faSTrond Myklebust __entry->status) 514a2f4c3faSTrond Myklebust ) 515a2f4c3faSTrond Myklebust 516a2f4c3faSTrond Myklebust #define DEFINE_NFSD_COPY_ERR_EVENT(name) \ 517a2f4c3faSTrond Myklebust DEFINE_EVENT(nfsd_copy_err_class, nfsd_##name, \ 518a2f4c3faSTrond Myklebust TP_PROTO(struct svc_rqst *rqstp, \ 519a2f4c3faSTrond Myklebust struct svc_fh *src_fhp, \ 520a2f4c3faSTrond Myklebust loff_t src_offset, \ 521a2f4c3faSTrond Myklebust struct svc_fh *dst_fhp, \ 522a2f4c3faSTrond Myklebust loff_t dst_offset, \ 523a2f4c3faSTrond Myklebust u64 count, \ 524a2f4c3faSTrond Myklebust int status), \ 525a2f4c3faSTrond Myklebust TP_ARGS(rqstp, src_fhp, src_offset, dst_fhp, dst_offset, \ 526a2f4c3faSTrond Myklebust count, status)) 527a2f4c3faSTrond Myklebust 528a2f4c3faSTrond Myklebust DEFINE_NFSD_COPY_ERR_EVENT(clone_file_range_err); 529a2f4c3faSTrond Myklebust 530825213e5SJeff Layton #include "state.h" 53165294c1fSJeff Layton #include "filecache.h" 53265294c1fSJeff Layton #include "vfs.h" 533825213e5SJeff Layton 53431ef83dcSChristoph Hellwig DECLARE_EVENT_CLASS(nfsd_stateid_class, 53531ef83dcSChristoph Hellwig TP_PROTO(stateid_t *stp), 53631ef83dcSChristoph Hellwig TP_ARGS(stp), 53731ef83dcSChristoph Hellwig TP_STRUCT__entry( 53831ef83dcSChristoph Hellwig __field(u32, cl_boot) 53931ef83dcSChristoph Hellwig __field(u32, cl_id) 54031ef83dcSChristoph Hellwig __field(u32, si_id) 54131ef83dcSChristoph Hellwig __field(u32, si_generation) 54231ef83dcSChristoph Hellwig ), 54331ef83dcSChristoph Hellwig TP_fast_assign( 54431ef83dcSChristoph Hellwig __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 54531ef83dcSChristoph Hellwig __entry->cl_id = stp->si_opaque.so_clid.cl_id; 54631ef83dcSChristoph Hellwig __entry->si_id = stp->si_opaque.so_id; 54731ef83dcSChristoph Hellwig __entry->si_generation = stp->si_generation; 54831ef83dcSChristoph Hellwig ), 54931ef83dcSChristoph Hellwig TP_printk("client %08x:%08x stateid %08x:%08x", 55031ef83dcSChristoph Hellwig __entry->cl_boot, 55131ef83dcSChristoph Hellwig __entry->cl_id, 55231ef83dcSChristoph Hellwig __entry->si_id, 55331ef83dcSChristoph Hellwig __entry->si_generation) 55431ef83dcSChristoph Hellwig ) 55531ef83dcSChristoph Hellwig 55631ef83dcSChristoph Hellwig #define DEFINE_STATEID_EVENT(name) \ 557f394b62bSChuck Lever DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \ 55831ef83dcSChristoph Hellwig TP_PROTO(stateid_t *stp), \ 55931ef83dcSChristoph Hellwig TP_ARGS(stp)) 560dd5e3fbcSChuck Lever 56131ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_alloc); 56231ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_unhash); 56331ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_free); 56431ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_get_lookup_fail); 56531ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_commit_lookup_fail); 56631ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_return_lookup_fail); 56731ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall); 56831ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_done); 56931ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_fail); 57031ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_release); 57131ef83dcSChristoph Hellwig 5723caf9175SHou Tao DEFINE_STATEID_EVENT(open); 5733caf9175SHou Tao DEFINE_STATEID_EVENT(deleg_read); 574dd5e3fbcSChuck Lever DEFINE_STATEID_EVENT(deleg_recall); 575dd5e3fbcSChuck Lever 576dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_stateseqid_class, 577dd5e3fbcSChuck Lever TP_PROTO(u32 seqid, const stateid_t *stp), 578dd5e3fbcSChuck Lever TP_ARGS(seqid, stp), 579dd5e3fbcSChuck Lever TP_STRUCT__entry( 580dd5e3fbcSChuck Lever __field(u32, seqid) 581dd5e3fbcSChuck Lever __field(u32, cl_boot) 582dd5e3fbcSChuck Lever __field(u32, cl_id) 583dd5e3fbcSChuck Lever __field(u32, si_id) 584dd5e3fbcSChuck Lever __field(u32, si_generation) 585dd5e3fbcSChuck Lever ), 586dd5e3fbcSChuck Lever TP_fast_assign( 587dd5e3fbcSChuck Lever __entry->seqid = seqid; 588dd5e3fbcSChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 589dd5e3fbcSChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 590dd5e3fbcSChuck Lever __entry->si_id = stp->si_opaque.so_id; 591dd5e3fbcSChuck Lever __entry->si_generation = stp->si_generation; 592dd5e3fbcSChuck Lever ), 593dd5e3fbcSChuck Lever TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x", 594dd5e3fbcSChuck Lever __entry->seqid, __entry->cl_boot, __entry->cl_id, 595dd5e3fbcSChuck Lever __entry->si_id, __entry->si_generation) 596dd5e3fbcSChuck Lever ) 597dd5e3fbcSChuck Lever 598dd5e3fbcSChuck Lever #define DEFINE_STATESEQID_EVENT(name) \ 599dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \ 600dd5e3fbcSChuck Lever TP_PROTO(u32 seqid, const stateid_t *stp), \ 601dd5e3fbcSChuck Lever TP_ARGS(seqid, stp)) 602dd5e3fbcSChuck Lever 603dd5e3fbcSChuck Lever DEFINE_STATESEQID_EVENT(preprocess); 604dd5e3fbcSChuck Lever DEFINE_STATESEQID_EVENT(open_confirm); 605dd5e3fbcSChuck Lever 606dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_clientid_class, 607dd5e3fbcSChuck Lever TP_PROTO(const clientid_t *clid), 608dd5e3fbcSChuck Lever TP_ARGS(clid), 609dd5e3fbcSChuck Lever TP_STRUCT__entry( 610dd5e3fbcSChuck Lever __field(u32, cl_boot) 611dd5e3fbcSChuck Lever __field(u32, cl_id) 612dd5e3fbcSChuck Lever ), 613dd5e3fbcSChuck Lever TP_fast_assign( 614dd5e3fbcSChuck Lever __entry->cl_boot = clid->cl_boot; 615dd5e3fbcSChuck Lever __entry->cl_id = clid->cl_id; 616dd5e3fbcSChuck Lever ), 617dd5e3fbcSChuck Lever TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 618dd5e3fbcSChuck Lever ) 619dd5e3fbcSChuck Lever 620dd5e3fbcSChuck Lever #define DEFINE_CLIENTID_EVENT(name) \ 621dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \ 622dd5e3fbcSChuck Lever TP_PROTO(const clientid_t *clid), \ 623dd5e3fbcSChuck Lever TP_ARGS(clid)) 624dd5e3fbcSChuck Lever 625237f91c8SChuck Lever DEFINE_CLIENTID_EVENT(expire_unconf); 626cee8aa07SChuck Lever DEFINE_CLIENTID_EVENT(reclaim_complete); 6277e3b32acSChuck Lever DEFINE_CLIENTID_EVENT(confirmed); 628c41a9b7aSChuck Lever DEFINE_CLIENTID_EVENT(destroyed); 6292958d2eeSChuck Lever DEFINE_CLIENTID_EVENT(admin_expired); 6302958d2eeSChuck Lever DEFINE_CLIENTID_EVENT(replaced); 631dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(purged); 632dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(renew); 633dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(stale); 634dd5e3fbcSChuck Lever 635dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_net_class, 636dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn), 637dd5e3fbcSChuck Lever TP_ARGS(nn), 638dd5e3fbcSChuck Lever TP_STRUCT__entry( 639dd5e3fbcSChuck Lever __field(unsigned long long, boot_time) 640dd5e3fbcSChuck Lever ), 641dd5e3fbcSChuck Lever TP_fast_assign( 642dd5e3fbcSChuck Lever __entry->boot_time = nn->boot_time; 643dd5e3fbcSChuck Lever ), 644dd5e3fbcSChuck Lever TP_printk("boot_time=%16llx", __entry->boot_time) 645dd5e3fbcSChuck Lever ) 646dd5e3fbcSChuck Lever 647dd5e3fbcSChuck Lever #define DEFINE_NET_EVENT(name) \ 648dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_net_class, nfsd_##name, \ 649dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn), \ 650dd5e3fbcSChuck Lever TP_ARGS(nn)) 651dd5e3fbcSChuck Lever 652dd5e3fbcSChuck Lever DEFINE_NET_EVENT(grace_start); 653dd5e3fbcSChuck Lever DEFINE_NET_EVENT(grace_complete); 654dd5e3fbcSChuck Lever 65575acacb6SChuck Lever TRACE_EVENT(nfsd_writeverf_reset, 65675acacb6SChuck Lever TP_PROTO( 65775acacb6SChuck Lever const struct nfsd_net *nn, 65875acacb6SChuck Lever const struct svc_rqst *rqstp, 65975acacb6SChuck Lever int error 66075acacb6SChuck Lever ), 66175acacb6SChuck Lever TP_ARGS(nn, rqstp, error), 66275acacb6SChuck Lever TP_STRUCT__entry( 66375acacb6SChuck Lever __field(unsigned long long, boot_time) 66475acacb6SChuck Lever __field(u32, xid) 66575acacb6SChuck Lever __field(int, error) 66675acacb6SChuck Lever __array(unsigned char, verifier, NFS4_VERIFIER_SIZE) 66775acacb6SChuck Lever ), 66875acacb6SChuck Lever TP_fast_assign( 66975acacb6SChuck Lever __entry->boot_time = nn->boot_time; 67075acacb6SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 67175acacb6SChuck Lever __entry->error = error; 67275acacb6SChuck Lever 67375acacb6SChuck Lever /* avoid seqlock inside TP_fast_assign */ 67475acacb6SChuck Lever memcpy(__entry->verifier, nn->writeverf, 67575acacb6SChuck Lever NFS4_VERIFIER_SIZE); 67675acacb6SChuck Lever ), 67775acacb6SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x error=%d new verifier=0x%s", 67875acacb6SChuck Lever __entry->boot_time, __entry->xid, __entry->error, 67975acacb6SChuck Lever __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 68075acacb6SChuck Lever ) 68175acacb6SChuck Lever ); 68275acacb6SChuck Lever 68327787733SChuck Lever TRACE_EVENT(nfsd_clid_cred_mismatch, 68427787733SChuck Lever TP_PROTO( 68527787733SChuck Lever const struct nfs4_client *clp, 68627787733SChuck Lever const struct svc_rqst *rqstp 68727787733SChuck Lever ), 68827787733SChuck Lever TP_ARGS(clp, rqstp), 68927787733SChuck Lever TP_STRUCT__entry( 69027787733SChuck Lever __field(u32, cl_boot) 69127787733SChuck Lever __field(u32, cl_id) 69227787733SChuck Lever __field(unsigned long, cl_flavor) 69327787733SChuck Lever __field(unsigned long, new_flavor) 6949db0e15fSChuck Lever __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen) 69527787733SChuck Lever ), 69627787733SChuck Lever TP_fast_assign( 69727787733SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 69827787733SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 69927787733SChuck Lever __entry->cl_flavor = clp->cl_cred.cr_flavor; 70027787733SChuck Lever __entry->new_flavor = rqstp->rq_cred.cr_flavor; 7019db0e15fSChuck Lever __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote, 7029db0e15fSChuck Lever rqstp->rq_xprt->xpt_remotelen); 70327787733SChuck Lever ), 70427787733SChuck Lever TP_printk("client %08x:%08x flavor=%s, conflict=%s from addr=%pISpc", 70527787733SChuck Lever __entry->cl_boot, __entry->cl_id, 70627787733SChuck Lever show_nfsd_authflavor(__entry->cl_flavor), 7079db0e15fSChuck Lever show_nfsd_authflavor(__entry->new_flavor), 7089db0e15fSChuck Lever __get_sockaddr(addr) 70927787733SChuck Lever ) 71027787733SChuck Lever ) 71127787733SChuck Lever 712744ea54cSChuck Lever TRACE_EVENT(nfsd_clid_verf_mismatch, 713744ea54cSChuck Lever TP_PROTO( 714744ea54cSChuck Lever const struct nfs4_client *clp, 715744ea54cSChuck Lever const struct svc_rqst *rqstp, 716744ea54cSChuck Lever const nfs4_verifier *verf 717744ea54cSChuck Lever ), 718744ea54cSChuck Lever TP_ARGS(clp, rqstp, verf), 719744ea54cSChuck Lever TP_STRUCT__entry( 720744ea54cSChuck Lever __field(u32, cl_boot) 721744ea54cSChuck Lever __field(u32, cl_id) 722744ea54cSChuck Lever __array(unsigned char, cl_verifier, NFS4_VERIFIER_SIZE) 723744ea54cSChuck Lever __array(unsigned char, new_verifier, NFS4_VERIFIER_SIZE) 7249db0e15fSChuck Lever __sockaddr(addr, rqstp->rq_xprt->xpt_remotelen) 725744ea54cSChuck Lever ), 726744ea54cSChuck Lever TP_fast_assign( 727744ea54cSChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 728744ea54cSChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 729744ea54cSChuck Lever memcpy(__entry->cl_verifier, (void *)&clp->cl_verifier, 730744ea54cSChuck Lever NFS4_VERIFIER_SIZE); 731744ea54cSChuck Lever memcpy(__entry->new_verifier, (void *)verf, 732744ea54cSChuck Lever NFS4_VERIFIER_SIZE); 7339db0e15fSChuck Lever __assign_sockaddr(addr, &rqstp->rq_xprt->xpt_remote, 7349db0e15fSChuck Lever rqstp->rq_xprt->xpt_remotelen); 735744ea54cSChuck Lever ), 736744ea54cSChuck Lever TP_printk("client %08x:%08x verf=0x%s, updated=0x%s from addr=%pISpc", 737744ea54cSChuck Lever __entry->cl_boot, __entry->cl_id, 738744ea54cSChuck Lever __print_hex_str(__entry->cl_verifier, NFS4_VERIFIER_SIZE), 739744ea54cSChuck Lever __print_hex_str(__entry->new_verifier, NFS4_VERIFIER_SIZE), 7409db0e15fSChuck Lever __get_sockaddr(addr) 741744ea54cSChuck Lever ) 742744ea54cSChuck Lever ); 743744ea54cSChuck Lever 744237f91c8SChuck Lever DECLARE_EVENT_CLASS(nfsd_clid_class, 745237f91c8SChuck Lever TP_PROTO(const struct nfs4_client *clp), 746237f91c8SChuck Lever TP_ARGS(clp), 747237f91c8SChuck Lever TP_STRUCT__entry( 748237f91c8SChuck Lever __field(u32, cl_boot) 749237f91c8SChuck Lever __field(u32, cl_id) 750237f91c8SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 751237f91c8SChuck Lever __field(unsigned long, flavor) 752237f91c8SChuck Lever __array(unsigned char, verifier, NFS4_VERIFIER_SIZE) 753d27b74a8SChuck Lever __string_len(name, name, clp->cl_name.len) 754237f91c8SChuck Lever ), 755237f91c8SChuck Lever TP_fast_assign( 756237f91c8SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 757237f91c8SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 758237f91c8SChuck Lever memcpy(__entry->addr, &clp->cl_addr, 759237f91c8SChuck Lever sizeof(struct sockaddr_in6)); 760237f91c8SChuck Lever __entry->flavor = clp->cl_cred.cr_flavor; 761237f91c8SChuck Lever memcpy(__entry->verifier, (void *)&clp->cl_verifier, 762237f91c8SChuck Lever NFS4_VERIFIER_SIZE); 763d27b74a8SChuck Lever __assign_str_len(name, clp->cl_name.data, clp->cl_name.len); 764237f91c8SChuck Lever ), 765237f91c8SChuck Lever TP_printk("addr=%pISpc name='%s' verifier=0x%s flavor=%s client=%08x:%08x", 766237f91c8SChuck Lever __entry->addr, __get_str(name), 767237f91c8SChuck Lever __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE), 768237f91c8SChuck Lever show_nfsd_authflavor(__entry->flavor), 769237f91c8SChuck Lever __entry->cl_boot, __entry->cl_id) 770237f91c8SChuck Lever ); 771237f91c8SChuck Lever 772237f91c8SChuck Lever #define DEFINE_CLID_EVENT(name) \ 773237f91c8SChuck Lever DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \ 774237f91c8SChuck Lever TP_PROTO(const struct nfs4_client *clp), \ 775237f91c8SChuck Lever TP_ARGS(clp)) 776237f91c8SChuck Lever 777237f91c8SChuck Lever DEFINE_CLID_EVENT(fresh); 778e8f80c55SChuck Lever DEFINE_CLID_EVENT(confirmed_r); 779237f91c8SChuck Lever 780b76278aeSChuck Lever /* 781b76278aeSChuck Lever * from fs/nfsd/filecache.h 782b76278aeSChuck Lever */ 78365294c1fSJeff Layton #define show_nf_flags(val) \ 78465294c1fSJeff Layton __print_flags(val, "|", \ 78565294c1fSJeff Layton { 1 << NFSD_FILE_HASHED, "HASHED" }, \ 78665294c1fSJeff Layton { 1 << NFSD_FILE_PENDING, "PENDING" }, \ 78765294c1fSJeff Layton { 1 << NFSD_FILE_REFERENCED, "REFERENCED"}) 78865294c1fSJeff Layton 78965294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_class, 79065294c1fSJeff Layton TP_PROTO(struct nfsd_file *nf), 79165294c1fSJeff Layton TP_ARGS(nf), 79265294c1fSJeff Layton TP_STRUCT__entry( 79365294c1fSJeff Layton __field(void *, nf_inode) 79465294c1fSJeff Layton __field(int, nf_ref) 79565294c1fSJeff Layton __field(unsigned long, nf_flags) 79665294c1fSJeff Layton __field(unsigned char, nf_may) 79765294c1fSJeff Layton __field(struct file *, nf_file) 79865294c1fSJeff Layton ), 79965294c1fSJeff Layton TP_fast_assign( 80065294c1fSJeff Layton __entry->nf_inode = nf->nf_inode; 801689827cdSTrond Myklebust __entry->nf_ref = refcount_read(&nf->nf_ref); 80265294c1fSJeff Layton __entry->nf_flags = nf->nf_flags; 80365294c1fSJeff Layton __entry->nf_may = nf->nf_may; 80465294c1fSJeff Layton __entry->nf_file = nf->nf_file; 80565294c1fSJeff Layton ), 80654f7df70SChuck Lever TP_printk("inode=%p ref=%d flags=%s may=%s nf_file=%p", 80765294c1fSJeff Layton __entry->nf_inode, 80865294c1fSJeff Layton __entry->nf_ref, 80965294c1fSJeff Layton show_nf_flags(__entry->nf_flags), 810b76278aeSChuck Lever show_nfsd_may_flags(__entry->nf_may), 81165294c1fSJeff Layton __entry->nf_file) 81265294c1fSJeff Layton ) 81365294c1fSJeff Layton 81465294c1fSJeff Layton #define DEFINE_NFSD_FILE_EVENT(name) \ 81565294c1fSJeff Layton DEFINE_EVENT(nfsd_file_class, name, \ 81665294c1fSJeff Layton TP_PROTO(struct nfsd_file *nf), \ 81765294c1fSJeff Layton TP_ARGS(nf)) 81865294c1fSJeff Layton 81965294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put_final); 82065294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash); 82165294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put); 822ce502f81SChuck Lever DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_dispose); 82365294c1fSJeff Layton 824b40a2839SChuck Lever TRACE_EVENT(nfsd_file_alloc, 825b40a2839SChuck Lever TP_PROTO( 826b40a2839SChuck Lever const struct nfsd_file *nf 827b40a2839SChuck Lever ), 828b40a2839SChuck Lever TP_ARGS(nf), 829b40a2839SChuck Lever TP_STRUCT__entry( 830b40a2839SChuck Lever __field(const void *, nf_inode) 831b40a2839SChuck Lever __field(unsigned long, nf_flags) 832b40a2839SChuck Lever __field(unsigned long, nf_may) 833b40a2839SChuck Lever __field(unsigned int, nf_ref) 834b40a2839SChuck Lever ), 835b40a2839SChuck Lever TP_fast_assign( 836b40a2839SChuck Lever __entry->nf_inode = nf->nf_inode; 837b40a2839SChuck Lever __entry->nf_flags = nf->nf_flags; 838b40a2839SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 839b40a2839SChuck Lever __entry->nf_may = nf->nf_may; 840b40a2839SChuck Lever ), 841b40a2839SChuck Lever TP_printk("inode=%p ref=%u flags=%s may=%s", 842b40a2839SChuck Lever __entry->nf_inode, __entry->nf_ref, 843b40a2839SChuck Lever show_nf_flags(__entry->nf_flags), 844b40a2839SChuck Lever show_nfsd_may_flags(__entry->nf_may) 845b40a2839SChuck Lever ) 846b40a2839SChuck Lever ); 847b40a2839SChuck Lever 84865294c1fSJeff Layton TRACE_EVENT(nfsd_file_acquire, 84954f7df70SChuck Lever TP_PROTO( 850be023006SChuck Lever const struct svc_rqst *rqstp, 851be023006SChuck Lever const struct inode *inode, 85254f7df70SChuck Lever unsigned int may_flags, 853be023006SChuck Lever const struct nfsd_file *nf, 85454f7df70SChuck Lever __be32 status 85554f7df70SChuck Lever ), 85665294c1fSJeff Layton 85754f7df70SChuck Lever TP_ARGS(rqstp, inode, may_flags, nf, status), 85865294c1fSJeff Layton 85965294c1fSJeff Layton TP_STRUCT__entry( 860a9ceb060STrond Myklebust __field(u32, xid) 861be023006SChuck Lever __field(const void *, inode) 862b76278aeSChuck Lever __field(unsigned long, may_flags) 863be023006SChuck Lever __field(unsigned int, nf_ref) 86465294c1fSJeff Layton __field(unsigned long, nf_flags) 865b76278aeSChuck Lever __field(unsigned long, nf_may) 866be023006SChuck Lever __field(const void *, nf_file) 867a9ceb060STrond Myklebust __field(u32, status) 86865294c1fSJeff Layton ), 86965294c1fSJeff Layton 87065294c1fSJeff Layton TP_fast_assign( 871a9ceb060STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 87265294c1fSJeff Layton __entry->inode = inode; 87365294c1fSJeff Layton __entry->may_flags = may_flags; 874689827cdSTrond Myklebust __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0; 87565294c1fSJeff Layton __entry->nf_flags = nf ? nf->nf_flags : 0; 87665294c1fSJeff Layton __entry->nf_may = nf ? nf->nf_may : 0; 87765294c1fSJeff Layton __entry->nf_file = nf ? nf->nf_file : NULL; 878a9ceb060STrond Myklebust __entry->status = be32_to_cpu(status); 87965294c1fSJeff Layton ), 88065294c1fSJeff Layton 881be023006SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p status=%u", 88254f7df70SChuck Lever __entry->xid, __entry->inode, 883b76278aeSChuck Lever show_nfsd_may_flags(__entry->may_flags), 884b76278aeSChuck Lever __entry->nf_ref, show_nf_flags(__entry->nf_flags), 885b76278aeSChuck Lever show_nfsd_may_flags(__entry->nf_may), 886be023006SChuck Lever __entry->nf_file, __entry->status 887be023006SChuck Lever ) 888be023006SChuck Lever ); 889be023006SChuck Lever 890be023006SChuck Lever TRACE_EVENT(nfsd_file_create, 891be023006SChuck Lever TP_PROTO( 892be023006SChuck Lever const struct svc_rqst *rqstp, 893be023006SChuck Lever unsigned int may_flags, 894be023006SChuck Lever const struct nfsd_file *nf 895be023006SChuck Lever ), 896be023006SChuck Lever 897be023006SChuck Lever TP_ARGS(rqstp, may_flags, nf), 898be023006SChuck Lever 899be023006SChuck Lever TP_STRUCT__entry( 900be023006SChuck Lever __field(const void *, nf_inode) 901be023006SChuck Lever __field(const void *, nf_file) 902be023006SChuck Lever __field(unsigned long, may_flags) 903be023006SChuck Lever __field(unsigned long, nf_flags) 904be023006SChuck Lever __field(unsigned long, nf_may) 905be023006SChuck Lever __field(unsigned int, nf_ref) 906be023006SChuck Lever __field(u32, xid) 907be023006SChuck Lever ), 908be023006SChuck Lever 909be023006SChuck Lever TP_fast_assign( 910be023006SChuck Lever __entry->nf_inode = nf->nf_inode; 911be023006SChuck Lever __entry->nf_file = nf->nf_file; 912be023006SChuck Lever __entry->may_flags = may_flags; 913be023006SChuck Lever __entry->nf_flags = nf->nf_flags; 914be023006SChuck Lever __entry->nf_may = nf->nf_may; 915be023006SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 916be023006SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 917be023006SChuck Lever ), 918be023006SChuck Lever 919be023006SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p", 920be023006SChuck Lever __entry->xid, __entry->nf_inode, 921be023006SChuck Lever show_nfsd_may_flags(__entry->may_flags), 922be023006SChuck Lever __entry->nf_ref, show_nf_flags(__entry->nf_flags), 923be023006SChuck Lever show_nfsd_may_flags(__entry->nf_may), __entry->nf_file 924be023006SChuck Lever ) 92565294c1fSJeff Layton ); 92665294c1fSJeff Layton 927ce502f81SChuck Lever TRACE_EVENT(nfsd_file_insert_err, 928ce502f81SChuck Lever TP_PROTO( 929ce502f81SChuck Lever const struct svc_rqst *rqstp, 930ce502f81SChuck Lever const struct inode *inode, 931ce502f81SChuck Lever unsigned int may_flags, 932ce502f81SChuck Lever long error 933ce502f81SChuck Lever ), 934ce502f81SChuck Lever TP_ARGS(rqstp, inode, may_flags, error), 935ce502f81SChuck Lever TP_STRUCT__entry( 936ce502f81SChuck Lever __field(u32, xid) 937ce502f81SChuck Lever __field(const void *, inode) 938ce502f81SChuck Lever __field(unsigned long, may_flags) 939ce502f81SChuck Lever __field(long, error) 940ce502f81SChuck Lever ), 941ce502f81SChuck Lever TP_fast_assign( 942ce502f81SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 943ce502f81SChuck Lever __entry->inode = inode; 944ce502f81SChuck Lever __entry->may_flags = may_flags; 945ce502f81SChuck Lever __entry->error = error; 946ce502f81SChuck Lever ), 947ce502f81SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s error=%ld", 948ce502f81SChuck Lever __entry->xid, __entry->inode, 949ce502f81SChuck Lever show_nfsd_may_flags(__entry->may_flags), 950ce502f81SChuck Lever __entry->error 951ce502f81SChuck Lever ) 952ce502f81SChuck Lever ); 953ce502f81SChuck Lever 954ce502f81SChuck Lever TRACE_EVENT(nfsd_file_cons_err, 955ce502f81SChuck Lever TP_PROTO( 956ce502f81SChuck Lever const struct svc_rqst *rqstp, 957ce502f81SChuck Lever const struct inode *inode, 958ce502f81SChuck Lever unsigned int may_flags, 959ce502f81SChuck Lever const struct nfsd_file *nf 960ce502f81SChuck Lever ), 961ce502f81SChuck Lever TP_ARGS(rqstp, inode, may_flags, nf), 962ce502f81SChuck Lever TP_STRUCT__entry( 963ce502f81SChuck Lever __field(u32, xid) 964ce502f81SChuck Lever __field(const void *, inode) 965ce502f81SChuck Lever __field(unsigned long, may_flags) 966ce502f81SChuck Lever __field(unsigned int, nf_ref) 967ce502f81SChuck Lever __field(unsigned long, nf_flags) 968ce502f81SChuck Lever __field(unsigned long, nf_may) 969ce502f81SChuck Lever __field(const void *, nf_file) 970ce502f81SChuck Lever ), 971ce502f81SChuck Lever TP_fast_assign( 972ce502f81SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 973ce502f81SChuck Lever __entry->inode = inode; 974ce502f81SChuck Lever __entry->may_flags = may_flags; 975ce502f81SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 976ce502f81SChuck Lever __entry->nf_flags = nf->nf_flags; 977ce502f81SChuck Lever __entry->nf_may = nf->nf_may; 978ce502f81SChuck Lever __entry->nf_file = nf->nf_file; 979ce502f81SChuck Lever ), 980ce502f81SChuck Lever TP_printk("xid=0x%x inode=%p may_flags=%s ref=%u nf_flags=%s nf_may=%s nf_file=%p", 981ce502f81SChuck Lever __entry->xid, __entry->inode, 982ce502f81SChuck Lever show_nfsd_may_flags(__entry->may_flags), __entry->nf_ref, 983ce502f81SChuck Lever show_nf_flags(__entry->nf_flags), 984ce502f81SChuck Lever show_nfsd_may_flags(__entry->nf_may), __entry->nf_file 985ce502f81SChuck Lever ) 986ce502f81SChuck Lever ); 987ce502f81SChuck Lever 9880122e882SChuck Lever TRACE_EVENT(nfsd_file_open, 9890122e882SChuck Lever TP_PROTO(struct nfsd_file *nf, __be32 status), 9900122e882SChuck Lever TP_ARGS(nf, status), 9910122e882SChuck Lever TP_STRUCT__entry( 9920122e882SChuck Lever __field(void *, nf_inode) /* cannot be dereferenced */ 9930122e882SChuck Lever __field(int, nf_ref) 9940122e882SChuck Lever __field(unsigned long, nf_flags) 9950122e882SChuck Lever __field(unsigned long, nf_may) 9960122e882SChuck Lever __field(void *, nf_file) /* cannot be dereferenced */ 9970122e882SChuck Lever ), 9980122e882SChuck Lever TP_fast_assign( 9990122e882SChuck Lever __entry->nf_inode = nf->nf_inode; 10000122e882SChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 10010122e882SChuck Lever __entry->nf_flags = nf->nf_flags; 10020122e882SChuck Lever __entry->nf_may = nf->nf_may; 10030122e882SChuck Lever __entry->nf_file = nf->nf_file; 10040122e882SChuck Lever ), 100554f7df70SChuck Lever TP_printk("inode=%p ref=%d flags=%s may=%s file=%p", 10060122e882SChuck Lever __entry->nf_inode, 10070122e882SChuck Lever __entry->nf_ref, 10080122e882SChuck Lever show_nf_flags(__entry->nf_flags), 10090122e882SChuck Lever show_nfsd_may_flags(__entry->nf_may), 10100122e882SChuck Lever __entry->nf_file) 10110122e882SChuck Lever ) 10120122e882SChuck Lever 101365294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_search_class, 101454f7df70SChuck Lever TP_PROTO( 1015a8455110SChuck Lever const struct inode *inode, 1016a8455110SChuck Lever unsigned int count 1017a8455110SChuck Lever ), 1018a8455110SChuck Lever TP_ARGS(inode, count), 1019a8455110SChuck Lever TP_STRUCT__entry( 1020a8455110SChuck Lever __field(const struct inode *, inode) 1021a8455110SChuck Lever __field(unsigned int, count) 1022a8455110SChuck Lever ), 1023a8455110SChuck Lever TP_fast_assign( 1024a8455110SChuck Lever __entry->inode = inode; 1025a8455110SChuck Lever __entry->count = count; 1026a8455110SChuck Lever ), 1027a8455110SChuck Lever TP_printk("inode=%p count=%u", 1028a8455110SChuck Lever __entry->inode, __entry->count) 1029a8455110SChuck Lever ); 1030a8455110SChuck Lever 1031a8455110SChuck Lever #define DEFINE_NFSD_FILE_SEARCH_EVENT(name) \ 1032a8455110SChuck Lever DEFINE_EVENT(nfsd_file_search_class, name, \ 1033a8455110SChuck Lever TP_PROTO( \ 1034a8455110SChuck Lever const struct inode *inode, \ 1035a8455110SChuck Lever unsigned int count \ 1036a8455110SChuck Lever ), \ 1037a8455110SChuck Lever TP_ARGS(inode, count)) 1038a8455110SChuck Lever 1039a8455110SChuck Lever DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode_sync); 1040a8455110SChuck Lever DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode); 1041a8455110SChuck Lever 1042a8455110SChuck Lever TRACE_EVENT(nfsd_file_is_cached, 1043a8455110SChuck Lever TP_PROTO( 1044a8455110SChuck Lever const struct inode *inode, 104554f7df70SChuck Lever int found 104654f7df70SChuck Lever ), 104754f7df70SChuck Lever TP_ARGS(inode, found), 104865294c1fSJeff Layton TP_STRUCT__entry( 1049a8455110SChuck Lever __field(const struct inode *, inode) 105065294c1fSJeff Layton __field(int, found) 105165294c1fSJeff Layton ), 105265294c1fSJeff Layton TP_fast_assign( 105365294c1fSJeff Layton __entry->inode = inode; 105465294c1fSJeff Layton __entry->found = found; 105565294c1fSJeff Layton ), 1056a8455110SChuck Lever TP_printk("inode=%p is %scached", 1057a8455110SChuck Lever __entry->inode, 1058a8455110SChuck Lever __entry->found ? "" : "not " 1059a8455110SChuck Lever ) 106065294c1fSJeff Layton ); 106165294c1fSJeff Layton 106265294c1fSJeff Layton TRACE_EVENT(nfsd_file_fsnotify_handle_event, 106365294c1fSJeff Layton TP_PROTO(struct inode *inode, u32 mask), 106465294c1fSJeff Layton TP_ARGS(inode, mask), 106565294c1fSJeff Layton TP_STRUCT__entry( 106665294c1fSJeff Layton __field(struct inode *, inode) 106765294c1fSJeff Layton __field(unsigned int, nlink) 106865294c1fSJeff Layton __field(umode_t, mode) 106965294c1fSJeff Layton __field(u32, mask) 107065294c1fSJeff Layton ), 107165294c1fSJeff Layton TP_fast_assign( 107265294c1fSJeff Layton __entry->inode = inode; 107365294c1fSJeff Layton __entry->nlink = inode->i_nlink; 107465294c1fSJeff Layton __entry->mode = inode->i_mode; 107565294c1fSJeff Layton __entry->mask = mask; 107665294c1fSJeff Layton ), 10773a90e1dfSChuck Lever TP_printk("inode=%p nlink=%u mode=0%ho mask=0x%x", __entry->inode, 107865294c1fSJeff Layton __entry->nlink, __entry->mode, __entry->mask) 107965294c1fSJeff Layton ); 108065294c1fSJeff Layton 1081c46203acSChuck Lever DECLARE_EVENT_CLASS(nfsd_file_gc_class, 1082c46203acSChuck Lever TP_PROTO( 1083c46203acSChuck Lever const struct nfsd_file *nf 1084c46203acSChuck Lever ), 1085c46203acSChuck Lever TP_ARGS(nf), 1086c46203acSChuck Lever TP_STRUCT__entry( 1087c46203acSChuck Lever __field(void *, nf_inode) 1088c46203acSChuck Lever __field(void *, nf_file) 1089c46203acSChuck Lever __field(int, nf_ref) 1090c46203acSChuck Lever __field(unsigned long, nf_flags) 1091c46203acSChuck Lever ), 1092c46203acSChuck Lever TP_fast_assign( 1093c46203acSChuck Lever __entry->nf_inode = nf->nf_inode; 1094c46203acSChuck Lever __entry->nf_file = nf->nf_file; 1095c46203acSChuck Lever __entry->nf_ref = refcount_read(&nf->nf_ref); 1096c46203acSChuck Lever __entry->nf_flags = nf->nf_flags; 1097c46203acSChuck Lever ), 1098c46203acSChuck Lever TP_printk("inode=%p ref=%d nf_flags=%s nf_file=%p", 1099c46203acSChuck Lever __entry->nf_inode, __entry->nf_ref, 1100c46203acSChuck Lever show_nf_flags(__entry->nf_flags), 1101c46203acSChuck Lever __entry->nf_file 1102c46203acSChuck Lever ) 1103c46203acSChuck Lever ); 1104c46203acSChuck Lever 1105c46203acSChuck Lever #define DEFINE_NFSD_FILE_GC_EVENT(name) \ 1106c46203acSChuck Lever DEFINE_EVENT(nfsd_file_gc_class, name, \ 1107c46203acSChuck Lever TP_PROTO( \ 1108c46203acSChuck Lever const struct nfsd_file *nf \ 1109c46203acSChuck Lever ), \ 1110c46203acSChuck Lever TP_ARGS(nf)) 1111c46203acSChuck Lever 1112c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add); 11134a0e73e6SChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_add_disposed); 1114c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del); 11154a0e73e6SChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_lru_del_disposed); 1116c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_in_use); 1117c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_writeback); 1118c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_referenced); 1119c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_hashed); 1120c46203acSChuck Lever DEFINE_NFSD_FILE_GC_EVENT(nfsd_file_gc_disposed); 1121c46203acSChuck Lever 112294660cc1SChuck Lever DECLARE_EVENT_CLASS(nfsd_file_lruwalk_class, 112394660cc1SChuck Lever TP_PROTO( 112494660cc1SChuck Lever unsigned long removed, 112594660cc1SChuck Lever unsigned long remaining 112694660cc1SChuck Lever ), 112794660cc1SChuck Lever TP_ARGS(removed, remaining), 112894660cc1SChuck Lever TP_STRUCT__entry( 112994660cc1SChuck Lever __field(unsigned long, removed) 113094660cc1SChuck Lever __field(unsigned long, remaining) 113194660cc1SChuck Lever ), 113294660cc1SChuck Lever TP_fast_assign( 113394660cc1SChuck Lever __entry->removed = removed; 113494660cc1SChuck Lever __entry->remaining = remaining; 113594660cc1SChuck Lever ), 113694660cc1SChuck Lever TP_printk("%lu entries removed, %lu remaining", 113794660cc1SChuck Lever __entry->removed, __entry->remaining) 113894660cc1SChuck Lever ); 113994660cc1SChuck Lever 114094660cc1SChuck Lever #define DEFINE_NFSD_FILE_LRUWALK_EVENT(name) \ 114194660cc1SChuck Lever DEFINE_EVENT(nfsd_file_lruwalk_class, name, \ 114294660cc1SChuck Lever TP_PROTO( \ 114394660cc1SChuck Lever unsigned long removed, \ 114494660cc1SChuck Lever unsigned long remaining \ 114594660cc1SChuck Lever ), \ 114694660cc1SChuck Lever TP_ARGS(removed, remaining)) 114794660cc1SChuck Lever 114894660cc1SChuck Lever DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_gc_removed); 114994660cc1SChuck Lever DEFINE_NFSD_FILE_LRUWALK_EVENT(nfsd_file_shrinker_removed); 115094660cc1SChuck Lever 11510b175b18SChuck Lever #include "cache.h" 11520b175b18SChuck Lever 11530b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_DROPIT); 11540b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_REPLY); 11550b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_DOIT); 11560b175b18SChuck Lever 11570b175b18SChuck Lever #define show_drc_retval(x) \ 11580b175b18SChuck Lever __print_symbolic(x, \ 11590b175b18SChuck Lever { RC_DROPIT, "DROPIT" }, \ 11600b175b18SChuck Lever { RC_REPLY, "REPLY" }, \ 11610b175b18SChuck Lever { RC_DOIT, "DOIT" }) 11620b175b18SChuck Lever 11630b175b18SChuck Lever TRACE_EVENT(nfsd_drc_found, 11640b175b18SChuck Lever TP_PROTO( 11650b175b18SChuck Lever const struct nfsd_net *nn, 11660b175b18SChuck Lever const struct svc_rqst *rqstp, 11670b175b18SChuck Lever int result 11680b175b18SChuck Lever ), 11690b175b18SChuck Lever TP_ARGS(nn, rqstp, result), 11700b175b18SChuck Lever TP_STRUCT__entry( 11710b175b18SChuck Lever __field(unsigned long long, boot_time) 11720b175b18SChuck Lever __field(unsigned long, result) 11730b175b18SChuck Lever __field(u32, xid) 11740b175b18SChuck Lever ), 11750b175b18SChuck Lever TP_fast_assign( 11760b175b18SChuck Lever __entry->boot_time = nn->boot_time; 11770b175b18SChuck Lever __entry->result = result; 11780b175b18SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 11790b175b18SChuck Lever ), 11800b175b18SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x result=%s", 11810b175b18SChuck Lever __entry->boot_time, __entry->xid, 11820b175b18SChuck Lever show_drc_retval(__entry->result)) 11830b175b18SChuck Lever 11840b175b18SChuck Lever ); 11850b175b18SChuck Lever 11860b175b18SChuck Lever TRACE_EVENT(nfsd_drc_mismatch, 11870b175b18SChuck Lever TP_PROTO( 11880b175b18SChuck Lever const struct nfsd_net *nn, 11890b175b18SChuck Lever const struct svc_cacherep *key, 11900b175b18SChuck Lever const struct svc_cacherep *rp 11910b175b18SChuck Lever ), 11920b175b18SChuck Lever TP_ARGS(nn, key, rp), 11930b175b18SChuck Lever TP_STRUCT__entry( 11940b175b18SChuck Lever __field(unsigned long long, boot_time) 11950b175b18SChuck Lever __field(u32, xid) 11960b175b18SChuck Lever __field(u32, cached) 11970b175b18SChuck Lever __field(u32, ingress) 11980b175b18SChuck Lever ), 11990b175b18SChuck Lever TP_fast_assign( 12000b175b18SChuck Lever __entry->boot_time = nn->boot_time; 12010b175b18SChuck Lever __entry->xid = be32_to_cpu(key->c_key.k_xid); 12020b175b18SChuck Lever __entry->cached = (__force u32)key->c_key.k_csum; 12030b175b18SChuck Lever __entry->ingress = (__force u32)rp->c_key.k_csum; 12040b175b18SChuck Lever ), 12050b175b18SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x", 12060b175b18SChuck Lever __entry->boot_time, __entry->xid, __entry->cached, 12070b175b18SChuck Lever __entry->ingress) 12080b175b18SChuck Lever ); 12090b175b18SChuck Lever 12101eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_args, 12111eace0d1SChuck Lever TP_PROTO( 12121eace0d1SChuck Lever const struct nfs4_client *clp, 12131eace0d1SChuck Lever const struct nfs4_cb_conn *conn 12141eace0d1SChuck Lever ), 12151eace0d1SChuck Lever TP_ARGS(clp, conn), 12161eace0d1SChuck Lever TP_STRUCT__entry( 12171eace0d1SChuck Lever __field(u32, cl_boot) 12181eace0d1SChuck Lever __field(u32, cl_id) 12191eace0d1SChuck Lever __field(u32, prog) 12201eace0d1SChuck Lever __field(u32, ident) 12219db0e15fSChuck Lever __sockaddr(addr, conn->cb_addrlen) 12221eace0d1SChuck Lever ), 12231eace0d1SChuck Lever TP_fast_assign( 12241eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 12251eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 12261eace0d1SChuck Lever __entry->prog = conn->cb_prog; 12271eace0d1SChuck Lever __entry->ident = conn->cb_ident; 12289db0e15fSChuck Lever __assign_sockaddr(addr, &conn->cb_addr, conn->cb_addrlen); 12291eace0d1SChuck Lever ), 1230d6cbe98fSChuck Lever TP_printk("addr=%pISpc client %08x:%08x prog=%u ident=%u", 12319db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 1232d6cbe98fSChuck Lever __entry->prog, __entry->ident) 12331eace0d1SChuck Lever ); 12341eace0d1SChuck Lever 12351eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_nodelegs, 12361eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), 12371eace0d1SChuck Lever TP_ARGS(clp), 12381eace0d1SChuck Lever TP_STRUCT__entry( 12391eace0d1SChuck Lever __field(u32, cl_boot) 12401eace0d1SChuck Lever __field(u32, cl_id) 12411eace0d1SChuck Lever ), 12421eace0d1SChuck Lever TP_fast_assign( 12431eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 12441eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 12451eace0d1SChuck Lever ), 12461eace0d1SChuck Lever TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 12471eace0d1SChuck Lever ) 12481eace0d1SChuck Lever 12491eace0d1SChuck Lever #define show_cb_state(val) \ 12501eace0d1SChuck Lever __print_symbolic(val, \ 12511eace0d1SChuck Lever { NFSD4_CB_UP, "UP" }, \ 12521eace0d1SChuck Lever { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \ 12531eace0d1SChuck Lever { NFSD4_CB_DOWN, "DOWN" }, \ 12541eace0d1SChuck Lever { NFSD4_CB_FAULT, "FAULT"}) 12551eace0d1SChuck Lever 12561eace0d1SChuck Lever DECLARE_EVENT_CLASS(nfsd_cb_class, 12571eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), 12581eace0d1SChuck Lever TP_ARGS(clp), 12591eace0d1SChuck Lever TP_STRUCT__entry( 12601eace0d1SChuck Lever __field(unsigned long, state) 12611eace0d1SChuck Lever __field(u32, cl_boot) 12621eace0d1SChuck Lever __field(u32, cl_id) 12639db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 12641eace0d1SChuck Lever ), 12651eace0d1SChuck Lever TP_fast_assign( 12661eace0d1SChuck Lever __entry->state = clp->cl_cb_state; 12671eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 12681eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 12699db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 12709db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 12711eace0d1SChuck Lever ), 12721eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x state=%s", 12739db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 12741eace0d1SChuck Lever show_cb_state(__entry->state)) 12751eace0d1SChuck Lever ); 12761eace0d1SChuck Lever 12771eace0d1SChuck Lever #define DEFINE_NFSD_CB_EVENT(name) \ 12781eace0d1SChuck Lever DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \ 12791eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), \ 12801eace0d1SChuck Lever TP_ARGS(clp)) 12811eace0d1SChuck Lever 12821eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(state); 12834ade892aSChuck Lever DEFINE_NFSD_CB_EVENT(probe); 1284806d65b6SChuck Lever DEFINE_NFSD_CB_EVENT(lost); 12851eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(shutdown); 12861eace0d1SChuck Lever 128787b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_NULL); 128887b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_UNIX); 128987b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS); 129087b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5); 129187b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5I); 129287b2394dSChuck Lever TRACE_DEFINE_ENUM(RPC_AUTH_GSS_KRB5P); 129387b2394dSChuck Lever 129487b2394dSChuck Lever #define show_nfsd_authflavor(val) \ 129587b2394dSChuck Lever __print_symbolic(val, \ 129687b2394dSChuck Lever { RPC_AUTH_NULL, "none" }, \ 129787b2394dSChuck Lever { RPC_AUTH_UNIX, "sys" }, \ 129887b2394dSChuck Lever { RPC_AUTH_GSS, "gss" }, \ 129987b2394dSChuck Lever { RPC_AUTH_GSS_KRB5, "krb5" }, \ 130087b2394dSChuck Lever { RPC_AUTH_GSS_KRB5I, "krb5i" }, \ 130187b2394dSChuck Lever { RPC_AUTH_GSS_KRB5P, "krb5p" }) 130287b2394dSChuck Lever 13033c92fba5SChuck Lever TRACE_EVENT(nfsd_cb_setup, 13043c92fba5SChuck Lever TP_PROTO(const struct nfs4_client *clp, 13053c92fba5SChuck Lever const char *netid, 13063c92fba5SChuck Lever rpc_authflavor_t authflavor 13073c92fba5SChuck Lever ), 13083c92fba5SChuck Lever TP_ARGS(clp, netid, authflavor), 13093c92fba5SChuck Lever TP_STRUCT__entry( 13103c92fba5SChuck Lever __field(u32, cl_boot) 13113c92fba5SChuck Lever __field(u32, cl_id) 13123c92fba5SChuck Lever __field(unsigned long, authflavor) 13139db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 13143c92fba5SChuck Lever __array(unsigned char, netid, 8) 13153c92fba5SChuck Lever ), 13163c92fba5SChuck Lever TP_fast_assign( 13173c92fba5SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 13183c92fba5SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 13193c92fba5SChuck Lever strlcpy(__entry->netid, netid, sizeof(__entry->netid)); 13203c92fba5SChuck Lever __entry->authflavor = authflavor; 13219db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 13229db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 13233c92fba5SChuck Lever ), 13243c92fba5SChuck Lever TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s", 13259db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 13263c92fba5SChuck Lever __entry->netid, show_nfsd_authflavor(__entry->authflavor)) 13273c92fba5SChuck Lever ); 13283c92fba5SChuck Lever 13291eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_setup_err, 13301eace0d1SChuck Lever TP_PROTO( 13311eace0d1SChuck Lever const struct nfs4_client *clp, 13321eace0d1SChuck Lever long error 13331eace0d1SChuck Lever ), 13341eace0d1SChuck Lever TP_ARGS(clp, error), 13351eace0d1SChuck Lever TP_STRUCT__entry( 13361eace0d1SChuck Lever __field(long, error) 13371eace0d1SChuck Lever __field(u32, cl_boot) 13381eace0d1SChuck Lever __field(u32, cl_id) 13399db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 13401eace0d1SChuck Lever ), 13411eace0d1SChuck Lever TP_fast_assign( 13421eace0d1SChuck Lever __entry->error = error; 13431eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 13441eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 13459db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 13469db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 13471eace0d1SChuck Lever ), 13481eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x error=%ld", 13499db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 13509db0e15fSChuck Lever __entry->error) 13511eace0d1SChuck Lever ); 13521eace0d1SChuck Lever 13539db0e15fSChuck Lever TRACE_EVENT_CONDITION(nfsd_cb_recall, 135417d76ddfSChuck Lever TP_PROTO( 135517d76ddfSChuck Lever const struct nfs4_stid *stid 135617d76ddfSChuck Lever ), 135717d76ddfSChuck Lever TP_ARGS(stid), 13589db0e15fSChuck Lever TP_CONDITION(stid->sc_client), 135917d76ddfSChuck Lever TP_STRUCT__entry( 136017d76ddfSChuck Lever __field(u32, cl_boot) 136117d76ddfSChuck Lever __field(u32, cl_id) 136217d76ddfSChuck Lever __field(u32, si_id) 136317d76ddfSChuck Lever __field(u32, si_generation) 13649db0e15fSChuck Lever __sockaddr(addr, stid->sc_client->cl_cb_conn.cb_addrlen) 136517d76ddfSChuck Lever ), 136617d76ddfSChuck Lever TP_fast_assign( 136717d76ddfSChuck Lever const stateid_t *stp = &stid->sc_stateid; 136817d76ddfSChuck Lever const struct nfs4_client *clp = stid->sc_client; 136917d76ddfSChuck Lever 137017d76ddfSChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 137117d76ddfSChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 137217d76ddfSChuck Lever __entry->si_id = stp->si_opaque.so_id; 137317d76ddfSChuck Lever __entry->si_generation = stp->si_generation; 13749db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 13759db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 137617d76ddfSChuck Lever ), 137717d76ddfSChuck Lever TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x", 13789db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 137917d76ddfSChuck Lever __entry->si_id, __entry->si_generation) 138017d76ddfSChuck Lever ); 138117d76ddfSChuck Lever 13822cde7f81SChuck Lever TRACE_EVENT(nfsd_cb_notify_lock, 13832cde7f81SChuck Lever TP_PROTO( 13842cde7f81SChuck Lever const struct nfs4_lockowner *lo, 13852cde7f81SChuck Lever const struct nfsd4_blocked_lock *nbl 13862cde7f81SChuck Lever ), 13872cde7f81SChuck Lever TP_ARGS(lo, nbl), 13882cde7f81SChuck Lever TP_STRUCT__entry( 13892cde7f81SChuck Lever __field(u32, cl_boot) 13902cde7f81SChuck Lever __field(u32, cl_id) 13912cde7f81SChuck Lever __field(u32, fh_hash) 13929db0e15fSChuck Lever __sockaddr(addr, lo->lo_owner.so_client->cl_cb_conn.cb_addrlen) 13932cde7f81SChuck Lever ), 13942cde7f81SChuck Lever TP_fast_assign( 13952cde7f81SChuck Lever const struct nfs4_client *clp = lo->lo_owner.so_client; 13962cde7f81SChuck Lever 13972cde7f81SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 13982cde7f81SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 13992cde7f81SChuck Lever __entry->fh_hash = knfsd_fh_hash(&nbl->nbl_fh); 14009db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 14019db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 14022cde7f81SChuck Lever ), 14032cde7f81SChuck Lever TP_printk("addr=%pISpc client %08x:%08x fh_hash=0x%08x", 14049db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 14052cde7f81SChuck Lever __entry->fh_hash) 14062cde7f81SChuck Lever ); 14072cde7f81SChuck Lever 140887512386SChuck Lever TRACE_EVENT(nfsd_cb_offload, 140987512386SChuck Lever TP_PROTO( 141087512386SChuck Lever const struct nfs4_client *clp, 141187512386SChuck Lever const stateid_t *stp, 141287512386SChuck Lever const struct knfsd_fh *fh, 141387512386SChuck Lever u64 count, 141487512386SChuck Lever __be32 status 141587512386SChuck Lever ), 141687512386SChuck Lever TP_ARGS(clp, stp, fh, count, status), 141787512386SChuck Lever TP_STRUCT__entry( 141887512386SChuck Lever __field(u32, cl_boot) 141987512386SChuck Lever __field(u32, cl_id) 142087512386SChuck Lever __field(u32, si_id) 142187512386SChuck Lever __field(u32, si_generation) 142287512386SChuck Lever __field(u32, fh_hash) 142387512386SChuck Lever __field(int, status) 142487512386SChuck Lever __field(u64, count) 14259db0e15fSChuck Lever __sockaddr(addr, clp->cl_cb_conn.cb_addrlen) 142687512386SChuck Lever ), 142787512386SChuck Lever TP_fast_assign( 142887512386SChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 142987512386SChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 143087512386SChuck Lever __entry->si_id = stp->si_opaque.so_id; 143187512386SChuck Lever __entry->si_generation = stp->si_generation; 143287512386SChuck Lever __entry->fh_hash = knfsd_fh_hash(fh); 143387512386SChuck Lever __entry->status = be32_to_cpu(status); 143487512386SChuck Lever __entry->count = count; 14359db0e15fSChuck Lever __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr, 14369db0e15fSChuck Lever clp->cl_cb_conn.cb_addrlen) 143787512386SChuck Lever ), 143887512386SChuck Lever TP_printk("addr=%pISpc client %08x:%08x stateid %08x:%08x fh_hash=0x%08x count=%llu status=%d", 14399db0e15fSChuck Lever __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id, 144087512386SChuck Lever __entry->si_id, __entry->si_generation, 144187512386SChuck Lever __entry->fh_hash, __entry->count, __entry->status) 144287512386SChuck Lever ); 144387512386SChuck Lever 144431ef83dcSChristoph Hellwig #endif /* _NFSD_TRACE_H */ 144531ef83dcSChristoph Hellwig 144631ef83dcSChristoph Hellwig #undef TRACE_INCLUDE_PATH 144731ef83dcSChristoph Hellwig #define TRACE_INCLUDE_PATH . 144831ef83dcSChristoph Hellwig #define TRACE_INCLUDE_FILE trace 144931ef83dcSChristoph Hellwig #include <trace/define_trace.h> 1450