1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2f4ce1299STrond Myklebust /* 3f4ce1299STrond Myklebust * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 4f4ce1299STrond Myklebust */ 5f4ce1299STrond Myklebust #undef TRACE_SYSTEM 6f4ce1299STrond Myklebust #define TRACE_SYSTEM nfs 7f4ce1299STrond Myklebust 8f4ce1299STrond Myklebust #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ) 9f4ce1299STrond Myklebust #define _TRACE_NFS_H 10f4ce1299STrond Myklebust 11f4ce1299STrond Myklebust #include <linux/tracepoint.h> 121eb5d98fSJeff Layton #include <linux/iversion.h> 13f4ce1299STrond Myklebust 149d2d48bbSChuck Lever #include <trace/events/fs.h> 15*8791545eSChuck Lever #include <trace/events/nfs.h> 16b4776a34SChuck Lever #include <trace/events/sunrpc_base.h> 17b4776a34SChuck Lever 18f4ce1299STrond Myklebust #define nfs_show_cache_validity(v) \ 19f4ce1299STrond Myklebust __print_flags(v, "|", \ 20f4ce1299STrond Myklebust { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \ 21f4ce1299STrond Myklebust { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \ 22f4ce1299STrond Myklebust { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \ 23f4ce1299STrond Myklebust { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \ 24f4ce1299STrond Myklebust { NFS_INO_REVAL_PAGECACHE, "REVAL_PAGECACHE" }, \ 25f4ce1299STrond Myklebust { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \ 267d4006c1SChuck Lever { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \ 277d4006c1SChuck Lever { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \ 287d4006c1SChuck Lever { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \ 297d4006c1SChuck Lever { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \ 307d4006c1SChuck Lever { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \ 310f44da51SFrank van der Linden { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \ 328a27c7ccSTrond Myklebust { NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \ 338a27c7ccSTrond Myklebust { NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \ 34fabf2b34STrond Myklebust { NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \ 35720869ebSTrond Myklebust { NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \ 36720869ebSTrond Myklebust { NFS_INO_INVALID_MODE, "INVALID_MODE" }) 377d4006c1SChuck Lever 38f4ce1299STrond Myklebust #define nfs_show_nfsi_flags(v) \ 39f4ce1299STrond Myklebust __print_flags(v, "|", \ 407d4006c1SChuck Lever { BIT(NFS_INO_ADVISE_RDPLUS), "ADVISE_RDPLUS" }, \ 417d4006c1SChuck Lever { BIT(NFS_INO_STALE), "STALE" }, \ 427d4006c1SChuck Lever { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \ 437d4006c1SChuck Lever { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \ 447d4006c1SChuck Lever { BIT(NFS_INO_FSCACHE), "FSCACHE" }, \ 457d4006c1SChuck Lever { BIT(NFS_INO_FSCACHE_LOCK), "FSCACHE_LOCK" }, \ 467d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \ 477d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \ 487d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 497d4006c1SChuck Lever { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 50f4ce1299STrond Myklebust 51f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event, 52f4ce1299STrond Myklebust TP_PROTO( 53f4ce1299STrond Myklebust const struct inode *inode 54f4ce1299STrond Myklebust ), 55f4ce1299STrond Myklebust 56f4ce1299STrond Myklebust TP_ARGS(inode), 57f4ce1299STrond Myklebust 58f4ce1299STrond Myklebust TP_STRUCT__entry( 59f4ce1299STrond Myklebust __field(dev_t, dev) 60f4ce1299STrond Myklebust __field(u32, fhandle) 61f4ce1299STrond Myklebust __field(u64, fileid) 62f4ce1299STrond Myklebust __field(u64, version) 63f4ce1299STrond Myklebust ), 64f4ce1299STrond Myklebust 65f4ce1299STrond Myklebust TP_fast_assign( 66f4ce1299STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 67f4ce1299STrond Myklebust __entry->dev = inode->i_sb->s_dev; 68f4ce1299STrond Myklebust __entry->fileid = nfsi->fileid; 69f4ce1299STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 701eb5d98fSJeff Layton __entry->version = inode_peek_iversion_raw(inode); 71f4ce1299STrond Myklebust ), 72f4ce1299STrond Myklebust 73f4ce1299STrond Myklebust TP_printk( 74f4ce1299STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 75f4ce1299STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 76f4ce1299STrond Myklebust (unsigned long long)__entry->fileid, 77f4ce1299STrond Myklebust __entry->fhandle, 78f4ce1299STrond Myklebust (unsigned long long)__entry->version 79f4ce1299STrond Myklebust ) 80f4ce1299STrond Myklebust ); 81f4ce1299STrond Myklebust 82f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event_done, 83f4ce1299STrond Myklebust TP_PROTO( 84f4ce1299STrond Myklebust const struct inode *inode, 85f4ce1299STrond Myklebust int error 86f4ce1299STrond Myklebust ), 87f4ce1299STrond Myklebust 88f4ce1299STrond Myklebust TP_ARGS(inode, error), 89f4ce1299STrond Myklebust 90f4ce1299STrond Myklebust TP_STRUCT__entry( 9138a638a7SChuck Lever __field(unsigned long, error) 92f4ce1299STrond Myklebust __field(dev_t, dev) 93f4ce1299STrond Myklebust __field(u32, fhandle) 94f4ce1299STrond Myklebust __field(unsigned char, type) 95f4ce1299STrond Myklebust __field(u64, fileid) 96f4ce1299STrond Myklebust __field(u64, version) 97f4ce1299STrond Myklebust __field(loff_t, size) 98f4ce1299STrond Myklebust __field(unsigned long, nfsi_flags) 99f4ce1299STrond Myklebust __field(unsigned long, cache_validity) 100f4ce1299STrond Myklebust ), 101f4ce1299STrond Myklebust 102f4ce1299STrond Myklebust TP_fast_assign( 103f4ce1299STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 10438a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 105f4ce1299STrond Myklebust __entry->dev = inode->i_sb->s_dev; 106f4ce1299STrond Myklebust __entry->fileid = nfsi->fileid; 107f4ce1299STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 108f4ce1299STrond Myklebust __entry->type = nfs_umode_to_dtype(inode->i_mode); 1091eb5d98fSJeff Layton __entry->version = inode_peek_iversion_raw(inode); 110f4ce1299STrond Myklebust __entry->size = i_size_read(inode); 111f4ce1299STrond Myklebust __entry->nfsi_flags = nfsi->flags; 112f4ce1299STrond Myklebust __entry->cache_validity = nfsi->cache_validity; 113f4ce1299STrond Myklebust ), 114f4ce1299STrond Myklebust 115f4ce1299STrond Myklebust TP_printk( 11638a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 117f4ce1299STrond Myklebust "type=%u (%s) version=%llu size=%lld " 1187d4006c1SChuck Lever "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)", 119*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 120f4ce1299STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 121f4ce1299STrond Myklebust (unsigned long long)__entry->fileid, 122f4ce1299STrond Myklebust __entry->fhandle, 123f4ce1299STrond Myklebust __entry->type, 1249d2d48bbSChuck Lever show_fs_dirent_type(__entry->type), 125f4ce1299STrond Myklebust (unsigned long long)__entry->version, 126f4ce1299STrond Myklebust (long long)__entry->size, 127f4ce1299STrond Myklebust __entry->cache_validity, 128f4ce1299STrond Myklebust nfs_show_cache_validity(__entry->cache_validity), 129f4ce1299STrond Myklebust __entry->nfsi_flags, 130f4ce1299STrond Myklebust nfs_show_nfsi_flags(__entry->nfsi_flags) 131f4ce1299STrond Myklebust ) 132f4ce1299STrond Myklebust ); 133f4ce1299STrond Myklebust 134f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT(name) \ 135f4ce1299STrond Myklebust DEFINE_EVENT(nfs_inode_event, name, \ 136f4ce1299STrond Myklebust TP_PROTO( \ 137f4ce1299STrond Myklebust const struct inode *inode \ 138f4ce1299STrond Myklebust ), \ 139f4ce1299STrond Myklebust TP_ARGS(inode)) 140f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 141f4ce1299STrond Myklebust DEFINE_EVENT(nfs_inode_event_done, name, \ 142f4ce1299STrond Myklebust TP_PROTO( \ 143f4ce1299STrond Myklebust const struct inode *inode, \ 144f4ce1299STrond Myklebust int error \ 145f4ce1299STrond Myklebust ), \ 146f4ce1299STrond Myklebust TP_ARGS(inode, error)) 14793ce4af7STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 148f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 149f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 150f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 151f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 152f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 153f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 154f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 155f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 156f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 157f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 158f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter); 159f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit); 160f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 161f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 162f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 163f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 164f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_access_enter); 165e8194b7dSTrond Myklebust 166e8194b7dSTrond Myklebust TRACE_EVENT(nfs_access_exit, 167e8194b7dSTrond Myklebust TP_PROTO( 168e8194b7dSTrond Myklebust const struct inode *inode, 169e8194b7dSTrond Myklebust unsigned int mask, 170e8194b7dSTrond Myklebust unsigned int permitted, 171e8194b7dSTrond Myklebust int error 172e8194b7dSTrond Myklebust ), 173e8194b7dSTrond Myklebust 174e8194b7dSTrond Myklebust TP_ARGS(inode, mask, permitted, error), 175e8194b7dSTrond Myklebust 176e8194b7dSTrond Myklebust TP_STRUCT__entry( 177e8194b7dSTrond Myklebust __field(unsigned long, error) 178e8194b7dSTrond Myklebust __field(dev_t, dev) 179e8194b7dSTrond Myklebust __field(u32, fhandle) 180e8194b7dSTrond Myklebust __field(unsigned char, type) 181e8194b7dSTrond Myklebust __field(u64, fileid) 182e8194b7dSTrond Myklebust __field(u64, version) 183e8194b7dSTrond Myklebust __field(loff_t, size) 184e8194b7dSTrond Myklebust __field(unsigned long, nfsi_flags) 185e8194b7dSTrond Myklebust __field(unsigned long, cache_validity) 186e8194b7dSTrond Myklebust __field(unsigned int, mask) 187e8194b7dSTrond Myklebust __field(unsigned int, permitted) 188e8194b7dSTrond Myklebust ), 189e8194b7dSTrond Myklebust 190e8194b7dSTrond Myklebust TP_fast_assign( 191e8194b7dSTrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 192e8194b7dSTrond Myklebust __entry->error = error < 0 ? -error : 0; 193e8194b7dSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 194e8194b7dSTrond Myklebust __entry->fileid = nfsi->fileid; 195e8194b7dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 196e8194b7dSTrond Myklebust __entry->type = nfs_umode_to_dtype(inode->i_mode); 197e8194b7dSTrond Myklebust __entry->version = inode_peek_iversion_raw(inode); 198e8194b7dSTrond Myklebust __entry->size = i_size_read(inode); 199e8194b7dSTrond Myklebust __entry->nfsi_flags = nfsi->flags; 200e8194b7dSTrond Myklebust __entry->cache_validity = nfsi->cache_validity; 201e8194b7dSTrond Myklebust __entry->mask = mask; 202e8194b7dSTrond Myklebust __entry->permitted = permitted; 203e8194b7dSTrond Myklebust ), 204e8194b7dSTrond Myklebust 205e8194b7dSTrond Myklebust TP_printk( 206e8194b7dSTrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 207e8194b7dSTrond Myklebust "type=%u (%s) version=%llu size=%lld " 208e8194b7dSTrond Myklebust "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) " 209e8194b7dSTrond Myklebust "mask=0x%x permitted=0x%x", 210*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 211e8194b7dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 212e8194b7dSTrond Myklebust (unsigned long long)__entry->fileid, 213e8194b7dSTrond Myklebust __entry->fhandle, 214e8194b7dSTrond Myklebust __entry->type, 2159d2d48bbSChuck Lever show_fs_dirent_type(__entry->type), 216e8194b7dSTrond Myklebust (unsigned long long)__entry->version, 217e8194b7dSTrond Myklebust (long long)__entry->size, 218e8194b7dSTrond Myklebust __entry->cache_validity, 219e8194b7dSTrond Myklebust nfs_show_cache_validity(__entry->cache_validity), 220e8194b7dSTrond Myklebust __entry->nfsi_flags, 221e8194b7dSTrond Myklebust nfs_show_nfsi_flags(__entry->nfsi_flags), 222e8194b7dSTrond Myklebust __entry->mask, __entry->permitted 223e8194b7dSTrond Myklebust ) 224e8194b7dSTrond Myklebust ); 225f4ce1299STrond Myklebust 226110cb2d2SChuck Lever DECLARE_EVENT_CLASS(nfs_update_size_class, 227110cb2d2SChuck Lever TP_PROTO( 228110cb2d2SChuck Lever const struct inode *inode, 229110cb2d2SChuck Lever loff_t new_size 230110cb2d2SChuck Lever ), 231110cb2d2SChuck Lever 232110cb2d2SChuck Lever TP_ARGS(inode, new_size), 233110cb2d2SChuck Lever 234110cb2d2SChuck Lever TP_STRUCT__entry( 235110cb2d2SChuck Lever __field(dev_t, dev) 236110cb2d2SChuck Lever __field(u32, fhandle) 237110cb2d2SChuck Lever __field(u64, fileid) 238110cb2d2SChuck Lever __field(u64, version) 239110cb2d2SChuck Lever __field(loff_t, cur_size) 240110cb2d2SChuck Lever __field(loff_t, new_size) 241110cb2d2SChuck Lever ), 242110cb2d2SChuck Lever 243110cb2d2SChuck Lever TP_fast_assign( 244110cb2d2SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 245110cb2d2SChuck Lever 246110cb2d2SChuck Lever __entry->dev = inode->i_sb->s_dev; 247110cb2d2SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 248110cb2d2SChuck Lever __entry->fileid = nfsi->fileid; 249110cb2d2SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 250110cb2d2SChuck Lever __entry->cur_size = i_size_read(inode); 251110cb2d2SChuck Lever __entry->new_size = new_size; 252110cb2d2SChuck Lever ), 253110cb2d2SChuck Lever 254110cb2d2SChuck Lever TP_printk( 255110cb2d2SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld", 256110cb2d2SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 257110cb2d2SChuck Lever (unsigned long long)__entry->fileid, 258110cb2d2SChuck Lever __entry->fhandle, __entry->version, 259110cb2d2SChuck Lever __entry->cur_size, __entry->new_size 260110cb2d2SChuck Lever ) 261110cb2d2SChuck Lever ); 262110cb2d2SChuck Lever 263110cb2d2SChuck Lever #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \ 264110cb2d2SChuck Lever DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \ 265110cb2d2SChuck Lever TP_PROTO( \ 266110cb2d2SChuck Lever const struct inode *inode, \ 267110cb2d2SChuck Lever loff_t new_size \ 268110cb2d2SChuck Lever ), \ 269110cb2d2SChuck Lever TP_ARGS(inode, new_size)) 270110cb2d2SChuck Lever 271110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(truncate); 272110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(wcc); 273110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(update); 274110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(grow); 275110cb2d2SChuck Lever 2766e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event, 2776e0d0be7STrond Myklebust TP_PROTO( 2786e0d0be7STrond Myklebust const struct inode *dir, 2796e0d0be7STrond Myklebust const struct dentry *dentry, 2806e0d0be7STrond Myklebust unsigned int flags 2816e0d0be7STrond Myklebust ), 2826e0d0be7STrond Myklebust 2836e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags), 2846e0d0be7STrond Myklebust 2856e0d0be7STrond Myklebust TP_STRUCT__entry( 2867d4006c1SChuck Lever __field(unsigned long, flags) 2876e0d0be7STrond Myklebust __field(dev_t, dev) 2886e0d0be7STrond Myklebust __field(u64, dir) 2896e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 2906e0d0be7STrond Myklebust ), 2916e0d0be7STrond Myklebust 2926e0d0be7STrond Myklebust TP_fast_assign( 2936e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 2946e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 2956e0d0be7STrond Myklebust __entry->flags = flags; 2966e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 2976e0d0be7STrond Myklebust ), 2986e0d0be7STrond Myklebust 2996e0d0be7STrond Myklebust TP_printk( 3007d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 3016e0d0be7STrond Myklebust __entry->flags, 3029d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 3036e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 3046e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 3056e0d0be7STrond Myklebust __get_str(name) 3066e0d0be7STrond Myklebust ) 3076e0d0be7STrond Myklebust ); 3086e0d0be7STrond Myklebust 3096e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT(name) \ 3106e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event, name, \ 3116e0d0be7STrond Myklebust TP_PROTO( \ 3126e0d0be7STrond Myklebust const struct inode *dir, \ 3136e0d0be7STrond Myklebust const struct dentry *dentry, \ 3146e0d0be7STrond Myklebust unsigned int flags \ 3156e0d0be7STrond Myklebust ), \ 3166e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags)) 3176e0d0be7STrond Myklebust 3186e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event_done, 3196e0d0be7STrond Myklebust TP_PROTO( 3206e0d0be7STrond Myklebust const struct inode *dir, 3216e0d0be7STrond Myklebust const struct dentry *dentry, 3226e0d0be7STrond Myklebust unsigned int flags, 3236e0d0be7STrond Myklebust int error 3246e0d0be7STrond Myklebust ), 3256e0d0be7STrond Myklebust 3266e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error), 3276e0d0be7STrond Myklebust 3286e0d0be7STrond Myklebust TP_STRUCT__entry( 32938a638a7SChuck Lever __field(unsigned long, error) 3307d4006c1SChuck Lever __field(unsigned long, flags) 3316e0d0be7STrond Myklebust __field(dev_t, dev) 3326e0d0be7STrond Myklebust __field(u64, dir) 3336e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 3346e0d0be7STrond Myklebust ), 3356e0d0be7STrond Myklebust 3366e0d0be7STrond Myklebust TP_fast_assign( 3376e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 3386e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 33938a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 3406e0d0be7STrond Myklebust __entry->flags = flags; 3416e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 3426e0d0be7STrond Myklebust ), 3436e0d0be7STrond Myklebust 3446e0d0be7STrond Myklebust TP_printk( 3457d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 346*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 3476e0d0be7STrond Myklebust __entry->flags, 3489d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 3496e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 3506e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 3516e0d0be7STrond Myklebust __get_str(name) 3526e0d0be7STrond Myklebust ) 3536e0d0be7STrond Myklebust ); 3546e0d0be7STrond Myklebust 3556e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 3566e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event_done, name, \ 3576e0d0be7STrond Myklebust TP_PROTO( \ 3586e0d0be7STrond Myklebust const struct inode *dir, \ 3596e0d0be7STrond Myklebust const struct dentry *dentry, \ 3606e0d0be7STrond Myklebust unsigned int flags, \ 3616e0d0be7STrond Myklebust int error \ 3626e0d0be7STrond Myklebust ), \ 3636e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error)) 3646e0d0be7STrond Myklebust 3656e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 3666e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 3676e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 3686e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 3696e0d0be7STrond Myklebust 3706e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_enter, 3716e0d0be7STrond Myklebust TP_PROTO( 3726e0d0be7STrond Myklebust const struct inode *dir, 3736e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 3746e0d0be7STrond Myklebust unsigned int flags 3756e0d0be7STrond Myklebust ), 3766e0d0be7STrond Myklebust 3776e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags), 3786e0d0be7STrond Myklebust 3796e0d0be7STrond Myklebust TP_STRUCT__entry( 3807d4006c1SChuck Lever __field(unsigned long, flags) 3819d2d48bbSChuck Lever __field(unsigned long, fmode) 3826e0d0be7STrond Myklebust __field(dev_t, dev) 3836e0d0be7STrond Myklebust __field(u64, dir) 3846e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 3856e0d0be7STrond Myklebust ), 3866e0d0be7STrond Myklebust 3876e0d0be7STrond Myklebust TP_fast_assign( 3886e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 3896e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 3906e0d0be7STrond Myklebust __entry->flags = flags; 3919d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 3926e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 3936e0d0be7STrond Myklebust ), 3946e0d0be7STrond Myklebust 3956e0d0be7STrond Myklebust TP_printk( 3967d4006c1SChuck Lever "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 3976e0d0be7STrond Myklebust __entry->flags, 3989d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 3999d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 4006e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4016e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4026e0d0be7STrond Myklebust __get_str(name) 4036e0d0be7STrond Myklebust ) 4046e0d0be7STrond Myklebust ); 4056e0d0be7STrond Myklebust 4066e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_exit, 4076e0d0be7STrond Myklebust TP_PROTO( 4086e0d0be7STrond Myklebust const struct inode *dir, 4096e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 4106e0d0be7STrond Myklebust unsigned int flags, 4116e0d0be7STrond Myklebust int error 4126e0d0be7STrond Myklebust ), 4136e0d0be7STrond Myklebust 4146e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags, error), 4156e0d0be7STrond Myklebust 4166e0d0be7STrond Myklebust TP_STRUCT__entry( 41738a638a7SChuck Lever __field(unsigned long, error) 4187d4006c1SChuck Lever __field(unsigned long, flags) 4199d2d48bbSChuck Lever __field(unsigned long, fmode) 4206e0d0be7STrond Myklebust __field(dev_t, dev) 4216e0d0be7STrond Myklebust __field(u64, dir) 4226e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 4236e0d0be7STrond Myklebust ), 4246e0d0be7STrond Myklebust 4256e0d0be7STrond Myklebust TP_fast_assign( 42638a638a7SChuck Lever __entry->error = -error; 4276e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4286e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 4296e0d0be7STrond Myklebust __entry->flags = flags; 4309d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 4316e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 4326e0d0be7STrond Myklebust ), 4336e0d0be7STrond Myklebust 4346e0d0be7STrond Myklebust TP_printk( 4357d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 4366e0d0be7STrond Myklebust "name=%02x:%02x:%llu/%s", 437*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 4386e0d0be7STrond Myklebust __entry->flags, 4399d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 4409d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 4416e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4426e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4436e0d0be7STrond Myklebust __get_str(name) 4446e0d0be7STrond Myklebust ) 4456e0d0be7STrond Myklebust ); 4466e0d0be7STrond Myklebust 4478b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_enter, 4488b0ad3d4STrond Myklebust TP_PROTO( 4498b0ad3d4STrond Myklebust const struct inode *dir, 4508b0ad3d4STrond Myklebust const struct dentry *dentry, 4518b0ad3d4STrond Myklebust unsigned int flags 4528b0ad3d4STrond Myklebust ), 4538b0ad3d4STrond Myklebust 4548b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags), 4558b0ad3d4STrond Myklebust 4568b0ad3d4STrond Myklebust TP_STRUCT__entry( 4577d4006c1SChuck Lever __field(unsigned long, flags) 4588b0ad3d4STrond Myklebust __field(dev_t, dev) 4598b0ad3d4STrond Myklebust __field(u64, dir) 4608b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 4618b0ad3d4STrond Myklebust ), 4628b0ad3d4STrond Myklebust 4638b0ad3d4STrond Myklebust TP_fast_assign( 4648b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4658b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 4668b0ad3d4STrond Myklebust __entry->flags = flags; 4678b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 4688b0ad3d4STrond Myklebust ), 4698b0ad3d4STrond Myklebust 4708b0ad3d4STrond Myklebust TP_printk( 4717d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4728b0ad3d4STrond Myklebust __entry->flags, 4739d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 4748b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4758b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 4768b0ad3d4STrond Myklebust __get_str(name) 4778b0ad3d4STrond Myklebust ) 4788b0ad3d4STrond Myklebust ); 4798b0ad3d4STrond Myklebust 4808b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_exit, 4818b0ad3d4STrond Myklebust TP_PROTO( 4828b0ad3d4STrond Myklebust const struct inode *dir, 4838b0ad3d4STrond Myklebust const struct dentry *dentry, 4848b0ad3d4STrond Myklebust unsigned int flags, 4858b0ad3d4STrond Myklebust int error 4868b0ad3d4STrond Myklebust ), 4878b0ad3d4STrond Myklebust 4888b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags, error), 4898b0ad3d4STrond Myklebust 4908b0ad3d4STrond Myklebust TP_STRUCT__entry( 49138a638a7SChuck Lever __field(unsigned long, error) 4927d4006c1SChuck Lever __field(unsigned long, flags) 4938b0ad3d4STrond Myklebust __field(dev_t, dev) 4948b0ad3d4STrond Myklebust __field(u64, dir) 4958b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 4968b0ad3d4STrond Myklebust ), 4978b0ad3d4STrond Myklebust 4988b0ad3d4STrond Myklebust TP_fast_assign( 49938a638a7SChuck Lever __entry->error = -error; 5008b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5018b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 5028b0ad3d4STrond Myklebust __entry->flags = flags; 5038b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 5048b0ad3d4STrond Myklebust ), 5058b0ad3d4STrond Myklebust 5068b0ad3d4STrond Myklebust TP_printk( 5077d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 508*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 5098b0ad3d4STrond Myklebust __entry->flags, 5109d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5118b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5128b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 5138b0ad3d4STrond Myklebust __get_str(name) 5148b0ad3d4STrond Myklebust ) 5158b0ad3d4STrond Myklebust ); 5168b0ad3d4STrond Myklebust 5171ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event, 5181ca42382STrond Myklebust TP_PROTO( 5191ca42382STrond Myklebust const struct inode *dir, 5201ca42382STrond Myklebust const struct dentry *dentry 5211ca42382STrond Myklebust ), 5221ca42382STrond Myklebust 5231ca42382STrond Myklebust TP_ARGS(dir, dentry), 5241ca42382STrond Myklebust 5251ca42382STrond Myklebust TP_STRUCT__entry( 5261ca42382STrond Myklebust __field(dev_t, dev) 5271ca42382STrond Myklebust __field(u64, dir) 5281ca42382STrond Myklebust __string(name, dentry->d_name.name) 5291ca42382STrond Myklebust ), 5301ca42382STrond Myklebust 5311ca42382STrond Myklebust TP_fast_assign( 5321ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5331ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 5341ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 5351ca42382STrond Myklebust ), 5361ca42382STrond Myklebust 5371ca42382STrond Myklebust TP_printk( 5381ca42382STrond Myklebust "name=%02x:%02x:%llu/%s", 5391ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5401ca42382STrond Myklebust (unsigned long long)__entry->dir, 5411ca42382STrond Myklebust __get_str(name) 5421ca42382STrond Myklebust ) 5431ca42382STrond Myklebust ); 5441ca42382STrond Myklebust 5451ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 5461ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event, name, \ 5471ca42382STrond Myklebust TP_PROTO( \ 5481ca42382STrond Myklebust const struct inode *dir, \ 5491ca42382STrond Myklebust const struct dentry *dentry \ 5501ca42382STrond Myklebust ), \ 5511ca42382STrond Myklebust TP_ARGS(dir, dentry)) 5521ca42382STrond Myklebust 5531ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event_done, 5541ca42382STrond Myklebust TP_PROTO( 5551ca42382STrond Myklebust const struct inode *dir, 5561ca42382STrond Myklebust const struct dentry *dentry, 5571ca42382STrond Myklebust int error 5581ca42382STrond Myklebust ), 5591ca42382STrond Myklebust 5601ca42382STrond Myklebust TP_ARGS(dir, dentry, error), 5611ca42382STrond Myklebust 5621ca42382STrond Myklebust TP_STRUCT__entry( 56338a638a7SChuck Lever __field(unsigned long, error) 5641ca42382STrond Myklebust __field(dev_t, dev) 5651ca42382STrond Myklebust __field(u64, dir) 5661ca42382STrond Myklebust __string(name, dentry->d_name.name) 5671ca42382STrond Myklebust ), 5681ca42382STrond Myklebust 5691ca42382STrond Myklebust TP_fast_assign( 5701ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5711ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 57238a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 5731ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 5741ca42382STrond Myklebust ), 5751ca42382STrond Myklebust 5761ca42382STrond Myklebust TP_printk( 57738a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 578*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 5791ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5801ca42382STrond Myklebust (unsigned long long)__entry->dir, 5811ca42382STrond Myklebust __get_str(name) 5821ca42382STrond Myklebust ) 5831ca42382STrond Myklebust ); 5841ca42382STrond Myklebust 5851ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 5861ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event_done, name, \ 5871ca42382STrond Myklebust TP_PROTO( \ 5881ca42382STrond Myklebust const struct inode *dir, \ 5891ca42382STrond Myklebust const struct dentry *dentry, \ 5901ca42382STrond Myklebust int error \ 5911ca42382STrond Myklebust ), \ 5921ca42382STrond Myklebust TP_ARGS(dir, dentry, error)) 5931ca42382STrond Myklebust 5941ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 5951ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 5961ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 5971ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 5981ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 5991ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 6001ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 6011ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 6021ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 6031ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 6041ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 6051ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 6061ca42382STrond Myklebust 6071fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_enter, 6081fd1085bSTrond Myklebust TP_PROTO( 6091fd1085bSTrond Myklebust const struct inode *inode, 6101fd1085bSTrond Myklebust const struct inode *dir, 6111fd1085bSTrond Myklebust const struct dentry *dentry 6121fd1085bSTrond Myklebust ), 6131fd1085bSTrond Myklebust 6141fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry), 6151fd1085bSTrond Myklebust 6161fd1085bSTrond Myklebust TP_STRUCT__entry( 6171fd1085bSTrond Myklebust __field(dev_t, dev) 6181fd1085bSTrond Myklebust __field(u64, fileid) 6191fd1085bSTrond Myklebust __field(u64, dir) 6201fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 6211fd1085bSTrond Myklebust ), 6221fd1085bSTrond Myklebust 6231fd1085bSTrond Myklebust TP_fast_assign( 6241fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 6251fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 6261fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 6271fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 6281fd1085bSTrond Myklebust ), 6291fd1085bSTrond Myklebust 6301fd1085bSTrond Myklebust TP_printk( 6311fd1085bSTrond Myklebust "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 6321fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6331fd1085bSTrond Myklebust __entry->fileid, 6341fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6351fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 6361fd1085bSTrond Myklebust __get_str(name) 6371fd1085bSTrond Myklebust ) 6381fd1085bSTrond Myklebust ); 6391fd1085bSTrond Myklebust 6401fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_exit, 6411fd1085bSTrond Myklebust TP_PROTO( 6421fd1085bSTrond Myklebust const struct inode *inode, 6431fd1085bSTrond Myklebust const struct inode *dir, 6441fd1085bSTrond Myklebust const struct dentry *dentry, 6451fd1085bSTrond Myklebust int error 6461fd1085bSTrond Myklebust ), 6471fd1085bSTrond Myklebust 6481fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry, error), 6491fd1085bSTrond Myklebust 6501fd1085bSTrond Myklebust TP_STRUCT__entry( 65138a638a7SChuck Lever __field(unsigned long, error) 6521fd1085bSTrond Myklebust __field(dev_t, dev) 6531fd1085bSTrond Myklebust __field(u64, fileid) 6541fd1085bSTrond Myklebust __field(u64, dir) 6551fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 6561fd1085bSTrond Myklebust ), 6571fd1085bSTrond Myklebust 6581fd1085bSTrond Myklebust TP_fast_assign( 6591fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 6601fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 6611fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 66238a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 6631fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 6641fd1085bSTrond Myklebust ), 6651fd1085bSTrond Myklebust 6661fd1085bSTrond Myklebust TP_printk( 66738a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 668*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6691fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6701fd1085bSTrond Myklebust __entry->fileid, 6711fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6721fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 6731fd1085bSTrond Myklebust __get_str(name) 6741fd1085bSTrond Myklebust ) 6751fd1085bSTrond Myklebust ); 6761fd1085bSTrond Myklebust 67770ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event, 67870ded201STrond Myklebust TP_PROTO( 67970ded201STrond Myklebust const struct inode *old_dir, 68070ded201STrond Myklebust const struct dentry *old_dentry, 68170ded201STrond Myklebust const struct inode *new_dir, 68270ded201STrond Myklebust const struct dentry *new_dentry 68370ded201STrond Myklebust ), 68470ded201STrond Myklebust 68570ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 68670ded201STrond Myklebust 68770ded201STrond Myklebust TP_STRUCT__entry( 68870ded201STrond Myklebust __field(dev_t, dev) 68970ded201STrond Myklebust __field(u64, old_dir) 69070ded201STrond Myklebust __field(u64, new_dir) 69170ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 69270ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 69370ded201STrond Myklebust ), 69470ded201STrond Myklebust 69570ded201STrond Myklebust TP_fast_assign( 69670ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 69770ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 69870ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 69970ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 70070ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 70170ded201STrond Myklebust ), 70270ded201STrond Myklebust 70370ded201STrond Myklebust TP_printk( 70470ded201STrond Myklebust "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 70570ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 70670ded201STrond Myklebust (unsigned long long)__entry->old_dir, 70770ded201STrond Myklebust __get_str(old_name), 70870ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 70970ded201STrond Myklebust (unsigned long long)__entry->new_dir, 71070ded201STrond Myklebust __get_str(new_name) 71170ded201STrond Myklebust ) 71270ded201STrond Myklebust ); 71370ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT(name) \ 71470ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event, name, \ 71570ded201STrond Myklebust TP_PROTO( \ 71670ded201STrond Myklebust const struct inode *old_dir, \ 71770ded201STrond Myklebust const struct dentry *old_dentry, \ 71870ded201STrond Myklebust const struct inode *new_dir, \ 71970ded201STrond Myklebust const struct dentry *new_dentry \ 72070ded201STrond Myklebust ), \ 72170ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 72270ded201STrond Myklebust 72370ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event_done, 72470ded201STrond Myklebust TP_PROTO( 72570ded201STrond Myklebust const struct inode *old_dir, 72670ded201STrond Myklebust const struct dentry *old_dentry, 72770ded201STrond Myklebust const struct inode *new_dir, 72870ded201STrond Myklebust const struct dentry *new_dentry, 72970ded201STrond Myklebust int error 73070ded201STrond Myklebust ), 73170ded201STrond Myklebust 73270ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 73370ded201STrond Myklebust 73470ded201STrond Myklebust TP_STRUCT__entry( 73570ded201STrond Myklebust __field(dev_t, dev) 73638a638a7SChuck Lever __field(unsigned long, error) 73770ded201STrond Myklebust __field(u64, old_dir) 73870ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 73970ded201STrond Myklebust __field(u64, new_dir) 74070ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 74170ded201STrond Myklebust ), 74270ded201STrond Myklebust 74370ded201STrond Myklebust TP_fast_assign( 74470ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 74538a638a7SChuck Lever __entry->error = -error; 74670ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 74770ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 74870ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 74970ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 75070ded201STrond Myklebust ), 75170ded201STrond Myklebust 75270ded201STrond Myklebust TP_printk( 75338a638a7SChuck Lever "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 75470ded201STrond Myklebust "new_name=%02x:%02x:%llu/%s", 755*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 75670ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 75770ded201STrond Myklebust (unsigned long long)__entry->old_dir, 75870ded201STrond Myklebust __get_str(old_name), 75970ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 76070ded201STrond Myklebust (unsigned long long)__entry->new_dir, 76170ded201STrond Myklebust __get_str(new_name) 76270ded201STrond Myklebust ) 76370ded201STrond Myklebust ); 76470ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 76570ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event_done, name, \ 76670ded201STrond Myklebust TP_PROTO( \ 76770ded201STrond Myklebust const struct inode *old_dir, \ 76870ded201STrond Myklebust const struct dentry *old_dentry, \ 76970ded201STrond Myklebust const struct inode *new_dir, \ 77070ded201STrond Myklebust const struct dentry *new_dentry, \ 77170ded201STrond Myklebust int error \ 77270ded201STrond Myklebust ), \ 77370ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, \ 77470ded201STrond Myklebust new_dentry, error)) 77570ded201STrond Myklebust 77670ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 77770ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 77870ded201STrond Myklebust 77970ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 78070ded201STrond Myklebust 78170ded201STrond Myklebust TRACE_EVENT(nfs_sillyrename_unlink, 78270ded201STrond Myklebust TP_PROTO( 78370ded201STrond Myklebust const struct nfs_unlinkdata *data, 78470ded201STrond Myklebust int error 78570ded201STrond Myklebust ), 78670ded201STrond Myklebust 78770ded201STrond Myklebust TP_ARGS(data, error), 78870ded201STrond Myklebust 78970ded201STrond Myklebust TP_STRUCT__entry( 79070ded201STrond Myklebust __field(dev_t, dev) 79138a638a7SChuck Lever __field(unsigned long, error) 79270ded201STrond Myklebust __field(u64, dir) 79370ded201STrond Myklebust __dynamic_array(char, name, data->args.name.len + 1) 79470ded201STrond Myklebust ), 79570ded201STrond Myklebust 79670ded201STrond Myklebust TP_fast_assign( 797884be175SAl Viro struct inode *dir = d_inode(data->dentry->d_parent); 79870ded201STrond Myklebust size_t len = data->args.name.len; 79970ded201STrond Myklebust __entry->dev = dir->i_sb->s_dev; 80070ded201STrond Myklebust __entry->dir = NFS_FILEID(dir); 80138a638a7SChuck Lever __entry->error = -error; 802752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), 80370ded201STrond Myklebust data->args.name.name, len); 804752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 80570ded201STrond Myklebust ), 80670ded201STrond Myklebust 80770ded201STrond Myklebust TP_printk( 80838a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 809*8791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 81070ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 81170ded201STrond Myklebust (unsigned long long)__entry->dir, 81270ded201STrond Myklebust __get_str(name) 81370ded201STrond Myklebust ) 81470ded201STrond Myklebust ); 8158224b273SChuck Lever 816d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage, 817d9f87743SChuck Lever TP_PROTO( 818d9f87743SChuck Lever const struct inode *inode, 819d9f87743SChuck Lever struct page *page 820d9f87743SChuck Lever ), 821d9f87743SChuck Lever 822d9f87743SChuck Lever TP_ARGS(inode, page), 823d9f87743SChuck Lever 824d9f87743SChuck Lever TP_STRUCT__entry( 825d9f87743SChuck Lever __field(dev_t, dev) 826d9f87743SChuck Lever __field(u32, fhandle) 827d9f87743SChuck Lever __field(u64, fileid) 828d9f87743SChuck Lever __field(u64, version) 829d9f87743SChuck Lever __field(loff_t, offset) 830d9f87743SChuck Lever ), 831d9f87743SChuck Lever 832d9f87743SChuck Lever TP_fast_assign( 833d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 834d9f87743SChuck Lever 835d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 836d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 837d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 838d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 839d9f87743SChuck Lever __entry->offset = page_index(page) << PAGE_SHIFT; 840d9f87743SChuck Lever ), 841d9f87743SChuck Lever 842d9f87743SChuck Lever TP_printk( 843d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld", 844d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 845d9f87743SChuck Lever (unsigned long long)__entry->fileid, 846d9f87743SChuck Lever __entry->fhandle, __entry->version, 847d9f87743SChuck Lever __entry->offset 848d9f87743SChuck Lever ) 849d9f87743SChuck Lever ); 850d9f87743SChuck Lever 851d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage_done, 852d9f87743SChuck Lever TP_PROTO( 853d9f87743SChuck Lever const struct inode *inode, 854d9f87743SChuck Lever struct page *page, 855d9f87743SChuck Lever int ret 856d9f87743SChuck Lever ), 857d9f87743SChuck Lever 858d9f87743SChuck Lever TP_ARGS(inode, page, ret), 859d9f87743SChuck Lever 860d9f87743SChuck Lever TP_STRUCT__entry( 861d9f87743SChuck Lever __field(dev_t, dev) 862d9f87743SChuck Lever __field(u32, fhandle) 863d9f87743SChuck Lever __field(int, ret) 864d9f87743SChuck Lever __field(u64, fileid) 865d9f87743SChuck Lever __field(u64, version) 866d9f87743SChuck Lever __field(loff_t, offset) 867d9f87743SChuck Lever ), 868d9f87743SChuck Lever 869d9f87743SChuck Lever TP_fast_assign( 870d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 871d9f87743SChuck Lever 872d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 873d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 874d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 875d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 876d9f87743SChuck Lever __entry->offset = page_index(page) << PAGE_SHIFT; 877d9f87743SChuck Lever __entry->ret = ret; 878d9f87743SChuck Lever ), 879d9f87743SChuck Lever 880d9f87743SChuck Lever TP_printk( 881d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld ret=%d", 882d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 883d9f87743SChuck Lever (unsigned long long)__entry->fileid, 884d9f87743SChuck Lever __entry->fhandle, __entry->version, 885d9f87743SChuck Lever __entry->offset, __entry->ret 886d9f87743SChuck Lever ) 887d9f87743SChuck Lever ); 888d9f87743SChuck Lever 889d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead, 890d9f87743SChuck Lever TP_PROTO( 891d9f87743SChuck Lever const struct inode *inode, 892d9f87743SChuck Lever unsigned int nr_pages 893d9f87743SChuck Lever ), 894d9f87743SChuck Lever 895d9f87743SChuck Lever TP_ARGS(inode, nr_pages), 896d9f87743SChuck Lever 897d9f87743SChuck Lever TP_STRUCT__entry( 898d9f87743SChuck Lever __field(dev_t, dev) 899d9f87743SChuck Lever __field(u32, fhandle) 900d9f87743SChuck Lever __field(u64, fileid) 901d9f87743SChuck Lever __field(u64, version) 902d9f87743SChuck Lever __field(unsigned int, nr_pages) 903d9f87743SChuck Lever ), 904d9f87743SChuck Lever 905d9f87743SChuck Lever TP_fast_assign( 906d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 907d9f87743SChuck Lever 908d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 909d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 910d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 911d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 912d9f87743SChuck Lever __entry->nr_pages = nr_pages; 913d9f87743SChuck Lever ), 914d9f87743SChuck Lever 915d9f87743SChuck Lever TP_printk( 916d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u", 917d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 918d9f87743SChuck Lever (unsigned long long)__entry->fileid, 919d9f87743SChuck Lever __entry->fhandle, __entry->version, 920d9f87743SChuck Lever __entry->nr_pages 921d9f87743SChuck Lever ) 922d9f87743SChuck Lever ); 923d9f87743SChuck Lever 924d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead_done, 925d9f87743SChuck Lever TP_PROTO( 926d9f87743SChuck Lever const struct inode *inode, 927d9f87743SChuck Lever unsigned int nr_pages, 928d9f87743SChuck Lever int ret 929d9f87743SChuck Lever ), 930d9f87743SChuck Lever 931d9f87743SChuck Lever TP_ARGS(inode, nr_pages, ret), 932d9f87743SChuck Lever 933d9f87743SChuck Lever TP_STRUCT__entry( 934d9f87743SChuck Lever __field(dev_t, dev) 935d9f87743SChuck Lever __field(u32, fhandle) 936d9f87743SChuck Lever __field(int, ret) 937d9f87743SChuck Lever __field(u64, fileid) 938d9f87743SChuck Lever __field(u64, version) 939d9f87743SChuck Lever __field(unsigned int, nr_pages) 940d9f87743SChuck Lever ), 941d9f87743SChuck Lever 942d9f87743SChuck Lever TP_fast_assign( 943d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 944d9f87743SChuck Lever 945d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 946d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 947d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 948d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 949d9f87743SChuck Lever __entry->nr_pages = nr_pages; 950d9f87743SChuck Lever __entry->ret = ret; 951d9f87743SChuck Lever ), 952d9f87743SChuck Lever 953d9f87743SChuck Lever TP_printk( 954d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d", 955d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 956d9f87743SChuck Lever (unsigned long long)__entry->fileid, 957d9f87743SChuck Lever __entry->fhandle, __entry->version, 958d9f87743SChuck Lever __entry->nr_pages, __entry->ret 959d9f87743SChuck Lever ) 960d9f87743SChuck Lever ); 961d9f87743SChuck Lever 9628224b273SChuck Lever TRACE_EVENT(nfs_initiate_read, 9638224b273SChuck Lever TP_PROTO( 9642343172dSTrond Myklebust const struct nfs_pgio_header *hdr 9658224b273SChuck Lever ), 9668224b273SChuck Lever 9672343172dSTrond Myklebust TP_ARGS(hdr), 9688224b273SChuck Lever 9698224b273SChuck Lever TP_STRUCT__entry( 9708224b273SChuck Lever __field(dev_t, dev) 9718224b273SChuck Lever __field(u32, fhandle) 9728224b273SChuck Lever __field(u64, fileid) 9732343172dSTrond Myklebust __field(loff_t, offset) 9742343172dSTrond Myklebust __field(u32, count) 9758224b273SChuck Lever ), 9768224b273SChuck Lever 9778224b273SChuck Lever TP_fast_assign( 9782343172dSTrond Myklebust const struct inode *inode = hdr->inode; 9798224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 9802343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 9812343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 9828224b273SChuck Lever 9832343172dSTrond Myklebust __entry->offset = hdr->args.offset; 9842343172dSTrond Myklebust __entry->count = hdr->args.count; 9858224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 9868224b273SChuck Lever __entry->fileid = nfsi->fileid; 9872343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 9888224b273SChuck Lever ), 9898224b273SChuck Lever 9908224b273SChuck Lever TP_printk( 9918224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 9922343172dSTrond Myklebust "offset=%lld count=%u", 9938224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 9948224b273SChuck Lever (unsigned long long)__entry->fileid, 9958224b273SChuck Lever __entry->fhandle, 9962343172dSTrond Myklebust (long long)__entry->offset, __entry->count 9978224b273SChuck Lever ) 9988224b273SChuck Lever ); 9998224b273SChuck Lever 10008224b273SChuck Lever TRACE_EVENT(nfs_readpage_done, 10018224b273SChuck Lever TP_PROTO( 10022343172dSTrond Myklebust const struct rpc_task *task, 10032343172dSTrond Myklebust const struct nfs_pgio_header *hdr 10048224b273SChuck Lever ), 10058224b273SChuck Lever 10062343172dSTrond Myklebust TP_ARGS(task, hdr), 10078224b273SChuck Lever 10088224b273SChuck Lever TP_STRUCT__entry( 10098224b273SChuck Lever __field(dev_t, dev) 10108224b273SChuck Lever __field(u32, fhandle) 10118224b273SChuck Lever __field(u64, fileid) 10122343172dSTrond Myklebust __field(loff_t, offset) 10132343172dSTrond Myklebust __field(u32, arg_count) 10142343172dSTrond Myklebust __field(u32, res_count) 10152343172dSTrond Myklebust __field(bool, eof) 10162343172dSTrond Myklebust __field(int, status) 10178224b273SChuck Lever ), 10188224b273SChuck Lever 10198224b273SChuck Lever TP_fast_assign( 10202343172dSTrond Myklebust const struct inode *inode = hdr->inode; 10218224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 10222343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 10232343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 10248224b273SChuck Lever 10252343172dSTrond Myklebust __entry->status = task->tk_status; 10262343172dSTrond Myklebust __entry->offset = hdr->args.offset; 10272343172dSTrond Myklebust __entry->arg_count = hdr->args.count; 10282343172dSTrond Myklebust __entry->res_count = hdr->res.count; 10292343172dSTrond Myklebust __entry->eof = hdr->res.eof; 10308224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 10318224b273SChuck Lever __entry->fileid = nfsi->fileid; 10322343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 10338224b273SChuck Lever ), 10348224b273SChuck Lever 10358224b273SChuck Lever TP_printk( 10368224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 10372343172dSTrond Myklebust "offset=%lld count=%u res=%u status=%d%s", 10388224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 10398224b273SChuck Lever (unsigned long long)__entry->fileid, 10408224b273SChuck Lever __entry->fhandle, 10412343172dSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 10422343172dSTrond Myklebust __entry->res_count, __entry->status, 10438224b273SChuck Lever __entry->eof ? " eof" : "" 10448224b273SChuck Lever ) 10458224b273SChuck Lever ); 10468224b273SChuck Lever 1047fd2b6121SChuck Lever TRACE_EVENT(nfs_readpage_short, 1048fd2b6121SChuck Lever TP_PROTO( 1049fd2b6121SChuck Lever const struct rpc_task *task, 1050fd2b6121SChuck Lever const struct nfs_pgio_header *hdr 1051fd2b6121SChuck Lever ), 1052fd2b6121SChuck Lever 1053fd2b6121SChuck Lever TP_ARGS(task, hdr), 1054fd2b6121SChuck Lever 1055fd2b6121SChuck Lever TP_STRUCT__entry( 1056fd2b6121SChuck Lever __field(dev_t, dev) 1057fd2b6121SChuck Lever __field(u32, fhandle) 1058fd2b6121SChuck Lever __field(u64, fileid) 1059fd2b6121SChuck Lever __field(loff_t, offset) 1060fd2b6121SChuck Lever __field(u32, arg_count) 1061fd2b6121SChuck Lever __field(u32, res_count) 1062fd2b6121SChuck Lever __field(bool, eof) 1063fd2b6121SChuck Lever __field(int, status) 1064fd2b6121SChuck Lever ), 1065fd2b6121SChuck Lever 1066fd2b6121SChuck Lever TP_fast_assign( 1067fd2b6121SChuck Lever const struct inode *inode = hdr->inode; 1068fd2b6121SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1069fd2b6121SChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1070fd2b6121SChuck Lever hdr->args.fh : &nfsi->fh; 1071fd2b6121SChuck Lever 1072fd2b6121SChuck Lever __entry->status = task->tk_status; 1073fd2b6121SChuck Lever __entry->offset = hdr->args.offset; 1074fd2b6121SChuck Lever __entry->arg_count = hdr->args.count; 1075fd2b6121SChuck Lever __entry->res_count = hdr->res.count; 1076fd2b6121SChuck Lever __entry->eof = hdr->res.eof; 1077fd2b6121SChuck Lever __entry->dev = inode->i_sb->s_dev; 1078fd2b6121SChuck Lever __entry->fileid = nfsi->fileid; 1079fd2b6121SChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1080fd2b6121SChuck Lever ), 1081fd2b6121SChuck Lever 1082fd2b6121SChuck Lever TP_printk( 1083fd2b6121SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 1084fd2b6121SChuck Lever "offset=%lld count=%u res=%u status=%d%s", 1085fd2b6121SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1086fd2b6121SChuck Lever (unsigned long long)__entry->fileid, 1087fd2b6121SChuck Lever __entry->fhandle, 1088fd2b6121SChuck Lever (long long)__entry->offset, __entry->arg_count, 1089fd2b6121SChuck Lever __entry->res_count, __entry->status, 1090fd2b6121SChuck Lever __entry->eof ? " eof" : "" 1091fd2b6121SChuck Lever ) 1092fd2b6121SChuck Lever ); 1093fd2b6121SChuck Lever 1094cd2ed9bdSChuck Lever TRACE_EVENT(nfs_pgio_error, 1095cd2ed9bdSChuck Lever TP_PROTO( 1096cd2ed9bdSChuck Lever const struct nfs_pgio_header *hdr, 1097cd2ed9bdSChuck Lever int error, 1098cd2ed9bdSChuck Lever loff_t pos 1099cd2ed9bdSChuck Lever ), 1100cd2ed9bdSChuck Lever 1101cd2ed9bdSChuck Lever TP_ARGS(hdr, error, pos), 1102cd2ed9bdSChuck Lever 1103cd2ed9bdSChuck Lever TP_STRUCT__entry( 1104cd2ed9bdSChuck Lever __field(dev_t, dev) 1105cd2ed9bdSChuck Lever __field(u32, fhandle) 1106cd2ed9bdSChuck Lever __field(u64, fileid) 1107cd2ed9bdSChuck Lever __field(loff_t, offset) 1108cd2ed9bdSChuck Lever __field(u32, arg_count) 1109cd2ed9bdSChuck Lever __field(u32, res_count) 1110cd2ed9bdSChuck Lever __field(loff_t, pos) 1111cd2ed9bdSChuck Lever __field(int, status) 1112cd2ed9bdSChuck Lever ), 1113cd2ed9bdSChuck Lever 1114cd2ed9bdSChuck Lever TP_fast_assign( 1115cd2ed9bdSChuck Lever const struct inode *inode = hdr->inode; 1116cd2ed9bdSChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1117cd2ed9bdSChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1118cd2ed9bdSChuck Lever hdr->args.fh : &nfsi->fh; 1119cd2ed9bdSChuck Lever 1120cd2ed9bdSChuck Lever __entry->status = error; 1121cd2ed9bdSChuck Lever __entry->offset = hdr->args.offset; 1122cd2ed9bdSChuck Lever __entry->arg_count = hdr->args.count; 1123cd2ed9bdSChuck Lever __entry->res_count = hdr->res.count; 1124cd2ed9bdSChuck Lever __entry->dev = inode->i_sb->s_dev; 1125cd2ed9bdSChuck Lever __entry->fileid = nfsi->fileid; 1126cd2ed9bdSChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1127cd2ed9bdSChuck Lever ), 1128cd2ed9bdSChuck Lever 1129cd2ed9bdSChuck Lever TP_printk("fileid=%02x:%02x:%llu fhandle=0x%08x " 1130cd2ed9bdSChuck Lever "offset=%lld count=%u res=%u pos=%llu status=%d", 1131cd2ed9bdSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1132cd2ed9bdSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 1133cd2ed9bdSChuck Lever (long long)__entry->offset, __entry->arg_count, __entry->res_count, 1134cd2ed9bdSChuck Lever __entry->pos, __entry->status 1135cd2ed9bdSChuck Lever ) 1136cd2ed9bdSChuck Lever ); 1137cd2ed9bdSChuck Lever 11388224b273SChuck Lever TRACE_EVENT(nfs_initiate_write, 11398224b273SChuck Lever TP_PROTO( 11405bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 11418224b273SChuck Lever ), 11428224b273SChuck Lever 11435bb2a7cbSTrond Myklebust TP_ARGS(hdr), 11448224b273SChuck Lever 11458224b273SChuck Lever TP_STRUCT__entry( 11468224b273SChuck Lever __field(dev_t, dev) 11478224b273SChuck Lever __field(u32, fhandle) 11488224b273SChuck Lever __field(u64, fileid) 11495bb2a7cbSTrond Myklebust __field(loff_t, offset) 11505bb2a7cbSTrond Myklebust __field(u32, count) 1151*8791545eSChuck Lever __field(unsigned long, stable) 11528224b273SChuck Lever ), 11538224b273SChuck Lever 11548224b273SChuck Lever TP_fast_assign( 11555bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 11568224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11575bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11585bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 11598224b273SChuck Lever 11605bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 11615bb2a7cbSTrond Myklebust __entry->count = hdr->args.count; 11625bb2a7cbSTrond Myklebust __entry->stable = hdr->args.stable; 11638224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11648224b273SChuck Lever __entry->fileid = nfsi->fileid; 11655bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11668224b273SChuck Lever ), 11678224b273SChuck Lever 11688224b273SChuck Lever TP_printk( 11698224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 11705bb2a7cbSTrond Myklebust "offset=%lld count=%u stable=%s", 11718224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11728224b273SChuck Lever (unsigned long long)__entry->fileid, 11738224b273SChuck Lever __entry->fhandle, 11745bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->count, 1175*8791545eSChuck Lever show_nfs_stable_how(__entry->stable) 11768224b273SChuck Lever ) 11778224b273SChuck Lever ); 11788224b273SChuck Lever 11798224b273SChuck Lever TRACE_EVENT(nfs_writeback_done, 11808224b273SChuck Lever TP_PROTO( 11815bb2a7cbSTrond Myklebust const struct rpc_task *task, 11825bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 11838224b273SChuck Lever ), 11848224b273SChuck Lever 11855bb2a7cbSTrond Myklebust TP_ARGS(task, hdr), 11868224b273SChuck Lever 11878224b273SChuck Lever TP_STRUCT__entry( 11888224b273SChuck Lever __field(dev_t, dev) 11898224b273SChuck Lever __field(u32, fhandle) 11908224b273SChuck Lever __field(u64, fileid) 11915bb2a7cbSTrond Myklebust __field(loff_t, offset) 11925bb2a7cbSTrond Myklebust __field(u32, arg_count) 11935bb2a7cbSTrond Myklebust __field(u32, res_count) 11945bb2a7cbSTrond Myklebust __field(int, status) 1195*8791545eSChuck Lever __field(unsigned long, stable) 11965bb2a7cbSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 11978224b273SChuck Lever ), 11988224b273SChuck Lever 11998224b273SChuck Lever TP_fast_assign( 12005bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 12018224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 12025bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 12035bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 12045bb2a7cbSTrond Myklebust const struct nfs_writeverf *verf = hdr->res.verf; 12058224b273SChuck Lever 12065bb2a7cbSTrond Myklebust __entry->status = task->tk_status; 12075bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 12085bb2a7cbSTrond Myklebust __entry->arg_count = hdr->args.count; 12095bb2a7cbSTrond Myklebust __entry->res_count = hdr->res.count; 12105bb2a7cbSTrond Myklebust __entry->stable = verf->committed; 12115bb2a7cbSTrond Myklebust memcpy(__entry->verifier, 12125bb2a7cbSTrond Myklebust &verf->verifier, 12135bb2a7cbSTrond Myklebust NFS4_VERIFIER_SIZE); 12148224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 12158224b273SChuck Lever __entry->fileid = nfsi->fileid; 12165bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 12178224b273SChuck Lever ), 12188224b273SChuck Lever 12198224b273SChuck Lever TP_printk( 12208224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 12215bb2a7cbSTrond Myklebust "offset=%lld count=%u res=%u status=%d stable=%s " 12225bb2a7cbSTrond Myklebust "verifier=%s", 12238224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 12248224b273SChuck Lever (unsigned long long)__entry->fileid, 12258224b273SChuck Lever __entry->fhandle, 12265bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 12275bb2a7cbSTrond Myklebust __entry->res_count, __entry->status, 1228*8791545eSChuck Lever show_nfs_stable_how(__entry->stable), 1229*8791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 12308224b273SChuck Lever ) 12318224b273SChuck Lever ); 12328224b273SChuck Lever 1233861e1671SChuck Lever DECLARE_EVENT_CLASS(nfs_page_error_class, 1234861e1671SChuck Lever TP_PROTO( 1235861e1671SChuck Lever const struct nfs_page *req, 1236861e1671SChuck Lever int error 1237861e1671SChuck Lever ), 1238861e1671SChuck Lever 1239861e1671SChuck Lever TP_ARGS(req, error), 1240861e1671SChuck Lever 1241861e1671SChuck Lever TP_STRUCT__entry( 1242861e1671SChuck Lever __field(const void *, req) 1243861e1671SChuck Lever __field(pgoff_t, index) 1244861e1671SChuck Lever __field(unsigned int, offset) 1245861e1671SChuck Lever __field(unsigned int, pgbase) 1246861e1671SChuck Lever __field(unsigned int, bytes) 1247861e1671SChuck Lever __field(int, error) 1248861e1671SChuck Lever ), 1249861e1671SChuck Lever 1250861e1671SChuck Lever TP_fast_assign( 1251861e1671SChuck Lever __entry->req = req; 1252861e1671SChuck Lever __entry->index = req->wb_index; 1253861e1671SChuck Lever __entry->offset = req->wb_offset; 1254861e1671SChuck Lever __entry->pgbase = req->wb_pgbase; 1255861e1671SChuck Lever __entry->bytes = req->wb_bytes; 1256861e1671SChuck Lever __entry->error = error; 1257861e1671SChuck Lever ), 1258861e1671SChuck Lever 1259861e1671SChuck Lever TP_printk( 1260861e1671SChuck Lever "req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d", 1261861e1671SChuck Lever __entry->req, __entry->index, __entry->offset, 1262861e1671SChuck Lever __entry->pgbase, __entry->bytes, __entry->error 1263861e1671SChuck Lever ) 1264861e1671SChuck Lever ); 1265861e1671SChuck Lever 1266861e1671SChuck Lever #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1267861e1671SChuck Lever DEFINE_EVENT(nfs_page_error_class, name, \ 1268861e1671SChuck Lever TP_PROTO( \ 1269861e1671SChuck Lever const struct nfs_page *req, \ 1270861e1671SChuck Lever int error \ 1271861e1671SChuck Lever ), \ 1272861e1671SChuck Lever TP_ARGS(req, error)) 1273861e1671SChuck Lever 1274861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1275861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1276861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1277861e1671SChuck Lever 12788224b273SChuck Lever TRACE_EVENT(nfs_initiate_commit, 12798224b273SChuck Lever TP_PROTO( 12808224b273SChuck Lever const struct nfs_commit_data *data 12818224b273SChuck Lever ), 12828224b273SChuck Lever 12838224b273SChuck Lever TP_ARGS(data), 12848224b273SChuck Lever 12858224b273SChuck Lever TP_STRUCT__entry( 12868224b273SChuck Lever __field(dev_t, dev) 12878224b273SChuck Lever __field(u32, fhandle) 12888224b273SChuck Lever __field(u64, fileid) 12897bdd297eSTrond Myklebust __field(loff_t, offset) 12907bdd297eSTrond Myklebust __field(u32, count) 12918224b273SChuck Lever ), 12928224b273SChuck Lever 12938224b273SChuck Lever TP_fast_assign( 12948224b273SChuck Lever const struct inode *inode = data->inode; 12958224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 12967bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 12977bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 12988224b273SChuck Lever 12998224b273SChuck Lever __entry->offset = data->args.offset; 13008224b273SChuck Lever __entry->count = data->args.count; 13018224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 13028224b273SChuck Lever __entry->fileid = nfsi->fileid; 13037bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 13048224b273SChuck Lever ), 13058224b273SChuck Lever 13068224b273SChuck Lever TP_printk( 13078224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 13087bdd297eSTrond Myklebust "offset=%lld count=%u", 13098224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 13108224b273SChuck Lever (unsigned long long)__entry->fileid, 13118224b273SChuck Lever __entry->fhandle, 13127bdd297eSTrond Myklebust (long long)__entry->offset, __entry->count 13138224b273SChuck Lever ) 13148224b273SChuck Lever ); 13158224b273SChuck Lever 13168224b273SChuck Lever TRACE_EVENT(nfs_commit_done, 13178224b273SChuck Lever TP_PROTO( 13187bdd297eSTrond Myklebust const struct rpc_task *task, 13198224b273SChuck Lever const struct nfs_commit_data *data 13208224b273SChuck Lever ), 13218224b273SChuck Lever 13227bdd297eSTrond Myklebust TP_ARGS(task, data), 13238224b273SChuck Lever 13248224b273SChuck Lever TP_STRUCT__entry( 13258224b273SChuck Lever __field(dev_t, dev) 13268224b273SChuck Lever __field(u32, fhandle) 13278224b273SChuck Lever __field(u64, fileid) 13287bdd297eSTrond Myklebust __field(loff_t, offset) 13297bdd297eSTrond Myklebust __field(int, status) 1330*8791545eSChuck Lever __field(unsigned long, stable) 13317bdd297eSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 13328224b273SChuck Lever ), 13338224b273SChuck Lever 13348224b273SChuck Lever TP_fast_assign( 13358224b273SChuck Lever const struct inode *inode = data->inode; 13368224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 13377bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 13387bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 13397bdd297eSTrond Myklebust const struct nfs_writeverf *verf = data->res.verf; 13408224b273SChuck Lever 13417bdd297eSTrond Myklebust __entry->status = task->tk_status; 13428224b273SChuck Lever __entry->offset = data->args.offset; 13437bdd297eSTrond Myklebust __entry->stable = verf->committed; 13447bdd297eSTrond Myklebust memcpy(__entry->verifier, 13457bdd297eSTrond Myklebust &verf->verifier, 13467bdd297eSTrond Myklebust NFS4_VERIFIER_SIZE); 13478224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 13488224b273SChuck Lever __entry->fileid = nfsi->fileid; 13497bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 13508224b273SChuck Lever ), 13518224b273SChuck Lever 13528224b273SChuck Lever TP_printk( 13538224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 13547bdd297eSTrond Myklebust "offset=%lld status=%d stable=%s verifier=%s", 13558224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 13568224b273SChuck Lever (unsigned long long)__entry->fileid, 13578224b273SChuck Lever __entry->fhandle, 13587bdd297eSTrond Myklebust (long long)__entry->offset, __entry->status, 1359*8791545eSChuck Lever show_nfs_stable_how(__entry->stable), 1360*8791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 13618224b273SChuck Lever ) 13628224b273SChuck Lever ); 13638224b273SChuck Lever 136443622eabSTrond Myklebust TRACE_EVENT(nfs_fh_to_dentry, 136543622eabSTrond Myklebust TP_PROTO( 136643622eabSTrond Myklebust const struct super_block *sb, 136743622eabSTrond Myklebust const struct nfs_fh *fh, 136843622eabSTrond Myklebust u64 fileid, 136943622eabSTrond Myklebust int error 137043622eabSTrond Myklebust ), 137143622eabSTrond Myklebust 137243622eabSTrond Myklebust TP_ARGS(sb, fh, fileid, error), 137343622eabSTrond Myklebust 137443622eabSTrond Myklebust TP_STRUCT__entry( 137543622eabSTrond Myklebust __field(int, error) 137643622eabSTrond Myklebust __field(dev_t, dev) 137743622eabSTrond Myklebust __field(u32, fhandle) 137843622eabSTrond Myklebust __field(u64, fileid) 137943622eabSTrond Myklebust ), 138043622eabSTrond Myklebust 138143622eabSTrond Myklebust TP_fast_assign( 138243622eabSTrond Myklebust __entry->error = error; 138343622eabSTrond Myklebust __entry->dev = sb->s_dev; 138443622eabSTrond Myklebust __entry->fileid = fileid; 138543622eabSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 138643622eabSTrond Myklebust ), 138743622eabSTrond Myklebust 138843622eabSTrond Myklebust TP_printk( 138943622eabSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 139043622eabSTrond Myklebust __entry->error, 139143622eabSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 139243622eabSTrond Myklebust (unsigned long long)__entry->fileid, 139343622eabSTrond Myklebust __entry->fhandle 139443622eabSTrond Myklebust ) 139543622eabSTrond Myklebust ); 139643622eabSTrond Myklebust 13973d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs_xdr_event, 1398f23f6584SChuck Lever TP_PROTO( 139962a92ba9SChuck Lever const struct xdr_stream *xdr, 1400f23f6584SChuck Lever int error 1401f23f6584SChuck Lever ), 1402f23f6584SChuck Lever 140362a92ba9SChuck Lever TP_ARGS(xdr, error), 1404f23f6584SChuck Lever 1405f23f6584SChuck Lever TP_STRUCT__entry( 140662a92ba9SChuck Lever __field(unsigned int, task_id) 140762a92ba9SChuck Lever __field(unsigned int, client_id) 140862a92ba9SChuck Lever __field(u32, xid) 14095be59458SChuck Lever __field(int, version) 141038a638a7SChuck Lever __field(unsigned long, error) 14115be59458SChuck Lever __string(program, 14125be59458SChuck Lever xdr->rqst->rq_task->tk_client->cl_program->name) 14135be59458SChuck Lever __string(procedure, 14145be59458SChuck Lever xdr->rqst->rq_task->tk_msg.rpc_proc->p_name) 1415f23f6584SChuck Lever ), 1416f23f6584SChuck Lever 1417f23f6584SChuck Lever TP_fast_assign( 141862a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 141962a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 142062a92ba9SChuck Lever 142162a92ba9SChuck Lever __entry->task_id = task->tk_pid; 142262a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 142362a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 14245be59458SChuck Lever __entry->version = task->tk_client->cl_vers; 1425f23f6584SChuck Lever __entry->error = error; 14265be59458SChuck Lever __assign_str(program, 142778c14b38SJoe Perches task->tk_client->cl_program->name); 142878c14b38SJoe Perches __assign_str(procedure, task->tk_msg.rpc_proc->p_name); 1429f23f6584SChuck Lever ), 1430f23f6584SChuck Lever 1431b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 1432b4776a34SChuck Lever " xid=0x%08x %sv%d %s error=%ld (%s)", 143362a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 14345be59458SChuck Lever __get_str(program), __entry->version, 14355be59458SChuck Lever __get_str(procedure), -__entry->error, 1436*8791545eSChuck Lever show_nfs_status(__entry->error) 1437f23f6584SChuck Lever ) 1438f23f6584SChuck Lever ); 14393d66bae1STrond Myklebust #define DEFINE_NFS_XDR_EVENT(name) \ 14403d66bae1STrond Myklebust DEFINE_EVENT(nfs_xdr_event, name, \ 14413d66bae1STrond Myklebust TP_PROTO( \ 14423d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 14433d66bae1STrond Myklebust int error \ 14443d66bae1STrond Myklebust ), \ 14453d66bae1STrond Myklebust TP_ARGS(xdr, error)) 14463d66bae1STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_status); 1447eb3d58c6STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle); 1448f23f6584SChuck Lever 1449f4ce1299STrond Myklebust #endif /* _TRACE_NFS_H */ 1450f4ce1299STrond Myklebust 1451f4ce1299STrond Myklebust #undef TRACE_INCLUDE_PATH 1452f4ce1299STrond Myklebust #define TRACE_INCLUDE_PATH . 1453f4ce1299STrond Myklebust #define TRACE_INCLUDE_FILE nfstrace 1454f4ce1299STrond Myklebust /* This part must be outside protection */ 1455f4ce1299STrond Myklebust #include <trace/define_trace.h> 1456