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> 158791545eSChuck 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_FORCED, "REVAL_FORCED" }, \ 257d4006c1SChuck Lever { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \ 267d4006c1SChuck Lever { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \ 277d4006c1SChuck Lever { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \ 287d4006c1SChuck Lever { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \ 297d4006c1SChuck Lever { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \ 300f44da51SFrank van der Linden { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \ 318a27c7ccSTrond Myklebust { NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \ 328a27c7ccSTrond Myklebust { NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \ 33fabf2b34STrond Myklebust { NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \ 34720869ebSTrond Myklebust { NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \ 35720869ebSTrond Myklebust { NFS_INO_INVALID_MODE, "INVALID_MODE" }) 367d4006c1SChuck Lever 37f4ce1299STrond Myklebust #define nfs_show_nfsi_flags(v) \ 38f4ce1299STrond Myklebust __print_flags(v, "|", \ 397d4006c1SChuck Lever { BIT(NFS_INO_STALE), "STALE" }, \ 407d4006c1SChuck Lever { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \ 417d4006c1SChuck Lever { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \ 427d4006c1SChuck Lever { BIT(NFS_INO_FSCACHE), "FSCACHE" }, \ 437d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \ 447d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \ 457d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 467d4006c1SChuck Lever { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 47f4ce1299STrond Myklebust 48f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event, 49f4ce1299STrond Myklebust TP_PROTO( 50f4ce1299STrond Myklebust const struct inode *inode 51f4ce1299STrond Myklebust ), 52f4ce1299STrond Myklebust 53f4ce1299STrond Myklebust TP_ARGS(inode), 54f4ce1299STrond Myklebust 55f4ce1299STrond Myklebust TP_STRUCT__entry( 56f4ce1299STrond Myklebust __field(dev_t, dev) 57f4ce1299STrond Myklebust __field(u32, fhandle) 58f4ce1299STrond Myklebust __field(u64, fileid) 59f4ce1299STrond Myklebust __field(u64, version) 60f4ce1299STrond Myklebust ), 61f4ce1299STrond Myklebust 62f4ce1299STrond Myklebust TP_fast_assign( 63f4ce1299STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 64f4ce1299STrond Myklebust __entry->dev = inode->i_sb->s_dev; 65f4ce1299STrond Myklebust __entry->fileid = nfsi->fileid; 66f4ce1299STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 671eb5d98fSJeff Layton __entry->version = inode_peek_iversion_raw(inode); 68f4ce1299STrond Myklebust ), 69f4ce1299STrond Myklebust 70f4ce1299STrond Myklebust TP_printk( 71f4ce1299STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 72f4ce1299STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 73f4ce1299STrond Myklebust (unsigned long long)__entry->fileid, 74f4ce1299STrond Myklebust __entry->fhandle, 75f4ce1299STrond Myklebust (unsigned long long)__entry->version 76f4ce1299STrond Myklebust ) 77f4ce1299STrond Myklebust ); 78f4ce1299STrond Myklebust 79f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event_done, 80f4ce1299STrond Myklebust TP_PROTO( 81f4ce1299STrond Myklebust const struct inode *inode, 82f4ce1299STrond Myklebust int error 83f4ce1299STrond Myklebust ), 84f4ce1299STrond Myklebust 85f4ce1299STrond Myklebust TP_ARGS(inode, error), 86f4ce1299STrond Myklebust 87f4ce1299STrond Myklebust TP_STRUCT__entry( 8838a638a7SChuck Lever __field(unsigned long, error) 89f4ce1299STrond Myklebust __field(dev_t, dev) 90f4ce1299STrond Myklebust __field(u32, fhandle) 91f4ce1299STrond Myklebust __field(unsigned char, type) 92f4ce1299STrond Myklebust __field(u64, fileid) 93f4ce1299STrond Myklebust __field(u64, version) 94f4ce1299STrond Myklebust __field(loff_t, size) 95f4ce1299STrond Myklebust __field(unsigned long, nfsi_flags) 96f4ce1299STrond Myklebust __field(unsigned long, cache_validity) 97f4ce1299STrond Myklebust ), 98f4ce1299STrond Myklebust 99f4ce1299STrond Myklebust TP_fast_assign( 100f4ce1299STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 10138a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 102f4ce1299STrond Myklebust __entry->dev = inode->i_sb->s_dev; 103f4ce1299STrond Myklebust __entry->fileid = nfsi->fileid; 104f4ce1299STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 105f4ce1299STrond Myklebust __entry->type = nfs_umode_to_dtype(inode->i_mode); 1061eb5d98fSJeff Layton __entry->version = inode_peek_iversion_raw(inode); 107f4ce1299STrond Myklebust __entry->size = i_size_read(inode); 108f4ce1299STrond Myklebust __entry->nfsi_flags = nfsi->flags; 109f4ce1299STrond Myklebust __entry->cache_validity = nfsi->cache_validity; 110f4ce1299STrond Myklebust ), 111f4ce1299STrond Myklebust 112f4ce1299STrond Myklebust TP_printk( 11338a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 114f4ce1299STrond Myklebust "type=%u (%s) version=%llu size=%lld " 1157d4006c1SChuck Lever "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)", 1168791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 117f4ce1299STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 118f4ce1299STrond Myklebust (unsigned long long)__entry->fileid, 119f4ce1299STrond Myklebust __entry->fhandle, 120f4ce1299STrond Myklebust __entry->type, 1219d2d48bbSChuck Lever show_fs_dirent_type(__entry->type), 122f4ce1299STrond Myklebust (unsigned long long)__entry->version, 123f4ce1299STrond Myklebust (long long)__entry->size, 124f4ce1299STrond Myklebust __entry->cache_validity, 125f4ce1299STrond Myklebust nfs_show_cache_validity(__entry->cache_validity), 126f4ce1299STrond Myklebust __entry->nfsi_flags, 127f4ce1299STrond Myklebust nfs_show_nfsi_flags(__entry->nfsi_flags) 128f4ce1299STrond Myklebust ) 129f4ce1299STrond Myklebust ); 130f4ce1299STrond Myklebust 131f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT(name) \ 132f4ce1299STrond Myklebust DEFINE_EVENT(nfs_inode_event, name, \ 133f4ce1299STrond Myklebust TP_PROTO( \ 134f4ce1299STrond Myklebust const struct inode *inode \ 135f4ce1299STrond Myklebust ), \ 136f4ce1299STrond Myklebust TP_ARGS(inode)) 137f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 138f4ce1299STrond Myklebust DEFINE_EVENT(nfs_inode_event_done, name, \ 139f4ce1299STrond Myklebust TP_PROTO( \ 140f4ce1299STrond Myklebust const struct inode *inode, \ 141f4ce1299STrond Myklebust int error \ 142f4ce1299STrond Myklebust ), \ 143f4ce1299STrond Myklebust TP_ARGS(inode, error)) 14493ce4af7STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 145f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 146f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 147f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 148f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 149f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 150f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 151f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 152f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 153f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 154f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 155f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter); 156f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit); 157f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 158f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 159f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 160f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 161f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_access_enter); 16293c2e5e0SBenjamin Coddington DEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_invalid); 163310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done); 164310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done); 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", 2108791545eSChuck 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 276*11d03d0aSTrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_range_event, 277*11d03d0aSTrond Myklebust TP_PROTO( 278*11d03d0aSTrond Myklebust const struct inode *inode, 279*11d03d0aSTrond Myklebust loff_t range_start, 280*11d03d0aSTrond Myklebust loff_t range_end 281*11d03d0aSTrond Myklebust ), 282*11d03d0aSTrond Myklebust 283*11d03d0aSTrond Myklebust TP_ARGS(inode, range_start, range_end), 284*11d03d0aSTrond Myklebust 285*11d03d0aSTrond Myklebust TP_STRUCT__entry( 286*11d03d0aSTrond Myklebust __field(dev_t, dev) 287*11d03d0aSTrond Myklebust __field(u32, fhandle) 288*11d03d0aSTrond Myklebust __field(u64, fileid) 289*11d03d0aSTrond Myklebust __field(u64, version) 290*11d03d0aSTrond Myklebust __field(loff_t, range_start) 291*11d03d0aSTrond Myklebust __field(loff_t, range_end) 292*11d03d0aSTrond Myklebust ), 293*11d03d0aSTrond Myklebust 294*11d03d0aSTrond Myklebust TP_fast_assign( 295*11d03d0aSTrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 296*11d03d0aSTrond Myklebust 297*11d03d0aSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 298*11d03d0aSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 299*11d03d0aSTrond Myklebust __entry->fileid = nfsi->fileid; 300*11d03d0aSTrond Myklebust __entry->version = inode_peek_iversion_raw(inode); 301*11d03d0aSTrond Myklebust __entry->range_start = range_start; 302*11d03d0aSTrond Myklebust __entry->range_end = range_end; 303*11d03d0aSTrond Myklebust ), 304*11d03d0aSTrond Myklebust 305*11d03d0aSTrond Myklebust TP_printk( 306*11d03d0aSTrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 307*11d03d0aSTrond Myklebust "range=[%lld, %lld]", 308*11d03d0aSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 309*11d03d0aSTrond Myklebust (unsigned long long)__entry->fileid, 310*11d03d0aSTrond Myklebust __entry->fhandle, __entry->version, 311*11d03d0aSTrond Myklebust __entry->range_start, __entry->range_end 312*11d03d0aSTrond Myklebust ) 313*11d03d0aSTrond Myklebust ); 314*11d03d0aSTrond Myklebust 315*11d03d0aSTrond Myklebust #define DEFINE_NFS_INODE_RANGE_EVENT(name) \ 316*11d03d0aSTrond Myklebust DEFINE_EVENT(nfs_inode_range_event, name, \ 317*11d03d0aSTrond Myklebust TP_PROTO( \ 318*11d03d0aSTrond Myklebust const struct inode *inode, \ 319*11d03d0aSTrond Myklebust loff_t range_start, \ 320*11d03d0aSTrond Myklebust loff_t range_end \ 321*11d03d0aSTrond Myklebust ), \ 322*11d03d0aSTrond Myklebust TP_ARGS(inode, range_start, range_end)) 323*11d03d0aSTrond Myklebust 324*11d03d0aSTrond Myklebust DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range); 325*11d03d0aSTrond Myklebust 326310e3187STrond Myklebust DECLARE_EVENT_CLASS(nfs_readdir_event, 327310e3187STrond Myklebust TP_PROTO( 328310e3187STrond Myklebust const struct file *file, 329310e3187STrond Myklebust const __be32 *verifier, 330310e3187STrond Myklebust u64 cookie, 331310e3187STrond Myklebust pgoff_t page_index, 332310e3187STrond Myklebust unsigned int dtsize 333310e3187STrond Myklebust ), 334310e3187STrond Myklebust 335310e3187STrond Myklebust TP_ARGS(file, verifier, cookie, page_index, dtsize), 336310e3187STrond Myklebust 337310e3187STrond Myklebust TP_STRUCT__entry( 338310e3187STrond Myklebust __field(dev_t, dev) 339310e3187STrond Myklebust __field(u32, fhandle) 340310e3187STrond Myklebust __field(u64, fileid) 341310e3187STrond Myklebust __field(u64, version) 342310e3187STrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 343310e3187STrond Myklebust __field(u64, cookie) 344310e3187STrond Myklebust __field(pgoff_t, index) 345310e3187STrond Myklebust __field(unsigned int, dtsize) 346310e3187STrond Myklebust ), 347310e3187STrond Myklebust 348310e3187STrond Myklebust TP_fast_assign( 349310e3187STrond Myklebust const struct inode *dir = file_inode(file); 350310e3187STrond Myklebust const struct nfs_inode *nfsi = NFS_I(dir); 351310e3187STrond Myklebust 352310e3187STrond Myklebust __entry->dev = dir->i_sb->s_dev; 353310e3187STrond Myklebust __entry->fileid = nfsi->fileid; 354310e3187STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 355310e3187STrond Myklebust __entry->version = inode_peek_iversion_raw(dir); 356310e3187STrond Myklebust if (cookie != 0) 357310e3187STrond Myklebust memcpy(__entry->verifier, verifier, 358310e3187STrond Myklebust NFS4_VERIFIER_SIZE); 359310e3187STrond Myklebust else 360310e3187STrond Myklebust memset(__entry->verifier, 0, 361310e3187STrond Myklebust NFS4_VERIFIER_SIZE); 362310e3187STrond Myklebust __entry->cookie = cookie; 363310e3187STrond Myklebust __entry->index = page_index; 364310e3187STrond Myklebust __entry->dtsize = dtsize; 365310e3187STrond Myklebust ), 366310e3187STrond Myklebust 367310e3187STrond Myklebust TP_printk( 368310e3187STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 369310e3187STrond Myklebust "cookie=%s:0x%llx cache_index=%lu dtsize=%u", 370310e3187STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 371310e3187STrond Myklebust (unsigned long long)__entry->fileid, __entry->fhandle, 372310e3187STrond Myklebust __entry->version, show_nfs4_verifier(__entry->verifier), 373310e3187STrond Myklebust (unsigned long long)__entry->cookie, __entry->index, 374310e3187STrond Myklebust __entry->dtsize 375310e3187STrond Myklebust ) 376310e3187STrond Myklebust ); 377310e3187STrond Myklebust 378310e3187STrond Myklebust #define DEFINE_NFS_READDIR_EVENT(name) \ 379310e3187STrond Myklebust DEFINE_EVENT(nfs_readdir_event, name, \ 380310e3187STrond Myklebust TP_PROTO( \ 381310e3187STrond Myklebust const struct file *file, \ 382310e3187STrond Myklebust const __be32 *verifier, \ 383310e3187STrond Myklebust u64 cookie, \ 384310e3187STrond Myklebust pgoff_t page_index, \ 385310e3187STrond Myklebust unsigned int dtsize \ 386310e3187STrond Myklebust ), \ 387310e3187STrond Myklebust TP_ARGS(file, verifier, cookie, page_index, dtsize)) 388310e3187STrond Myklebust 389310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill); 390310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached); 391310e3187STrond Myklebust 3926e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event, 3936e0d0be7STrond Myklebust TP_PROTO( 3946e0d0be7STrond Myklebust const struct inode *dir, 3956e0d0be7STrond Myklebust const struct dentry *dentry, 3966e0d0be7STrond Myklebust unsigned int flags 3976e0d0be7STrond Myklebust ), 3986e0d0be7STrond Myklebust 3996e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags), 4006e0d0be7STrond Myklebust 4016e0d0be7STrond Myklebust TP_STRUCT__entry( 4027d4006c1SChuck Lever __field(unsigned long, flags) 4036e0d0be7STrond Myklebust __field(dev_t, dev) 4046e0d0be7STrond Myklebust __field(u64, dir) 4056e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 4066e0d0be7STrond Myklebust ), 4076e0d0be7STrond Myklebust 4086e0d0be7STrond Myklebust TP_fast_assign( 4096e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4106e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 4116e0d0be7STrond Myklebust __entry->flags = flags; 4126e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 4136e0d0be7STrond Myklebust ), 4146e0d0be7STrond Myklebust 4156e0d0be7STrond Myklebust TP_printk( 4167d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4176e0d0be7STrond Myklebust __entry->flags, 4189d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 4196e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4206e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4216e0d0be7STrond Myklebust __get_str(name) 4226e0d0be7STrond Myklebust ) 4236e0d0be7STrond Myklebust ); 4246e0d0be7STrond Myklebust 4256e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT(name) \ 4266e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event, name, \ 4276e0d0be7STrond Myklebust TP_PROTO( \ 4286e0d0be7STrond Myklebust const struct inode *dir, \ 4296e0d0be7STrond Myklebust const struct dentry *dentry, \ 4306e0d0be7STrond Myklebust unsigned int flags \ 4316e0d0be7STrond Myklebust ), \ 4326e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags)) 4336e0d0be7STrond Myklebust 4346e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event_done, 4356e0d0be7STrond Myklebust TP_PROTO( 4366e0d0be7STrond Myklebust const struct inode *dir, 4376e0d0be7STrond Myklebust const struct dentry *dentry, 4386e0d0be7STrond Myklebust unsigned int flags, 4396e0d0be7STrond Myklebust int error 4406e0d0be7STrond Myklebust ), 4416e0d0be7STrond Myklebust 4426e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error), 4436e0d0be7STrond Myklebust 4446e0d0be7STrond Myklebust TP_STRUCT__entry( 44538a638a7SChuck Lever __field(unsigned long, error) 4467d4006c1SChuck Lever __field(unsigned long, flags) 4476e0d0be7STrond Myklebust __field(dev_t, dev) 4486e0d0be7STrond Myklebust __field(u64, dir) 4496e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 4506e0d0be7STrond Myklebust ), 4516e0d0be7STrond Myklebust 4526e0d0be7STrond Myklebust TP_fast_assign( 4536e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4546e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 45538a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 4566e0d0be7STrond Myklebust __entry->flags = flags; 4576e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 4586e0d0be7STrond Myklebust ), 4596e0d0be7STrond Myklebust 4606e0d0be7STrond Myklebust TP_printk( 4617d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4628791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 4636e0d0be7STrond Myklebust __entry->flags, 4649d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 4656e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4666e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4676e0d0be7STrond Myklebust __get_str(name) 4686e0d0be7STrond Myklebust ) 4696e0d0be7STrond Myklebust ); 4706e0d0be7STrond Myklebust 4716e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 4726e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event_done, name, \ 4736e0d0be7STrond Myklebust TP_PROTO( \ 4746e0d0be7STrond Myklebust const struct inode *dir, \ 4756e0d0be7STrond Myklebust const struct dentry *dentry, \ 4766e0d0be7STrond Myklebust unsigned int flags, \ 4776e0d0be7STrond Myklebust int error \ 4786e0d0be7STrond Myklebust ), \ 4796e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error)) 4806e0d0be7STrond Myklebust 4816e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 4826e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 4836e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 4846e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 485eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup); 486eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed); 487eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate); 4886e0d0be7STrond Myklebust 4896e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_enter, 4906e0d0be7STrond Myklebust TP_PROTO( 4916e0d0be7STrond Myklebust const struct inode *dir, 4926e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 4936e0d0be7STrond Myklebust unsigned int flags 4946e0d0be7STrond Myklebust ), 4956e0d0be7STrond Myklebust 4966e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags), 4976e0d0be7STrond Myklebust 4986e0d0be7STrond Myklebust TP_STRUCT__entry( 4997d4006c1SChuck Lever __field(unsigned long, flags) 5009d2d48bbSChuck Lever __field(unsigned long, fmode) 5016e0d0be7STrond Myklebust __field(dev_t, dev) 5026e0d0be7STrond Myklebust __field(u64, dir) 5036e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 5046e0d0be7STrond Myklebust ), 5056e0d0be7STrond Myklebust 5066e0d0be7STrond Myklebust TP_fast_assign( 5076e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5086e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 5096e0d0be7STrond Myklebust __entry->flags = flags; 5109d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 5116e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 5126e0d0be7STrond Myklebust ), 5136e0d0be7STrond Myklebust 5146e0d0be7STrond Myklebust TP_printk( 5157d4006c1SChuck Lever "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 5166e0d0be7STrond Myklebust __entry->flags, 5179d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5189d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 5196e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5206e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 5216e0d0be7STrond Myklebust __get_str(name) 5226e0d0be7STrond Myklebust ) 5236e0d0be7STrond Myklebust ); 5246e0d0be7STrond Myklebust 5256e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_exit, 5266e0d0be7STrond Myklebust TP_PROTO( 5276e0d0be7STrond Myklebust const struct inode *dir, 5286e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 5296e0d0be7STrond Myklebust unsigned int flags, 5306e0d0be7STrond Myklebust int error 5316e0d0be7STrond Myklebust ), 5326e0d0be7STrond Myklebust 5336e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags, error), 5346e0d0be7STrond Myklebust 5356e0d0be7STrond Myklebust TP_STRUCT__entry( 53638a638a7SChuck Lever __field(unsigned long, error) 5377d4006c1SChuck Lever __field(unsigned long, flags) 5389d2d48bbSChuck Lever __field(unsigned long, fmode) 5396e0d0be7STrond Myklebust __field(dev_t, dev) 5406e0d0be7STrond Myklebust __field(u64, dir) 5416e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 5426e0d0be7STrond Myklebust ), 5436e0d0be7STrond Myklebust 5446e0d0be7STrond Myklebust TP_fast_assign( 54538a638a7SChuck Lever __entry->error = -error; 5466e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5476e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 5486e0d0be7STrond Myklebust __entry->flags = flags; 5499d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 5506e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 5516e0d0be7STrond Myklebust ), 5526e0d0be7STrond Myklebust 5536e0d0be7STrond Myklebust TP_printk( 5547d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 5556e0d0be7STrond Myklebust "name=%02x:%02x:%llu/%s", 5568791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 5576e0d0be7STrond Myklebust __entry->flags, 5589d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5599d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 5606e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5616e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 5626e0d0be7STrond Myklebust __get_str(name) 5636e0d0be7STrond Myklebust ) 5646e0d0be7STrond Myklebust ); 5656e0d0be7STrond Myklebust 5668b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_enter, 5678b0ad3d4STrond Myklebust TP_PROTO( 5688b0ad3d4STrond Myklebust const struct inode *dir, 5698b0ad3d4STrond Myklebust const struct dentry *dentry, 5708b0ad3d4STrond Myklebust unsigned int flags 5718b0ad3d4STrond Myklebust ), 5728b0ad3d4STrond Myklebust 5738b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags), 5748b0ad3d4STrond Myklebust 5758b0ad3d4STrond Myklebust TP_STRUCT__entry( 5767d4006c1SChuck Lever __field(unsigned long, flags) 5778b0ad3d4STrond Myklebust __field(dev_t, dev) 5788b0ad3d4STrond Myklebust __field(u64, dir) 5798b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 5808b0ad3d4STrond Myklebust ), 5818b0ad3d4STrond Myklebust 5828b0ad3d4STrond Myklebust TP_fast_assign( 5838b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5848b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 5858b0ad3d4STrond Myklebust __entry->flags = flags; 5868b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 5878b0ad3d4STrond Myklebust ), 5888b0ad3d4STrond Myklebust 5898b0ad3d4STrond Myklebust TP_printk( 5907d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 5918b0ad3d4STrond Myklebust __entry->flags, 5929d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5938b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5948b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 5958b0ad3d4STrond Myklebust __get_str(name) 5968b0ad3d4STrond Myklebust ) 5978b0ad3d4STrond Myklebust ); 5988b0ad3d4STrond Myklebust 5998b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_exit, 6008b0ad3d4STrond Myklebust TP_PROTO( 6018b0ad3d4STrond Myklebust const struct inode *dir, 6028b0ad3d4STrond Myklebust const struct dentry *dentry, 6038b0ad3d4STrond Myklebust unsigned int flags, 6048b0ad3d4STrond Myklebust int error 6058b0ad3d4STrond Myklebust ), 6068b0ad3d4STrond Myklebust 6078b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags, error), 6088b0ad3d4STrond Myklebust 6098b0ad3d4STrond Myklebust TP_STRUCT__entry( 61038a638a7SChuck Lever __field(unsigned long, error) 6117d4006c1SChuck Lever __field(unsigned long, flags) 6128b0ad3d4STrond Myklebust __field(dev_t, dev) 6138b0ad3d4STrond Myklebust __field(u64, dir) 6148b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 6158b0ad3d4STrond Myklebust ), 6168b0ad3d4STrond Myklebust 6178b0ad3d4STrond Myklebust TP_fast_assign( 61838a638a7SChuck Lever __entry->error = -error; 6198b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6208b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 6218b0ad3d4STrond Myklebust __entry->flags = flags; 6228b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 6238b0ad3d4STrond Myklebust ), 6248b0ad3d4STrond Myklebust 6258b0ad3d4STrond Myklebust TP_printk( 6267d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 6278791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6288b0ad3d4STrond Myklebust __entry->flags, 6299d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 6308b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6318b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 6328b0ad3d4STrond Myklebust __get_str(name) 6338b0ad3d4STrond Myklebust ) 6348b0ad3d4STrond Myklebust ); 6358b0ad3d4STrond Myklebust 6361ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event, 6371ca42382STrond Myklebust TP_PROTO( 6381ca42382STrond Myklebust const struct inode *dir, 6391ca42382STrond Myklebust const struct dentry *dentry 6401ca42382STrond Myklebust ), 6411ca42382STrond Myklebust 6421ca42382STrond Myklebust TP_ARGS(dir, dentry), 6431ca42382STrond Myklebust 6441ca42382STrond Myklebust TP_STRUCT__entry( 6451ca42382STrond Myklebust __field(dev_t, dev) 6461ca42382STrond Myklebust __field(u64, dir) 6471ca42382STrond Myklebust __string(name, dentry->d_name.name) 6481ca42382STrond Myklebust ), 6491ca42382STrond Myklebust 6501ca42382STrond Myklebust TP_fast_assign( 6511ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6521ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 6531ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 6541ca42382STrond Myklebust ), 6551ca42382STrond Myklebust 6561ca42382STrond Myklebust TP_printk( 6571ca42382STrond Myklebust "name=%02x:%02x:%llu/%s", 6581ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6591ca42382STrond Myklebust (unsigned long long)__entry->dir, 6601ca42382STrond Myklebust __get_str(name) 6611ca42382STrond Myklebust ) 6621ca42382STrond Myklebust ); 6631ca42382STrond Myklebust 6641ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 6651ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event, name, \ 6661ca42382STrond Myklebust TP_PROTO( \ 6671ca42382STrond Myklebust const struct inode *dir, \ 6681ca42382STrond Myklebust const struct dentry *dentry \ 6691ca42382STrond Myklebust ), \ 6701ca42382STrond Myklebust TP_ARGS(dir, dentry)) 6711ca42382STrond Myklebust 6721ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event_done, 6731ca42382STrond Myklebust TP_PROTO( 6741ca42382STrond Myklebust const struct inode *dir, 6751ca42382STrond Myklebust const struct dentry *dentry, 6761ca42382STrond Myklebust int error 6771ca42382STrond Myklebust ), 6781ca42382STrond Myklebust 6791ca42382STrond Myklebust TP_ARGS(dir, dentry, error), 6801ca42382STrond Myklebust 6811ca42382STrond Myklebust TP_STRUCT__entry( 68238a638a7SChuck Lever __field(unsigned long, error) 6831ca42382STrond Myklebust __field(dev_t, dev) 6841ca42382STrond Myklebust __field(u64, dir) 6851ca42382STrond Myklebust __string(name, dentry->d_name.name) 6861ca42382STrond Myklebust ), 6871ca42382STrond Myklebust 6881ca42382STrond Myklebust TP_fast_assign( 6891ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6901ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 69138a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 6921ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 6931ca42382STrond Myklebust ), 6941ca42382STrond Myklebust 6951ca42382STrond Myklebust TP_printk( 69638a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 6978791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6981ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6991ca42382STrond Myklebust (unsigned long long)__entry->dir, 7001ca42382STrond Myklebust __get_str(name) 7011ca42382STrond Myklebust ) 7021ca42382STrond Myklebust ); 7031ca42382STrond Myklebust 7041ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 7051ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event_done, name, \ 7061ca42382STrond Myklebust TP_PROTO( \ 7071ca42382STrond Myklebust const struct inode *dir, \ 7081ca42382STrond Myklebust const struct dentry *dentry, \ 7091ca42382STrond Myklebust int error \ 7101ca42382STrond Myklebust ), \ 7111ca42382STrond Myklebust TP_ARGS(dir, dentry, error)) 7121ca42382STrond Myklebust 7131ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 7141ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 7151ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 7161ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 7171ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 7181ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 7191ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 7201ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 7211ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 7221ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 7231ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 7241ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 7251ca42382STrond Myklebust 7261fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_enter, 7271fd1085bSTrond Myklebust TP_PROTO( 7281fd1085bSTrond Myklebust const struct inode *inode, 7291fd1085bSTrond Myklebust const struct inode *dir, 7301fd1085bSTrond Myklebust const struct dentry *dentry 7311fd1085bSTrond Myklebust ), 7321fd1085bSTrond Myklebust 7331fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry), 7341fd1085bSTrond Myklebust 7351fd1085bSTrond Myklebust TP_STRUCT__entry( 7361fd1085bSTrond Myklebust __field(dev_t, dev) 7371fd1085bSTrond Myklebust __field(u64, fileid) 7381fd1085bSTrond Myklebust __field(u64, dir) 7391fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 7401fd1085bSTrond Myklebust ), 7411fd1085bSTrond Myklebust 7421fd1085bSTrond Myklebust TP_fast_assign( 7431fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 7441fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 7451fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 7461fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 7471fd1085bSTrond Myklebust ), 7481fd1085bSTrond Myklebust 7491fd1085bSTrond Myklebust TP_printk( 7501fd1085bSTrond Myklebust "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 7511fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7521fd1085bSTrond Myklebust __entry->fileid, 7531fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7541fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 7551fd1085bSTrond Myklebust __get_str(name) 7561fd1085bSTrond Myklebust ) 7571fd1085bSTrond Myklebust ); 7581fd1085bSTrond Myklebust 7591fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_exit, 7601fd1085bSTrond Myklebust TP_PROTO( 7611fd1085bSTrond Myklebust const struct inode *inode, 7621fd1085bSTrond Myklebust const struct inode *dir, 7631fd1085bSTrond Myklebust const struct dentry *dentry, 7641fd1085bSTrond Myklebust int error 7651fd1085bSTrond Myklebust ), 7661fd1085bSTrond Myklebust 7671fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry, error), 7681fd1085bSTrond Myklebust 7691fd1085bSTrond Myklebust TP_STRUCT__entry( 77038a638a7SChuck Lever __field(unsigned long, error) 7711fd1085bSTrond Myklebust __field(dev_t, dev) 7721fd1085bSTrond Myklebust __field(u64, fileid) 7731fd1085bSTrond Myklebust __field(u64, dir) 7741fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 7751fd1085bSTrond Myklebust ), 7761fd1085bSTrond Myklebust 7771fd1085bSTrond Myklebust TP_fast_assign( 7781fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 7791fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 7801fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 78138a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 7821fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 7831fd1085bSTrond Myklebust ), 7841fd1085bSTrond Myklebust 7851fd1085bSTrond Myklebust TP_printk( 78638a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 7878791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 7881fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7891fd1085bSTrond Myklebust __entry->fileid, 7901fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7911fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 7921fd1085bSTrond Myklebust __get_str(name) 7931fd1085bSTrond Myklebust ) 7941fd1085bSTrond Myklebust ); 7951fd1085bSTrond Myklebust 79670ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event, 79770ded201STrond Myklebust TP_PROTO( 79870ded201STrond Myklebust const struct inode *old_dir, 79970ded201STrond Myklebust const struct dentry *old_dentry, 80070ded201STrond Myklebust const struct inode *new_dir, 80170ded201STrond Myklebust const struct dentry *new_dentry 80270ded201STrond Myklebust ), 80370ded201STrond Myklebust 80470ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 80570ded201STrond Myklebust 80670ded201STrond Myklebust TP_STRUCT__entry( 80770ded201STrond Myklebust __field(dev_t, dev) 80870ded201STrond Myklebust __field(u64, old_dir) 80970ded201STrond Myklebust __field(u64, new_dir) 81070ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 81170ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 81270ded201STrond Myklebust ), 81370ded201STrond Myklebust 81470ded201STrond Myklebust TP_fast_assign( 81570ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 81670ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 81770ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 81870ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 81970ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 82070ded201STrond Myklebust ), 82170ded201STrond Myklebust 82270ded201STrond Myklebust TP_printk( 82370ded201STrond Myklebust "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 82470ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 82570ded201STrond Myklebust (unsigned long long)__entry->old_dir, 82670ded201STrond Myklebust __get_str(old_name), 82770ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 82870ded201STrond Myklebust (unsigned long long)__entry->new_dir, 82970ded201STrond Myklebust __get_str(new_name) 83070ded201STrond Myklebust ) 83170ded201STrond Myklebust ); 83270ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT(name) \ 83370ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event, name, \ 83470ded201STrond Myklebust TP_PROTO( \ 83570ded201STrond Myklebust const struct inode *old_dir, \ 83670ded201STrond Myklebust const struct dentry *old_dentry, \ 83770ded201STrond Myklebust const struct inode *new_dir, \ 83870ded201STrond Myklebust const struct dentry *new_dentry \ 83970ded201STrond Myklebust ), \ 84070ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 84170ded201STrond Myklebust 84270ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event_done, 84370ded201STrond Myklebust TP_PROTO( 84470ded201STrond Myklebust const struct inode *old_dir, 84570ded201STrond Myklebust const struct dentry *old_dentry, 84670ded201STrond Myklebust const struct inode *new_dir, 84770ded201STrond Myklebust const struct dentry *new_dentry, 84870ded201STrond Myklebust int error 84970ded201STrond Myklebust ), 85070ded201STrond Myklebust 85170ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 85270ded201STrond Myklebust 85370ded201STrond Myklebust TP_STRUCT__entry( 85470ded201STrond Myklebust __field(dev_t, dev) 85538a638a7SChuck Lever __field(unsigned long, error) 85670ded201STrond Myklebust __field(u64, old_dir) 85770ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 85870ded201STrond Myklebust __field(u64, new_dir) 85970ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 86070ded201STrond Myklebust ), 86170ded201STrond Myklebust 86270ded201STrond Myklebust TP_fast_assign( 86370ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 86438a638a7SChuck Lever __entry->error = -error; 86570ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 86670ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 86770ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 86870ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 86970ded201STrond Myklebust ), 87070ded201STrond Myklebust 87170ded201STrond Myklebust TP_printk( 87238a638a7SChuck Lever "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 87370ded201STrond Myklebust "new_name=%02x:%02x:%llu/%s", 8748791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 87570ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 87670ded201STrond Myklebust (unsigned long long)__entry->old_dir, 87770ded201STrond Myklebust __get_str(old_name), 87870ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 87970ded201STrond Myklebust (unsigned long long)__entry->new_dir, 88070ded201STrond Myklebust __get_str(new_name) 88170ded201STrond Myklebust ) 88270ded201STrond Myklebust ); 88370ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 88470ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event_done, name, \ 88570ded201STrond Myklebust TP_PROTO( \ 88670ded201STrond Myklebust const struct inode *old_dir, \ 88770ded201STrond Myklebust const struct dentry *old_dentry, \ 88870ded201STrond Myklebust const struct inode *new_dir, \ 88970ded201STrond Myklebust const struct dentry *new_dentry, \ 89070ded201STrond Myklebust int error \ 89170ded201STrond Myklebust ), \ 89270ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, \ 89370ded201STrond Myklebust new_dentry, error)) 89470ded201STrond Myklebust 89570ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 89670ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 89770ded201STrond Myklebust 89870ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 89970ded201STrond Myklebust 90070ded201STrond Myklebust TRACE_EVENT(nfs_sillyrename_unlink, 90170ded201STrond Myklebust TP_PROTO( 90270ded201STrond Myklebust const struct nfs_unlinkdata *data, 90370ded201STrond Myklebust int error 90470ded201STrond Myklebust ), 90570ded201STrond Myklebust 90670ded201STrond Myklebust TP_ARGS(data, error), 90770ded201STrond Myklebust 90870ded201STrond Myklebust TP_STRUCT__entry( 90970ded201STrond Myklebust __field(dev_t, dev) 91038a638a7SChuck Lever __field(unsigned long, error) 91170ded201STrond Myklebust __field(u64, dir) 91270ded201STrond Myklebust __dynamic_array(char, name, data->args.name.len + 1) 91370ded201STrond Myklebust ), 91470ded201STrond Myklebust 91570ded201STrond Myklebust TP_fast_assign( 916884be175SAl Viro struct inode *dir = d_inode(data->dentry->d_parent); 91770ded201STrond Myklebust size_t len = data->args.name.len; 91870ded201STrond Myklebust __entry->dev = dir->i_sb->s_dev; 91970ded201STrond Myklebust __entry->dir = NFS_FILEID(dir); 92038a638a7SChuck Lever __entry->error = -error; 921752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), 92270ded201STrond Myklebust data->args.name.name, len); 923752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 92470ded201STrond Myklebust ), 92570ded201STrond Myklebust 92670ded201STrond Myklebust TP_printk( 92738a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 9288791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 92970ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 93070ded201STrond Myklebust (unsigned long long)__entry->dir, 93170ded201STrond Myklebust __get_str(name) 93270ded201STrond Myklebust ) 93370ded201STrond Myklebust ); 9348224b273SChuck Lever 935d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage, 936d9f87743SChuck Lever TP_PROTO( 937d9f87743SChuck Lever const struct inode *inode, 938d9f87743SChuck Lever struct page *page 939d9f87743SChuck Lever ), 940d9f87743SChuck Lever 941d9f87743SChuck Lever TP_ARGS(inode, page), 942d9f87743SChuck Lever 943d9f87743SChuck Lever TP_STRUCT__entry( 944d9f87743SChuck Lever __field(dev_t, dev) 945d9f87743SChuck Lever __field(u32, fhandle) 946d9f87743SChuck Lever __field(u64, fileid) 947d9f87743SChuck Lever __field(u64, version) 948d9f87743SChuck Lever __field(loff_t, offset) 949d9f87743SChuck Lever ), 950d9f87743SChuck Lever 951d9f87743SChuck Lever TP_fast_assign( 952d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 953d9f87743SChuck Lever 954d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 955d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 956d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 957d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 958d9f87743SChuck Lever __entry->offset = page_index(page) << PAGE_SHIFT; 959d9f87743SChuck Lever ), 960d9f87743SChuck Lever 961d9f87743SChuck Lever TP_printk( 962d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld", 963d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 964d9f87743SChuck Lever (unsigned long long)__entry->fileid, 965d9f87743SChuck Lever __entry->fhandle, __entry->version, 966d9f87743SChuck Lever __entry->offset 967d9f87743SChuck Lever ) 968d9f87743SChuck Lever ); 969d9f87743SChuck Lever 970d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage_done, 971d9f87743SChuck Lever TP_PROTO( 972d9f87743SChuck Lever const struct inode *inode, 973d9f87743SChuck Lever struct page *page, 974d9f87743SChuck Lever int ret 975d9f87743SChuck Lever ), 976d9f87743SChuck Lever 977d9f87743SChuck Lever TP_ARGS(inode, page, ret), 978d9f87743SChuck Lever 979d9f87743SChuck Lever TP_STRUCT__entry( 980d9f87743SChuck Lever __field(dev_t, dev) 981d9f87743SChuck Lever __field(u32, fhandle) 982d9f87743SChuck Lever __field(int, ret) 983d9f87743SChuck Lever __field(u64, fileid) 984d9f87743SChuck Lever __field(u64, version) 985d9f87743SChuck Lever __field(loff_t, offset) 986d9f87743SChuck Lever ), 987d9f87743SChuck Lever 988d9f87743SChuck Lever TP_fast_assign( 989d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 990d9f87743SChuck Lever 991d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 992d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 993d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 994d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 995d9f87743SChuck Lever __entry->offset = page_index(page) << PAGE_SHIFT; 996d9f87743SChuck Lever __entry->ret = ret; 997d9f87743SChuck Lever ), 998d9f87743SChuck Lever 999d9f87743SChuck Lever TP_printk( 1000d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld ret=%d", 1001d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1002d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1003d9f87743SChuck Lever __entry->fhandle, __entry->version, 1004d9f87743SChuck Lever __entry->offset, __entry->ret 1005d9f87743SChuck Lever ) 1006d9f87743SChuck Lever ); 1007d9f87743SChuck Lever 1008d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead, 1009d9f87743SChuck Lever TP_PROTO( 1010d9f87743SChuck Lever const struct inode *inode, 10118786fde8SMatthew Wilcox (Oracle) loff_t pos, 1012d9f87743SChuck Lever unsigned int nr_pages 1013d9f87743SChuck Lever ), 1014d9f87743SChuck Lever 10158786fde8SMatthew Wilcox (Oracle) TP_ARGS(inode, pos, nr_pages), 1016d9f87743SChuck Lever 1017d9f87743SChuck Lever TP_STRUCT__entry( 1018d9f87743SChuck Lever __field(dev_t, dev) 1019d9f87743SChuck Lever __field(u32, fhandle) 1020d9f87743SChuck Lever __field(u64, fileid) 1021d9f87743SChuck Lever __field(u64, version) 1022edfa0b16SDave Wysochanski __field(loff_t, offset) 1023d9f87743SChuck Lever __field(unsigned int, nr_pages) 1024d9f87743SChuck Lever ), 1025d9f87743SChuck Lever 1026d9f87743SChuck Lever TP_fast_assign( 1027d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1028d9f87743SChuck Lever 1029d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1030d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1031d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1032d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 10338786fde8SMatthew Wilcox (Oracle) __entry->offset = pos; 1034d9f87743SChuck Lever __entry->nr_pages = nr_pages; 1035d9f87743SChuck Lever ), 1036d9f87743SChuck Lever 1037d9f87743SChuck Lever TP_printk( 1038edfa0b16SDave Wysochanski "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u", 1039d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1040d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1041d9f87743SChuck Lever __entry->fhandle, __entry->version, 1042edfa0b16SDave Wysochanski __entry->offset, __entry->nr_pages 1043d9f87743SChuck Lever ) 1044d9f87743SChuck Lever ); 1045d9f87743SChuck Lever 1046d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead_done, 1047d9f87743SChuck Lever TP_PROTO( 1048d9f87743SChuck Lever const struct inode *inode, 1049d9f87743SChuck Lever unsigned int nr_pages, 1050d9f87743SChuck Lever int ret 1051d9f87743SChuck Lever ), 1052d9f87743SChuck Lever 1053d9f87743SChuck Lever TP_ARGS(inode, nr_pages, ret), 1054d9f87743SChuck Lever 1055d9f87743SChuck Lever TP_STRUCT__entry( 1056d9f87743SChuck Lever __field(dev_t, dev) 1057d9f87743SChuck Lever __field(u32, fhandle) 1058d9f87743SChuck Lever __field(int, ret) 1059d9f87743SChuck Lever __field(u64, fileid) 1060d9f87743SChuck Lever __field(u64, version) 1061edfa0b16SDave Wysochanski __field(loff_t, offset) 1062d9f87743SChuck Lever __field(unsigned int, nr_pages) 1063d9f87743SChuck Lever ), 1064d9f87743SChuck Lever 1065d9f87743SChuck Lever TP_fast_assign( 1066d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1067d9f87743SChuck Lever 1068d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1069d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1070d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1071d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 1072d9f87743SChuck Lever __entry->nr_pages = nr_pages; 1073d9f87743SChuck Lever __entry->ret = ret; 1074d9f87743SChuck Lever ), 1075d9f87743SChuck Lever 1076d9f87743SChuck Lever TP_printk( 1077d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d", 1078d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1079d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1080d9f87743SChuck Lever __entry->fhandle, __entry->version, 1081d9f87743SChuck Lever __entry->nr_pages, __entry->ret 1082d9f87743SChuck Lever ) 1083d9f87743SChuck Lever ); 1084d9f87743SChuck Lever 10858224b273SChuck Lever TRACE_EVENT(nfs_initiate_read, 10868224b273SChuck Lever TP_PROTO( 10872343172dSTrond Myklebust const struct nfs_pgio_header *hdr 10888224b273SChuck Lever ), 10898224b273SChuck Lever 10902343172dSTrond Myklebust TP_ARGS(hdr), 10918224b273SChuck Lever 10928224b273SChuck Lever TP_STRUCT__entry( 10938224b273SChuck Lever __field(dev_t, dev) 10948224b273SChuck Lever __field(u32, fhandle) 10958224b273SChuck Lever __field(u64, fileid) 10962343172dSTrond Myklebust __field(loff_t, offset) 10972343172dSTrond Myklebust __field(u32, count) 10988224b273SChuck Lever ), 10998224b273SChuck Lever 11008224b273SChuck Lever TP_fast_assign( 11012343172dSTrond Myklebust const struct inode *inode = hdr->inode; 11028224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11032343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11042343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 11058224b273SChuck Lever 11062343172dSTrond Myklebust __entry->offset = hdr->args.offset; 11072343172dSTrond Myklebust __entry->count = hdr->args.count; 11088224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11098224b273SChuck Lever __entry->fileid = nfsi->fileid; 11102343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11118224b273SChuck Lever ), 11128224b273SChuck Lever 11138224b273SChuck Lever TP_printk( 11148224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 11152343172dSTrond Myklebust "offset=%lld count=%u", 11168224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11178224b273SChuck Lever (unsigned long long)__entry->fileid, 11188224b273SChuck Lever __entry->fhandle, 11192343172dSTrond Myklebust (long long)__entry->offset, __entry->count 11208224b273SChuck Lever ) 11218224b273SChuck Lever ); 11228224b273SChuck Lever 11238224b273SChuck Lever TRACE_EVENT(nfs_readpage_done, 11248224b273SChuck Lever TP_PROTO( 11252343172dSTrond Myklebust const struct rpc_task *task, 11262343172dSTrond Myklebust const struct nfs_pgio_header *hdr 11278224b273SChuck Lever ), 11288224b273SChuck Lever 11292343172dSTrond Myklebust TP_ARGS(task, hdr), 11308224b273SChuck Lever 11318224b273SChuck Lever TP_STRUCT__entry( 11328224b273SChuck Lever __field(dev_t, dev) 11338224b273SChuck Lever __field(u32, fhandle) 11348224b273SChuck Lever __field(u64, fileid) 11352343172dSTrond Myklebust __field(loff_t, offset) 11362343172dSTrond Myklebust __field(u32, arg_count) 11372343172dSTrond Myklebust __field(u32, res_count) 11382343172dSTrond Myklebust __field(bool, eof) 11392343172dSTrond Myklebust __field(int, status) 11408224b273SChuck Lever ), 11418224b273SChuck Lever 11428224b273SChuck Lever TP_fast_assign( 11432343172dSTrond Myklebust const struct inode *inode = hdr->inode; 11448224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11452343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11462343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 11478224b273SChuck Lever 11482343172dSTrond Myklebust __entry->status = task->tk_status; 11492343172dSTrond Myklebust __entry->offset = hdr->args.offset; 11502343172dSTrond Myklebust __entry->arg_count = hdr->args.count; 11512343172dSTrond Myklebust __entry->res_count = hdr->res.count; 11522343172dSTrond Myklebust __entry->eof = hdr->res.eof; 11538224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11548224b273SChuck Lever __entry->fileid = nfsi->fileid; 11552343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11568224b273SChuck Lever ), 11578224b273SChuck Lever 11588224b273SChuck Lever TP_printk( 11598224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 11602343172dSTrond Myklebust "offset=%lld count=%u res=%u status=%d%s", 11618224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11628224b273SChuck Lever (unsigned long long)__entry->fileid, 11638224b273SChuck Lever __entry->fhandle, 11642343172dSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 11652343172dSTrond Myklebust __entry->res_count, __entry->status, 11668224b273SChuck Lever __entry->eof ? " eof" : "" 11678224b273SChuck Lever ) 11688224b273SChuck Lever ); 11698224b273SChuck Lever 1170fd2b6121SChuck Lever TRACE_EVENT(nfs_readpage_short, 1171fd2b6121SChuck Lever TP_PROTO( 1172fd2b6121SChuck Lever const struct rpc_task *task, 1173fd2b6121SChuck Lever const struct nfs_pgio_header *hdr 1174fd2b6121SChuck Lever ), 1175fd2b6121SChuck Lever 1176fd2b6121SChuck Lever TP_ARGS(task, hdr), 1177fd2b6121SChuck Lever 1178fd2b6121SChuck Lever TP_STRUCT__entry( 1179fd2b6121SChuck Lever __field(dev_t, dev) 1180fd2b6121SChuck Lever __field(u32, fhandle) 1181fd2b6121SChuck Lever __field(u64, fileid) 1182fd2b6121SChuck Lever __field(loff_t, offset) 1183fd2b6121SChuck Lever __field(u32, arg_count) 1184fd2b6121SChuck Lever __field(u32, res_count) 1185fd2b6121SChuck Lever __field(bool, eof) 1186fd2b6121SChuck Lever __field(int, status) 1187fd2b6121SChuck Lever ), 1188fd2b6121SChuck Lever 1189fd2b6121SChuck Lever TP_fast_assign( 1190fd2b6121SChuck Lever const struct inode *inode = hdr->inode; 1191fd2b6121SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1192fd2b6121SChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1193fd2b6121SChuck Lever hdr->args.fh : &nfsi->fh; 1194fd2b6121SChuck Lever 1195fd2b6121SChuck Lever __entry->status = task->tk_status; 1196fd2b6121SChuck Lever __entry->offset = hdr->args.offset; 1197fd2b6121SChuck Lever __entry->arg_count = hdr->args.count; 1198fd2b6121SChuck Lever __entry->res_count = hdr->res.count; 1199fd2b6121SChuck Lever __entry->eof = hdr->res.eof; 1200fd2b6121SChuck Lever __entry->dev = inode->i_sb->s_dev; 1201fd2b6121SChuck Lever __entry->fileid = nfsi->fileid; 1202fd2b6121SChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1203fd2b6121SChuck Lever ), 1204fd2b6121SChuck Lever 1205fd2b6121SChuck Lever TP_printk( 1206fd2b6121SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 1207fd2b6121SChuck Lever "offset=%lld count=%u res=%u status=%d%s", 1208fd2b6121SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1209fd2b6121SChuck Lever (unsigned long long)__entry->fileid, 1210fd2b6121SChuck Lever __entry->fhandle, 1211fd2b6121SChuck Lever (long long)__entry->offset, __entry->arg_count, 1212fd2b6121SChuck Lever __entry->res_count, __entry->status, 1213fd2b6121SChuck Lever __entry->eof ? " eof" : "" 1214fd2b6121SChuck Lever ) 1215fd2b6121SChuck Lever ); 1216fd2b6121SChuck Lever 1217cd2ed9bdSChuck Lever TRACE_EVENT(nfs_pgio_error, 1218cd2ed9bdSChuck Lever TP_PROTO( 1219cd2ed9bdSChuck Lever const struct nfs_pgio_header *hdr, 1220cd2ed9bdSChuck Lever int error, 1221cd2ed9bdSChuck Lever loff_t pos 1222cd2ed9bdSChuck Lever ), 1223cd2ed9bdSChuck Lever 1224cd2ed9bdSChuck Lever TP_ARGS(hdr, error, pos), 1225cd2ed9bdSChuck Lever 1226cd2ed9bdSChuck Lever TP_STRUCT__entry( 1227cd2ed9bdSChuck Lever __field(dev_t, dev) 1228cd2ed9bdSChuck Lever __field(u32, fhandle) 1229cd2ed9bdSChuck Lever __field(u64, fileid) 1230cd2ed9bdSChuck Lever __field(loff_t, offset) 1231cd2ed9bdSChuck Lever __field(u32, arg_count) 1232cd2ed9bdSChuck Lever __field(u32, res_count) 1233cd2ed9bdSChuck Lever __field(loff_t, pos) 1234cd2ed9bdSChuck Lever __field(int, status) 1235cd2ed9bdSChuck Lever ), 1236cd2ed9bdSChuck Lever 1237cd2ed9bdSChuck Lever TP_fast_assign( 1238cd2ed9bdSChuck Lever const struct inode *inode = hdr->inode; 1239cd2ed9bdSChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1240cd2ed9bdSChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1241cd2ed9bdSChuck Lever hdr->args.fh : &nfsi->fh; 1242cd2ed9bdSChuck Lever 1243cd2ed9bdSChuck Lever __entry->status = error; 1244cd2ed9bdSChuck Lever __entry->offset = hdr->args.offset; 1245cd2ed9bdSChuck Lever __entry->arg_count = hdr->args.count; 1246cd2ed9bdSChuck Lever __entry->res_count = hdr->res.count; 1247cd2ed9bdSChuck Lever __entry->dev = inode->i_sb->s_dev; 1248cd2ed9bdSChuck Lever __entry->fileid = nfsi->fileid; 1249cd2ed9bdSChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1250cd2ed9bdSChuck Lever ), 1251cd2ed9bdSChuck Lever 1252cd2ed9bdSChuck Lever TP_printk("fileid=%02x:%02x:%llu fhandle=0x%08x " 1253cd2ed9bdSChuck Lever "offset=%lld count=%u res=%u pos=%llu status=%d", 1254cd2ed9bdSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1255cd2ed9bdSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 1256cd2ed9bdSChuck Lever (long long)__entry->offset, __entry->arg_count, __entry->res_count, 1257cd2ed9bdSChuck Lever __entry->pos, __entry->status 1258cd2ed9bdSChuck Lever ) 1259cd2ed9bdSChuck Lever ); 1260cd2ed9bdSChuck Lever 12618224b273SChuck Lever TRACE_EVENT(nfs_initiate_write, 12628224b273SChuck Lever TP_PROTO( 12635bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 12648224b273SChuck Lever ), 12658224b273SChuck Lever 12665bb2a7cbSTrond Myklebust TP_ARGS(hdr), 12678224b273SChuck Lever 12688224b273SChuck Lever TP_STRUCT__entry( 12698224b273SChuck Lever __field(dev_t, dev) 12708224b273SChuck Lever __field(u32, fhandle) 12718224b273SChuck Lever __field(u64, fileid) 12725bb2a7cbSTrond Myklebust __field(loff_t, offset) 12735bb2a7cbSTrond Myklebust __field(u32, count) 12748791545eSChuck Lever __field(unsigned long, stable) 12758224b273SChuck Lever ), 12768224b273SChuck Lever 12778224b273SChuck Lever TP_fast_assign( 12785bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 12798224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 12805bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 12815bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 12828224b273SChuck Lever 12835bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 12845bb2a7cbSTrond Myklebust __entry->count = hdr->args.count; 12855bb2a7cbSTrond Myklebust __entry->stable = hdr->args.stable; 12868224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 12878224b273SChuck Lever __entry->fileid = nfsi->fileid; 12885bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 12898224b273SChuck Lever ), 12908224b273SChuck Lever 12918224b273SChuck Lever TP_printk( 12928224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 12935bb2a7cbSTrond Myklebust "offset=%lld count=%u stable=%s", 12948224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 12958224b273SChuck Lever (unsigned long long)__entry->fileid, 12968224b273SChuck Lever __entry->fhandle, 12975bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->count, 12988791545eSChuck Lever show_nfs_stable_how(__entry->stable) 12998224b273SChuck Lever ) 13008224b273SChuck Lever ); 13018224b273SChuck Lever 13028224b273SChuck Lever TRACE_EVENT(nfs_writeback_done, 13038224b273SChuck Lever TP_PROTO( 13045bb2a7cbSTrond Myklebust const struct rpc_task *task, 13055bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 13068224b273SChuck Lever ), 13078224b273SChuck Lever 13085bb2a7cbSTrond Myklebust TP_ARGS(task, hdr), 13098224b273SChuck Lever 13108224b273SChuck Lever TP_STRUCT__entry( 13118224b273SChuck Lever __field(dev_t, dev) 13128224b273SChuck Lever __field(u32, fhandle) 13138224b273SChuck Lever __field(u64, fileid) 13145bb2a7cbSTrond Myklebust __field(loff_t, offset) 13155bb2a7cbSTrond Myklebust __field(u32, arg_count) 13165bb2a7cbSTrond Myklebust __field(u32, res_count) 13175bb2a7cbSTrond Myklebust __field(int, status) 13188791545eSChuck Lever __field(unsigned long, stable) 13195bb2a7cbSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 13208224b273SChuck Lever ), 13218224b273SChuck Lever 13228224b273SChuck Lever TP_fast_assign( 13235bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 13248224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 13255bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 13265bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 13275bb2a7cbSTrond Myklebust const struct nfs_writeverf *verf = hdr->res.verf; 13288224b273SChuck Lever 13295bb2a7cbSTrond Myklebust __entry->status = task->tk_status; 13305bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 13315bb2a7cbSTrond Myklebust __entry->arg_count = hdr->args.count; 13325bb2a7cbSTrond Myklebust __entry->res_count = hdr->res.count; 13335bb2a7cbSTrond Myklebust __entry->stable = verf->committed; 13345bb2a7cbSTrond Myklebust memcpy(__entry->verifier, 13355bb2a7cbSTrond Myklebust &verf->verifier, 13365bb2a7cbSTrond Myklebust NFS4_VERIFIER_SIZE); 13378224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 13388224b273SChuck Lever __entry->fileid = nfsi->fileid; 13395bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 13408224b273SChuck Lever ), 13418224b273SChuck Lever 13428224b273SChuck Lever TP_printk( 13438224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 13445bb2a7cbSTrond Myklebust "offset=%lld count=%u res=%u status=%d stable=%s " 13455bb2a7cbSTrond Myklebust "verifier=%s", 13468224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 13478224b273SChuck Lever (unsigned long long)__entry->fileid, 13488224b273SChuck Lever __entry->fhandle, 13495bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 13505bb2a7cbSTrond Myklebust __entry->res_count, __entry->status, 13518791545eSChuck Lever show_nfs_stable_how(__entry->stable), 13528791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 13538224b273SChuck Lever ) 13548224b273SChuck Lever ); 13558224b273SChuck Lever 1356861e1671SChuck Lever DECLARE_EVENT_CLASS(nfs_page_error_class, 1357861e1671SChuck Lever TP_PROTO( 1358861e1671SChuck Lever const struct nfs_page *req, 1359861e1671SChuck Lever int error 1360861e1671SChuck Lever ), 1361861e1671SChuck Lever 1362861e1671SChuck Lever TP_ARGS(req, error), 1363861e1671SChuck Lever 1364861e1671SChuck Lever TP_STRUCT__entry( 1365861e1671SChuck Lever __field(const void *, req) 1366861e1671SChuck Lever __field(pgoff_t, index) 1367861e1671SChuck Lever __field(unsigned int, offset) 1368861e1671SChuck Lever __field(unsigned int, pgbase) 1369861e1671SChuck Lever __field(unsigned int, bytes) 1370861e1671SChuck Lever __field(int, error) 1371861e1671SChuck Lever ), 1372861e1671SChuck Lever 1373861e1671SChuck Lever TP_fast_assign( 1374861e1671SChuck Lever __entry->req = req; 1375861e1671SChuck Lever __entry->index = req->wb_index; 1376861e1671SChuck Lever __entry->offset = req->wb_offset; 1377861e1671SChuck Lever __entry->pgbase = req->wb_pgbase; 1378861e1671SChuck Lever __entry->bytes = req->wb_bytes; 1379861e1671SChuck Lever __entry->error = error; 1380861e1671SChuck Lever ), 1381861e1671SChuck Lever 1382861e1671SChuck Lever TP_printk( 1383861e1671SChuck Lever "req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d", 1384861e1671SChuck Lever __entry->req, __entry->index, __entry->offset, 1385861e1671SChuck Lever __entry->pgbase, __entry->bytes, __entry->error 1386861e1671SChuck Lever ) 1387861e1671SChuck Lever ); 1388861e1671SChuck Lever 1389861e1671SChuck Lever #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1390861e1671SChuck Lever DEFINE_EVENT(nfs_page_error_class, name, \ 1391861e1671SChuck Lever TP_PROTO( \ 1392861e1671SChuck Lever const struct nfs_page *req, \ 1393861e1671SChuck Lever int error \ 1394861e1671SChuck Lever ), \ 1395861e1671SChuck Lever TP_ARGS(req, error)) 1396861e1671SChuck Lever 1397861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1398861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1399861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1400861e1671SChuck Lever 14018224b273SChuck Lever TRACE_EVENT(nfs_initiate_commit, 14028224b273SChuck Lever TP_PROTO( 14038224b273SChuck Lever const struct nfs_commit_data *data 14048224b273SChuck Lever ), 14058224b273SChuck Lever 14068224b273SChuck Lever TP_ARGS(data), 14078224b273SChuck Lever 14088224b273SChuck Lever TP_STRUCT__entry( 14098224b273SChuck Lever __field(dev_t, dev) 14108224b273SChuck Lever __field(u32, fhandle) 14118224b273SChuck Lever __field(u64, fileid) 14127bdd297eSTrond Myklebust __field(loff_t, offset) 14137bdd297eSTrond Myklebust __field(u32, count) 14148224b273SChuck Lever ), 14158224b273SChuck Lever 14168224b273SChuck Lever TP_fast_assign( 14178224b273SChuck Lever const struct inode *inode = data->inode; 14188224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 14197bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 14207bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 14218224b273SChuck Lever 14228224b273SChuck Lever __entry->offset = data->args.offset; 14238224b273SChuck Lever __entry->count = data->args.count; 14248224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 14258224b273SChuck Lever __entry->fileid = nfsi->fileid; 14267bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 14278224b273SChuck Lever ), 14288224b273SChuck Lever 14298224b273SChuck Lever TP_printk( 14308224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 14317bdd297eSTrond Myklebust "offset=%lld count=%u", 14328224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 14338224b273SChuck Lever (unsigned long long)__entry->fileid, 14348224b273SChuck Lever __entry->fhandle, 14357bdd297eSTrond Myklebust (long long)__entry->offset, __entry->count 14368224b273SChuck Lever ) 14378224b273SChuck Lever ); 14388224b273SChuck Lever 14398224b273SChuck Lever TRACE_EVENT(nfs_commit_done, 14408224b273SChuck Lever TP_PROTO( 14417bdd297eSTrond Myklebust const struct rpc_task *task, 14428224b273SChuck Lever const struct nfs_commit_data *data 14438224b273SChuck Lever ), 14448224b273SChuck Lever 14457bdd297eSTrond Myklebust TP_ARGS(task, data), 14468224b273SChuck Lever 14478224b273SChuck Lever TP_STRUCT__entry( 14488224b273SChuck Lever __field(dev_t, dev) 14498224b273SChuck Lever __field(u32, fhandle) 14508224b273SChuck Lever __field(u64, fileid) 14517bdd297eSTrond Myklebust __field(loff_t, offset) 14527bdd297eSTrond Myklebust __field(int, status) 14538791545eSChuck Lever __field(unsigned long, stable) 14547bdd297eSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 14558224b273SChuck Lever ), 14568224b273SChuck Lever 14578224b273SChuck Lever TP_fast_assign( 14588224b273SChuck Lever const struct inode *inode = data->inode; 14598224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 14607bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 14617bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 14627bdd297eSTrond Myklebust const struct nfs_writeverf *verf = data->res.verf; 14638224b273SChuck Lever 14647bdd297eSTrond Myklebust __entry->status = task->tk_status; 14658224b273SChuck Lever __entry->offset = data->args.offset; 14667bdd297eSTrond Myklebust __entry->stable = verf->committed; 14677bdd297eSTrond Myklebust memcpy(__entry->verifier, 14687bdd297eSTrond Myklebust &verf->verifier, 14697bdd297eSTrond Myklebust NFS4_VERIFIER_SIZE); 14708224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 14718224b273SChuck Lever __entry->fileid = nfsi->fileid; 14727bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 14738224b273SChuck Lever ), 14748224b273SChuck Lever 14758224b273SChuck Lever TP_printk( 14768224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 14777bdd297eSTrond Myklebust "offset=%lld status=%d stable=%s verifier=%s", 14788224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 14798224b273SChuck Lever (unsigned long long)__entry->fileid, 14808224b273SChuck Lever __entry->fhandle, 14817bdd297eSTrond Myklebust (long long)__entry->offset, __entry->status, 14828791545eSChuck Lever show_nfs_stable_how(__entry->stable), 14838791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 14848224b273SChuck Lever ) 14858224b273SChuck Lever ); 14868224b273SChuck Lever 148743622eabSTrond Myklebust TRACE_EVENT(nfs_fh_to_dentry, 148843622eabSTrond Myklebust TP_PROTO( 148943622eabSTrond Myklebust const struct super_block *sb, 149043622eabSTrond Myklebust const struct nfs_fh *fh, 149143622eabSTrond Myklebust u64 fileid, 149243622eabSTrond Myklebust int error 149343622eabSTrond Myklebust ), 149443622eabSTrond Myklebust 149543622eabSTrond Myklebust TP_ARGS(sb, fh, fileid, error), 149643622eabSTrond Myklebust 149743622eabSTrond Myklebust TP_STRUCT__entry( 149843622eabSTrond Myklebust __field(int, error) 149943622eabSTrond Myklebust __field(dev_t, dev) 150043622eabSTrond Myklebust __field(u32, fhandle) 150143622eabSTrond Myklebust __field(u64, fileid) 150243622eabSTrond Myklebust ), 150343622eabSTrond Myklebust 150443622eabSTrond Myklebust TP_fast_assign( 150543622eabSTrond Myklebust __entry->error = error; 150643622eabSTrond Myklebust __entry->dev = sb->s_dev; 150743622eabSTrond Myklebust __entry->fileid = fileid; 150843622eabSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 150943622eabSTrond Myklebust ), 151043622eabSTrond Myklebust 151143622eabSTrond Myklebust TP_printk( 151243622eabSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 151343622eabSTrond Myklebust __entry->error, 151443622eabSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 151543622eabSTrond Myklebust (unsigned long long)__entry->fileid, 151643622eabSTrond Myklebust __entry->fhandle 151743622eabSTrond Myklebust ) 151843622eabSTrond Myklebust ); 151943622eabSTrond Myklebust 15203d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs_xdr_event, 1521f23f6584SChuck Lever TP_PROTO( 152262a92ba9SChuck Lever const struct xdr_stream *xdr, 1523f23f6584SChuck Lever int error 1524f23f6584SChuck Lever ), 1525f23f6584SChuck Lever 152662a92ba9SChuck Lever TP_ARGS(xdr, error), 1527f23f6584SChuck Lever 1528f23f6584SChuck Lever TP_STRUCT__entry( 152962a92ba9SChuck Lever __field(unsigned int, task_id) 153062a92ba9SChuck Lever __field(unsigned int, client_id) 153162a92ba9SChuck Lever __field(u32, xid) 15325be59458SChuck Lever __field(int, version) 153338a638a7SChuck Lever __field(unsigned long, error) 15345be59458SChuck Lever __string(program, 15355be59458SChuck Lever xdr->rqst->rq_task->tk_client->cl_program->name) 15365be59458SChuck Lever __string(procedure, 15375be59458SChuck Lever xdr->rqst->rq_task->tk_msg.rpc_proc->p_name) 1538f23f6584SChuck Lever ), 1539f23f6584SChuck Lever 1540f23f6584SChuck Lever TP_fast_assign( 154162a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 154262a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 154362a92ba9SChuck Lever 154462a92ba9SChuck Lever __entry->task_id = task->tk_pid; 154562a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 154662a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 15475be59458SChuck Lever __entry->version = task->tk_client->cl_vers; 1548f23f6584SChuck Lever __entry->error = error; 15495be59458SChuck Lever __assign_str(program, 155078c14b38SJoe Perches task->tk_client->cl_program->name); 155178c14b38SJoe Perches __assign_str(procedure, task->tk_msg.rpc_proc->p_name); 1552f23f6584SChuck Lever ), 1553f23f6584SChuck Lever 1554b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 1555b4776a34SChuck Lever " xid=0x%08x %sv%d %s error=%ld (%s)", 155662a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 15575be59458SChuck Lever __get_str(program), __entry->version, 15585be59458SChuck Lever __get_str(procedure), -__entry->error, 15598791545eSChuck Lever show_nfs_status(__entry->error) 1560f23f6584SChuck Lever ) 1561f23f6584SChuck Lever ); 15623d66bae1STrond Myklebust #define DEFINE_NFS_XDR_EVENT(name) \ 15633d66bae1STrond Myklebust DEFINE_EVENT(nfs_xdr_event, name, \ 15643d66bae1STrond Myklebust TP_PROTO( \ 15653d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 15663d66bae1STrond Myklebust int error \ 15673d66bae1STrond Myklebust ), \ 15683d66bae1STrond Myklebust TP_ARGS(xdr, error)) 15693d66bae1STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_status); 1570eb3d58c6STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle); 1571f23f6584SChuck Lever 1572f4ce1299STrond Myklebust #endif /* _TRACE_NFS_H */ 1573f4ce1299STrond Myklebust 1574f4ce1299STrond Myklebust #undef TRACE_INCLUDE_PATH 1575f4ce1299STrond Myklebust #define TRACE_INCLUDE_PATH . 1576f4ce1299STrond Myklebust #define TRACE_INCLUDE_FILE nfstrace 1577f4ce1299STrond Myklebust /* This part must be outside protection */ 1578f4ce1299STrond Myklebust #include <trace/define_trace.h> 1579