1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun #undef TRACE_SYSTEM 6*4882a593Smuzhiyun #define TRACE_SYSTEM nfs 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ) 9*4882a593Smuzhiyun #define _TRACE_NFS_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/tracepoint.h> 12*4882a593Smuzhiyun #include <linux/iversion.h> 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_UNKNOWN); 15*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_FIFO); 16*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_CHR); 17*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_DIR); 18*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_BLK); 19*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_REG); 20*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_LNK); 21*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_SOCK); 22*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DT_WHT); 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define nfs_show_file_type(ftype) \ 25*4882a593Smuzhiyun __print_symbolic(ftype, \ 26*4882a593Smuzhiyun { DT_UNKNOWN, "UNKNOWN" }, \ 27*4882a593Smuzhiyun { DT_FIFO, "FIFO" }, \ 28*4882a593Smuzhiyun { DT_CHR, "CHR" }, \ 29*4882a593Smuzhiyun { DT_DIR, "DIR" }, \ 30*4882a593Smuzhiyun { DT_BLK, "BLK" }, \ 31*4882a593Smuzhiyun { DT_REG, "REG" }, \ 32*4882a593Smuzhiyun { DT_LNK, "LNK" }, \ 33*4882a593Smuzhiyun { DT_SOCK, "SOCK" }, \ 34*4882a593Smuzhiyun { DT_WHT, "WHT" }) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_DATA); 37*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_ATIME); 38*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_ACCESS); 39*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_ACL); 40*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_REVAL_PAGECACHE); 41*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_REVAL_FORCED); 42*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_LABEL); 43*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_CHANGE); 44*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_CTIME); 45*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_MTIME); 46*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_SIZE); 47*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALID_OTHER); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define nfs_show_cache_validity(v) \ 50*4882a593Smuzhiyun __print_flags(v, "|", \ 51*4882a593Smuzhiyun { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \ 52*4882a593Smuzhiyun { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \ 53*4882a593Smuzhiyun { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \ 54*4882a593Smuzhiyun { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \ 55*4882a593Smuzhiyun { NFS_INO_REVAL_PAGECACHE, "REVAL_PAGECACHE" }, \ 56*4882a593Smuzhiyun { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \ 57*4882a593Smuzhiyun { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \ 58*4882a593Smuzhiyun { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \ 59*4882a593Smuzhiyun { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \ 60*4882a593Smuzhiyun { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \ 61*4882a593Smuzhiyun { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \ 62*4882a593Smuzhiyun { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \ 63*4882a593Smuzhiyun { NFS_INO_INVALID_XATTR, "INVALID_XATTR" }) 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_ADVISE_RDPLUS); 66*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_STALE); 67*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_ACL_LRU_SET); 68*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_INVALIDATING); 69*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_FSCACHE); 70*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_FSCACHE_LOCK); 71*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_LAYOUTCOMMIT); 72*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_LAYOUTCOMMITTING); 73*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_LAYOUTSTATS); 74*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_INO_ODIRECT); 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define nfs_show_nfsi_flags(v) \ 77*4882a593Smuzhiyun __print_flags(v, "|", \ 78*4882a593Smuzhiyun { BIT(NFS_INO_ADVISE_RDPLUS), "ADVISE_RDPLUS" }, \ 79*4882a593Smuzhiyun { BIT(NFS_INO_STALE), "STALE" }, \ 80*4882a593Smuzhiyun { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \ 81*4882a593Smuzhiyun { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \ 82*4882a593Smuzhiyun { BIT(NFS_INO_FSCACHE), "FSCACHE" }, \ 83*4882a593Smuzhiyun { BIT(NFS_INO_FSCACHE_LOCK), "FSCACHE_LOCK" }, \ 84*4882a593Smuzhiyun { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \ 85*4882a593Smuzhiyun { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \ 86*4882a593Smuzhiyun { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 87*4882a593Smuzhiyun { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_inode_event, 90*4882a593Smuzhiyun TP_PROTO( 91*4882a593Smuzhiyun const struct inode *inode 92*4882a593Smuzhiyun ), 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun TP_ARGS(inode), 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun TP_STRUCT__entry( 97*4882a593Smuzhiyun __field(dev_t, dev) 98*4882a593Smuzhiyun __field(u32, fhandle) 99*4882a593Smuzhiyun __field(u64, fileid) 100*4882a593Smuzhiyun __field(u64, version) 101*4882a593Smuzhiyun ), 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun TP_fast_assign( 104*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 105*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 106*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 107*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 108*4882a593Smuzhiyun __entry->version = inode_peek_iversion_raw(inode); 109*4882a593Smuzhiyun ), 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun TP_printk( 112*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 113*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 114*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 115*4882a593Smuzhiyun __entry->fhandle, 116*4882a593Smuzhiyun (unsigned long long)__entry->version 117*4882a593Smuzhiyun ) 118*4882a593Smuzhiyun ); 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_inode_event_done, 121*4882a593Smuzhiyun TP_PROTO( 122*4882a593Smuzhiyun const struct inode *inode, 123*4882a593Smuzhiyun int error 124*4882a593Smuzhiyun ), 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun TP_ARGS(inode, error), 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun TP_STRUCT__entry( 129*4882a593Smuzhiyun __field(unsigned long, error) 130*4882a593Smuzhiyun __field(dev_t, dev) 131*4882a593Smuzhiyun __field(u32, fhandle) 132*4882a593Smuzhiyun __field(unsigned char, type) 133*4882a593Smuzhiyun __field(u64, fileid) 134*4882a593Smuzhiyun __field(u64, version) 135*4882a593Smuzhiyun __field(loff_t, size) 136*4882a593Smuzhiyun __field(unsigned long, nfsi_flags) 137*4882a593Smuzhiyun __field(unsigned long, cache_validity) 138*4882a593Smuzhiyun ), 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun TP_fast_assign( 141*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 142*4882a593Smuzhiyun __entry->error = error < 0 ? -error : 0; 143*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 144*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 145*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 146*4882a593Smuzhiyun __entry->type = nfs_umode_to_dtype(inode->i_mode); 147*4882a593Smuzhiyun __entry->version = inode_peek_iversion_raw(inode); 148*4882a593Smuzhiyun __entry->size = i_size_read(inode); 149*4882a593Smuzhiyun __entry->nfsi_flags = nfsi->flags; 150*4882a593Smuzhiyun __entry->cache_validity = nfsi->cache_validity; 151*4882a593Smuzhiyun ), 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun TP_printk( 154*4882a593Smuzhiyun "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 155*4882a593Smuzhiyun "type=%u (%s) version=%llu size=%lld " 156*4882a593Smuzhiyun "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)", 157*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 158*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 159*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 160*4882a593Smuzhiyun __entry->fhandle, 161*4882a593Smuzhiyun __entry->type, 162*4882a593Smuzhiyun nfs_show_file_type(__entry->type), 163*4882a593Smuzhiyun (unsigned long long)__entry->version, 164*4882a593Smuzhiyun (long long)__entry->size, 165*4882a593Smuzhiyun __entry->cache_validity, 166*4882a593Smuzhiyun nfs_show_cache_validity(__entry->cache_validity), 167*4882a593Smuzhiyun __entry->nfsi_flags, 168*4882a593Smuzhiyun nfs_show_nfsi_flags(__entry->nfsi_flags) 169*4882a593Smuzhiyun ) 170*4882a593Smuzhiyun ); 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define DEFINE_NFS_INODE_EVENT(name) \ 173*4882a593Smuzhiyun DEFINE_EVENT(nfs_inode_event, name, \ 174*4882a593Smuzhiyun TP_PROTO( \ 175*4882a593Smuzhiyun const struct inode *inode \ 176*4882a593Smuzhiyun ), \ 177*4882a593Smuzhiyun TP_ARGS(inode)) 178*4882a593Smuzhiyun #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 179*4882a593Smuzhiyun DEFINE_EVENT(nfs_inode_event_done, name, \ 180*4882a593Smuzhiyun TP_PROTO( \ 181*4882a593Smuzhiyun const struct inode *inode, \ 182*4882a593Smuzhiyun int error \ 183*4882a593Smuzhiyun ), \ 184*4882a593Smuzhiyun TP_ARGS(inode, error)) 185*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 186*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 187*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 188*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 189*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 190*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 191*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 192*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 193*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 194*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 195*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 196*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter); 197*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit); 198*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 199*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 200*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 201*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 202*4882a593Smuzhiyun DEFINE_NFS_INODE_EVENT(nfs_access_enter); 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun TRACE_EVENT(nfs_access_exit, 205*4882a593Smuzhiyun TP_PROTO( 206*4882a593Smuzhiyun const struct inode *inode, 207*4882a593Smuzhiyun unsigned int mask, 208*4882a593Smuzhiyun unsigned int permitted, 209*4882a593Smuzhiyun int error 210*4882a593Smuzhiyun ), 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun TP_ARGS(inode, mask, permitted, error), 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun TP_STRUCT__entry( 215*4882a593Smuzhiyun __field(unsigned long, error) 216*4882a593Smuzhiyun __field(dev_t, dev) 217*4882a593Smuzhiyun __field(u32, fhandle) 218*4882a593Smuzhiyun __field(unsigned char, type) 219*4882a593Smuzhiyun __field(u64, fileid) 220*4882a593Smuzhiyun __field(u64, version) 221*4882a593Smuzhiyun __field(loff_t, size) 222*4882a593Smuzhiyun __field(unsigned long, nfsi_flags) 223*4882a593Smuzhiyun __field(unsigned long, cache_validity) 224*4882a593Smuzhiyun __field(unsigned int, mask) 225*4882a593Smuzhiyun __field(unsigned int, permitted) 226*4882a593Smuzhiyun ), 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun TP_fast_assign( 229*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 230*4882a593Smuzhiyun __entry->error = error < 0 ? -error : 0; 231*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 232*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 233*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 234*4882a593Smuzhiyun __entry->type = nfs_umode_to_dtype(inode->i_mode); 235*4882a593Smuzhiyun __entry->version = inode_peek_iversion_raw(inode); 236*4882a593Smuzhiyun __entry->size = i_size_read(inode); 237*4882a593Smuzhiyun __entry->nfsi_flags = nfsi->flags; 238*4882a593Smuzhiyun __entry->cache_validity = nfsi->cache_validity; 239*4882a593Smuzhiyun __entry->mask = mask; 240*4882a593Smuzhiyun __entry->permitted = permitted; 241*4882a593Smuzhiyun ), 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun TP_printk( 244*4882a593Smuzhiyun "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 245*4882a593Smuzhiyun "type=%u (%s) version=%llu size=%lld " 246*4882a593Smuzhiyun "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) " 247*4882a593Smuzhiyun "mask=0x%x permitted=0x%x", 248*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 249*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 250*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 251*4882a593Smuzhiyun __entry->fhandle, 252*4882a593Smuzhiyun __entry->type, 253*4882a593Smuzhiyun nfs_show_file_type(__entry->type), 254*4882a593Smuzhiyun (unsigned long long)__entry->version, 255*4882a593Smuzhiyun (long long)__entry->size, 256*4882a593Smuzhiyun __entry->cache_validity, 257*4882a593Smuzhiyun nfs_show_cache_validity(__entry->cache_validity), 258*4882a593Smuzhiyun __entry->nfsi_flags, 259*4882a593Smuzhiyun nfs_show_nfsi_flags(__entry->nfsi_flags), 260*4882a593Smuzhiyun __entry->mask, __entry->permitted 261*4882a593Smuzhiyun ) 262*4882a593Smuzhiyun ); 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_FOLLOW); 265*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_DIRECTORY); 266*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_AUTOMOUNT); 267*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_PARENT); 268*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_REVAL); 269*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_RCU); 270*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_OPEN); 271*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_CREATE); 272*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_EXCL); 273*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_RENAME_TARGET); 274*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_JUMPED); 275*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_ROOT); 276*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_EMPTY); 277*4882a593Smuzhiyun TRACE_DEFINE_ENUM(LOOKUP_DOWN); 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun #define show_lookup_flags(flags) \ 280*4882a593Smuzhiyun __print_flags(flags, "|", \ 281*4882a593Smuzhiyun { LOOKUP_FOLLOW, "FOLLOW" }, \ 282*4882a593Smuzhiyun { LOOKUP_DIRECTORY, "DIRECTORY" }, \ 283*4882a593Smuzhiyun { LOOKUP_AUTOMOUNT, "AUTOMOUNT" }, \ 284*4882a593Smuzhiyun { LOOKUP_PARENT, "PARENT" }, \ 285*4882a593Smuzhiyun { LOOKUP_REVAL, "REVAL" }, \ 286*4882a593Smuzhiyun { LOOKUP_RCU, "RCU" }, \ 287*4882a593Smuzhiyun { LOOKUP_OPEN, "OPEN" }, \ 288*4882a593Smuzhiyun { LOOKUP_CREATE, "CREATE" }, \ 289*4882a593Smuzhiyun { LOOKUP_EXCL, "EXCL" }, \ 290*4882a593Smuzhiyun { LOOKUP_RENAME_TARGET, "RENAME_TARGET" }, \ 291*4882a593Smuzhiyun { LOOKUP_JUMPED, "JUMPED" }, \ 292*4882a593Smuzhiyun { LOOKUP_ROOT, "ROOT" }, \ 293*4882a593Smuzhiyun { LOOKUP_EMPTY, "EMPTY" }, \ 294*4882a593Smuzhiyun { LOOKUP_DOWN, "DOWN" }) 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_lookup_event, 297*4882a593Smuzhiyun TP_PROTO( 298*4882a593Smuzhiyun const struct inode *dir, 299*4882a593Smuzhiyun const struct dentry *dentry, 300*4882a593Smuzhiyun unsigned int flags 301*4882a593Smuzhiyun ), 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun TP_ARGS(dir, dentry, flags), 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun TP_STRUCT__entry( 306*4882a593Smuzhiyun __field(unsigned long, flags) 307*4882a593Smuzhiyun __field(dev_t, dev) 308*4882a593Smuzhiyun __field(u64, dir) 309*4882a593Smuzhiyun __string(name, dentry->d_name.name) 310*4882a593Smuzhiyun ), 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun TP_fast_assign( 313*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 314*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 315*4882a593Smuzhiyun __entry->flags = flags; 316*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 317*4882a593Smuzhiyun ), 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun TP_printk( 320*4882a593Smuzhiyun "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 321*4882a593Smuzhiyun __entry->flags, 322*4882a593Smuzhiyun show_lookup_flags(__entry->flags), 323*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 324*4882a593Smuzhiyun (unsigned long long)__entry->dir, 325*4882a593Smuzhiyun __get_str(name) 326*4882a593Smuzhiyun ) 327*4882a593Smuzhiyun ); 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun #define DEFINE_NFS_LOOKUP_EVENT(name) \ 330*4882a593Smuzhiyun DEFINE_EVENT(nfs_lookup_event, name, \ 331*4882a593Smuzhiyun TP_PROTO( \ 332*4882a593Smuzhiyun const struct inode *dir, \ 333*4882a593Smuzhiyun const struct dentry *dentry, \ 334*4882a593Smuzhiyun unsigned int flags \ 335*4882a593Smuzhiyun ), \ 336*4882a593Smuzhiyun TP_ARGS(dir, dentry, flags)) 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_lookup_event_done, 339*4882a593Smuzhiyun TP_PROTO( 340*4882a593Smuzhiyun const struct inode *dir, 341*4882a593Smuzhiyun const struct dentry *dentry, 342*4882a593Smuzhiyun unsigned int flags, 343*4882a593Smuzhiyun int error 344*4882a593Smuzhiyun ), 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun TP_ARGS(dir, dentry, flags, error), 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun TP_STRUCT__entry( 349*4882a593Smuzhiyun __field(unsigned long, error) 350*4882a593Smuzhiyun __field(unsigned long, flags) 351*4882a593Smuzhiyun __field(dev_t, dev) 352*4882a593Smuzhiyun __field(u64, dir) 353*4882a593Smuzhiyun __string(name, dentry->d_name.name) 354*4882a593Smuzhiyun ), 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun TP_fast_assign( 357*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 358*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 359*4882a593Smuzhiyun __entry->error = error < 0 ? -error : 0; 360*4882a593Smuzhiyun __entry->flags = flags; 361*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 362*4882a593Smuzhiyun ), 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun TP_printk( 365*4882a593Smuzhiyun "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 366*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 367*4882a593Smuzhiyun __entry->flags, 368*4882a593Smuzhiyun show_lookup_flags(__entry->flags), 369*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 370*4882a593Smuzhiyun (unsigned long long)__entry->dir, 371*4882a593Smuzhiyun __get_str(name) 372*4882a593Smuzhiyun ) 373*4882a593Smuzhiyun ); 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 376*4882a593Smuzhiyun DEFINE_EVENT(nfs_lookup_event_done, name, \ 377*4882a593Smuzhiyun TP_PROTO( \ 378*4882a593Smuzhiyun const struct inode *dir, \ 379*4882a593Smuzhiyun const struct dentry *dentry, \ 380*4882a593Smuzhiyun unsigned int flags, \ 381*4882a593Smuzhiyun int error \ 382*4882a593Smuzhiyun ), \ 383*4882a593Smuzhiyun TP_ARGS(dir, dentry, flags, error)) 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 386*4882a593Smuzhiyun DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 387*4882a593Smuzhiyun DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 388*4882a593Smuzhiyun DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_WRONLY); 391*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_RDWR); 392*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_CREAT); 393*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_EXCL); 394*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_NOCTTY); 395*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_TRUNC); 396*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_APPEND); 397*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_NONBLOCK); 398*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_DSYNC); 399*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_DIRECT); 400*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_LARGEFILE); 401*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_DIRECTORY); 402*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_NOFOLLOW); 403*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_NOATIME); 404*4882a593Smuzhiyun TRACE_DEFINE_ENUM(O_CLOEXEC); 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun #define show_open_flags(flags) \ 407*4882a593Smuzhiyun __print_flags(flags, "|", \ 408*4882a593Smuzhiyun { O_WRONLY, "O_WRONLY" }, \ 409*4882a593Smuzhiyun { O_RDWR, "O_RDWR" }, \ 410*4882a593Smuzhiyun { O_CREAT, "O_CREAT" }, \ 411*4882a593Smuzhiyun { O_EXCL, "O_EXCL" }, \ 412*4882a593Smuzhiyun { O_NOCTTY, "O_NOCTTY" }, \ 413*4882a593Smuzhiyun { O_TRUNC, "O_TRUNC" }, \ 414*4882a593Smuzhiyun { O_APPEND, "O_APPEND" }, \ 415*4882a593Smuzhiyun { O_NONBLOCK, "O_NONBLOCK" }, \ 416*4882a593Smuzhiyun { O_DSYNC, "O_DSYNC" }, \ 417*4882a593Smuzhiyun { O_DIRECT, "O_DIRECT" }, \ 418*4882a593Smuzhiyun { O_LARGEFILE, "O_LARGEFILE" }, \ 419*4882a593Smuzhiyun { O_DIRECTORY, "O_DIRECTORY" }, \ 420*4882a593Smuzhiyun { O_NOFOLLOW, "O_NOFOLLOW" }, \ 421*4882a593Smuzhiyun { O_NOATIME, "O_NOATIME" }, \ 422*4882a593Smuzhiyun { O_CLOEXEC, "O_CLOEXEC" }) 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun TRACE_DEFINE_ENUM(FMODE_READ); 425*4882a593Smuzhiyun TRACE_DEFINE_ENUM(FMODE_WRITE); 426*4882a593Smuzhiyun TRACE_DEFINE_ENUM(FMODE_EXEC); 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun #define show_fmode_flags(mode) \ 429*4882a593Smuzhiyun __print_flags(mode, "|", \ 430*4882a593Smuzhiyun { ((__force unsigned long)FMODE_READ), "READ" }, \ 431*4882a593Smuzhiyun { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \ 432*4882a593Smuzhiyun { ((__force unsigned long)FMODE_EXEC), "EXEC" }) 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun TRACE_EVENT(nfs_atomic_open_enter, 435*4882a593Smuzhiyun TP_PROTO( 436*4882a593Smuzhiyun const struct inode *dir, 437*4882a593Smuzhiyun const struct nfs_open_context *ctx, 438*4882a593Smuzhiyun unsigned int flags 439*4882a593Smuzhiyun ), 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun TP_ARGS(dir, ctx, flags), 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun TP_STRUCT__entry( 444*4882a593Smuzhiyun __field(unsigned long, flags) 445*4882a593Smuzhiyun __field(unsigned int, fmode) 446*4882a593Smuzhiyun __field(dev_t, dev) 447*4882a593Smuzhiyun __field(u64, dir) 448*4882a593Smuzhiyun __string(name, ctx->dentry->d_name.name) 449*4882a593Smuzhiyun ), 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun TP_fast_assign( 452*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 453*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 454*4882a593Smuzhiyun __entry->flags = flags; 455*4882a593Smuzhiyun __entry->fmode = (__force unsigned int)ctx->mode; 456*4882a593Smuzhiyun __assign_str(name, ctx->dentry->d_name.name); 457*4882a593Smuzhiyun ), 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun TP_printk( 460*4882a593Smuzhiyun "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 461*4882a593Smuzhiyun __entry->flags, 462*4882a593Smuzhiyun show_open_flags(__entry->flags), 463*4882a593Smuzhiyun show_fmode_flags(__entry->fmode), 464*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 465*4882a593Smuzhiyun (unsigned long long)__entry->dir, 466*4882a593Smuzhiyun __get_str(name) 467*4882a593Smuzhiyun ) 468*4882a593Smuzhiyun ); 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun TRACE_EVENT(nfs_atomic_open_exit, 471*4882a593Smuzhiyun TP_PROTO( 472*4882a593Smuzhiyun const struct inode *dir, 473*4882a593Smuzhiyun const struct nfs_open_context *ctx, 474*4882a593Smuzhiyun unsigned int flags, 475*4882a593Smuzhiyun int error 476*4882a593Smuzhiyun ), 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun TP_ARGS(dir, ctx, flags, error), 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun TP_STRUCT__entry( 481*4882a593Smuzhiyun __field(unsigned long, error) 482*4882a593Smuzhiyun __field(unsigned long, flags) 483*4882a593Smuzhiyun __field(unsigned int, fmode) 484*4882a593Smuzhiyun __field(dev_t, dev) 485*4882a593Smuzhiyun __field(u64, dir) 486*4882a593Smuzhiyun __string(name, ctx->dentry->d_name.name) 487*4882a593Smuzhiyun ), 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun TP_fast_assign( 490*4882a593Smuzhiyun __entry->error = -error; 491*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 492*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 493*4882a593Smuzhiyun __entry->flags = flags; 494*4882a593Smuzhiyun __entry->fmode = (__force unsigned int)ctx->mode; 495*4882a593Smuzhiyun __assign_str(name, ctx->dentry->d_name.name); 496*4882a593Smuzhiyun ), 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun TP_printk( 499*4882a593Smuzhiyun "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 500*4882a593Smuzhiyun "name=%02x:%02x:%llu/%s", 501*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 502*4882a593Smuzhiyun __entry->flags, 503*4882a593Smuzhiyun show_open_flags(__entry->flags), 504*4882a593Smuzhiyun show_fmode_flags(__entry->fmode), 505*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 506*4882a593Smuzhiyun (unsigned long long)__entry->dir, 507*4882a593Smuzhiyun __get_str(name) 508*4882a593Smuzhiyun ) 509*4882a593Smuzhiyun ); 510*4882a593Smuzhiyun 511*4882a593Smuzhiyun TRACE_EVENT(nfs_create_enter, 512*4882a593Smuzhiyun TP_PROTO( 513*4882a593Smuzhiyun const struct inode *dir, 514*4882a593Smuzhiyun const struct dentry *dentry, 515*4882a593Smuzhiyun unsigned int flags 516*4882a593Smuzhiyun ), 517*4882a593Smuzhiyun 518*4882a593Smuzhiyun TP_ARGS(dir, dentry, flags), 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun TP_STRUCT__entry( 521*4882a593Smuzhiyun __field(unsigned long, flags) 522*4882a593Smuzhiyun __field(dev_t, dev) 523*4882a593Smuzhiyun __field(u64, dir) 524*4882a593Smuzhiyun __string(name, dentry->d_name.name) 525*4882a593Smuzhiyun ), 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun TP_fast_assign( 528*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 529*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 530*4882a593Smuzhiyun __entry->flags = flags; 531*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 532*4882a593Smuzhiyun ), 533*4882a593Smuzhiyun 534*4882a593Smuzhiyun TP_printk( 535*4882a593Smuzhiyun "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 536*4882a593Smuzhiyun __entry->flags, 537*4882a593Smuzhiyun show_open_flags(__entry->flags), 538*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 539*4882a593Smuzhiyun (unsigned long long)__entry->dir, 540*4882a593Smuzhiyun __get_str(name) 541*4882a593Smuzhiyun ) 542*4882a593Smuzhiyun ); 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun TRACE_EVENT(nfs_create_exit, 545*4882a593Smuzhiyun TP_PROTO( 546*4882a593Smuzhiyun const struct inode *dir, 547*4882a593Smuzhiyun const struct dentry *dentry, 548*4882a593Smuzhiyun unsigned int flags, 549*4882a593Smuzhiyun int error 550*4882a593Smuzhiyun ), 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun TP_ARGS(dir, dentry, flags, error), 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun TP_STRUCT__entry( 555*4882a593Smuzhiyun __field(unsigned long, error) 556*4882a593Smuzhiyun __field(unsigned long, flags) 557*4882a593Smuzhiyun __field(dev_t, dev) 558*4882a593Smuzhiyun __field(u64, dir) 559*4882a593Smuzhiyun __string(name, dentry->d_name.name) 560*4882a593Smuzhiyun ), 561*4882a593Smuzhiyun 562*4882a593Smuzhiyun TP_fast_assign( 563*4882a593Smuzhiyun __entry->error = -error; 564*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 565*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 566*4882a593Smuzhiyun __entry->flags = flags; 567*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 568*4882a593Smuzhiyun ), 569*4882a593Smuzhiyun 570*4882a593Smuzhiyun TP_printk( 571*4882a593Smuzhiyun "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 572*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 573*4882a593Smuzhiyun __entry->flags, 574*4882a593Smuzhiyun show_open_flags(__entry->flags), 575*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 576*4882a593Smuzhiyun (unsigned long long)__entry->dir, 577*4882a593Smuzhiyun __get_str(name) 578*4882a593Smuzhiyun ) 579*4882a593Smuzhiyun ); 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_directory_event, 582*4882a593Smuzhiyun TP_PROTO( 583*4882a593Smuzhiyun const struct inode *dir, 584*4882a593Smuzhiyun const struct dentry *dentry 585*4882a593Smuzhiyun ), 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun TP_ARGS(dir, dentry), 588*4882a593Smuzhiyun 589*4882a593Smuzhiyun TP_STRUCT__entry( 590*4882a593Smuzhiyun __field(dev_t, dev) 591*4882a593Smuzhiyun __field(u64, dir) 592*4882a593Smuzhiyun __string(name, dentry->d_name.name) 593*4882a593Smuzhiyun ), 594*4882a593Smuzhiyun 595*4882a593Smuzhiyun TP_fast_assign( 596*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 597*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 598*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 599*4882a593Smuzhiyun ), 600*4882a593Smuzhiyun 601*4882a593Smuzhiyun TP_printk( 602*4882a593Smuzhiyun "name=%02x:%02x:%llu/%s", 603*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 604*4882a593Smuzhiyun (unsigned long long)__entry->dir, 605*4882a593Smuzhiyun __get_str(name) 606*4882a593Smuzhiyun ) 607*4882a593Smuzhiyun ); 608*4882a593Smuzhiyun 609*4882a593Smuzhiyun #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 610*4882a593Smuzhiyun DEFINE_EVENT(nfs_directory_event, name, \ 611*4882a593Smuzhiyun TP_PROTO( \ 612*4882a593Smuzhiyun const struct inode *dir, \ 613*4882a593Smuzhiyun const struct dentry *dentry \ 614*4882a593Smuzhiyun ), \ 615*4882a593Smuzhiyun TP_ARGS(dir, dentry)) 616*4882a593Smuzhiyun 617*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_directory_event_done, 618*4882a593Smuzhiyun TP_PROTO( 619*4882a593Smuzhiyun const struct inode *dir, 620*4882a593Smuzhiyun const struct dentry *dentry, 621*4882a593Smuzhiyun int error 622*4882a593Smuzhiyun ), 623*4882a593Smuzhiyun 624*4882a593Smuzhiyun TP_ARGS(dir, dentry, error), 625*4882a593Smuzhiyun 626*4882a593Smuzhiyun TP_STRUCT__entry( 627*4882a593Smuzhiyun __field(unsigned long, error) 628*4882a593Smuzhiyun __field(dev_t, dev) 629*4882a593Smuzhiyun __field(u64, dir) 630*4882a593Smuzhiyun __string(name, dentry->d_name.name) 631*4882a593Smuzhiyun ), 632*4882a593Smuzhiyun 633*4882a593Smuzhiyun TP_fast_assign( 634*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 635*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 636*4882a593Smuzhiyun __entry->error = error < 0 ? -error : 0; 637*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 638*4882a593Smuzhiyun ), 639*4882a593Smuzhiyun 640*4882a593Smuzhiyun TP_printk( 641*4882a593Smuzhiyun "error=%ld (%s) name=%02x:%02x:%llu/%s", 642*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 643*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 644*4882a593Smuzhiyun (unsigned long long)__entry->dir, 645*4882a593Smuzhiyun __get_str(name) 646*4882a593Smuzhiyun ) 647*4882a593Smuzhiyun ); 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 650*4882a593Smuzhiyun DEFINE_EVENT(nfs_directory_event_done, name, \ 651*4882a593Smuzhiyun TP_PROTO( \ 652*4882a593Smuzhiyun const struct inode *dir, \ 653*4882a593Smuzhiyun const struct dentry *dentry, \ 654*4882a593Smuzhiyun int error \ 655*4882a593Smuzhiyun ), \ 656*4882a593Smuzhiyun TP_ARGS(dir, dentry, error)) 657*4882a593Smuzhiyun 658*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 659*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 660*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 661*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 662*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 663*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 664*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 665*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 666*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 667*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 668*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 669*4882a593Smuzhiyun DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun TRACE_EVENT(nfs_link_enter, 672*4882a593Smuzhiyun TP_PROTO( 673*4882a593Smuzhiyun const struct inode *inode, 674*4882a593Smuzhiyun const struct inode *dir, 675*4882a593Smuzhiyun const struct dentry *dentry 676*4882a593Smuzhiyun ), 677*4882a593Smuzhiyun 678*4882a593Smuzhiyun TP_ARGS(inode, dir, dentry), 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun TP_STRUCT__entry( 681*4882a593Smuzhiyun __field(dev_t, dev) 682*4882a593Smuzhiyun __field(u64, fileid) 683*4882a593Smuzhiyun __field(u64, dir) 684*4882a593Smuzhiyun __string(name, dentry->d_name.name) 685*4882a593Smuzhiyun ), 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun TP_fast_assign( 688*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 689*4882a593Smuzhiyun __entry->fileid = NFS_FILEID(inode); 690*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 691*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 692*4882a593Smuzhiyun ), 693*4882a593Smuzhiyun 694*4882a593Smuzhiyun TP_printk( 695*4882a593Smuzhiyun "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 696*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 697*4882a593Smuzhiyun __entry->fileid, 698*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 699*4882a593Smuzhiyun (unsigned long long)__entry->dir, 700*4882a593Smuzhiyun __get_str(name) 701*4882a593Smuzhiyun ) 702*4882a593Smuzhiyun ); 703*4882a593Smuzhiyun 704*4882a593Smuzhiyun TRACE_EVENT(nfs_link_exit, 705*4882a593Smuzhiyun TP_PROTO( 706*4882a593Smuzhiyun const struct inode *inode, 707*4882a593Smuzhiyun const struct inode *dir, 708*4882a593Smuzhiyun const struct dentry *dentry, 709*4882a593Smuzhiyun int error 710*4882a593Smuzhiyun ), 711*4882a593Smuzhiyun 712*4882a593Smuzhiyun TP_ARGS(inode, dir, dentry, error), 713*4882a593Smuzhiyun 714*4882a593Smuzhiyun TP_STRUCT__entry( 715*4882a593Smuzhiyun __field(unsigned long, error) 716*4882a593Smuzhiyun __field(dev_t, dev) 717*4882a593Smuzhiyun __field(u64, fileid) 718*4882a593Smuzhiyun __field(u64, dir) 719*4882a593Smuzhiyun __string(name, dentry->d_name.name) 720*4882a593Smuzhiyun ), 721*4882a593Smuzhiyun 722*4882a593Smuzhiyun TP_fast_assign( 723*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 724*4882a593Smuzhiyun __entry->fileid = NFS_FILEID(inode); 725*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 726*4882a593Smuzhiyun __entry->error = error < 0 ? -error : 0; 727*4882a593Smuzhiyun __assign_str(name, dentry->d_name.name); 728*4882a593Smuzhiyun ), 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun TP_printk( 731*4882a593Smuzhiyun "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 732*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 733*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 734*4882a593Smuzhiyun __entry->fileid, 735*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 736*4882a593Smuzhiyun (unsigned long long)__entry->dir, 737*4882a593Smuzhiyun __get_str(name) 738*4882a593Smuzhiyun ) 739*4882a593Smuzhiyun ); 740*4882a593Smuzhiyun 741*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_rename_event, 742*4882a593Smuzhiyun TP_PROTO( 743*4882a593Smuzhiyun const struct inode *old_dir, 744*4882a593Smuzhiyun const struct dentry *old_dentry, 745*4882a593Smuzhiyun const struct inode *new_dir, 746*4882a593Smuzhiyun const struct dentry *new_dentry 747*4882a593Smuzhiyun ), 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun TP_STRUCT__entry( 752*4882a593Smuzhiyun __field(dev_t, dev) 753*4882a593Smuzhiyun __field(u64, old_dir) 754*4882a593Smuzhiyun __field(u64, new_dir) 755*4882a593Smuzhiyun __string(old_name, old_dentry->d_name.name) 756*4882a593Smuzhiyun __string(new_name, new_dentry->d_name.name) 757*4882a593Smuzhiyun ), 758*4882a593Smuzhiyun 759*4882a593Smuzhiyun TP_fast_assign( 760*4882a593Smuzhiyun __entry->dev = old_dir->i_sb->s_dev; 761*4882a593Smuzhiyun __entry->old_dir = NFS_FILEID(old_dir); 762*4882a593Smuzhiyun __entry->new_dir = NFS_FILEID(new_dir); 763*4882a593Smuzhiyun __assign_str(old_name, old_dentry->d_name.name); 764*4882a593Smuzhiyun __assign_str(new_name, new_dentry->d_name.name); 765*4882a593Smuzhiyun ), 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun TP_printk( 768*4882a593Smuzhiyun "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 769*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 770*4882a593Smuzhiyun (unsigned long long)__entry->old_dir, 771*4882a593Smuzhiyun __get_str(old_name), 772*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 773*4882a593Smuzhiyun (unsigned long long)__entry->new_dir, 774*4882a593Smuzhiyun __get_str(new_name) 775*4882a593Smuzhiyun ) 776*4882a593Smuzhiyun ); 777*4882a593Smuzhiyun #define DEFINE_NFS_RENAME_EVENT(name) \ 778*4882a593Smuzhiyun DEFINE_EVENT(nfs_rename_event, name, \ 779*4882a593Smuzhiyun TP_PROTO( \ 780*4882a593Smuzhiyun const struct inode *old_dir, \ 781*4882a593Smuzhiyun const struct dentry *old_dentry, \ 782*4882a593Smuzhiyun const struct inode *new_dir, \ 783*4882a593Smuzhiyun const struct dentry *new_dentry \ 784*4882a593Smuzhiyun ), \ 785*4882a593Smuzhiyun TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_rename_event_done, 788*4882a593Smuzhiyun TP_PROTO( 789*4882a593Smuzhiyun const struct inode *old_dir, 790*4882a593Smuzhiyun const struct dentry *old_dentry, 791*4882a593Smuzhiyun const struct inode *new_dir, 792*4882a593Smuzhiyun const struct dentry *new_dentry, 793*4882a593Smuzhiyun int error 794*4882a593Smuzhiyun ), 795*4882a593Smuzhiyun 796*4882a593Smuzhiyun TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun TP_STRUCT__entry( 799*4882a593Smuzhiyun __field(dev_t, dev) 800*4882a593Smuzhiyun __field(unsigned long, error) 801*4882a593Smuzhiyun __field(u64, old_dir) 802*4882a593Smuzhiyun __string(old_name, old_dentry->d_name.name) 803*4882a593Smuzhiyun __field(u64, new_dir) 804*4882a593Smuzhiyun __string(new_name, new_dentry->d_name.name) 805*4882a593Smuzhiyun ), 806*4882a593Smuzhiyun 807*4882a593Smuzhiyun TP_fast_assign( 808*4882a593Smuzhiyun __entry->dev = old_dir->i_sb->s_dev; 809*4882a593Smuzhiyun __entry->error = -error; 810*4882a593Smuzhiyun __entry->old_dir = NFS_FILEID(old_dir); 811*4882a593Smuzhiyun __entry->new_dir = NFS_FILEID(new_dir); 812*4882a593Smuzhiyun __assign_str(old_name, old_dentry->d_name.name); 813*4882a593Smuzhiyun __assign_str(new_name, new_dentry->d_name.name); 814*4882a593Smuzhiyun ), 815*4882a593Smuzhiyun 816*4882a593Smuzhiyun TP_printk( 817*4882a593Smuzhiyun "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 818*4882a593Smuzhiyun "new_name=%02x:%02x:%llu/%s", 819*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 820*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 821*4882a593Smuzhiyun (unsigned long long)__entry->old_dir, 822*4882a593Smuzhiyun __get_str(old_name), 823*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 824*4882a593Smuzhiyun (unsigned long long)__entry->new_dir, 825*4882a593Smuzhiyun __get_str(new_name) 826*4882a593Smuzhiyun ) 827*4882a593Smuzhiyun ); 828*4882a593Smuzhiyun #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 829*4882a593Smuzhiyun DEFINE_EVENT(nfs_rename_event_done, name, \ 830*4882a593Smuzhiyun TP_PROTO( \ 831*4882a593Smuzhiyun const struct inode *old_dir, \ 832*4882a593Smuzhiyun const struct dentry *old_dentry, \ 833*4882a593Smuzhiyun const struct inode *new_dir, \ 834*4882a593Smuzhiyun const struct dentry *new_dentry, \ 835*4882a593Smuzhiyun int error \ 836*4882a593Smuzhiyun ), \ 837*4882a593Smuzhiyun TP_ARGS(old_dir, old_dentry, new_dir, \ 838*4882a593Smuzhiyun new_dentry, error)) 839*4882a593Smuzhiyun 840*4882a593Smuzhiyun DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 841*4882a593Smuzhiyun DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 842*4882a593Smuzhiyun 843*4882a593Smuzhiyun DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 844*4882a593Smuzhiyun 845*4882a593Smuzhiyun TRACE_EVENT(nfs_sillyrename_unlink, 846*4882a593Smuzhiyun TP_PROTO( 847*4882a593Smuzhiyun const struct nfs_unlinkdata *data, 848*4882a593Smuzhiyun int error 849*4882a593Smuzhiyun ), 850*4882a593Smuzhiyun 851*4882a593Smuzhiyun TP_ARGS(data, error), 852*4882a593Smuzhiyun 853*4882a593Smuzhiyun TP_STRUCT__entry( 854*4882a593Smuzhiyun __field(dev_t, dev) 855*4882a593Smuzhiyun __field(unsigned long, error) 856*4882a593Smuzhiyun __field(u64, dir) 857*4882a593Smuzhiyun __dynamic_array(char, name, data->args.name.len + 1) 858*4882a593Smuzhiyun ), 859*4882a593Smuzhiyun 860*4882a593Smuzhiyun TP_fast_assign( 861*4882a593Smuzhiyun struct inode *dir = d_inode(data->dentry->d_parent); 862*4882a593Smuzhiyun size_t len = data->args.name.len; 863*4882a593Smuzhiyun __entry->dev = dir->i_sb->s_dev; 864*4882a593Smuzhiyun __entry->dir = NFS_FILEID(dir); 865*4882a593Smuzhiyun __entry->error = -error; 866*4882a593Smuzhiyun memcpy(__get_str(name), 867*4882a593Smuzhiyun data->args.name.name, len); 868*4882a593Smuzhiyun __get_str(name)[len] = 0; 869*4882a593Smuzhiyun ), 870*4882a593Smuzhiyun 871*4882a593Smuzhiyun TP_printk( 872*4882a593Smuzhiyun "error=%ld (%s) name=%02x:%02x:%llu/%s", 873*4882a593Smuzhiyun -__entry->error, nfs_show_status(__entry->error), 874*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 875*4882a593Smuzhiyun (unsigned long long)__entry->dir, 876*4882a593Smuzhiyun __get_str(name) 877*4882a593Smuzhiyun ) 878*4882a593Smuzhiyun ); 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun TRACE_EVENT(nfs_initiate_read, 881*4882a593Smuzhiyun TP_PROTO( 882*4882a593Smuzhiyun const struct nfs_pgio_header *hdr 883*4882a593Smuzhiyun ), 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun TP_ARGS(hdr), 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun TP_STRUCT__entry( 888*4882a593Smuzhiyun __field(dev_t, dev) 889*4882a593Smuzhiyun __field(u32, fhandle) 890*4882a593Smuzhiyun __field(u64, fileid) 891*4882a593Smuzhiyun __field(loff_t, offset) 892*4882a593Smuzhiyun __field(u32, count) 893*4882a593Smuzhiyun ), 894*4882a593Smuzhiyun 895*4882a593Smuzhiyun TP_fast_assign( 896*4882a593Smuzhiyun const struct inode *inode = hdr->inode; 897*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 898*4882a593Smuzhiyun const struct nfs_fh *fh = hdr->args.fh ? 899*4882a593Smuzhiyun hdr->args.fh : &nfsi->fh; 900*4882a593Smuzhiyun 901*4882a593Smuzhiyun __entry->offset = hdr->args.offset; 902*4882a593Smuzhiyun __entry->count = hdr->args.count; 903*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 904*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 905*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 906*4882a593Smuzhiyun ), 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun TP_printk( 909*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 910*4882a593Smuzhiyun "offset=%lld count=%u", 911*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 912*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 913*4882a593Smuzhiyun __entry->fhandle, 914*4882a593Smuzhiyun (long long)__entry->offset, __entry->count 915*4882a593Smuzhiyun ) 916*4882a593Smuzhiyun ); 917*4882a593Smuzhiyun 918*4882a593Smuzhiyun TRACE_EVENT(nfs_readpage_done, 919*4882a593Smuzhiyun TP_PROTO( 920*4882a593Smuzhiyun const struct rpc_task *task, 921*4882a593Smuzhiyun const struct nfs_pgio_header *hdr 922*4882a593Smuzhiyun ), 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun TP_ARGS(task, hdr), 925*4882a593Smuzhiyun 926*4882a593Smuzhiyun TP_STRUCT__entry( 927*4882a593Smuzhiyun __field(dev_t, dev) 928*4882a593Smuzhiyun __field(u32, fhandle) 929*4882a593Smuzhiyun __field(u64, fileid) 930*4882a593Smuzhiyun __field(loff_t, offset) 931*4882a593Smuzhiyun __field(u32, arg_count) 932*4882a593Smuzhiyun __field(u32, res_count) 933*4882a593Smuzhiyun __field(bool, eof) 934*4882a593Smuzhiyun __field(int, status) 935*4882a593Smuzhiyun ), 936*4882a593Smuzhiyun 937*4882a593Smuzhiyun TP_fast_assign( 938*4882a593Smuzhiyun const struct inode *inode = hdr->inode; 939*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 940*4882a593Smuzhiyun const struct nfs_fh *fh = hdr->args.fh ? 941*4882a593Smuzhiyun hdr->args.fh : &nfsi->fh; 942*4882a593Smuzhiyun 943*4882a593Smuzhiyun __entry->status = task->tk_status; 944*4882a593Smuzhiyun __entry->offset = hdr->args.offset; 945*4882a593Smuzhiyun __entry->arg_count = hdr->args.count; 946*4882a593Smuzhiyun __entry->res_count = hdr->res.count; 947*4882a593Smuzhiyun __entry->eof = hdr->res.eof; 948*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 949*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 950*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 951*4882a593Smuzhiyun ), 952*4882a593Smuzhiyun 953*4882a593Smuzhiyun TP_printk( 954*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 955*4882a593Smuzhiyun "offset=%lld count=%u res=%u status=%d%s", 956*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 957*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 958*4882a593Smuzhiyun __entry->fhandle, 959*4882a593Smuzhiyun (long long)__entry->offset, __entry->arg_count, 960*4882a593Smuzhiyun __entry->res_count, __entry->status, 961*4882a593Smuzhiyun __entry->eof ? " eof" : "" 962*4882a593Smuzhiyun ) 963*4882a593Smuzhiyun ); 964*4882a593Smuzhiyun 965*4882a593Smuzhiyun TRACE_EVENT(nfs_readpage_short, 966*4882a593Smuzhiyun TP_PROTO( 967*4882a593Smuzhiyun const struct rpc_task *task, 968*4882a593Smuzhiyun const struct nfs_pgio_header *hdr 969*4882a593Smuzhiyun ), 970*4882a593Smuzhiyun 971*4882a593Smuzhiyun TP_ARGS(task, hdr), 972*4882a593Smuzhiyun 973*4882a593Smuzhiyun TP_STRUCT__entry( 974*4882a593Smuzhiyun __field(dev_t, dev) 975*4882a593Smuzhiyun __field(u32, fhandle) 976*4882a593Smuzhiyun __field(u64, fileid) 977*4882a593Smuzhiyun __field(loff_t, offset) 978*4882a593Smuzhiyun __field(u32, arg_count) 979*4882a593Smuzhiyun __field(u32, res_count) 980*4882a593Smuzhiyun __field(bool, eof) 981*4882a593Smuzhiyun __field(int, status) 982*4882a593Smuzhiyun ), 983*4882a593Smuzhiyun 984*4882a593Smuzhiyun TP_fast_assign( 985*4882a593Smuzhiyun const struct inode *inode = hdr->inode; 986*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 987*4882a593Smuzhiyun const struct nfs_fh *fh = hdr->args.fh ? 988*4882a593Smuzhiyun hdr->args.fh : &nfsi->fh; 989*4882a593Smuzhiyun 990*4882a593Smuzhiyun __entry->status = task->tk_status; 991*4882a593Smuzhiyun __entry->offset = hdr->args.offset; 992*4882a593Smuzhiyun __entry->arg_count = hdr->args.count; 993*4882a593Smuzhiyun __entry->res_count = hdr->res.count; 994*4882a593Smuzhiyun __entry->eof = hdr->res.eof; 995*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 996*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 997*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 998*4882a593Smuzhiyun ), 999*4882a593Smuzhiyun 1000*4882a593Smuzhiyun TP_printk( 1001*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 1002*4882a593Smuzhiyun "offset=%lld count=%u res=%u status=%d%s", 1003*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1004*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 1005*4882a593Smuzhiyun __entry->fhandle, 1006*4882a593Smuzhiyun (long long)__entry->offset, __entry->arg_count, 1007*4882a593Smuzhiyun __entry->res_count, __entry->status, 1008*4882a593Smuzhiyun __entry->eof ? " eof" : "" 1009*4882a593Smuzhiyun ) 1010*4882a593Smuzhiyun ); 1011*4882a593Smuzhiyun 1012*4882a593Smuzhiyun TRACE_EVENT(nfs_pgio_error, 1013*4882a593Smuzhiyun TP_PROTO( 1014*4882a593Smuzhiyun const struct nfs_pgio_header *hdr, 1015*4882a593Smuzhiyun int error, 1016*4882a593Smuzhiyun loff_t pos 1017*4882a593Smuzhiyun ), 1018*4882a593Smuzhiyun 1019*4882a593Smuzhiyun TP_ARGS(hdr, error, pos), 1020*4882a593Smuzhiyun 1021*4882a593Smuzhiyun TP_STRUCT__entry( 1022*4882a593Smuzhiyun __field(dev_t, dev) 1023*4882a593Smuzhiyun __field(u32, fhandle) 1024*4882a593Smuzhiyun __field(u64, fileid) 1025*4882a593Smuzhiyun __field(loff_t, offset) 1026*4882a593Smuzhiyun __field(u32, arg_count) 1027*4882a593Smuzhiyun __field(u32, res_count) 1028*4882a593Smuzhiyun __field(loff_t, pos) 1029*4882a593Smuzhiyun __field(int, status) 1030*4882a593Smuzhiyun ), 1031*4882a593Smuzhiyun 1032*4882a593Smuzhiyun TP_fast_assign( 1033*4882a593Smuzhiyun const struct inode *inode = hdr->inode; 1034*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 1035*4882a593Smuzhiyun const struct nfs_fh *fh = hdr->args.fh ? 1036*4882a593Smuzhiyun hdr->args.fh : &nfsi->fh; 1037*4882a593Smuzhiyun 1038*4882a593Smuzhiyun __entry->status = error; 1039*4882a593Smuzhiyun __entry->offset = hdr->args.offset; 1040*4882a593Smuzhiyun __entry->arg_count = hdr->args.count; 1041*4882a593Smuzhiyun __entry->res_count = hdr->res.count; 1042*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 1043*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 1044*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 1045*4882a593Smuzhiyun ), 1046*4882a593Smuzhiyun 1047*4882a593Smuzhiyun TP_printk("fileid=%02x:%02x:%llu fhandle=0x%08x " 1048*4882a593Smuzhiyun "offset=%lld count=%u res=%u pos=%llu status=%d", 1049*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1050*4882a593Smuzhiyun (unsigned long long)__entry->fileid, __entry->fhandle, 1051*4882a593Smuzhiyun (long long)__entry->offset, __entry->arg_count, __entry->res_count, 1052*4882a593Smuzhiyun __entry->pos, __entry->status 1053*4882a593Smuzhiyun ) 1054*4882a593Smuzhiyun ); 1055*4882a593Smuzhiyun 1056*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_UNSTABLE); 1057*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_DATA_SYNC); 1058*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_FILE_SYNC); 1059*4882a593Smuzhiyun 1060*4882a593Smuzhiyun #define nfs_show_stable(stable) \ 1061*4882a593Smuzhiyun __print_symbolic(stable, \ 1062*4882a593Smuzhiyun { NFS_UNSTABLE, "UNSTABLE" }, \ 1063*4882a593Smuzhiyun { NFS_DATA_SYNC, "DATA_SYNC" }, \ 1064*4882a593Smuzhiyun { NFS_FILE_SYNC, "FILE_SYNC" }) 1065*4882a593Smuzhiyun 1066*4882a593Smuzhiyun TRACE_EVENT(nfs_initiate_write, 1067*4882a593Smuzhiyun TP_PROTO( 1068*4882a593Smuzhiyun const struct nfs_pgio_header *hdr 1069*4882a593Smuzhiyun ), 1070*4882a593Smuzhiyun 1071*4882a593Smuzhiyun TP_ARGS(hdr), 1072*4882a593Smuzhiyun 1073*4882a593Smuzhiyun TP_STRUCT__entry( 1074*4882a593Smuzhiyun __field(dev_t, dev) 1075*4882a593Smuzhiyun __field(u32, fhandle) 1076*4882a593Smuzhiyun __field(u64, fileid) 1077*4882a593Smuzhiyun __field(loff_t, offset) 1078*4882a593Smuzhiyun __field(u32, count) 1079*4882a593Smuzhiyun __field(enum nfs3_stable_how, stable) 1080*4882a593Smuzhiyun ), 1081*4882a593Smuzhiyun 1082*4882a593Smuzhiyun TP_fast_assign( 1083*4882a593Smuzhiyun const struct inode *inode = hdr->inode; 1084*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 1085*4882a593Smuzhiyun const struct nfs_fh *fh = hdr->args.fh ? 1086*4882a593Smuzhiyun hdr->args.fh : &nfsi->fh; 1087*4882a593Smuzhiyun 1088*4882a593Smuzhiyun __entry->offset = hdr->args.offset; 1089*4882a593Smuzhiyun __entry->count = hdr->args.count; 1090*4882a593Smuzhiyun __entry->stable = hdr->args.stable; 1091*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 1092*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 1093*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 1094*4882a593Smuzhiyun ), 1095*4882a593Smuzhiyun 1096*4882a593Smuzhiyun TP_printk( 1097*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 1098*4882a593Smuzhiyun "offset=%lld count=%u stable=%s", 1099*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1100*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 1101*4882a593Smuzhiyun __entry->fhandle, 1102*4882a593Smuzhiyun (long long)__entry->offset, __entry->count, 1103*4882a593Smuzhiyun nfs_show_stable(__entry->stable) 1104*4882a593Smuzhiyun ) 1105*4882a593Smuzhiyun ); 1106*4882a593Smuzhiyun 1107*4882a593Smuzhiyun TRACE_EVENT(nfs_writeback_done, 1108*4882a593Smuzhiyun TP_PROTO( 1109*4882a593Smuzhiyun const struct rpc_task *task, 1110*4882a593Smuzhiyun const struct nfs_pgio_header *hdr 1111*4882a593Smuzhiyun ), 1112*4882a593Smuzhiyun 1113*4882a593Smuzhiyun TP_ARGS(task, hdr), 1114*4882a593Smuzhiyun 1115*4882a593Smuzhiyun TP_STRUCT__entry( 1116*4882a593Smuzhiyun __field(dev_t, dev) 1117*4882a593Smuzhiyun __field(u32, fhandle) 1118*4882a593Smuzhiyun __field(u64, fileid) 1119*4882a593Smuzhiyun __field(loff_t, offset) 1120*4882a593Smuzhiyun __field(u32, arg_count) 1121*4882a593Smuzhiyun __field(u32, res_count) 1122*4882a593Smuzhiyun __field(int, status) 1123*4882a593Smuzhiyun __field(enum nfs3_stable_how, stable) 1124*4882a593Smuzhiyun __array(char, verifier, NFS4_VERIFIER_SIZE) 1125*4882a593Smuzhiyun ), 1126*4882a593Smuzhiyun 1127*4882a593Smuzhiyun TP_fast_assign( 1128*4882a593Smuzhiyun const struct inode *inode = hdr->inode; 1129*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 1130*4882a593Smuzhiyun const struct nfs_fh *fh = hdr->args.fh ? 1131*4882a593Smuzhiyun hdr->args.fh : &nfsi->fh; 1132*4882a593Smuzhiyun const struct nfs_writeverf *verf = hdr->res.verf; 1133*4882a593Smuzhiyun 1134*4882a593Smuzhiyun __entry->status = task->tk_status; 1135*4882a593Smuzhiyun __entry->offset = hdr->args.offset; 1136*4882a593Smuzhiyun __entry->arg_count = hdr->args.count; 1137*4882a593Smuzhiyun __entry->res_count = hdr->res.count; 1138*4882a593Smuzhiyun __entry->stable = verf->committed; 1139*4882a593Smuzhiyun memcpy(__entry->verifier, 1140*4882a593Smuzhiyun &verf->verifier, 1141*4882a593Smuzhiyun NFS4_VERIFIER_SIZE); 1142*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 1143*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 1144*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 1145*4882a593Smuzhiyun ), 1146*4882a593Smuzhiyun 1147*4882a593Smuzhiyun TP_printk( 1148*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 1149*4882a593Smuzhiyun "offset=%lld count=%u res=%u status=%d stable=%s " 1150*4882a593Smuzhiyun "verifier=%s", 1151*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1152*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 1153*4882a593Smuzhiyun __entry->fhandle, 1154*4882a593Smuzhiyun (long long)__entry->offset, __entry->arg_count, 1155*4882a593Smuzhiyun __entry->res_count, __entry->status, 1156*4882a593Smuzhiyun nfs_show_stable(__entry->stable), 1157*4882a593Smuzhiyun __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 1158*4882a593Smuzhiyun ) 1159*4882a593Smuzhiyun ); 1160*4882a593Smuzhiyun 1161*4882a593Smuzhiyun DECLARE_EVENT_CLASS(nfs_page_error_class, 1162*4882a593Smuzhiyun TP_PROTO( 1163*4882a593Smuzhiyun const struct nfs_page *req, 1164*4882a593Smuzhiyun int error 1165*4882a593Smuzhiyun ), 1166*4882a593Smuzhiyun 1167*4882a593Smuzhiyun TP_ARGS(req, error), 1168*4882a593Smuzhiyun 1169*4882a593Smuzhiyun TP_STRUCT__entry( 1170*4882a593Smuzhiyun __field(const void *, req) 1171*4882a593Smuzhiyun __field(pgoff_t, index) 1172*4882a593Smuzhiyun __field(unsigned int, offset) 1173*4882a593Smuzhiyun __field(unsigned int, pgbase) 1174*4882a593Smuzhiyun __field(unsigned int, bytes) 1175*4882a593Smuzhiyun __field(int, error) 1176*4882a593Smuzhiyun ), 1177*4882a593Smuzhiyun 1178*4882a593Smuzhiyun TP_fast_assign( 1179*4882a593Smuzhiyun __entry->req = req; 1180*4882a593Smuzhiyun __entry->index = req->wb_index; 1181*4882a593Smuzhiyun __entry->offset = req->wb_offset; 1182*4882a593Smuzhiyun __entry->pgbase = req->wb_pgbase; 1183*4882a593Smuzhiyun __entry->bytes = req->wb_bytes; 1184*4882a593Smuzhiyun __entry->error = error; 1185*4882a593Smuzhiyun ), 1186*4882a593Smuzhiyun 1187*4882a593Smuzhiyun TP_printk( 1188*4882a593Smuzhiyun "req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d", 1189*4882a593Smuzhiyun __entry->req, __entry->index, __entry->offset, 1190*4882a593Smuzhiyun __entry->pgbase, __entry->bytes, __entry->error 1191*4882a593Smuzhiyun ) 1192*4882a593Smuzhiyun ); 1193*4882a593Smuzhiyun 1194*4882a593Smuzhiyun #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1195*4882a593Smuzhiyun DEFINE_EVENT(nfs_page_error_class, name, \ 1196*4882a593Smuzhiyun TP_PROTO( \ 1197*4882a593Smuzhiyun const struct nfs_page *req, \ 1198*4882a593Smuzhiyun int error \ 1199*4882a593Smuzhiyun ), \ 1200*4882a593Smuzhiyun TP_ARGS(req, error)) 1201*4882a593Smuzhiyun 1202*4882a593Smuzhiyun DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1203*4882a593Smuzhiyun DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1204*4882a593Smuzhiyun DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1205*4882a593Smuzhiyun 1206*4882a593Smuzhiyun TRACE_EVENT(nfs_initiate_commit, 1207*4882a593Smuzhiyun TP_PROTO( 1208*4882a593Smuzhiyun const struct nfs_commit_data *data 1209*4882a593Smuzhiyun ), 1210*4882a593Smuzhiyun 1211*4882a593Smuzhiyun TP_ARGS(data), 1212*4882a593Smuzhiyun 1213*4882a593Smuzhiyun TP_STRUCT__entry( 1214*4882a593Smuzhiyun __field(dev_t, dev) 1215*4882a593Smuzhiyun __field(u32, fhandle) 1216*4882a593Smuzhiyun __field(u64, fileid) 1217*4882a593Smuzhiyun __field(loff_t, offset) 1218*4882a593Smuzhiyun __field(u32, count) 1219*4882a593Smuzhiyun ), 1220*4882a593Smuzhiyun 1221*4882a593Smuzhiyun TP_fast_assign( 1222*4882a593Smuzhiyun const struct inode *inode = data->inode; 1223*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 1224*4882a593Smuzhiyun const struct nfs_fh *fh = data->args.fh ? 1225*4882a593Smuzhiyun data->args.fh : &nfsi->fh; 1226*4882a593Smuzhiyun 1227*4882a593Smuzhiyun __entry->offset = data->args.offset; 1228*4882a593Smuzhiyun __entry->count = data->args.count; 1229*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 1230*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 1231*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 1232*4882a593Smuzhiyun ), 1233*4882a593Smuzhiyun 1234*4882a593Smuzhiyun TP_printk( 1235*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 1236*4882a593Smuzhiyun "offset=%lld count=%u", 1237*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1238*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 1239*4882a593Smuzhiyun __entry->fhandle, 1240*4882a593Smuzhiyun (long long)__entry->offset, __entry->count 1241*4882a593Smuzhiyun ) 1242*4882a593Smuzhiyun ); 1243*4882a593Smuzhiyun 1244*4882a593Smuzhiyun TRACE_EVENT(nfs_commit_done, 1245*4882a593Smuzhiyun TP_PROTO( 1246*4882a593Smuzhiyun const struct rpc_task *task, 1247*4882a593Smuzhiyun const struct nfs_commit_data *data 1248*4882a593Smuzhiyun ), 1249*4882a593Smuzhiyun 1250*4882a593Smuzhiyun TP_ARGS(task, data), 1251*4882a593Smuzhiyun 1252*4882a593Smuzhiyun TP_STRUCT__entry( 1253*4882a593Smuzhiyun __field(dev_t, dev) 1254*4882a593Smuzhiyun __field(u32, fhandle) 1255*4882a593Smuzhiyun __field(u64, fileid) 1256*4882a593Smuzhiyun __field(loff_t, offset) 1257*4882a593Smuzhiyun __field(int, status) 1258*4882a593Smuzhiyun __field(enum nfs3_stable_how, stable) 1259*4882a593Smuzhiyun __array(char, verifier, NFS4_VERIFIER_SIZE) 1260*4882a593Smuzhiyun ), 1261*4882a593Smuzhiyun 1262*4882a593Smuzhiyun TP_fast_assign( 1263*4882a593Smuzhiyun const struct inode *inode = data->inode; 1264*4882a593Smuzhiyun const struct nfs_inode *nfsi = NFS_I(inode); 1265*4882a593Smuzhiyun const struct nfs_fh *fh = data->args.fh ? 1266*4882a593Smuzhiyun data->args.fh : &nfsi->fh; 1267*4882a593Smuzhiyun const struct nfs_writeverf *verf = data->res.verf; 1268*4882a593Smuzhiyun 1269*4882a593Smuzhiyun __entry->status = task->tk_status; 1270*4882a593Smuzhiyun __entry->offset = data->args.offset; 1271*4882a593Smuzhiyun __entry->stable = verf->committed; 1272*4882a593Smuzhiyun memcpy(__entry->verifier, 1273*4882a593Smuzhiyun &verf->verifier, 1274*4882a593Smuzhiyun NFS4_VERIFIER_SIZE); 1275*4882a593Smuzhiyun __entry->dev = inode->i_sb->s_dev; 1276*4882a593Smuzhiyun __entry->fileid = nfsi->fileid; 1277*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 1278*4882a593Smuzhiyun ), 1279*4882a593Smuzhiyun 1280*4882a593Smuzhiyun TP_printk( 1281*4882a593Smuzhiyun "fileid=%02x:%02x:%llu fhandle=0x%08x " 1282*4882a593Smuzhiyun "offset=%lld status=%d stable=%s verifier=%s", 1283*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1284*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 1285*4882a593Smuzhiyun __entry->fhandle, 1286*4882a593Smuzhiyun (long long)__entry->offset, __entry->status, 1287*4882a593Smuzhiyun nfs_show_stable(__entry->stable), 1288*4882a593Smuzhiyun __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 1289*4882a593Smuzhiyun ) 1290*4882a593Smuzhiyun ); 1291*4882a593Smuzhiyun 1292*4882a593Smuzhiyun TRACE_EVENT(nfs_fh_to_dentry, 1293*4882a593Smuzhiyun TP_PROTO( 1294*4882a593Smuzhiyun const struct super_block *sb, 1295*4882a593Smuzhiyun const struct nfs_fh *fh, 1296*4882a593Smuzhiyun u64 fileid, 1297*4882a593Smuzhiyun int error 1298*4882a593Smuzhiyun ), 1299*4882a593Smuzhiyun 1300*4882a593Smuzhiyun TP_ARGS(sb, fh, fileid, error), 1301*4882a593Smuzhiyun 1302*4882a593Smuzhiyun TP_STRUCT__entry( 1303*4882a593Smuzhiyun __field(int, error) 1304*4882a593Smuzhiyun __field(dev_t, dev) 1305*4882a593Smuzhiyun __field(u32, fhandle) 1306*4882a593Smuzhiyun __field(u64, fileid) 1307*4882a593Smuzhiyun ), 1308*4882a593Smuzhiyun 1309*4882a593Smuzhiyun TP_fast_assign( 1310*4882a593Smuzhiyun __entry->error = error; 1311*4882a593Smuzhiyun __entry->dev = sb->s_dev; 1312*4882a593Smuzhiyun __entry->fileid = fileid; 1313*4882a593Smuzhiyun __entry->fhandle = nfs_fhandle_hash(fh); 1314*4882a593Smuzhiyun ), 1315*4882a593Smuzhiyun 1316*4882a593Smuzhiyun TP_printk( 1317*4882a593Smuzhiyun "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 1318*4882a593Smuzhiyun __entry->error, 1319*4882a593Smuzhiyun MAJOR(__entry->dev), MINOR(__entry->dev), 1320*4882a593Smuzhiyun (unsigned long long)__entry->fileid, 1321*4882a593Smuzhiyun __entry->fhandle 1322*4882a593Smuzhiyun ) 1323*4882a593Smuzhiyun ); 1324*4882a593Smuzhiyun 1325*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFS_OK); 1326*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_PERM); 1327*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NOENT); 1328*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_IO); 1329*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NXIO); 1330*4882a593Smuzhiyun TRACE_DEFINE_ENUM(ECHILD); 1331*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_EAGAIN); 1332*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_ACCES); 1333*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_EXIST); 1334*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_XDEV); 1335*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NODEV); 1336*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NOTDIR); 1337*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_ISDIR); 1338*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_INVAL); 1339*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_FBIG); 1340*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NOSPC); 1341*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_ROFS); 1342*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_MLINK); 1343*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_OPNOTSUPP); 1344*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NAMETOOLONG); 1345*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NOTEMPTY); 1346*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_DQUOT); 1347*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_STALE); 1348*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_REMOTE); 1349*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_WFLUSH); 1350*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_BADHANDLE); 1351*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NOT_SYNC); 1352*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_BAD_COOKIE); 1353*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_NOTSUPP); 1354*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_TOOSMALL); 1355*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_SERVERFAULT); 1356*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_BADTYPE); 1357*4882a593Smuzhiyun TRACE_DEFINE_ENUM(NFSERR_JUKEBOX); 1358*4882a593Smuzhiyun 1359*4882a593Smuzhiyun #define nfs_show_status(x) \ 1360*4882a593Smuzhiyun __print_symbolic(x, \ 1361*4882a593Smuzhiyun { NFS_OK, "OK" }, \ 1362*4882a593Smuzhiyun { NFSERR_PERM, "PERM" }, \ 1363*4882a593Smuzhiyun { NFSERR_NOENT, "NOENT" }, \ 1364*4882a593Smuzhiyun { NFSERR_IO, "IO" }, \ 1365*4882a593Smuzhiyun { NFSERR_NXIO, "NXIO" }, \ 1366*4882a593Smuzhiyun { ECHILD, "CHILD" }, \ 1367*4882a593Smuzhiyun { NFSERR_EAGAIN, "AGAIN" }, \ 1368*4882a593Smuzhiyun { NFSERR_ACCES, "ACCES" }, \ 1369*4882a593Smuzhiyun { NFSERR_EXIST, "EXIST" }, \ 1370*4882a593Smuzhiyun { NFSERR_XDEV, "XDEV" }, \ 1371*4882a593Smuzhiyun { NFSERR_NODEV, "NODEV" }, \ 1372*4882a593Smuzhiyun { NFSERR_NOTDIR, "NOTDIR" }, \ 1373*4882a593Smuzhiyun { NFSERR_ISDIR, "ISDIR" }, \ 1374*4882a593Smuzhiyun { NFSERR_INVAL, "INVAL" }, \ 1375*4882a593Smuzhiyun { NFSERR_FBIG, "FBIG" }, \ 1376*4882a593Smuzhiyun { NFSERR_NOSPC, "NOSPC" }, \ 1377*4882a593Smuzhiyun { NFSERR_ROFS, "ROFS" }, \ 1378*4882a593Smuzhiyun { NFSERR_MLINK, "MLINK" }, \ 1379*4882a593Smuzhiyun { NFSERR_OPNOTSUPP, "OPNOTSUPP" }, \ 1380*4882a593Smuzhiyun { NFSERR_NAMETOOLONG, "NAMETOOLONG" }, \ 1381*4882a593Smuzhiyun { NFSERR_NOTEMPTY, "NOTEMPTY" }, \ 1382*4882a593Smuzhiyun { NFSERR_DQUOT, "DQUOT" }, \ 1383*4882a593Smuzhiyun { NFSERR_STALE, "STALE" }, \ 1384*4882a593Smuzhiyun { NFSERR_REMOTE, "REMOTE" }, \ 1385*4882a593Smuzhiyun { NFSERR_WFLUSH, "WFLUSH" }, \ 1386*4882a593Smuzhiyun { NFSERR_BADHANDLE, "BADHANDLE" }, \ 1387*4882a593Smuzhiyun { NFSERR_NOT_SYNC, "NOTSYNC" }, \ 1388*4882a593Smuzhiyun { NFSERR_BAD_COOKIE, "BADCOOKIE" }, \ 1389*4882a593Smuzhiyun { NFSERR_NOTSUPP, "NOTSUPP" }, \ 1390*4882a593Smuzhiyun { NFSERR_TOOSMALL, "TOOSMALL" }, \ 1391*4882a593Smuzhiyun { NFSERR_SERVERFAULT, "REMOTEIO" }, \ 1392*4882a593Smuzhiyun { NFSERR_BADTYPE, "BADTYPE" }, \ 1393*4882a593Smuzhiyun { NFSERR_JUKEBOX, "JUKEBOX" }) 1394*4882a593Smuzhiyun 1395*4882a593Smuzhiyun TRACE_EVENT(nfs_xdr_status, 1396*4882a593Smuzhiyun TP_PROTO( 1397*4882a593Smuzhiyun const struct xdr_stream *xdr, 1398*4882a593Smuzhiyun int error 1399*4882a593Smuzhiyun ), 1400*4882a593Smuzhiyun 1401*4882a593Smuzhiyun TP_ARGS(xdr, error), 1402*4882a593Smuzhiyun 1403*4882a593Smuzhiyun TP_STRUCT__entry( 1404*4882a593Smuzhiyun __field(unsigned int, task_id) 1405*4882a593Smuzhiyun __field(unsigned int, client_id) 1406*4882a593Smuzhiyun __field(u32, xid) 1407*4882a593Smuzhiyun __field(int, version) 1408*4882a593Smuzhiyun __field(unsigned long, error) 1409*4882a593Smuzhiyun __string(program, 1410*4882a593Smuzhiyun xdr->rqst->rq_task->tk_client->cl_program->name) 1411*4882a593Smuzhiyun __string(procedure, 1412*4882a593Smuzhiyun xdr->rqst->rq_task->tk_msg.rpc_proc->p_name) 1413*4882a593Smuzhiyun ), 1414*4882a593Smuzhiyun 1415*4882a593Smuzhiyun TP_fast_assign( 1416*4882a593Smuzhiyun const struct rpc_rqst *rqstp = xdr->rqst; 1417*4882a593Smuzhiyun const struct rpc_task *task = rqstp->rq_task; 1418*4882a593Smuzhiyun 1419*4882a593Smuzhiyun __entry->task_id = task->tk_pid; 1420*4882a593Smuzhiyun __entry->client_id = task->tk_client->cl_clid; 1421*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqstp->rq_xid); 1422*4882a593Smuzhiyun __entry->version = task->tk_client->cl_vers; 1423*4882a593Smuzhiyun __entry->error = error; 1424*4882a593Smuzhiyun __assign_str(program, 1425*4882a593Smuzhiyun task->tk_client->cl_program->name) 1426*4882a593Smuzhiyun __assign_str(procedure, task->tk_msg.rpc_proc->p_name) 1427*4882a593Smuzhiyun ), 1428*4882a593Smuzhiyun 1429*4882a593Smuzhiyun TP_printk( 1430*4882a593Smuzhiyun "task:%u@%d xid=0x%08x %sv%d %s error=%ld (%s)", 1431*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 1432*4882a593Smuzhiyun __get_str(program), __entry->version, 1433*4882a593Smuzhiyun __get_str(procedure), -__entry->error, 1434*4882a593Smuzhiyun nfs_show_status(__entry->error) 1435*4882a593Smuzhiyun ) 1436*4882a593Smuzhiyun ); 1437*4882a593Smuzhiyun 1438*4882a593Smuzhiyun #endif /* _TRACE_NFS_H */ 1439*4882a593Smuzhiyun 1440*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH 1441*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 1442*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE nfstrace 1443*4882a593Smuzhiyun /* This part must be outside protection */ 1444*4882a593Smuzhiyun #include <trace/define_trace.h> 1445