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> 12cf749f3cSTrond Myklebust #include "export.h" 136e8b50d1SJeff Layton #include "nfsfh.h" 146e8b50d1SJeff Layton 15*b76278aeSChuck Lever #define show_nfsd_may_flags(x) \ 16*b76278aeSChuck Lever __print_flags(x, "|", \ 17*b76278aeSChuck Lever { NFSD_MAY_EXEC, "EXEC" }, \ 18*b76278aeSChuck Lever { NFSD_MAY_WRITE, "WRITE" }, \ 19*b76278aeSChuck Lever { NFSD_MAY_READ, "READ" }, \ 20*b76278aeSChuck Lever { NFSD_MAY_SATTR, "SATTR" }, \ 21*b76278aeSChuck Lever { NFSD_MAY_TRUNC, "TRUNC" }, \ 22*b76278aeSChuck Lever { NFSD_MAY_LOCK, "LOCK" }, \ 23*b76278aeSChuck Lever { NFSD_MAY_OWNER_OVERRIDE, "OWNER_OVERRIDE" }, \ 24*b76278aeSChuck Lever { NFSD_MAY_LOCAL_ACCESS, "LOCAL_ACCESS" }, \ 25*b76278aeSChuck Lever { NFSD_MAY_BYPASS_GSS_ON_ROOT, "BYPASS_GSS_ON_ROOT" }, \ 26*b76278aeSChuck Lever { NFSD_MAY_NOT_BREAK_LEASE, "NOT_BREAK_LEASE" }, \ 27*b76278aeSChuck Lever { NFSD_MAY_BYPASS_GSS, "BYPASS_GSS" }, \ 28*b76278aeSChuck Lever { NFSD_MAY_READ_IF_EXEC, "READ_IF_EXEC" }, \ 29*b76278aeSChuck Lever { NFSD_MAY_64BIT_COOKIE, "64BIT_COOKIE" }) 30*b76278aeSChuck Lever 31fff4080bSChuck Lever TRACE_EVENT(nfsd_compound, 32fff4080bSChuck Lever TP_PROTO(const struct svc_rqst *rqst, 33fff4080bSChuck Lever u32 args_opcnt), 34fff4080bSChuck Lever TP_ARGS(rqst, args_opcnt), 35fff4080bSChuck Lever TP_STRUCT__entry( 36fff4080bSChuck Lever __field(u32, xid) 37fff4080bSChuck Lever __field(u32, args_opcnt) 38fff4080bSChuck Lever ), 39fff4080bSChuck Lever TP_fast_assign( 40fff4080bSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 41fff4080bSChuck Lever __entry->args_opcnt = args_opcnt; 42fff4080bSChuck Lever ), 43fff4080bSChuck Lever TP_printk("xid=0x%08x opcnt=%u", 44fff4080bSChuck Lever __entry->xid, __entry->args_opcnt) 45fff4080bSChuck Lever ) 46fff4080bSChuck Lever 47fff4080bSChuck Lever TRACE_EVENT(nfsd_compound_status, 48fff4080bSChuck Lever TP_PROTO(u32 args_opcnt, 49fff4080bSChuck Lever u32 resp_opcnt, 50fff4080bSChuck Lever __be32 status, 51fff4080bSChuck Lever const char *name), 52fff4080bSChuck Lever TP_ARGS(args_opcnt, resp_opcnt, status, name), 53fff4080bSChuck Lever TP_STRUCT__entry( 54fff4080bSChuck Lever __field(u32, args_opcnt) 55fff4080bSChuck Lever __field(u32, resp_opcnt) 56fff4080bSChuck Lever __field(int, status) 57fff4080bSChuck Lever __string(name, name) 58fff4080bSChuck Lever ), 59fff4080bSChuck Lever TP_fast_assign( 60fff4080bSChuck Lever __entry->args_opcnt = args_opcnt; 61fff4080bSChuck Lever __entry->resp_opcnt = resp_opcnt; 62fff4080bSChuck Lever __entry->status = be32_to_cpu(status); 63fff4080bSChuck Lever __assign_str(name, name); 64fff4080bSChuck Lever ), 65fff4080bSChuck Lever TP_printk("op=%u/%u %s status=%d", 66fff4080bSChuck Lever __entry->resp_opcnt, __entry->args_opcnt, 67fff4080bSChuck Lever __get_str(name), __entry->status) 68fff4080bSChuck Lever ) 69fff4080bSChuck Lever 70f01274a9STrond Myklebust DECLARE_EVENT_CLASS(nfsd_fh_err_class, 71f01274a9STrond Myklebust TP_PROTO(struct svc_rqst *rqstp, 72f01274a9STrond Myklebust struct svc_fh *fhp, 73f01274a9STrond Myklebust int status), 74f01274a9STrond Myklebust TP_ARGS(rqstp, fhp, status), 75f01274a9STrond Myklebust TP_STRUCT__entry( 76f01274a9STrond Myklebust __field(u32, xid) 77f01274a9STrond Myklebust __field(u32, fh_hash) 78f01274a9STrond Myklebust __field(int, status) 79f01274a9STrond Myklebust ), 80f01274a9STrond Myklebust TP_fast_assign( 81f01274a9STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 82f01274a9STrond Myklebust __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 83f01274a9STrond Myklebust __entry->status = status; 84f01274a9STrond Myklebust ), 85f01274a9STrond Myklebust TP_printk("xid=0x%08x fh_hash=0x%08x status=%d", 86f01274a9STrond Myklebust __entry->xid, __entry->fh_hash, 87f01274a9STrond Myklebust __entry->status) 88f01274a9STrond Myklebust ) 89f01274a9STrond Myklebust 90f01274a9STrond Myklebust #define DEFINE_NFSD_FH_ERR_EVENT(name) \ 91f01274a9STrond Myklebust DEFINE_EVENT(nfsd_fh_err_class, nfsd_##name, \ 92f01274a9STrond Myklebust TP_PROTO(struct svc_rqst *rqstp, \ 93f01274a9STrond Myklebust struct svc_fh *fhp, \ 94f01274a9STrond Myklebust int status), \ 95f01274a9STrond Myklebust TP_ARGS(rqstp, fhp, status)) 96f01274a9STrond Myklebust 97f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badexport); 98f01274a9STrond Myklebust DEFINE_NFSD_FH_ERR_EVENT(set_fh_dentry_badhandle); 99f01274a9STrond Myklebust 100cf749f3cSTrond Myklebust TRACE_EVENT(nfsd_exp_find_key, 101cf749f3cSTrond Myklebust TP_PROTO(const struct svc_expkey *key, 102cf749f3cSTrond Myklebust int status), 103cf749f3cSTrond Myklebust TP_ARGS(key, status), 104cf749f3cSTrond Myklebust TP_STRUCT__entry( 105cf749f3cSTrond Myklebust __field(int, fsidtype) 106cf749f3cSTrond Myklebust __array(u32, fsid, 6) 107cf749f3cSTrond Myklebust __string(auth_domain, key->ek_client->name) 108cf749f3cSTrond Myklebust __field(int, status) 109cf749f3cSTrond Myklebust ), 110cf749f3cSTrond Myklebust TP_fast_assign( 111cf749f3cSTrond Myklebust __entry->fsidtype = key->ek_fsidtype; 112cf749f3cSTrond Myklebust memcpy(__entry->fsid, key->ek_fsid, 4*6); 113cf749f3cSTrond Myklebust __assign_str(auth_domain, key->ek_client->name); 114cf749f3cSTrond Myklebust __entry->status = status; 115cf749f3cSTrond Myklebust ), 116cf749f3cSTrond Myklebust TP_printk("fsid=%x::%s domain=%s status=%d", 117cf749f3cSTrond Myklebust __entry->fsidtype, 118cf749f3cSTrond Myklebust __print_array(__entry->fsid, 6, 4), 119cf749f3cSTrond Myklebust __get_str(auth_domain), 120cf749f3cSTrond Myklebust __entry->status 121cf749f3cSTrond Myklebust ) 122cf749f3cSTrond Myklebust ); 123cf749f3cSTrond Myklebust 1246a30e47fSTrond Myklebust TRACE_EVENT(nfsd_expkey_update, 1256a30e47fSTrond Myklebust TP_PROTO(const struct svc_expkey *key, const char *exp_path), 1266a30e47fSTrond Myklebust TP_ARGS(key, exp_path), 1276a30e47fSTrond Myklebust TP_STRUCT__entry( 1286a30e47fSTrond Myklebust __field(int, fsidtype) 1296a30e47fSTrond Myklebust __array(u32, fsid, 6) 1306a30e47fSTrond Myklebust __string(auth_domain, key->ek_client->name) 1316a30e47fSTrond Myklebust __string(path, exp_path) 1326a30e47fSTrond Myklebust __field(bool, cache) 1336a30e47fSTrond Myklebust ), 1346a30e47fSTrond Myklebust TP_fast_assign( 1356a30e47fSTrond Myklebust __entry->fsidtype = key->ek_fsidtype; 1366a30e47fSTrond Myklebust memcpy(__entry->fsid, key->ek_fsid, 4*6); 1376a30e47fSTrond Myklebust __assign_str(auth_domain, key->ek_client->name); 1386a30e47fSTrond Myklebust __assign_str(path, exp_path); 1396a30e47fSTrond Myklebust __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags); 1406a30e47fSTrond Myklebust ), 1416a30e47fSTrond Myklebust TP_printk("fsid=%x::%s domain=%s path=%s cache=%s", 1426a30e47fSTrond Myklebust __entry->fsidtype, 1436a30e47fSTrond Myklebust __print_array(__entry->fsid, 6, 4), 1446a30e47fSTrond Myklebust __get_str(auth_domain), 1456a30e47fSTrond Myklebust __get_str(path), 1466a30e47fSTrond Myklebust __entry->cache ? "pos" : "neg" 1476a30e47fSTrond Myklebust ) 1486a30e47fSTrond Myklebust ); 1496a30e47fSTrond Myklebust 150cf749f3cSTrond Myklebust TRACE_EVENT(nfsd_exp_get_by_name, 151cf749f3cSTrond Myklebust TP_PROTO(const struct svc_export *key, 152cf749f3cSTrond Myklebust int status), 153cf749f3cSTrond Myklebust TP_ARGS(key, status), 154cf749f3cSTrond Myklebust TP_STRUCT__entry( 155cf749f3cSTrond Myklebust __string(path, key->ex_path.dentry->d_name.name) 156cf749f3cSTrond Myklebust __string(auth_domain, key->ex_client->name) 157cf749f3cSTrond Myklebust __field(int, status) 158cf749f3cSTrond Myklebust ), 159cf749f3cSTrond Myklebust TP_fast_assign( 160cf749f3cSTrond Myklebust __assign_str(path, key->ex_path.dentry->d_name.name); 161cf749f3cSTrond Myklebust __assign_str(auth_domain, key->ex_client->name); 162cf749f3cSTrond Myklebust __entry->status = status; 163cf749f3cSTrond Myklebust ), 164cf749f3cSTrond Myklebust TP_printk("path=%s domain=%s status=%d", 165cf749f3cSTrond Myklebust __get_str(path), 166cf749f3cSTrond Myklebust __get_str(auth_domain), 167cf749f3cSTrond Myklebust __entry->status 168cf749f3cSTrond Myklebust ) 169cf749f3cSTrond Myklebust ); 170cf749f3cSTrond Myklebust 1716a30e47fSTrond Myklebust TRACE_EVENT(nfsd_export_update, 1726a30e47fSTrond Myklebust TP_PROTO(const struct svc_export *key), 1736a30e47fSTrond Myklebust TP_ARGS(key), 1746a30e47fSTrond Myklebust TP_STRUCT__entry( 1756a30e47fSTrond Myklebust __string(path, key->ex_path.dentry->d_name.name) 1766a30e47fSTrond Myklebust __string(auth_domain, key->ex_client->name) 1776a30e47fSTrond Myklebust __field(bool, cache) 1786a30e47fSTrond Myklebust ), 1796a30e47fSTrond Myklebust TP_fast_assign( 1806a30e47fSTrond Myklebust __assign_str(path, key->ex_path.dentry->d_name.name); 1816a30e47fSTrond Myklebust __assign_str(auth_domain, key->ex_client->name); 1826a30e47fSTrond Myklebust __entry->cache = !test_bit(CACHE_NEGATIVE, &key->h.flags); 1836a30e47fSTrond Myklebust ), 1846a30e47fSTrond Myklebust TP_printk("path=%s domain=%s cache=%s", 1856a30e47fSTrond Myklebust __get_str(path), 1866a30e47fSTrond Myklebust __get_str(auth_domain), 1876a30e47fSTrond Myklebust __entry->cache ? "pos" : "neg" 1886a30e47fSTrond Myklebust ) 1896a30e47fSTrond Myklebust ); 1906a30e47fSTrond Myklebust 1916e8b50d1SJeff Layton DECLARE_EVENT_CLASS(nfsd_io_class, 1926e8b50d1SJeff Layton TP_PROTO(struct svc_rqst *rqstp, 1936e8b50d1SJeff Layton struct svc_fh *fhp, 1946e8b50d1SJeff Layton loff_t offset, 19579e0b4e2SChuck Lever unsigned long len), 1966e8b50d1SJeff Layton TP_ARGS(rqstp, fhp, offset, len), 1976e8b50d1SJeff Layton TP_STRUCT__entry( 198afa720a0SChuck Lever __field(u32, xid) 199afa720a0SChuck Lever __field(u32, fh_hash) 2006e8b50d1SJeff Layton __field(loff_t, offset) 20179e0b4e2SChuck Lever __field(unsigned long, len) 2026e8b50d1SJeff Layton ), 2036e8b50d1SJeff Layton TP_fast_assign( 204afa720a0SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 20579e0b4e2SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 2066e8b50d1SJeff Layton __entry->offset = offset; 2076e8b50d1SJeff Layton __entry->len = len; 2086e8b50d1SJeff Layton ), 20979e0b4e2SChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld len=%lu", 210afa720a0SChuck Lever __entry->xid, __entry->fh_hash, 2116e8b50d1SJeff Layton __entry->offset, __entry->len) 2126e8b50d1SJeff Layton ) 2136e8b50d1SJeff Layton 2146e8b50d1SJeff Layton #define DEFINE_NFSD_IO_EVENT(name) \ 215f394b62bSChuck Lever DEFINE_EVENT(nfsd_io_class, nfsd_##name, \ 2166e8b50d1SJeff Layton TP_PROTO(struct svc_rqst *rqstp, \ 2176e8b50d1SJeff Layton struct svc_fh *fhp, \ 2186e8b50d1SJeff Layton loff_t offset, \ 21979e0b4e2SChuck Lever unsigned long len), \ 2206e8b50d1SJeff Layton TP_ARGS(rqstp, fhp, offset, len)) 2216e8b50d1SJeff Layton 2226e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_start); 22387c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_splice); 22487c5942eSChuck Lever DEFINE_NFSD_IO_EVENT(read_vector); 2256e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_io_done); 2266e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(read_done); 2276e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_start); 2286e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_opened); 2296e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_io_done); 2306e8b50d1SJeff Layton DEFINE_NFSD_IO_EVENT(write_done); 23131ef83dcSChristoph Hellwig 232d890be15SChuck Lever DECLARE_EVENT_CLASS(nfsd_err_class, 233d890be15SChuck Lever TP_PROTO(struct svc_rqst *rqstp, 234d890be15SChuck Lever struct svc_fh *fhp, 235d890be15SChuck Lever loff_t offset, 236d890be15SChuck Lever int status), 237d890be15SChuck Lever TP_ARGS(rqstp, fhp, offset, status), 238d890be15SChuck Lever TP_STRUCT__entry( 239d890be15SChuck Lever __field(u32, xid) 240d890be15SChuck Lever __field(u32, fh_hash) 241d890be15SChuck Lever __field(loff_t, offset) 242d890be15SChuck Lever __field(int, status) 243d890be15SChuck Lever ), 244d890be15SChuck Lever TP_fast_assign( 245d890be15SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 246d890be15SChuck Lever __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); 247d890be15SChuck Lever __entry->offset = offset; 248d890be15SChuck Lever __entry->status = status; 249d890be15SChuck Lever ), 250d890be15SChuck Lever TP_printk("xid=0x%08x fh_hash=0x%08x offset=%lld status=%d", 251d890be15SChuck Lever __entry->xid, __entry->fh_hash, 252d890be15SChuck Lever __entry->offset, __entry->status) 253d890be15SChuck Lever ) 254d890be15SChuck Lever 255d890be15SChuck Lever #define DEFINE_NFSD_ERR_EVENT(name) \ 256d890be15SChuck Lever DEFINE_EVENT(nfsd_err_class, nfsd_##name, \ 257d890be15SChuck Lever TP_PROTO(struct svc_rqst *rqstp, \ 258d890be15SChuck Lever struct svc_fh *fhp, \ 259d890be15SChuck Lever loff_t offset, \ 260d890be15SChuck Lever int len), \ 261d890be15SChuck Lever TP_ARGS(rqstp, fhp, offset, len)) 262d890be15SChuck Lever 26387c5942eSChuck Lever DEFINE_NFSD_ERR_EVENT(read_err); 264d890be15SChuck Lever DEFINE_NFSD_ERR_EVENT(write_err); 265d890be15SChuck Lever 266825213e5SJeff Layton #include "state.h" 26765294c1fSJeff Layton #include "filecache.h" 26865294c1fSJeff Layton #include "vfs.h" 269825213e5SJeff Layton 27031ef83dcSChristoph Hellwig DECLARE_EVENT_CLASS(nfsd_stateid_class, 27131ef83dcSChristoph Hellwig TP_PROTO(stateid_t *stp), 27231ef83dcSChristoph Hellwig TP_ARGS(stp), 27331ef83dcSChristoph Hellwig TP_STRUCT__entry( 27431ef83dcSChristoph Hellwig __field(u32, cl_boot) 27531ef83dcSChristoph Hellwig __field(u32, cl_id) 27631ef83dcSChristoph Hellwig __field(u32, si_id) 27731ef83dcSChristoph Hellwig __field(u32, si_generation) 27831ef83dcSChristoph Hellwig ), 27931ef83dcSChristoph Hellwig TP_fast_assign( 28031ef83dcSChristoph Hellwig __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 28131ef83dcSChristoph Hellwig __entry->cl_id = stp->si_opaque.so_clid.cl_id; 28231ef83dcSChristoph Hellwig __entry->si_id = stp->si_opaque.so_id; 28331ef83dcSChristoph Hellwig __entry->si_generation = stp->si_generation; 28431ef83dcSChristoph Hellwig ), 28531ef83dcSChristoph Hellwig TP_printk("client %08x:%08x stateid %08x:%08x", 28631ef83dcSChristoph Hellwig __entry->cl_boot, 28731ef83dcSChristoph Hellwig __entry->cl_id, 28831ef83dcSChristoph Hellwig __entry->si_id, 28931ef83dcSChristoph Hellwig __entry->si_generation) 29031ef83dcSChristoph Hellwig ) 29131ef83dcSChristoph Hellwig 29231ef83dcSChristoph Hellwig #define DEFINE_STATEID_EVENT(name) \ 293f394b62bSChuck Lever DEFINE_EVENT(nfsd_stateid_class, nfsd_##name, \ 29431ef83dcSChristoph Hellwig TP_PROTO(stateid_t *stp), \ 29531ef83dcSChristoph Hellwig TP_ARGS(stp)) 296dd5e3fbcSChuck Lever 29731ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_alloc); 29831ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_unhash); 29931ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layoutstate_free); 30031ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_get_lookup_fail); 30131ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_commit_lookup_fail); 30231ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_return_lookup_fail); 30331ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall); 30431ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_done); 30531ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_fail); 30631ef83dcSChristoph Hellwig DEFINE_STATEID_EVENT(layout_recall_release); 30731ef83dcSChristoph Hellwig 3083caf9175SHou Tao DEFINE_STATEID_EVENT(open); 3093caf9175SHou Tao DEFINE_STATEID_EVENT(deleg_read); 310dd5e3fbcSChuck Lever DEFINE_STATEID_EVENT(deleg_break); 311dd5e3fbcSChuck Lever DEFINE_STATEID_EVENT(deleg_recall); 312dd5e3fbcSChuck Lever 313dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_stateseqid_class, 314dd5e3fbcSChuck Lever TP_PROTO(u32 seqid, const stateid_t *stp), 315dd5e3fbcSChuck Lever TP_ARGS(seqid, stp), 316dd5e3fbcSChuck Lever TP_STRUCT__entry( 317dd5e3fbcSChuck Lever __field(u32, seqid) 318dd5e3fbcSChuck Lever __field(u32, cl_boot) 319dd5e3fbcSChuck Lever __field(u32, cl_id) 320dd5e3fbcSChuck Lever __field(u32, si_id) 321dd5e3fbcSChuck Lever __field(u32, si_generation) 322dd5e3fbcSChuck Lever ), 323dd5e3fbcSChuck Lever TP_fast_assign( 324dd5e3fbcSChuck Lever __entry->seqid = seqid; 325dd5e3fbcSChuck Lever __entry->cl_boot = stp->si_opaque.so_clid.cl_boot; 326dd5e3fbcSChuck Lever __entry->cl_id = stp->si_opaque.so_clid.cl_id; 327dd5e3fbcSChuck Lever __entry->si_id = stp->si_opaque.so_id; 328dd5e3fbcSChuck Lever __entry->si_generation = stp->si_generation; 329dd5e3fbcSChuck Lever ), 330dd5e3fbcSChuck Lever TP_printk("seqid=%u client %08x:%08x stateid %08x:%08x", 331dd5e3fbcSChuck Lever __entry->seqid, __entry->cl_boot, __entry->cl_id, 332dd5e3fbcSChuck Lever __entry->si_id, __entry->si_generation) 333dd5e3fbcSChuck Lever ) 334dd5e3fbcSChuck Lever 335dd5e3fbcSChuck Lever #define DEFINE_STATESEQID_EVENT(name) \ 336dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_stateseqid_class, nfsd_##name, \ 337dd5e3fbcSChuck Lever TP_PROTO(u32 seqid, const stateid_t *stp), \ 338dd5e3fbcSChuck Lever TP_ARGS(seqid, stp)) 339dd5e3fbcSChuck Lever 340dd5e3fbcSChuck Lever DEFINE_STATESEQID_EVENT(preprocess); 341dd5e3fbcSChuck Lever DEFINE_STATESEQID_EVENT(open_confirm); 342dd5e3fbcSChuck Lever 343dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_clientid_class, 344dd5e3fbcSChuck Lever TP_PROTO(const clientid_t *clid), 345dd5e3fbcSChuck Lever TP_ARGS(clid), 346dd5e3fbcSChuck Lever TP_STRUCT__entry( 347dd5e3fbcSChuck Lever __field(u32, cl_boot) 348dd5e3fbcSChuck Lever __field(u32, cl_id) 349dd5e3fbcSChuck Lever ), 350dd5e3fbcSChuck Lever TP_fast_assign( 351dd5e3fbcSChuck Lever __entry->cl_boot = clid->cl_boot; 352dd5e3fbcSChuck Lever __entry->cl_id = clid->cl_id; 353dd5e3fbcSChuck Lever ), 354dd5e3fbcSChuck Lever TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 355dd5e3fbcSChuck Lever ) 356dd5e3fbcSChuck Lever 357dd5e3fbcSChuck Lever #define DEFINE_CLIENTID_EVENT(name) \ 358dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_clientid_class, nfsd_clid_##name, \ 359dd5e3fbcSChuck Lever TP_PROTO(const clientid_t *clid), \ 360dd5e3fbcSChuck Lever TP_ARGS(clid)) 361dd5e3fbcSChuck Lever 362dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(expired); 363dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(purged); 364dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(renew); 365dd5e3fbcSChuck Lever DEFINE_CLIENTID_EVENT(stale); 366dd5e3fbcSChuck Lever 367dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_net_class, 368dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn), 369dd5e3fbcSChuck Lever TP_ARGS(nn), 370dd5e3fbcSChuck Lever TP_STRUCT__entry( 371dd5e3fbcSChuck Lever __field(unsigned long long, boot_time) 372dd5e3fbcSChuck Lever ), 373dd5e3fbcSChuck Lever TP_fast_assign( 374dd5e3fbcSChuck Lever __entry->boot_time = nn->boot_time; 375dd5e3fbcSChuck Lever ), 376dd5e3fbcSChuck Lever TP_printk("boot_time=%16llx", __entry->boot_time) 377dd5e3fbcSChuck Lever ) 378dd5e3fbcSChuck Lever 379dd5e3fbcSChuck Lever #define DEFINE_NET_EVENT(name) \ 380dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_net_class, nfsd_##name, \ 381dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn), \ 382dd5e3fbcSChuck Lever TP_ARGS(nn)) 383dd5e3fbcSChuck Lever 384dd5e3fbcSChuck Lever DEFINE_NET_EVENT(grace_start); 385dd5e3fbcSChuck Lever DEFINE_NET_EVENT(grace_complete); 386dd5e3fbcSChuck Lever 387dd5e3fbcSChuck Lever DECLARE_EVENT_CLASS(nfsd_clid_class, 388dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn, 389dd5e3fbcSChuck Lever unsigned int namelen, 390dd5e3fbcSChuck Lever const unsigned char *namedata), 391dd5e3fbcSChuck Lever TP_ARGS(nn, namelen, namedata), 392dd5e3fbcSChuck Lever TP_STRUCT__entry( 393dd5e3fbcSChuck Lever __field(unsigned long long, boot_time) 394dd5e3fbcSChuck Lever __field(unsigned int, namelen) 395dd5e3fbcSChuck Lever __dynamic_array(unsigned char, name, namelen) 396dd5e3fbcSChuck Lever ), 397dd5e3fbcSChuck Lever TP_fast_assign( 398dd5e3fbcSChuck Lever __entry->boot_time = nn->boot_time; 399dd5e3fbcSChuck Lever __entry->namelen = namelen; 400dd5e3fbcSChuck Lever memcpy(__get_dynamic_array(name), namedata, namelen); 401dd5e3fbcSChuck Lever ), 402dd5e3fbcSChuck Lever TP_printk("boot_time=%16llx nfs4_clientid=%.*s", 403dd5e3fbcSChuck Lever __entry->boot_time, __entry->namelen, __get_str(name)) 404dd5e3fbcSChuck Lever ) 405dd5e3fbcSChuck Lever 406dd5e3fbcSChuck Lever #define DEFINE_CLID_EVENT(name) \ 407dd5e3fbcSChuck Lever DEFINE_EVENT(nfsd_clid_class, nfsd_clid_##name, \ 408dd5e3fbcSChuck Lever TP_PROTO(const struct nfsd_net *nn, \ 409dd5e3fbcSChuck Lever unsigned int namelen, \ 410dd5e3fbcSChuck Lever const unsigned char *namedata), \ 411dd5e3fbcSChuck Lever TP_ARGS(nn, namelen, namedata)) 412dd5e3fbcSChuck Lever 413dd5e3fbcSChuck Lever DEFINE_CLID_EVENT(find); 414dd5e3fbcSChuck Lever DEFINE_CLID_EVENT(reclaim); 415dd5e3fbcSChuck Lever 416dd5e3fbcSChuck Lever TRACE_EVENT(nfsd_clid_inuse_err, 417dd5e3fbcSChuck Lever TP_PROTO(const struct nfs4_client *clp), 418dd5e3fbcSChuck Lever TP_ARGS(clp), 419dd5e3fbcSChuck Lever TP_STRUCT__entry( 420dd5e3fbcSChuck Lever __field(u32, cl_boot) 421dd5e3fbcSChuck Lever __field(u32, cl_id) 422dd5e3fbcSChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 423dd5e3fbcSChuck Lever __field(unsigned int, namelen) 424dd5e3fbcSChuck Lever __dynamic_array(unsigned char, name, clp->cl_name.len) 425dd5e3fbcSChuck Lever ), 426dd5e3fbcSChuck Lever TP_fast_assign( 427dd5e3fbcSChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 428dd5e3fbcSChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 429dd5e3fbcSChuck Lever memcpy(__entry->addr, &clp->cl_addr, 430dd5e3fbcSChuck Lever sizeof(struct sockaddr_in6)); 431dd5e3fbcSChuck Lever __entry->namelen = clp->cl_name.len; 432dd5e3fbcSChuck Lever memcpy(__get_dynamic_array(name), clp->cl_name.data, 433dd5e3fbcSChuck Lever clp->cl_name.len); 434dd5e3fbcSChuck Lever ), 435dd5e3fbcSChuck Lever TP_printk("nfs4_clientid %.*s already in use by %pISpc, client %08x:%08x", 436dd5e3fbcSChuck Lever __entry->namelen, __get_str(name), __entry->addr, 437dd5e3fbcSChuck Lever __entry->cl_boot, __entry->cl_id) 438dd5e3fbcSChuck Lever ) 439dd5e3fbcSChuck Lever 440*b76278aeSChuck Lever /* 441*b76278aeSChuck Lever * from fs/nfsd/filecache.h 442*b76278aeSChuck Lever */ 443c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_HASHED); 444c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_PENDING); 445c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_BREAK_READ); 446c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_BREAK_WRITE); 447c1928559STrond Myklebust TRACE_DEFINE_ENUM(NFSD_FILE_REFERENCED); 448c1928559STrond Myklebust 44965294c1fSJeff Layton #define show_nf_flags(val) \ 45065294c1fSJeff Layton __print_flags(val, "|", \ 45165294c1fSJeff Layton { 1 << NFSD_FILE_HASHED, "HASHED" }, \ 45265294c1fSJeff Layton { 1 << NFSD_FILE_PENDING, "PENDING" }, \ 45365294c1fSJeff Layton { 1 << NFSD_FILE_BREAK_READ, "BREAK_READ" }, \ 45465294c1fSJeff Layton { 1 << NFSD_FILE_BREAK_WRITE, "BREAK_WRITE" }, \ 45565294c1fSJeff Layton { 1 << NFSD_FILE_REFERENCED, "REFERENCED"}) 45665294c1fSJeff Layton 45765294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_class, 45865294c1fSJeff Layton TP_PROTO(struct nfsd_file *nf), 45965294c1fSJeff Layton TP_ARGS(nf), 46065294c1fSJeff Layton TP_STRUCT__entry( 46165294c1fSJeff Layton __field(unsigned int, nf_hashval) 46265294c1fSJeff Layton __field(void *, nf_inode) 46365294c1fSJeff Layton __field(int, nf_ref) 46465294c1fSJeff Layton __field(unsigned long, nf_flags) 46565294c1fSJeff Layton __field(unsigned char, nf_may) 46665294c1fSJeff Layton __field(struct file *, nf_file) 46765294c1fSJeff Layton ), 46865294c1fSJeff Layton TP_fast_assign( 46965294c1fSJeff Layton __entry->nf_hashval = nf->nf_hashval; 47065294c1fSJeff Layton __entry->nf_inode = nf->nf_inode; 471689827cdSTrond Myklebust __entry->nf_ref = refcount_read(&nf->nf_ref); 47265294c1fSJeff Layton __entry->nf_flags = nf->nf_flags; 47365294c1fSJeff Layton __entry->nf_may = nf->nf_may; 47465294c1fSJeff Layton __entry->nf_file = nf->nf_file; 47565294c1fSJeff Layton ), 47665294c1fSJeff Layton TP_printk("hash=0x%x inode=0x%p ref=%d flags=%s may=%s file=%p", 47765294c1fSJeff Layton __entry->nf_hashval, 47865294c1fSJeff Layton __entry->nf_inode, 47965294c1fSJeff Layton __entry->nf_ref, 48065294c1fSJeff Layton show_nf_flags(__entry->nf_flags), 481*b76278aeSChuck Lever show_nfsd_may_flags(__entry->nf_may), 48265294c1fSJeff Layton __entry->nf_file) 48365294c1fSJeff Layton ) 48465294c1fSJeff Layton 48565294c1fSJeff Layton #define DEFINE_NFSD_FILE_EVENT(name) \ 48665294c1fSJeff Layton DEFINE_EVENT(nfsd_file_class, name, \ 48765294c1fSJeff Layton TP_PROTO(struct nfsd_file *nf), \ 48865294c1fSJeff Layton TP_ARGS(nf)) 48965294c1fSJeff Layton 49065294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_alloc); 49165294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put_final); 49265294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash); 49365294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_put); 49465294c1fSJeff Layton DEFINE_NFSD_FILE_EVENT(nfsd_file_unhash_and_release_locked); 49565294c1fSJeff Layton 49665294c1fSJeff Layton TRACE_EVENT(nfsd_file_acquire, 49765294c1fSJeff Layton TP_PROTO(struct svc_rqst *rqstp, unsigned int hash, 49865294c1fSJeff Layton struct inode *inode, unsigned int may_flags, 49965294c1fSJeff Layton struct nfsd_file *nf, __be32 status), 50065294c1fSJeff Layton 50165294c1fSJeff Layton TP_ARGS(rqstp, hash, inode, may_flags, nf, status), 50265294c1fSJeff Layton 50365294c1fSJeff Layton TP_STRUCT__entry( 504a9ceb060STrond Myklebust __field(u32, xid) 50565294c1fSJeff Layton __field(unsigned int, hash) 50665294c1fSJeff Layton __field(void *, inode) 507*b76278aeSChuck Lever __field(unsigned long, may_flags) 50865294c1fSJeff Layton __field(int, nf_ref) 50965294c1fSJeff Layton __field(unsigned long, nf_flags) 510*b76278aeSChuck Lever __field(unsigned long, nf_may) 51165294c1fSJeff Layton __field(struct file *, nf_file) 512a9ceb060STrond Myklebust __field(u32, status) 51365294c1fSJeff Layton ), 51465294c1fSJeff Layton 51565294c1fSJeff Layton TP_fast_assign( 516a9ceb060STrond Myklebust __entry->xid = be32_to_cpu(rqstp->rq_xid); 51765294c1fSJeff Layton __entry->hash = hash; 51865294c1fSJeff Layton __entry->inode = inode; 51965294c1fSJeff Layton __entry->may_flags = may_flags; 520689827cdSTrond Myklebust __entry->nf_ref = nf ? refcount_read(&nf->nf_ref) : 0; 52165294c1fSJeff Layton __entry->nf_flags = nf ? nf->nf_flags : 0; 52265294c1fSJeff Layton __entry->nf_may = nf ? nf->nf_may : 0; 52365294c1fSJeff Layton __entry->nf_file = nf ? nf->nf_file : NULL; 524a9ceb060STrond Myklebust __entry->status = be32_to_cpu(status); 52565294c1fSJeff Layton ), 52665294c1fSJeff Layton 52765294c1fSJeff Layton TP_printk("xid=0x%x hash=0x%x inode=0x%p may_flags=%s ref=%d nf_flags=%s nf_may=%s nf_file=0x%p status=%u", 528a9ceb060STrond Myklebust __entry->xid, __entry->hash, __entry->inode, 529*b76278aeSChuck Lever show_nfsd_may_flags(__entry->may_flags), 530*b76278aeSChuck Lever __entry->nf_ref, show_nf_flags(__entry->nf_flags), 531*b76278aeSChuck Lever show_nfsd_may_flags(__entry->nf_may), 532*b76278aeSChuck Lever __entry->nf_file, __entry->status) 53365294c1fSJeff Layton ); 53465294c1fSJeff Layton 53565294c1fSJeff Layton DECLARE_EVENT_CLASS(nfsd_file_search_class, 53665294c1fSJeff Layton TP_PROTO(struct inode *inode, unsigned int hash, int found), 53765294c1fSJeff Layton TP_ARGS(inode, hash, found), 53865294c1fSJeff Layton TP_STRUCT__entry( 53965294c1fSJeff Layton __field(struct inode *, inode) 54065294c1fSJeff Layton __field(unsigned int, hash) 54165294c1fSJeff Layton __field(int, found) 54265294c1fSJeff Layton ), 54365294c1fSJeff Layton TP_fast_assign( 54465294c1fSJeff Layton __entry->inode = inode; 54565294c1fSJeff Layton __entry->hash = hash; 54665294c1fSJeff Layton __entry->found = found; 54765294c1fSJeff Layton ), 54865294c1fSJeff Layton TP_printk("hash=0x%x inode=0x%p found=%d", __entry->hash, 54965294c1fSJeff Layton __entry->inode, __entry->found) 55065294c1fSJeff Layton ); 55165294c1fSJeff Layton 55265294c1fSJeff Layton #define DEFINE_NFSD_FILE_SEARCH_EVENT(name) \ 55365294c1fSJeff Layton DEFINE_EVENT(nfsd_file_search_class, name, \ 55465294c1fSJeff Layton TP_PROTO(struct inode *inode, unsigned int hash, int found), \ 55565294c1fSJeff Layton TP_ARGS(inode, hash, found)) 55665294c1fSJeff Layton 55765294c1fSJeff Layton DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode_sync); 55865294c1fSJeff Layton DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_close_inode); 55965294c1fSJeff Layton DEFINE_NFSD_FILE_SEARCH_EVENT(nfsd_file_is_cached); 56065294c1fSJeff Layton 56165294c1fSJeff Layton TRACE_EVENT(nfsd_file_fsnotify_handle_event, 56265294c1fSJeff Layton TP_PROTO(struct inode *inode, u32 mask), 56365294c1fSJeff Layton TP_ARGS(inode, mask), 56465294c1fSJeff Layton TP_STRUCT__entry( 56565294c1fSJeff Layton __field(struct inode *, inode) 56665294c1fSJeff Layton __field(unsigned int, nlink) 56765294c1fSJeff Layton __field(umode_t, mode) 56865294c1fSJeff Layton __field(u32, mask) 56965294c1fSJeff Layton ), 57065294c1fSJeff Layton TP_fast_assign( 57165294c1fSJeff Layton __entry->inode = inode; 57265294c1fSJeff Layton __entry->nlink = inode->i_nlink; 57365294c1fSJeff Layton __entry->mode = inode->i_mode; 57465294c1fSJeff Layton __entry->mask = mask; 57565294c1fSJeff Layton ), 57665294c1fSJeff Layton TP_printk("inode=0x%p nlink=%u mode=0%ho mask=0x%x", __entry->inode, 57765294c1fSJeff Layton __entry->nlink, __entry->mode, __entry->mask) 57865294c1fSJeff Layton ); 57965294c1fSJeff Layton 5800b175b18SChuck Lever #include "cache.h" 5810b175b18SChuck Lever 5820b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_DROPIT); 5830b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_REPLY); 5840b175b18SChuck Lever TRACE_DEFINE_ENUM(RC_DOIT); 5850b175b18SChuck Lever 5860b175b18SChuck Lever #define show_drc_retval(x) \ 5870b175b18SChuck Lever __print_symbolic(x, \ 5880b175b18SChuck Lever { RC_DROPIT, "DROPIT" }, \ 5890b175b18SChuck Lever { RC_REPLY, "REPLY" }, \ 5900b175b18SChuck Lever { RC_DOIT, "DOIT" }) 5910b175b18SChuck Lever 5920b175b18SChuck Lever TRACE_EVENT(nfsd_drc_found, 5930b175b18SChuck Lever TP_PROTO( 5940b175b18SChuck Lever const struct nfsd_net *nn, 5950b175b18SChuck Lever const struct svc_rqst *rqstp, 5960b175b18SChuck Lever int result 5970b175b18SChuck Lever ), 5980b175b18SChuck Lever TP_ARGS(nn, rqstp, result), 5990b175b18SChuck Lever TP_STRUCT__entry( 6000b175b18SChuck Lever __field(unsigned long long, boot_time) 6010b175b18SChuck Lever __field(unsigned long, result) 6020b175b18SChuck Lever __field(u32, xid) 6030b175b18SChuck Lever ), 6040b175b18SChuck Lever TP_fast_assign( 6050b175b18SChuck Lever __entry->boot_time = nn->boot_time; 6060b175b18SChuck Lever __entry->result = result; 6070b175b18SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 6080b175b18SChuck Lever ), 6090b175b18SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x result=%s", 6100b175b18SChuck Lever __entry->boot_time, __entry->xid, 6110b175b18SChuck Lever show_drc_retval(__entry->result)) 6120b175b18SChuck Lever 6130b175b18SChuck Lever ); 6140b175b18SChuck Lever 6150b175b18SChuck Lever TRACE_EVENT(nfsd_drc_mismatch, 6160b175b18SChuck Lever TP_PROTO( 6170b175b18SChuck Lever const struct nfsd_net *nn, 6180b175b18SChuck Lever const struct svc_cacherep *key, 6190b175b18SChuck Lever const struct svc_cacherep *rp 6200b175b18SChuck Lever ), 6210b175b18SChuck Lever TP_ARGS(nn, key, rp), 6220b175b18SChuck Lever TP_STRUCT__entry( 6230b175b18SChuck Lever __field(unsigned long long, boot_time) 6240b175b18SChuck Lever __field(u32, xid) 6250b175b18SChuck Lever __field(u32, cached) 6260b175b18SChuck Lever __field(u32, ingress) 6270b175b18SChuck Lever ), 6280b175b18SChuck Lever TP_fast_assign( 6290b175b18SChuck Lever __entry->boot_time = nn->boot_time; 6300b175b18SChuck Lever __entry->xid = be32_to_cpu(key->c_key.k_xid); 6310b175b18SChuck Lever __entry->cached = (__force u32)key->c_key.k_csum; 6320b175b18SChuck Lever __entry->ingress = (__force u32)rp->c_key.k_csum; 6330b175b18SChuck Lever ), 6340b175b18SChuck Lever TP_printk("boot_time=%16llx xid=0x%08x cached-csum=0x%08x ingress-csum=0x%08x", 6350b175b18SChuck Lever __entry->boot_time, __entry->xid, __entry->cached, 6360b175b18SChuck Lever __entry->ingress) 6370b175b18SChuck Lever ); 6380b175b18SChuck Lever 6391eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_args, 6401eace0d1SChuck Lever TP_PROTO( 6411eace0d1SChuck Lever const struct nfs4_client *clp, 6421eace0d1SChuck Lever const struct nfs4_cb_conn *conn 6431eace0d1SChuck Lever ), 6441eace0d1SChuck Lever TP_ARGS(clp, conn), 6451eace0d1SChuck Lever TP_STRUCT__entry( 6461eace0d1SChuck Lever __field(u32, cl_boot) 6471eace0d1SChuck Lever __field(u32, cl_id) 6481eace0d1SChuck Lever __field(u32, prog) 6491eace0d1SChuck Lever __field(u32, ident) 6501eace0d1SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 6511eace0d1SChuck Lever ), 6521eace0d1SChuck Lever TP_fast_assign( 6531eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 6541eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 6551eace0d1SChuck Lever __entry->prog = conn->cb_prog; 6561eace0d1SChuck Lever __entry->ident = conn->cb_ident; 6571eace0d1SChuck Lever memcpy(__entry->addr, &conn->cb_addr, 6581eace0d1SChuck Lever sizeof(struct sockaddr_in6)); 6591eace0d1SChuck Lever ), 6601eace0d1SChuck Lever TP_printk("client %08x:%08x callback addr=%pISpc prog=%u ident=%u", 6611eace0d1SChuck Lever __entry->cl_boot, __entry->cl_id, 6621eace0d1SChuck Lever __entry->addr, __entry->prog, __entry->ident) 6631eace0d1SChuck Lever ); 6641eace0d1SChuck Lever 6651eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_nodelegs, 6661eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), 6671eace0d1SChuck Lever TP_ARGS(clp), 6681eace0d1SChuck Lever TP_STRUCT__entry( 6691eace0d1SChuck Lever __field(u32, cl_boot) 6701eace0d1SChuck Lever __field(u32, cl_id) 6711eace0d1SChuck Lever ), 6721eace0d1SChuck Lever TP_fast_assign( 6731eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 6741eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 6751eace0d1SChuck Lever ), 6761eace0d1SChuck Lever TP_printk("client %08x:%08x", __entry->cl_boot, __entry->cl_id) 6771eace0d1SChuck Lever ) 6781eace0d1SChuck Lever 6791eace0d1SChuck Lever TRACE_DEFINE_ENUM(NFSD4_CB_UP); 6801eace0d1SChuck Lever TRACE_DEFINE_ENUM(NFSD4_CB_UNKNOWN); 6811eace0d1SChuck Lever TRACE_DEFINE_ENUM(NFSD4_CB_DOWN); 6821eace0d1SChuck Lever TRACE_DEFINE_ENUM(NFSD4_CB_FAULT); 6831eace0d1SChuck Lever 6841eace0d1SChuck Lever #define show_cb_state(val) \ 6851eace0d1SChuck Lever __print_symbolic(val, \ 6861eace0d1SChuck Lever { NFSD4_CB_UP, "UP" }, \ 6871eace0d1SChuck Lever { NFSD4_CB_UNKNOWN, "UNKNOWN" }, \ 6881eace0d1SChuck Lever { NFSD4_CB_DOWN, "DOWN" }, \ 6891eace0d1SChuck Lever { NFSD4_CB_FAULT, "FAULT"}) 6901eace0d1SChuck Lever 6911eace0d1SChuck Lever DECLARE_EVENT_CLASS(nfsd_cb_class, 6921eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), 6931eace0d1SChuck Lever TP_ARGS(clp), 6941eace0d1SChuck Lever TP_STRUCT__entry( 6951eace0d1SChuck Lever __field(unsigned long, state) 6961eace0d1SChuck Lever __field(u32, cl_boot) 6971eace0d1SChuck Lever __field(u32, cl_id) 6981eace0d1SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 6991eace0d1SChuck Lever ), 7001eace0d1SChuck Lever TP_fast_assign( 7011eace0d1SChuck Lever __entry->state = clp->cl_cb_state; 7021eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 7031eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 7041eace0d1SChuck Lever memcpy(__entry->addr, &clp->cl_cb_conn.cb_addr, 7051eace0d1SChuck Lever sizeof(struct sockaddr_in6)); 7061eace0d1SChuck Lever ), 7071eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x state=%s", 7081eace0d1SChuck Lever __entry->addr, __entry->cl_boot, __entry->cl_id, 7091eace0d1SChuck Lever show_cb_state(__entry->state)) 7101eace0d1SChuck Lever ); 7111eace0d1SChuck Lever 7121eace0d1SChuck Lever #define DEFINE_NFSD_CB_EVENT(name) \ 7131eace0d1SChuck Lever DEFINE_EVENT(nfsd_cb_class, nfsd_cb_##name, \ 7141eace0d1SChuck Lever TP_PROTO(const struct nfs4_client *clp), \ 7151eace0d1SChuck Lever TP_ARGS(clp)) 7161eace0d1SChuck Lever 7171eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(setup); 7181eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(state); 7191eace0d1SChuck Lever DEFINE_NFSD_CB_EVENT(shutdown); 7201eace0d1SChuck Lever 7211eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_setup_err, 7221eace0d1SChuck Lever TP_PROTO( 7231eace0d1SChuck Lever const struct nfs4_client *clp, 7241eace0d1SChuck Lever long error 7251eace0d1SChuck Lever ), 7261eace0d1SChuck Lever TP_ARGS(clp, error), 7271eace0d1SChuck Lever TP_STRUCT__entry( 7281eace0d1SChuck Lever __field(long, error) 7291eace0d1SChuck Lever __field(u32, cl_boot) 7301eace0d1SChuck Lever __field(u32, cl_id) 7311eace0d1SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 7321eace0d1SChuck Lever ), 7331eace0d1SChuck Lever TP_fast_assign( 7341eace0d1SChuck Lever __entry->error = error; 7351eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 7361eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 7371eace0d1SChuck Lever memcpy(__entry->addr, &clp->cl_cb_conn.cb_addr, 7381eace0d1SChuck Lever sizeof(struct sockaddr_in6)); 7391eace0d1SChuck Lever ), 7401eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x error=%ld", 7411eace0d1SChuck Lever __entry->addr, __entry->cl_boot, __entry->cl_id, __entry->error) 7421eace0d1SChuck Lever ); 7431eace0d1SChuck Lever 7441eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_work, 7451eace0d1SChuck Lever TP_PROTO( 7461eace0d1SChuck Lever const struct nfs4_client *clp, 7471eace0d1SChuck Lever const char *procedure 7481eace0d1SChuck Lever ), 7491eace0d1SChuck Lever TP_ARGS(clp, procedure), 7501eace0d1SChuck Lever TP_STRUCT__entry( 7511eace0d1SChuck Lever __field(u32, cl_boot) 7521eace0d1SChuck Lever __field(u32, cl_id) 7531eace0d1SChuck Lever __string(procedure, procedure) 7541eace0d1SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 7551eace0d1SChuck Lever ), 7561eace0d1SChuck Lever TP_fast_assign( 7571eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 7581eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 7591eace0d1SChuck Lever __assign_str(procedure, procedure) 7601eace0d1SChuck Lever memcpy(__entry->addr, &clp->cl_cb_conn.cb_addr, 7611eace0d1SChuck Lever sizeof(struct sockaddr_in6)); 7621eace0d1SChuck Lever ), 7631eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x procedure=%s", 7641eace0d1SChuck Lever __entry->addr, __entry->cl_boot, __entry->cl_id, 7651eace0d1SChuck Lever __get_str(procedure)) 7661eace0d1SChuck Lever ); 7671eace0d1SChuck Lever 7681eace0d1SChuck Lever TRACE_EVENT(nfsd_cb_done, 7691eace0d1SChuck Lever TP_PROTO( 7701eace0d1SChuck Lever const struct nfs4_client *clp, 7711eace0d1SChuck Lever int status 7721eace0d1SChuck Lever ), 7731eace0d1SChuck Lever TP_ARGS(clp, status), 7741eace0d1SChuck Lever TP_STRUCT__entry( 7751eace0d1SChuck Lever __field(u32, cl_boot) 7761eace0d1SChuck Lever __field(u32, cl_id) 7771eace0d1SChuck Lever __field(int, status) 7781eace0d1SChuck Lever __array(unsigned char, addr, sizeof(struct sockaddr_in6)) 7791eace0d1SChuck Lever ), 7801eace0d1SChuck Lever TP_fast_assign( 7811eace0d1SChuck Lever __entry->cl_boot = clp->cl_clientid.cl_boot; 7821eace0d1SChuck Lever __entry->cl_id = clp->cl_clientid.cl_id; 7831eace0d1SChuck Lever __entry->status = status; 7841eace0d1SChuck Lever memcpy(__entry->addr, &clp->cl_cb_conn.cb_addr, 7851eace0d1SChuck Lever sizeof(struct sockaddr_in6)); 7861eace0d1SChuck Lever ), 7871eace0d1SChuck Lever TP_printk("addr=%pISpc client %08x:%08x status=%d", 7881eace0d1SChuck Lever __entry->addr, __entry->cl_boot, __entry->cl_id, 7891eace0d1SChuck Lever __entry->status) 7901eace0d1SChuck Lever ); 7911eace0d1SChuck Lever 79231ef83dcSChristoph Hellwig #endif /* _NFSD_TRACE_H */ 79331ef83dcSChristoph Hellwig 79431ef83dcSChristoph Hellwig #undef TRACE_INCLUDE_PATH 79531ef83dcSChristoph Hellwig #define TRACE_INCLUDE_PATH . 79631ef83dcSChristoph Hellwig #define TRACE_INCLUDE_FILE trace 79731ef83dcSChristoph Hellwig #include <trace/define_trace.h> 798