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); 163*b0365ccbSTrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_readdir_force_readdirplus); 164310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done); 165310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done); 166e8194b7dSTrond Myklebust 167e8194b7dSTrond Myklebust TRACE_EVENT(nfs_access_exit, 168e8194b7dSTrond Myklebust TP_PROTO( 169e8194b7dSTrond Myklebust const struct inode *inode, 170e8194b7dSTrond Myklebust unsigned int mask, 171e8194b7dSTrond Myklebust unsigned int permitted, 172e8194b7dSTrond Myklebust int error 173e8194b7dSTrond Myklebust ), 174e8194b7dSTrond Myklebust 175e8194b7dSTrond Myklebust TP_ARGS(inode, mask, permitted, error), 176e8194b7dSTrond Myklebust 177e8194b7dSTrond Myklebust TP_STRUCT__entry( 178e8194b7dSTrond Myklebust __field(unsigned long, error) 179e8194b7dSTrond Myklebust __field(dev_t, dev) 180e8194b7dSTrond Myklebust __field(u32, fhandle) 181e8194b7dSTrond Myklebust __field(unsigned char, type) 182e8194b7dSTrond Myklebust __field(u64, fileid) 183e8194b7dSTrond Myklebust __field(u64, version) 184e8194b7dSTrond Myklebust __field(loff_t, size) 185e8194b7dSTrond Myklebust __field(unsigned long, nfsi_flags) 186e8194b7dSTrond Myklebust __field(unsigned long, cache_validity) 187e8194b7dSTrond Myklebust __field(unsigned int, mask) 188e8194b7dSTrond Myklebust __field(unsigned int, permitted) 189e8194b7dSTrond Myklebust ), 190e8194b7dSTrond Myklebust 191e8194b7dSTrond Myklebust TP_fast_assign( 192e8194b7dSTrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 193e8194b7dSTrond Myklebust __entry->error = error < 0 ? -error : 0; 194e8194b7dSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 195e8194b7dSTrond Myklebust __entry->fileid = nfsi->fileid; 196e8194b7dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 197e8194b7dSTrond Myklebust __entry->type = nfs_umode_to_dtype(inode->i_mode); 198e8194b7dSTrond Myklebust __entry->version = inode_peek_iversion_raw(inode); 199e8194b7dSTrond Myklebust __entry->size = i_size_read(inode); 200e8194b7dSTrond Myklebust __entry->nfsi_flags = nfsi->flags; 201e8194b7dSTrond Myklebust __entry->cache_validity = nfsi->cache_validity; 202e8194b7dSTrond Myklebust __entry->mask = mask; 203e8194b7dSTrond Myklebust __entry->permitted = permitted; 204e8194b7dSTrond Myklebust ), 205e8194b7dSTrond Myklebust 206e8194b7dSTrond Myklebust TP_printk( 207e8194b7dSTrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 208e8194b7dSTrond Myklebust "type=%u (%s) version=%llu size=%lld " 209e8194b7dSTrond Myklebust "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) " 210e8194b7dSTrond Myklebust "mask=0x%x permitted=0x%x", 2118791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 212e8194b7dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 213e8194b7dSTrond Myklebust (unsigned long long)__entry->fileid, 214e8194b7dSTrond Myklebust __entry->fhandle, 215e8194b7dSTrond Myklebust __entry->type, 2169d2d48bbSChuck Lever show_fs_dirent_type(__entry->type), 217e8194b7dSTrond Myklebust (unsigned long long)__entry->version, 218e8194b7dSTrond Myklebust (long long)__entry->size, 219e8194b7dSTrond Myklebust __entry->cache_validity, 220e8194b7dSTrond Myklebust nfs_show_cache_validity(__entry->cache_validity), 221e8194b7dSTrond Myklebust __entry->nfsi_flags, 222e8194b7dSTrond Myklebust nfs_show_nfsi_flags(__entry->nfsi_flags), 223e8194b7dSTrond Myklebust __entry->mask, __entry->permitted 224e8194b7dSTrond Myklebust ) 225e8194b7dSTrond Myklebust ); 226f4ce1299STrond Myklebust 227110cb2d2SChuck Lever DECLARE_EVENT_CLASS(nfs_update_size_class, 228110cb2d2SChuck Lever TP_PROTO( 229110cb2d2SChuck Lever const struct inode *inode, 230110cb2d2SChuck Lever loff_t new_size 231110cb2d2SChuck Lever ), 232110cb2d2SChuck Lever 233110cb2d2SChuck Lever TP_ARGS(inode, new_size), 234110cb2d2SChuck Lever 235110cb2d2SChuck Lever TP_STRUCT__entry( 236110cb2d2SChuck Lever __field(dev_t, dev) 237110cb2d2SChuck Lever __field(u32, fhandle) 238110cb2d2SChuck Lever __field(u64, fileid) 239110cb2d2SChuck Lever __field(u64, version) 240110cb2d2SChuck Lever __field(loff_t, cur_size) 241110cb2d2SChuck Lever __field(loff_t, new_size) 242110cb2d2SChuck Lever ), 243110cb2d2SChuck Lever 244110cb2d2SChuck Lever TP_fast_assign( 245110cb2d2SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 246110cb2d2SChuck Lever 247110cb2d2SChuck Lever __entry->dev = inode->i_sb->s_dev; 248110cb2d2SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 249110cb2d2SChuck Lever __entry->fileid = nfsi->fileid; 250110cb2d2SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 251110cb2d2SChuck Lever __entry->cur_size = i_size_read(inode); 252110cb2d2SChuck Lever __entry->new_size = new_size; 253110cb2d2SChuck Lever ), 254110cb2d2SChuck Lever 255110cb2d2SChuck Lever TP_printk( 256110cb2d2SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld", 257110cb2d2SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 258110cb2d2SChuck Lever (unsigned long long)__entry->fileid, 259110cb2d2SChuck Lever __entry->fhandle, __entry->version, 260110cb2d2SChuck Lever __entry->cur_size, __entry->new_size 261110cb2d2SChuck Lever ) 262110cb2d2SChuck Lever ); 263110cb2d2SChuck Lever 264110cb2d2SChuck Lever #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \ 265110cb2d2SChuck Lever DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \ 266110cb2d2SChuck Lever TP_PROTO( \ 267110cb2d2SChuck Lever const struct inode *inode, \ 268110cb2d2SChuck Lever loff_t new_size \ 269110cb2d2SChuck Lever ), \ 270110cb2d2SChuck Lever TP_ARGS(inode, new_size)) 271110cb2d2SChuck Lever 272110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(truncate); 273110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(wcc); 274110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(update); 275110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(grow); 276110cb2d2SChuck Lever 27711d03d0aSTrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_range_event, 27811d03d0aSTrond Myklebust TP_PROTO( 27911d03d0aSTrond Myklebust const struct inode *inode, 28011d03d0aSTrond Myklebust loff_t range_start, 28111d03d0aSTrond Myklebust loff_t range_end 28211d03d0aSTrond Myklebust ), 28311d03d0aSTrond Myklebust 28411d03d0aSTrond Myklebust TP_ARGS(inode, range_start, range_end), 28511d03d0aSTrond Myklebust 28611d03d0aSTrond Myklebust TP_STRUCT__entry( 28711d03d0aSTrond Myklebust __field(dev_t, dev) 28811d03d0aSTrond Myklebust __field(u32, fhandle) 28911d03d0aSTrond Myklebust __field(u64, fileid) 29011d03d0aSTrond Myklebust __field(u64, version) 29111d03d0aSTrond Myklebust __field(loff_t, range_start) 29211d03d0aSTrond Myklebust __field(loff_t, range_end) 29311d03d0aSTrond Myklebust ), 29411d03d0aSTrond Myklebust 29511d03d0aSTrond Myklebust TP_fast_assign( 29611d03d0aSTrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 29711d03d0aSTrond Myklebust 29811d03d0aSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 29911d03d0aSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 30011d03d0aSTrond Myklebust __entry->fileid = nfsi->fileid; 30111d03d0aSTrond Myklebust __entry->version = inode_peek_iversion_raw(inode); 30211d03d0aSTrond Myklebust __entry->range_start = range_start; 30311d03d0aSTrond Myklebust __entry->range_end = range_end; 30411d03d0aSTrond Myklebust ), 30511d03d0aSTrond Myklebust 30611d03d0aSTrond Myklebust TP_printk( 30711d03d0aSTrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 30811d03d0aSTrond Myklebust "range=[%lld, %lld]", 30911d03d0aSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 31011d03d0aSTrond Myklebust (unsigned long long)__entry->fileid, 31111d03d0aSTrond Myklebust __entry->fhandle, __entry->version, 31211d03d0aSTrond Myklebust __entry->range_start, __entry->range_end 31311d03d0aSTrond Myklebust ) 31411d03d0aSTrond Myklebust ); 31511d03d0aSTrond Myklebust 31611d03d0aSTrond Myklebust #define DEFINE_NFS_INODE_RANGE_EVENT(name) \ 31711d03d0aSTrond Myklebust DEFINE_EVENT(nfs_inode_range_event, name, \ 31811d03d0aSTrond Myklebust TP_PROTO( \ 31911d03d0aSTrond Myklebust const struct inode *inode, \ 32011d03d0aSTrond Myklebust loff_t range_start, \ 32111d03d0aSTrond Myklebust loff_t range_end \ 32211d03d0aSTrond Myklebust ), \ 32311d03d0aSTrond Myklebust TP_ARGS(inode, range_start, range_end)) 32411d03d0aSTrond Myklebust 32511d03d0aSTrond Myklebust DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range); 32611d03d0aSTrond Myklebust 327310e3187STrond Myklebust DECLARE_EVENT_CLASS(nfs_readdir_event, 328310e3187STrond Myklebust TP_PROTO( 329310e3187STrond Myklebust const struct file *file, 330310e3187STrond Myklebust const __be32 *verifier, 331310e3187STrond Myklebust u64 cookie, 332310e3187STrond Myklebust pgoff_t page_index, 333310e3187STrond Myklebust unsigned int dtsize 334310e3187STrond Myklebust ), 335310e3187STrond Myklebust 336310e3187STrond Myklebust TP_ARGS(file, verifier, cookie, page_index, dtsize), 337310e3187STrond Myklebust 338310e3187STrond Myklebust TP_STRUCT__entry( 339310e3187STrond Myklebust __field(dev_t, dev) 340310e3187STrond Myklebust __field(u32, fhandle) 341310e3187STrond Myklebust __field(u64, fileid) 342310e3187STrond Myklebust __field(u64, version) 343310e3187STrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 344310e3187STrond Myklebust __field(u64, cookie) 345310e3187STrond Myklebust __field(pgoff_t, index) 346310e3187STrond Myklebust __field(unsigned int, dtsize) 347310e3187STrond Myklebust ), 348310e3187STrond Myklebust 349310e3187STrond Myklebust TP_fast_assign( 350310e3187STrond Myklebust const struct inode *dir = file_inode(file); 351310e3187STrond Myklebust const struct nfs_inode *nfsi = NFS_I(dir); 352310e3187STrond Myklebust 353310e3187STrond Myklebust __entry->dev = dir->i_sb->s_dev; 354310e3187STrond Myklebust __entry->fileid = nfsi->fileid; 355310e3187STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 356310e3187STrond Myklebust __entry->version = inode_peek_iversion_raw(dir); 357310e3187STrond Myklebust if (cookie != 0) 358310e3187STrond Myklebust memcpy(__entry->verifier, verifier, 359310e3187STrond Myklebust NFS4_VERIFIER_SIZE); 360310e3187STrond Myklebust else 361310e3187STrond Myklebust memset(__entry->verifier, 0, 362310e3187STrond Myklebust NFS4_VERIFIER_SIZE); 363310e3187STrond Myklebust __entry->cookie = cookie; 364310e3187STrond Myklebust __entry->index = page_index; 365310e3187STrond Myklebust __entry->dtsize = dtsize; 366310e3187STrond Myklebust ), 367310e3187STrond Myklebust 368310e3187STrond Myklebust TP_printk( 369310e3187STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 370310e3187STrond Myklebust "cookie=%s:0x%llx cache_index=%lu dtsize=%u", 371310e3187STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 372310e3187STrond Myklebust (unsigned long long)__entry->fileid, __entry->fhandle, 373310e3187STrond Myklebust __entry->version, show_nfs4_verifier(__entry->verifier), 374310e3187STrond Myklebust (unsigned long long)__entry->cookie, __entry->index, 375310e3187STrond Myklebust __entry->dtsize 376310e3187STrond Myklebust ) 377310e3187STrond Myklebust ); 378310e3187STrond Myklebust 379310e3187STrond Myklebust #define DEFINE_NFS_READDIR_EVENT(name) \ 380310e3187STrond Myklebust DEFINE_EVENT(nfs_readdir_event, name, \ 381310e3187STrond Myklebust TP_PROTO( \ 382310e3187STrond Myklebust const struct file *file, \ 383310e3187STrond Myklebust const __be32 *verifier, \ 384310e3187STrond Myklebust u64 cookie, \ 385310e3187STrond Myklebust pgoff_t page_index, \ 386310e3187STrond Myklebust unsigned int dtsize \ 387310e3187STrond Myklebust ), \ 388310e3187STrond Myklebust TP_ARGS(file, verifier, cookie, page_index, dtsize)) 389310e3187STrond Myklebust 390310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill); 391310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached); 392310e3187STrond Myklebust 3936e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event, 3946e0d0be7STrond Myklebust TP_PROTO( 3956e0d0be7STrond Myklebust const struct inode *dir, 3966e0d0be7STrond Myklebust const struct dentry *dentry, 3976e0d0be7STrond Myklebust unsigned int flags 3986e0d0be7STrond Myklebust ), 3996e0d0be7STrond Myklebust 4006e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags), 4016e0d0be7STrond Myklebust 4026e0d0be7STrond Myklebust TP_STRUCT__entry( 4037d4006c1SChuck Lever __field(unsigned long, flags) 4046e0d0be7STrond Myklebust __field(dev_t, dev) 4056e0d0be7STrond Myklebust __field(u64, dir) 4066e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 4076e0d0be7STrond Myklebust ), 4086e0d0be7STrond Myklebust 4096e0d0be7STrond Myklebust TP_fast_assign( 4106e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4116e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 4126e0d0be7STrond Myklebust __entry->flags = flags; 4136e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 4146e0d0be7STrond Myklebust ), 4156e0d0be7STrond Myklebust 4166e0d0be7STrond Myklebust TP_printk( 4177d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4186e0d0be7STrond Myklebust __entry->flags, 4199d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 4206e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4216e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4226e0d0be7STrond Myklebust __get_str(name) 4236e0d0be7STrond Myklebust ) 4246e0d0be7STrond Myklebust ); 4256e0d0be7STrond Myklebust 4266e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT(name) \ 4276e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event, name, \ 4286e0d0be7STrond Myklebust TP_PROTO( \ 4296e0d0be7STrond Myklebust const struct inode *dir, \ 4306e0d0be7STrond Myklebust const struct dentry *dentry, \ 4316e0d0be7STrond Myklebust unsigned int flags \ 4326e0d0be7STrond Myklebust ), \ 4336e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags)) 4346e0d0be7STrond Myklebust 4356e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event_done, 4366e0d0be7STrond Myklebust TP_PROTO( 4376e0d0be7STrond Myklebust const struct inode *dir, 4386e0d0be7STrond Myklebust const struct dentry *dentry, 4396e0d0be7STrond Myklebust unsigned int flags, 4406e0d0be7STrond Myklebust int error 4416e0d0be7STrond Myklebust ), 4426e0d0be7STrond Myklebust 4436e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error), 4446e0d0be7STrond Myklebust 4456e0d0be7STrond Myklebust TP_STRUCT__entry( 44638a638a7SChuck Lever __field(unsigned long, error) 4477d4006c1SChuck Lever __field(unsigned long, flags) 4486e0d0be7STrond Myklebust __field(dev_t, dev) 4496e0d0be7STrond Myklebust __field(u64, dir) 4506e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 4516e0d0be7STrond Myklebust ), 4526e0d0be7STrond Myklebust 4536e0d0be7STrond Myklebust TP_fast_assign( 4546e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4556e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 45638a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 4576e0d0be7STrond Myklebust __entry->flags = flags; 4586e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 4596e0d0be7STrond Myklebust ), 4606e0d0be7STrond Myklebust 4616e0d0be7STrond Myklebust TP_printk( 4627d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4638791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 4646e0d0be7STrond Myklebust __entry->flags, 4659d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 4666e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4676e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4686e0d0be7STrond Myklebust __get_str(name) 4696e0d0be7STrond Myklebust ) 4706e0d0be7STrond Myklebust ); 4716e0d0be7STrond Myklebust 4726e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 4736e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event_done, name, \ 4746e0d0be7STrond Myklebust TP_PROTO( \ 4756e0d0be7STrond Myklebust const struct inode *dir, \ 4766e0d0be7STrond Myklebust const struct dentry *dentry, \ 4776e0d0be7STrond Myklebust unsigned int flags, \ 4786e0d0be7STrond Myklebust int error \ 4796e0d0be7STrond Myklebust ), \ 4806e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error)) 4816e0d0be7STrond Myklebust 4826e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 4836e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 4846e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 4856e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 486eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup); 487eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed); 488eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate); 4896e0d0be7STrond Myklebust 4906e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_enter, 4916e0d0be7STrond Myklebust TP_PROTO( 4926e0d0be7STrond Myklebust const struct inode *dir, 4936e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 4946e0d0be7STrond Myklebust unsigned int flags 4956e0d0be7STrond Myklebust ), 4966e0d0be7STrond Myklebust 4976e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags), 4986e0d0be7STrond Myklebust 4996e0d0be7STrond Myklebust TP_STRUCT__entry( 5007d4006c1SChuck Lever __field(unsigned long, flags) 5019d2d48bbSChuck Lever __field(unsigned long, fmode) 5026e0d0be7STrond Myklebust __field(dev_t, dev) 5036e0d0be7STrond Myklebust __field(u64, dir) 5046e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 5056e0d0be7STrond Myklebust ), 5066e0d0be7STrond Myklebust 5076e0d0be7STrond Myklebust TP_fast_assign( 5086e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5096e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 5106e0d0be7STrond Myklebust __entry->flags = flags; 5119d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 5126e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 5136e0d0be7STrond Myklebust ), 5146e0d0be7STrond Myklebust 5156e0d0be7STrond Myklebust TP_printk( 5167d4006c1SChuck Lever "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 5176e0d0be7STrond Myklebust __entry->flags, 5189d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5199d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 5206e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5216e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 5226e0d0be7STrond Myklebust __get_str(name) 5236e0d0be7STrond Myklebust ) 5246e0d0be7STrond Myklebust ); 5256e0d0be7STrond Myklebust 5266e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_exit, 5276e0d0be7STrond Myklebust TP_PROTO( 5286e0d0be7STrond Myklebust const struct inode *dir, 5296e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 5306e0d0be7STrond Myklebust unsigned int flags, 5316e0d0be7STrond Myklebust int error 5326e0d0be7STrond Myklebust ), 5336e0d0be7STrond Myklebust 5346e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags, error), 5356e0d0be7STrond Myklebust 5366e0d0be7STrond Myklebust TP_STRUCT__entry( 53738a638a7SChuck Lever __field(unsigned long, error) 5387d4006c1SChuck Lever __field(unsigned long, flags) 5399d2d48bbSChuck Lever __field(unsigned long, fmode) 5406e0d0be7STrond Myklebust __field(dev_t, dev) 5416e0d0be7STrond Myklebust __field(u64, dir) 5426e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 5436e0d0be7STrond Myklebust ), 5446e0d0be7STrond Myklebust 5456e0d0be7STrond Myklebust TP_fast_assign( 54638a638a7SChuck Lever __entry->error = -error; 5476e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5486e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 5496e0d0be7STrond Myklebust __entry->flags = flags; 5509d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 5516e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 5526e0d0be7STrond Myklebust ), 5536e0d0be7STrond Myklebust 5546e0d0be7STrond Myklebust TP_printk( 5557d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 5566e0d0be7STrond Myklebust "name=%02x:%02x:%llu/%s", 5578791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 5586e0d0be7STrond Myklebust __entry->flags, 5599d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5609d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 5616e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5626e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 5636e0d0be7STrond Myklebust __get_str(name) 5646e0d0be7STrond Myklebust ) 5656e0d0be7STrond Myklebust ); 5666e0d0be7STrond Myklebust 5678b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_enter, 5688b0ad3d4STrond Myklebust TP_PROTO( 5698b0ad3d4STrond Myklebust const struct inode *dir, 5708b0ad3d4STrond Myklebust const struct dentry *dentry, 5718b0ad3d4STrond Myklebust unsigned int flags 5728b0ad3d4STrond Myklebust ), 5738b0ad3d4STrond Myklebust 5748b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags), 5758b0ad3d4STrond Myklebust 5768b0ad3d4STrond Myklebust TP_STRUCT__entry( 5777d4006c1SChuck Lever __field(unsigned long, flags) 5788b0ad3d4STrond Myklebust __field(dev_t, dev) 5798b0ad3d4STrond Myklebust __field(u64, dir) 5808b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 5818b0ad3d4STrond Myklebust ), 5828b0ad3d4STrond Myklebust 5838b0ad3d4STrond Myklebust TP_fast_assign( 5848b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5858b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 5868b0ad3d4STrond Myklebust __entry->flags = flags; 5878b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 5888b0ad3d4STrond Myklebust ), 5898b0ad3d4STrond Myklebust 5908b0ad3d4STrond Myklebust TP_printk( 5917d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 5928b0ad3d4STrond Myklebust __entry->flags, 5939d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5948b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5958b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 5968b0ad3d4STrond Myklebust __get_str(name) 5978b0ad3d4STrond Myklebust ) 5988b0ad3d4STrond Myklebust ); 5998b0ad3d4STrond Myklebust 6008b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_exit, 6018b0ad3d4STrond Myklebust TP_PROTO( 6028b0ad3d4STrond Myklebust const struct inode *dir, 6038b0ad3d4STrond Myklebust const struct dentry *dentry, 6048b0ad3d4STrond Myklebust unsigned int flags, 6058b0ad3d4STrond Myklebust int error 6068b0ad3d4STrond Myklebust ), 6078b0ad3d4STrond Myklebust 6088b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags, error), 6098b0ad3d4STrond Myklebust 6108b0ad3d4STrond Myklebust TP_STRUCT__entry( 61138a638a7SChuck Lever __field(unsigned long, error) 6127d4006c1SChuck Lever __field(unsigned long, flags) 6138b0ad3d4STrond Myklebust __field(dev_t, dev) 6148b0ad3d4STrond Myklebust __field(u64, dir) 6158b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 6168b0ad3d4STrond Myklebust ), 6178b0ad3d4STrond Myklebust 6188b0ad3d4STrond Myklebust TP_fast_assign( 61938a638a7SChuck Lever __entry->error = -error; 6208b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6218b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 6228b0ad3d4STrond Myklebust __entry->flags = flags; 6238b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 6248b0ad3d4STrond Myklebust ), 6258b0ad3d4STrond Myklebust 6268b0ad3d4STrond Myklebust TP_printk( 6277d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 6288791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6298b0ad3d4STrond Myklebust __entry->flags, 6309d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 6318b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6328b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 6338b0ad3d4STrond Myklebust __get_str(name) 6348b0ad3d4STrond Myklebust ) 6358b0ad3d4STrond Myklebust ); 6368b0ad3d4STrond Myklebust 6371ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event, 6381ca42382STrond Myklebust TP_PROTO( 6391ca42382STrond Myklebust const struct inode *dir, 6401ca42382STrond Myklebust const struct dentry *dentry 6411ca42382STrond Myklebust ), 6421ca42382STrond Myklebust 6431ca42382STrond Myklebust TP_ARGS(dir, dentry), 6441ca42382STrond Myklebust 6451ca42382STrond Myklebust TP_STRUCT__entry( 6461ca42382STrond Myklebust __field(dev_t, dev) 6471ca42382STrond Myklebust __field(u64, dir) 6481ca42382STrond Myklebust __string(name, dentry->d_name.name) 6491ca42382STrond Myklebust ), 6501ca42382STrond Myklebust 6511ca42382STrond Myklebust TP_fast_assign( 6521ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6531ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 6541ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 6551ca42382STrond Myklebust ), 6561ca42382STrond Myklebust 6571ca42382STrond Myklebust TP_printk( 6581ca42382STrond Myklebust "name=%02x:%02x:%llu/%s", 6591ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6601ca42382STrond Myklebust (unsigned long long)__entry->dir, 6611ca42382STrond Myklebust __get_str(name) 6621ca42382STrond Myklebust ) 6631ca42382STrond Myklebust ); 6641ca42382STrond Myklebust 6651ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 6661ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event, name, \ 6671ca42382STrond Myklebust TP_PROTO( \ 6681ca42382STrond Myklebust const struct inode *dir, \ 6691ca42382STrond Myklebust const struct dentry *dentry \ 6701ca42382STrond Myklebust ), \ 6711ca42382STrond Myklebust TP_ARGS(dir, dentry)) 6721ca42382STrond Myklebust 6731ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event_done, 6741ca42382STrond Myklebust TP_PROTO( 6751ca42382STrond Myklebust const struct inode *dir, 6761ca42382STrond Myklebust const struct dentry *dentry, 6771ca42382STrond Myklebust int error 6781ca42382STrond Myklebust ), 6791ca42382STrond Myklebust 6801ca42382STrond Myklebust TP_ARGS(dir, dentry, error), 6811ca42382STrond Myklebust 6821ca42382STrond Myklebust TP_STRUCT__entry( 68338a638a7SChuck Lever __field(unsigned long, error) 6841ca42382STrond Myklebust __field(dev_t, dev) 6851ca42382STrond Myklebust __field(u64, dir) 6861ca42382STrond Myklebust __string(name, dentry->d_name.name) 6871ca42382STrond Myklebust ), 6881ca42382STrond Myklebust 6891ca42382STrond Myklebust TP_fast_assign( 6901ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6911ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 69238a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 6931ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 6941ca42382STrond Myklebust ), 6951ca42382STrond Myklebust 6961ca42382STrond Myklebust TP_printk( 69738a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 6988791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6991ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7001ca42382STrond Myklebust (unsigned long long)__entry->dir, 7011ca42382STrond Myklebust __get_str(name) 7021ca42382STrond Myklebust ) 7031ca42382STrond Myklebust ); 7041ca42382STrond Myklebust 7051ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 7061ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event_done, name, \ 7071ca42382STrond Myklebust TP_PROTO( \ 7081ca42382STrond Myklebust const struct inode *dir, \ 7091ca42382STrond Myklebust const struct dentry *dentry, \ 7101ca42382STrond Myklebust int error \ 7111ca42382STrond Myklebust ), \ 7121ca42382STrond Myklebust TP_ARGS(dir, dentry, error)) 7131ca42382STrond Myklebust 7141ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 7151ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 7161ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 7171ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 7181ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 7191ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 7201ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 7211ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 7221ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 7231ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 7241ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 7251ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 7261ca42382STrond Myklebust 7271fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_enter, 7281fd1085bSTrond Myklebust TP_PROTO( 7291fd1085bSTrond Myklebust const struct inode *inode, 7301fd1085bSTrond Myklebust const struct inode *dir, 7311fd1085bSTrond Myklebust const struct dentry *dentry 7321fd1085bSTrond Myklebust ), 7331fd1085bSTrond Myklebust 7341fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry), 7351fd1085bSTrond Myklebust 7361fd1085bSTrond Myklebust TP_STRUCT__entry( 7371fd1085bSTrond Myklebust __field(dev_t, dev) 7381fd1085bSTrond Myklebust __field(u64, fileid) 7391fd1085bSTrond Myklebust __field(u64, dir) 7401fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 7411fd1085bSTrond Myklebust ), 7421fd1085bSTrond Myklebust 7431fd1085bSTrond Myklebust TP_fast_assign( 7441fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 7451fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 7461fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 7471fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 7481fd1085bSTrond Myklebust ), 7491fd1085bSTrond Myklebust 7501fd1085bSTrond Myklebust TP_printk( 7511fd1085bSTrond Myklebust "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 7521fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7531fd1085bSTrond Myklebust __entry->fileid, 7541fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7551fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 7561fd1085bSTrond Myklebust __get_str(name) 7571fd1085bSTrond Myklebust ) 7581fd1085bSTrond Myklebust ); 7591fd1085bSTrond Myklebust 7601fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_exit, 7611fd1085bSTrond Myklebust TP_PROTO( 7621fd1085bSTrond Myklebust const struct inode *inode, 7631fd1085bSTrond Myklebust const struct inode *dir, 7641fd1085bSTrond Myklebust const struct dentry *dentry, 7651fd1085bSTrond Myklebust int error 7661fd1085bSTrond Myklebust ), 7671fd1085bSTrond Myklebust 7681fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry, error), 7691fd1085bSTrond Myklebust 7701fd1085bSTrond Myklebust TP_STRUCT__entry( 77138a638a7SChuck Lever __field(unsigned long, error) 7721fd1085bSTrond Myklebust __field(dev_t, dev) 7731fd1085bSTrond Myklebust __field(u64, fileid) 7741fd1085bSTrond Myklebust __field(u64, dir) 7751fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 7761fd1085bSTrond Myklebust ), 7771fd1085bSTrond Myklebust 7781fd1085bSTrond Myklebust TP_fast_assign( 7791fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 7801fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 7811fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 78238a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 7831fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 7841fd1085bSTrond Myklebust ), 7851fd1085bSTrond Myklebust 7861fd1085bSTrond Myklebust TP_printk( 78738a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 7888791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 7891fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7901fd1085bSTrond Myklebust __entry->fileid, 7911fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7921fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 7931fd1085bSTrond Myklebust __get_str(name) 7941fd1085bSTrond Myklebust ) 7951fd1085bSTrond Myklebust ); 7961fd1085bSTrond Myklebust 79770ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event, 79870ded201STrond Myklebust TP_PROTO( 79970ded201STrond Myklebust const struct inode *old_dir, 80070ded201STrond Myklebust const struct dentry *old_dentry, 80170ded201STrond Myklebust const struct inode *new_dir, 80270ded201STrond Myklebust const struct dentry *new_dentry 80370ded201STrond Myklebust ), 80470ded201STrond Myklebust 80570ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 80670ded201STrond Myklebust 80770ded201STrond Myklebust TP_STRUCT__entry( 80870ded201STrond Myklebust __field(dev_t, dev) 80970ded201STrond Myklebust __field(u64, old_dir) 81070ded201STrond Myklebust __field(u64, new_dir) 81170ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 81270ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 81370ded201STrond Myklebust ), 81470ded201STrond Myklebust 81570ded201STrond Myklebust TP_fast_assign( 81670ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 81770ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 81870ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 81970ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 82070ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 82170ded201STrond Myklebust ), 82270ded201STrond Myklebust 82370ded201STrond Myklebust TP_printk( 82470ded201STrond Myklebust "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 82570ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 82670ded201STrond Myklebust (unsigned long long)__entry->old_dir, 82770ded201STrond Myklebust __get_str(old_name), 82870ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 82970ded201STrond Myklebust (unsigned long long)__entry->new_dir, 83070ded201STrond Myklebust __get_str(new_name) 83170ded201STrond Myklebust ) 83270ded201STrond Myklebust ); 83370ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT(name) \ 83470ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event, name, \ 83570ded201STrond Myklebust TP_PROTO( \ 83670ded201STrond Myklebust const struct inode *old_dir, \ 83770ded201STrond Myklebust const struct dentry *old_dentry, \ 83870ded201STrond Myklebust const struct inode *new_dir, \ 83970ded201STrond Myklebust const struct dentry *new_dentry \ 84070ded201STrond Myklebust ), \ 84170ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 84270ded201STrond Myklebust 84370ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event_done, 84470ded201STrond Myklebust TP_PROTO( 84570ded201STrond Myklebust const struct inode *old_dir, 84670ded201STrond Myklebust const struct dentry *old_dentry, 84770ded201STrond Myklebust const struct inode *new_dir, 84870ded201STrond Myklebust const struct dentry *new_dentry, 84970ded201STrond Myklebust int error 85070ded201STrond Myklebust ), 85170ded201STrond Myklebust 85270ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 85370ded201STrond Myklebust 85470ded201STrond Myklebust TP_STRUCT__entry( 85570ded201STrond Myklebust __field(dev_t, dev) 85638a638a7SChuck Lever __field(unsigned long, error) 85770ded201STrond Myklebust __field(u64, old_dir) 85870ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 85970ded201STrond Myklebust __field(u64, new_dir) 86070ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 86170ded201STrond Myklebust ), 86270ded201STrond Myklebust 86370ded201STrond Myklebust TP_fast_assign( 86470ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 86538a638a7SChuck Lever __entry->error = -error; 86670ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 86770ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 86870ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 86970ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 87070ded201STrond Myklebust ), 87170ded201STrond Myklebust 87270ded201STrond Myklebust TP_printk( 87338a638a7SChuck Lever "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 87470ded201STrond Myklebust "new_name=%02x:%02x:%llu/%s", 8758791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 87670ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 87770ded201STrond Myklebust (unsigned long long)__entry->old_dir, 87870ded201STrond Myklebust __get_str(old_name), 87970ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 88070ded201STrond Myklebust (unsigned long long)__entry->new_dir, 88170ded201STrond Myklebust __get_str(new_name) 88270ded201STrond Myklebust ) 88370ded201STrond Myklebust ); 88470ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 88570ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event_done, name, \ 88670ded201STrond Myklebust TP_PROTO( \ 88770ded201STrond Myklebust const struct inode *old_dir, \ 88870ded201STrond Myklebust const struct dentry *old_dentry, \ 88970ded201STrond Myklebust const struct inode *new_dir, \ 89070ded201STrond Myklebust const struct dentry *new_dentry, \ 89170ded201STrond Myklebust int error \ 89270ded201STrond Myklebust ), \ 89370ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, \ 89470ded201STrond Myklebust new_dentry, error)) 89570ded201STrond Myklebust 89670ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 89770ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 89870ded201STrond Myklebust 89970ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 90070ded201STrond Myklebust 90170ded201STrond Myklebust TRACE_EVENT(nfs_sillyrename_unlink, 90270ded201STrond Myklebust TP_PROTO( 90370ded201STrond Myklebust const struct nfs_unlinkdata *data, 90470ded201STrond Myklebust int error 90570ded201STrond Myklebust ), 90670ded201STrond Myklebust 90770ded201STrond Myklebust TP_ARGS(data, error), 90870ded201STrond Myklebust 90970ded201STrond Myklebust TP_STRUCT__entry( 91070ded201STrond Myklebust __field(dev_t, dev) 91138a638a7SChuck Lever __field(unsigned long, error) 91270ded201STrond Myklebust __field(u64, dir) 91370ded201STrond Myklebust __dynamic_array(char, name, data->args.name.len + 1) 91470ded201STrond Myklebust ), 91570ded201STrond Myklebust 91670ded201STrond Myklebust TP_fast_assign( 917884be175SAl Viro struct inode *dir = d_inode(data->dentry->d_parent); 91870ded201STrond Myklebust size_t len = data->args.name.len; 91970ded201STrond Myklebust __entry->dev = dir->i_sb->s_dev; 92070ded201STrond Myklebust __entry->dir = NFS_FILEID(dir); 92138a638a7SChuck Lever __entry->error = -error; 922752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), 92370ded201STrond Myklebust data->args.name.name, len); 924752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 92570ded201STrond Myklebust ), 92670ded201STrond Myklebust 92770ded201STrond Myklebust TP_printk( 92838a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 9298791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 93070ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 93170ded201STrond Myklebust (unsigned long long)__entry->dir, 93270ded201STrond Myklebust __get_str(name) 93370ded201STrond Myklebust ) 93470ded201STrond Myklebust ); 9358224b273SChuck Lever 936d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage, 937d9f87743SChuck Lever TP_PROTO( 938d9f87743SChuck Lever const struct inode *inode, 939d9f87743SChuck Lever struct page *page 940d9f87743SChuck Lever ), 941d9f87743SChuck Lever 942d9f87743SChuck Lever TP_ARGS(inode, page), 943d9f87743SChuck Lever 944d9f87743SChuck Lever TP_STRUCT__entry( 945d9f87743SChuck Lever __field(dev_t, dev) 946d9f87743SChuck Lever __field(u32, fhandle) 947d9f87743SChuck Lever __field(u64, fileid) 948d9f87743SChuck Lever __field(u64, version) 949d9f87743SChuck Lever __field(loff_t, offset) 950d9f87743SChuck Lever ), 951d9f87743SChuck Lever 952d9f87743SChuck Lever TP_fast_assign( 953d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 954d9f87743SChuck Lever 955d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 956d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 957d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 958d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 959d9f87743SChuck Lever __entry->offset = page_index(page) << PAGE_SHIFT; 960d9f87743SChuck Lever ), 961d9f87743SChuck Lever 962d9f87743SChuck Lever TP_printk( 963d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld", 964d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 965d9f87743SChuck Lever (unsigned long long)__entry->fileid, 966d9f87743SChuck Lever __entry->fhandle, __entry->version, 967d9f87743SChuck Lever __entry->offset 968d9f87743SChuck Lever ) 969d9f87743SChuck Lever ); 970d9f87743SChuck Lever 971d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage_done, 972d9f87743SChuck Lever TP_PROTO( 973d9f87743SChuck Lever const struct inode *inode, 974d9f87743SChuck Lever struct page *page, 975d9f87743SChuck Lever int ret 976d9f87743SChuck Lever ), 977d9f87743SChuck Lever 978d9f87743SChuck Lever TP_ARGS(inode, page, ret), 979d9f87743SChuck Lever 980d9f87743SChuck Lever TP_STRUCT__entry( 981d9f87743SChuck Lever __field(dev_t, dev) 982d9f87743SChuck Lever __field(u32, fhandle) 983d9f87743SChuck Lever __field(int, ret) 984d9f87743SChuck Lever __field(u64, fileid) 985d9f87743SChuck Lever __field(u64, version) 986d9f87743SChuck Lever __field(loff_t, offset) 987d9f87743SChuck Lever ), 988d9f87743SChuck Lever 989d9f87743SChuck Lever TP_fast_assign( 990d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 991d9f87743SChuck Lever 992d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 993d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 994d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 995d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 996d9f87743SChuck Lever __entry->offset = page_index(page) << PAGE_SHIFT; 997d9f87743SChuck Lever __entry->ret = ret; 998d9f87743SChuck Lever ), 999d9f87743SChuck Lever 1000d9f87743SChuck Lever TP_printk( 1001d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld ret=%d", 1002d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1003d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1004d9f87743SChuck Lever __entry->fhandle, __entry->version, 1005d9f87743SChuck Lever __entry->offset, __entry->ret 1006d9f87743SChuck Lever ) 1007d9f87743SChuck Lever ); 1008d9f87743SChuck Lever 1009d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead, 1010d9f87743SChuck Lever TP_PROTO( 1011d9f87743SChuck Lever const struct inode *inode, 10128786fde8SMatthew Wilcox (Oracle) loff_t pos, 1013d9f87743SChuck Lever unsigned int nr_pages 1014d9f87743SChuck Lever ), 1015d9f87743SChuck Lever 10168786fde8SMatthew Wilcox (Oracle) TP_ARGS(inode, pos, nr_pages), 1017d9f87743SChuck Lever 1018d9f87743SChuck Lever TP_STRUCT__entry( 1019d9f87743SChuck Lever __field(dev_t, dev) 1020d9f87743SChuck Lever __field(u32, fhandle) 1021d9f87743SChuck Lever __field(u64, fileid) 1022d9f87743SChuck Lever __field(u64, version) 1023edfa0b16SDave Wysochanski __field(loff_t, offset) 1024d9f87743SChuck Lever __field(unsigned int, nr_pages) 1025d9f87743SChuck Lever ), 1026d9f87743SChuck Lever 1027d9f87743SChuck Lever TP_fast_assign( 1028d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1029d9f87743SChuck Lever 1030d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1031d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1032d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1033d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 10348786fde8SMatthew Wilcox (Oracle) __entry->offset = pos; 1035d9f87743SChuck Lever __entry->nr_pages = nr_pages; 1036d9f87743SChuck Lever ), 1037d9f87743SChuck Lever 1038d9f87743SChuck Lever TP_printk( 1039edfa0b16SDave Wysochanski "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u", 1040d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1041d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1042d9f87743SChuck Lever __entry->fhandle, __entry->version, 1043edfa0b16SDave Wysochanski __entry->offset, __entry->nr_pages 1044d9f87743SChuck Lever ) 1045d9f87743SChuck Lever ); 1046d9f87743SChuck Lever 1047d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead_done, 1048d9f87743SChuck Lever TP_PROTO( 1049d9f87743SChuck Lever const struct inode *inode, 1050d9f87743SChuck Lever unsigned int nr_pages, 1051d9f87743SChuck Lever int ret 1052d9f87743SChuck Lever ), 1053d9f87743SChuck Lever 1054d9f87743SChuck Lever TP_ARGS(inode, nr_pages, ret), 1055d9f87743SChuck Lever 1056d9f87743SChuck Lever TP_STRUCT__entry( 1057d9f87743SChuck Lever __field(dev_t, dev) 1058d9f87743SChuck Lever __field(u32, fhandle) 1059d9f87743SChuck Lever __field(int, ret) 1060d9f87743SChuck Lever __field(u64, fileid) 1061d9f87743SChuck Lever __field(u64, version) 1062edfa0b16SDave Wysochanski __field(loff_t, offset) 1063d9f87743SChuck Lever __field(unsigned int, nr_pages) 1064d9f87743SChuck Lever ), 1065d9f87743SChuck Lever 1066d9f87743SChuck Lever TP_fast_assign( 1067d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1068d9f87743SChuck Lever 1069d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1070d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1071d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1072d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 1073d9f87743SChuck Lever __entry->nr_pages = nr_pages; 1074d9f87743SChuck Lever __entry->ret = ret; 1075d9f87743SChuck Lever ), 1076d9f87743SChuck Lever 1077d9f87743SChuck Lever TP_printk( 1078d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d", 1079d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1080d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1081d9f87743SChuck Lever __entry->fhandle, __entry->version, 1082d9f87743SChuck Lever __entry->nr_pages, __entry->ret 1083d9f87743SChuck Lever ) 1084d9f87743SChuck Lever ); 1085d9f87743SChuck Lever 10868224b273SChuck Lever TRACE_EVENT(nfs_initiate_read, 10878224b273SChuck Lever TP_PROTO( 10882343172dSTrond Myklebust const struct nfs_pgio_header *hdr 10898224b273SChuck Lever ), 10908224b273SChuck Lever 10912343172dSTrond Myklebust TP_ARGS(hdr), 10928224b273SChuck Lever 10938224b273SChuck Lever TP_STRUCT__entry( 10948224b273SChuck Lever __field(dev_t, dev) 10958224b273SChuck Lever __field(u32, fhandle) 10968224b273SChuck Lever __field(u64, fileid) 10972343172dSTrond Myklebust __field(loff_t, offset) 10982343172dSTrond Myklebust __field(u32, count) 10998224b273SChuck Lever ), 11008224b273SChuck Lever 11018224b273SChuck Lever TP_fast_assign( 11022343172dSTrond Myklebust const struct inode *inode = hdr->inode; 11038224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11042343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11052343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 11068224b273SChuck Lever 11072343172dSTrond Myklebust __entry->offset = hdr->args.offset; 11082343172dSTrond Myklebust __entry->count = hdr->args.count; 11098224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11108224b273SChuck Lever __entry->fileid = nfsi->fileid; 11112343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11128224b273SChuck Lever ), 11138224b273SChuck Lever 11148224b273SChuck Lever TP_printk( 11158224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 11162343172dSTrond Myklebust "offset=%lld count=%u", 11178224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11188224b273SChuck Lever (unsigned long long)__entry->fileid, 11198224b273SChuck Lever __entry->fhandle, 11202343172dSTrond Myklebust (long long)__entry->offset, __entry->count 11218224b273SChuck Lever ) 11228224b273SChuck Lever ); 11238224b273SChuck Lever 11248224b273SChuck Lever TRACE_EVENT(nfs_readpage_done, 11258224b273SChuck Lever TP_PROTO( 11262343172dSTrond Myklebust const struct rpc_task *task, 11272343172dSTrond Myklebust const struct nfs_pgio_header *hdr 11288224b273SChuck Lever ), 11298224b273SChuck Lever 11302343172dSTrond Myklebust TP_ARGS(task, hdr), 11318224b273SChuck Lever 11328224b273SChuck Lever TP_STRUCT__entry( 11338224b273SChuck Lever __field(dev_t, dev) 11348224b273SChuck Lever __field(u32, fhandle) 11358224b273SChuck Lever __field(u64, fileid) 11362343172dSTrond Myklebust __field(loff_t, offset) 11372343172dSTrond Myklebust __field(u32, arg_count) 11382343172dSTrond Myklebust __field(u32, res_count) 11392343172dSTrond Myklebust __field(bool, eof) 11402343172dSTrond Myklebust __field(int, status) 11418224b273SChuck Lever ), 11428224b273SChuck Lever 11438224b273SChuck Lever TP_fast_assign( 11442343172dSTrond Myklebust const struct inode *inode = hdr->inode; 11458224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11462343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11472343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 11488224b273SChuck Lever 11492343172dSTrond Myklebust __entry->status = task->tk_status; 11502343172dSTrond Myklebust __entry->offset = hdr->args.offset; 11512343172dSTrond Myklebust __entry->arg_count = hdr->args.count; 11522343172dSTrond Myklebust __entry->res_count = hdr->res.count; 11532343172dSTrond Myklebust __entry->eof = hdr->res.eof; 11548224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11558224b273SChuck Lever __entry->fileid = nfsi->fileid; 11562343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11578224b273SChuck Lever ), 11588224b273SChuck Lever 11598224b273SChuck Lever TP_printk( 11608224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 11612343172dSTrond Myklebust "offset=%lld count=%u res=%u status=%d%s", 11628224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11638224b273SChuck Lever (unsigned long long)__entry->fileid, 11648224b273SChuck Lever __entry->fhandle, 11652343172dSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 11662343172dSTrond Myklebust __entry->res_count, __entry->status, 11678224b273SChuck Lever __entry->eof ? " eof" : "" 11688224b273SChuck Lever ) 11698224b273SChuck Lever ); 11708224b273SChuck Lever 1171fd2b6121SChuck Lever TRACE_EVENT(nfs_readpage_short, 1172fd2b6121SChuck Lever TP_PROTO( 1173fd2b6121SChuck Lever const struct rpc_task *task, 1174fd2b6121SChuck Lever const struct nfs_pgio_header *hdr 1175fd2b6121SChuck Lever ), 1176fd2b6121SChuck Lever 1177fd2b6121SChuck Lever TP_ARGS(task, hdr), 1178fd2b6121SChuck Lever 1179fd2b6121SChuck Lever TP_STRUCT__entry( 1180fd2b6121SChuck Lever __field(dev_t, dev) 1181fd2b6121SChuck Lever __field(u32, fhandle) 1182fd2b6121SChuck Lever __field(u64, fileid) 1183fd2b6121SChuck Lever __field(loff_t, offset) 1184fd2b6121SChuck Lever __field(u32, arg_count) 1185fd2b6121SChuck Lever __field(u32, res_count) 1186fd2b6121SChuck Lever __field(bool, eof) 1187fd2b6121SChuck Lever __field(int, status) 1188fd2b6121SChuck Lever ), 1189fd2b6121SChuck Lever 1190fd2b6121SChuck Lever TP_fast_assign( 1191fd2b6121SChuck Lever const struct inode *inode = hdr->inode; 1192fd2b6121SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1193fd2b6121SChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1194fd2b6121SChuck Lever hdr->args.fh : &nfsi->fh; 1195fd2b6121SChuck Lever 1196fd2b6121SChuck Lever __entry->status = task->tk_status; 1197fd2b6121SChuck Lever __entry->offset = hdr->args.offset; 1198fd2b6121SChuck Lever __entry->arg_count = hdr->args.count; 1199fd2b6121SChuck Lever __entry->res_count = hdr->res.count; 1200fd2b6121SChuck Lever __entry->eof = hdr->res.eof; 1201fd2b6121SChuck Lever __entry->dev = inode->i_sb->s_dev; 1202fd2b6121SChuck Lever __entry->fileid = nfsi->fileid; 1203fd2b6121SChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1204fd2b6121SChuck Lever ), 1205fd2b6121SChuck Lever 1206fd2b6121SChuck Lever TP_printk( 1207fd2b6121SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 1208fd2b6121SChuck Lever "offset=%lld count=%u res=%u status=%d%s", 1209fd2b6121SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1210fd2b6121SChuck Lever (unsigned long long)__entry->fileid, 1211fd2b6121SChuck Lever __entry->fhandle, 1212fd2b6121SChuck Lever (long long)__entry->offset, __entry->arg_count, 1213fd2b6121SChuck Lever __entry->res_count, __entry->status, 1214fd2b6121SChuck Lever __entry->eof ? " eof" : "" 1215fd2b6121SChuck Lever ) 1216fd2b6121SChuck Lever ); 1217fd2b6121SChuck Lever 1218cd2ed9bdSChuck Lever TRACE_EVENT(nfs_pgio_error, 1219cd2ed9bdSChuck Lever TP_PROTO( 1220cd2ed9bdSChuck Lever const struct nfs_pgio_header *hdr, 1221cd2ed9bdSChuck Lever int error, 1222cd2ed9bdSChuck Lever loff_t pos 1223cd2ed9bdSChuck Lever ), 1224cd2ed9bdSChuck Lever 1225cd2ed9bdSChuck Lever TP_ARGS(hdr, error, pos), 1226cd2ed9bdSChuck Lever 1227cd2ed9bdSChuck Lever TP_STRUCT__entry( 1228cd2ed9bdSChuck Lever __field(dev_t, dev) 1229cd2ed9bdSChuck Lever __field(u32, fhandle) 1230cd2ed9bdSChuck Lever __field(u64, fileid) 1231cd2ed9bdSChuck Lever __field(loff_t, offset) 1232cd2ed9bdSChuck Lever __field(u32, arg_count) 1233cd2ed9bdSChuck Lever __field(u32, res_count) 1234cd2ed9bdSChuck Lever __field(loff_t, pos) 1235cd2ed9bdSChuck Lever __field(int, status) 1236cd2ed9bdSChuck Lever ), 1237cd2ed9bdSChuck Lever 1238cd2ed9bdSChuck Lever TP_fast_assign( 1239cd2ed9bdSChuck Lever const struct inode *inode = hdr->inode; 1240cd2ed9bdSChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1241cd2ed9bdSChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1242cd2ed9bdSChuck Lever hdr->args.fh : &nfsi->fh; 1243cd2ed9bdSChuck Lever 1244cd2ed9bdSChuck Lever __entry->status = error; 1245cd2ed9bdSChuck Lever __entry->offset = hdr->args.offset; 1246cd2ed9bdSChuck Lever __entry->arg_count = hdr->args.count; 1247cd2ed9bdSChuck Lever __entry->res_count = hdr->res.count; 1248cd2ed9bdSChuck Lever __entry->dev = inode->i_sb->s_dev; 1249cd2ed9bdSChuck Lever __entry->fileid = nfsi->fileid; 1250cd2ed9bdSChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1251cd2ed9bdSChuck Lever ), 1252cd2ed9bdSChuck Lever 1253cd2ed9bdSChuck Lever TP_printk("fileid=%02x:%02x:%llu fhandle=0x%08x " 1254cd2ed9bdSChuck Lever "offset=%lld count=%u res=%u pos=%llu status=%d", 1255cd2ed9bdSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1256cd2ed9bdSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 1257cd2ed9bdSChuck Lever (long long)__entry->offset, __entry->arg_count, __entry->res_count, 1258cd2ed9bdSChuck Lever __entry->pos, __entry->status 1259cd2ed9bdSChuck Lever ) 1260cd2ed9bdSChuck Lever ); 1261cd2ed9bdSChuck Lever 12628224b273SChuck Lever TRACE_EVENT(nfs_initiate_write, 12638224b273SChuck Lever TP_PROTO( 12645bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 12658224b273SChuck Lever ), 12668224b273SChuck Lever 12675bb2a7cbSTrond Myklebust TP_ARGS(hdr), 12688224b273SChuck Lever 12698224b273SChuck Lever TP_STRUCT__entry( 12708224b273SChuck Lever __field(dev_t, dev) 12718224b273SChuck Lever __field(u32, fhandle) 12728224b273SChuck Lever __field(u64, fileid) 12735bb2a7cbSTrond Myklebust __field(loff_t, offset) 12745bb2a7cbSTrond Myklebust __field(u32, count) 12758791545eSChuck Lever __field(unsigned long, stable) 12768224b273SChuck Lever ), 12778224b273SChuck Lever 12788224b273SChuck Lever TP_fast_assign( 12795bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 12808224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 12815bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 12825bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 12838224b273SChuck Lever 12845bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 12855bb2a7cbSTrond Myklebust __entry->count = hdr->args.count; 12865bb2a7cbSTrond Myklebust __entry->stable = hdr->args.stable; 12878224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 12888224b273SChuck Lever __entry->fileid = nfsi->fileid; 12895bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 12908224b273SChuck Lever ), 12918224b273SChuck Lever 12928224b273SChuck Lever TP_printk( 12938224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 12945bb2a7cbSTrond Myklebust "offset=%lld count=%u stable=%s", 12958224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 12968224b273SChuck Lever (unsigned long long)__entry->fileid, 12978224b273SChuck Lever __entry->fhandle, 12985bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->count, 12998791545eSChuck Lever show_nfs_stable_how(__entry->stable) 13008224b273SChuck Lever ) 13018224b273SChuck Lever ); 13028224b273SChuck Lever 13038224b273SChuck Lever TRACE_EVENT(nfs_writeback_done, 13048224b273SChuck Lever TP_PROTO( 13055bb2a7cbSTrond Myklebust const struct rpc_task *task, 13065bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 13078224b273SChuck Lever ), 13088224b273SChuck Lever 13095bb2a7cbSTrond Myklebust TP_ARGS(task, hdr), 13108224b273SChuck Lever 13118224b273SChuck Lever TP_STRUCT__entry( 13128224b273SChuck Lever __field(dev_t, dev) 13138224b273SChuck Lever __field(u32, fhandle) 13148224b273SChuck Lever __field(u64, fileid) 13155bb2a7cbSTrond Myklebust __field(loff_t, offset) 13165bb2a7cbSTrond Myklebust __field(u32, arg_count) 13175bb2a7cbSTrond Myklebust __field(u32, res_count) 13185bb2a7cbSTrond Myklebust __field(int, status) 13198791545eSChuck Lever __field(unsigned long, stable) 13205bb2a7cbSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 13218224b273SChuck Lever ), 13228224b273SChuck Lever 13238224b273SChuck Lever TP_fast_assign( 13245bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 13258224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 13265bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 13275bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 13285bb2a7cbSTrond Myklebust const struct nfs_writeverf *verf = hdr->res.verf; 13298224b273SChuck Lever 13305bb2a7cbSTrond Myklebust __entry->status = task->tk_status; 13315bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 13325bb2a7cbSTrond Myklebust __entry->arg_count = hdr->args.count; 13335bb2a7cbSTrond Myklebust __entry->res_count = hdr->res.count; 13345bb2a7cbSTrond Myklebust __entry->stable = verf->committed; 13355bb2a7cbSTrond Myklebust memcpy(__entry->verifier, 13365bb2a7cbSTrond Myklebust &verf->verifier, 13375bb2a7cbSTrond Myklebust NFS4_VERIFIER_SIZE); 13388224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 13398224b273SChuck Lever __entry->fileid = nfsi->fileid; 13405bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 13418224b273SChuck Lever ), 13428224b273SChuck Lever 13438224b273SChuck Lever TP_printk( 13448224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 13455bb2a7cbSTrond Myklebust "offset=%lld count=%u res=%u status=%d stable=%s " 13465bb2a7cbSTrond Myklebust "verifier=%s", 13478224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 13488224b273SChuck Lever (unsigned long long)__entry->fileid, 13498224b273SChuck Lever __entry->fhandle, 13505bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 13515bb2a7cbSTrond Myklebust __entry->res_count, __entry->status, 13528791545eSChuck Lever show_nfs_stable_how(__entry->stable), 13538791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 13548224b273SChuck Lever ) 13558224b273SChuck Lever ); 13568224b273SChuck Lever 1357861e1671SChuck Lever DECLARE_EVENT_CLASS(nfs_page_error_class, 1358861e1671SChuck Lever TP_PROTO( 1359861e1671SChuck Lever const struct nfs_page *req, 1360861e1671SChuck Lever int error 1361861e1671SChuck Lever ), 1362861e1671SChuck Lever 1363861e1671SChuck Lever TP_ARGS(req, error), 1364861e1671SChuck Lever 1365861e1671SChuck Lever TP_STRUCT__entry( 1366861e1671SChuck Lever __field(const void *, req) 1367861e1671SChuck Lever __field(pgoff_t, index) 1368861e1671SChuck Lever __field(unsigned int, offset) 1369861e1671SChuck Lever __field(unsigned int, pgbase) 1370861e1671SChuck Lever __field(unsigned int, bytes) 1371861e1671SChuck Lever __field(int, error) 1372861e1671SChuck Lever ), 1373861e1671SChuck Lever 1374861e1671SChuck Lever TP_fast_assign( 1375861e1671SChuck Lever __entry->req = req; 1376861e1671SChuck Lever __entry->index = req->wb_index; 1377861e1671SChuck Lever __entry->offset = req->wb_offset; 1378861e1671SChuck Lever __entry->pgbase = req->wb_pgbase; 1379861e1671SChuck Lever __entry->bytes = req->wb_bytes; 1380861e1671SChuck Lever __entry->error = error; 1381861e1671SChuck Lever ), 1382861e1671SChuck Lever 1383861e1671SChuck Lever TP_printk( 1384861e1671SChuck Lever "req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d", 1385861e1671SChuck Lever __entry->req, __entry->index, __entry->offset, 1386861e1671SChuck Lever __entry->pgbase, __entry->bytes, __entry->error 1387861e1671SChuck Lever ) 1388861e1671SChuck Lever ); 1389861e1671SChuck Lever 1390861e1671SChuck Lever #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1391861e1671SChuck Lever DEFINE_EVENT(nfs_page_error_class, name, \ 1392861e1671SChuck Lever TP_PROTO( \ 1393861e1671SChuck Lever const struct nfs_page *req, \ 1394861e1671SChuck Lever int error \ 1395861e1671SChuck Lever ), \ 1396861e1671SChuck Lever TP_ARGS(req, error)) 1397861e1671SChuck Lever 1398861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1399861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1400861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1401861e1671SChuck Lever 14028224b273SChuck Lever TRACE_EVENT(nfs_initiate_commit, 14038224b273SChuck Lever TP_PROTO( 14048224b273SChuck Lever const struct nfs_commit_data *data 14058224b273SChuck Lever ), 14068224b273SChuck Lever 14078224b273SChuck Lever TP_ARGS(data), 14088224b273SChuck Lever 14098224b273SChuck Lever TP_STRUCT__entry( 14108224b273SChuck Lever __field(dev_t, dev) 14118224b273SChuck Lever __field(u32, fhandle) 14128224b273SChuck Lever __field(u64, fileid) 14137bdd297eSTrond Myklebust __field(loff_t, offset) 14147bdd297eSTrond Myklebust __field(u32, count) 14158224b273SChuck Lever ), 14168224b273SChuck Lever 14178224b273SChuck Lever TP_fast_assign( 14188224b273SChuck Lever const struct inode *inode = data->inode; 14198224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 14207bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 14217bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 14228224b273SChuck Lever 14238224b273SChuck Lever __entry->offset = data->args.offset; 14248224b273SChuck Lever __entry->count = data->args.count; 14258224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 14268224b273SChuck Lever __entry->fileid = nfsi->fileid; 14277bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 14288224b273SChuck Lever ), 14298224b273SChuck Lever 14308224b273SChuck Lever TP_printk( 14318224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 14327bdd297eSTrond Myklebust "offset=%lld count=%u", 14338224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 14348224b273SChuck Lever (unsigned long long)__entry->fileid, 14358224b273SChuck Lever __entry->fhandle, 14367bdd297eSTrond Myklebust (long long)__entry->offset, __entry->count 14378224b273SChuck Lever ) 14388224b273SChuck Lever ); 14398224b273SChuck Lever 14408224b273SChuck Lever TRACE_EVENT(nfs_commit_done, 14418224b273SChuck Lever TP_PROTO( 14427bdd297eSTrond Myklebust const struct rpc_task *task, 14438224b273SChuck Lever const struct nfs_commit_data *data 14448224b273SChuck Lever ), 14458224b273SChuck Lever 14467bdd297eSTrond Myklebust TP_ARGS(task, data), 14478224b273SChuck Lever 14488224b273SChuck Lever TP_STRUCT__entry( 14498224b273SChuck Lever __field(dev_t, dev) 14508224b273SChuck Lever __field(u32, fhandle) 14518224b273SChuck Lever __field(u64, fileid) 14527bdd297eSTrond Myklebust __field(loff_t, offset) 14537bdd297eSTrond Myklebust __field(int, status) 14548791545eSChuck Lever __field(unsigned long, stable) 14557bdd297eSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 14568224b273SChuck Lever ), 14578224b273SChuck Lever 14588224b273SChuck Lever TP_fast_assign( 14598224b273SChuck Lever const struct inode *inode = data->inode; 14608224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 14617bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 14627bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 14637bdd297eSTrond Myklebust const struct nfs_writeverf *verf = data->res.verf; 14648224b273SChuck Lever 14657bdd297eSTrond Myklebust __entry->status = task->tk_status; 14668224b273SChuck Lever __entry->offset = data->args.offset; 14677bdd297eSTrond Myklebust __entry->stable = verf->committed; 14687bdd297eSTrond Myklebust memcpy(__entry->verifier, 14697bdd297eSTrond Myklebust &verf->verifier, 14707bdd297eSTrond Myklebust NFS4_VERIFIER_SIZE); 14718224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 14728224b273SChuck Lever __entry->fileid = nfsi->fileid; 14737bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 14748224b273SChuck Lever ), 14758224b273SChuck Lever 14768224b273SChuck Lever TP_printk( 14778224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 14787bdd297eSTrond Myklebust "offset=%lld status=%d stable=%s verifier=%s", 14798224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 14808224b273SChuck Lever (unsigned long long)__entry->fileid, 14818224b273SChuck Lever __entry->fhandle, 14827bdd297eSTrond Myklebust (long long)__entry->offset, __entry->status, 14838791545eSChuck Lever show_nfs_stable_how(__entry->stable), 14848791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 14858224b273SChuck Lever ) 14868224b273SChuck Lever ); 14878224b273SChuck Lever 148843622eabSTrond Myklebust TRACE_EVENT(nfs_fh_to_dentry, 148943622eabSTrond Myklebust TP_PROTO( 149043622eabSTrond Myklebust const struct super_block *sb, 149143622eabSTrond Myklebust const struct nfs_fh *fh, 149243622eabSTrond Myklebust u64 fileid, 149343622eabSTrond Myklebust int error 149443622eabSTrond Myklebust ), 149543622eabSTrond Myklebust 149643622eabSTrond Myklebust TP_ARGS(sb, fh, fileid, error), 149743622eabSTrond Myklebust 149843622eabSTrond Myklebust TP_STRUCT__entry( 149943622eabSTrond Myklebust __field(int, error) 150043622eabSTrond Myklebust __field(dev_t, dev) 150143622eabSTrond Myklebust __field(u32, fhandle) 150243622eabSTrond Myklebust __field(u64, fileid) 150343622eabSTrond Myklebust ), 150443622eabSTrond Myklebust 150543622eabSTrond Myklebust TP_fast_assign( 150643622eabSTrond Myklebust __entry->error = error; 150743622eabSTrond Myklebust __entry->dev = sb->s_dev; 150843622eabSTrond Myklebust __entry->fileid = fileid; 150943622eabSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 151043622eabSTrond Myklebust ), 151143622eabSTrond Myklebust 151243622eabSTrond Myklebust TP_printk( 151343622eabSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 151443622eabSTrond Myklebust __entry->error, 151543622eabSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 151643622eabSTrond Myklebust (unsigned long long)__entry->fileid, 151743622eabSTrond Myklebust __entry->fhandle 151843622eabSTrond Myklebust ) 151943622eabSTrond Myklebust ); 152043622eabSTrond Myklebust 15213d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs_xdr_event, 1522f23f6584SChuck Lever TP_PROTO( 152362a92ba9SChuck Lever const struct xdr_stream *xdr, 1524f23f6584SChuck Lever int error 1525f23f6584SChuck Lever ), 1526f23f6584SChuck Lever 152762a92ba9SChuck Lever TP_ARGS(xdr, error), 1528f23f6584SChuck Lever 1529f23f6584SChuck Lever TP_STRUCT__entry( 153062a92ba9SChuck Lever __field(unsigned int, task_id) 153162a92ba9SChuck Lever __field(unsigned int, client_id) 153262a92ba9SChuck Lever __field(u32, xid) 15335be59458SChuck Lever __field(int, version) 153438a638a7SChuck Lever __field(unsigned long, error) 15355be59458SChuck Lever __string(program, 15365be59458SChuck Lever xdr->rqst->rq_task->tk_client->cl_program->name) 15375be59458SChuck Lever __string(procedure, 15385be59458SChuck Lever xdr->rqst->rq_task->tk_msg.rpc_proc->p_name) 1539f23f6584SChuck Lever ), 1540f23f6584SChuck Lever 1541f23f6584SChuck Lever TP_fast_assign( 154262a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 154362a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 154462a92ba9SChuck Lever 154562a92ba9SChuck Lever __entry->task_id = task->tk_pid; 154662a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 154762a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 15485be59458SChuck Lever __entry->version = task->tk_client->cl_vers; 1549f23f6584SChuck Lever __entry->error = error; 15505be59458SChuck Lever __assign_str(program, 155178c14b38SJoe Perches task->tk_client->cl_program->name); 155278c14b38SJoe Perches __assign_str(procedure, task->tk_msg.rpc_proc->p_name); 1553f23f6584SChuck Lever ), 1554f23f6584SChuck Lever 1555b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 1556b4776a34SChuck Lever " xid=0x%08x %sv%d %s error=%ld (%s)", 155762a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 15585be59458SChuck Lever __get_str(program), __entry->version, 15595be59458SChuck Lever __get_str(procedure), -__entry->error, 15608791545eSChuck Lever show_nfs_status(__entry->error) 1561f23f6584SChuck Lever ) 1562f23f6584SChuck Lever ); 15633d66bae1STrond Myklebust #define DEFINE_NFS_XDR_EVENT(name) \ 15643d66bae1STrond Myklebust DEFINE_EVENT(nfs_xdr_event, name, \ 15653d66bae1STrond Myklebust TP_PROTO( \ 15663d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 15673d66bae1STrond Myklebust int error \ 15683d66bae1STrond Myklebust ), \ 15693d66bae1STrond Myklebust TP_ARGS(xdr, error)) 15703d66bae1STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_status); 1571eb3d58c6STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle); 1572f23f6584SChuck Lever 1573f4ce1299STrond Myklebust #endif /* _TRACE_NFS_H */ 1574f4ce1299STrond Myklebust 1575f4ce1299STrond Myklebust #undef TRACE_INCLUDE_PATH 1576f4ce1299STrond Myklebust #define TRACE_INCLUDE_PATH . 1577f4ce1299STrond Myklebust #define TRACE_INCLUDE_FILE nfstrace 1578f4ce1299STrond Myklebust /* This part must be outside protection */ 1579f4ce1299STrond Myklebust #include <trace/define_trace.h> 1580