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 14247c01ffSChuck Lever #include <trace/misc/fs.h> 15247c01ffSChuck Lever #include <trace/misc/nfs.h> 16247c01ffSChuck Lever #include <trace/misc/sunrpc.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_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \ 437d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \ 447d4006c1SChuck Lever { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 457d4006c1SChuck Lever { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 46f4ce1299STrond Myklebust 47f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event, 48f4ce1299STrond Myklebust TP_PROTO( 49f4ce1299STrond Myklebust const struct inode *inode 50f4ce1299STrond Myklebust ), 51f4ce1299STrond Myklebust 52f4ce1299STrond Myklebust TP_ARGS(inode), 53f4ce1299STrond Myklebust 54f4ce1299STrond Myklebust TP_STRUCT__entry( 55f4ce1299STrond Myklebust __field(dev_t, dev) 56f4ce1299STrond Myklebust __field(u32, fhandle) 57f4ce1299STrond Myklebust __field(u64, fileid) 58f4ce1299STrond Myklebust __field(u64, version) 59f4ce1299STrond Myklebust ), 60f4ce1299STrond Myklebust 61f4ce1299STrond Myklebust TP_fast_assign( 62f4ce1299STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 63f4ce1299STrond Myklebust __entry->dev = inode->i_sb->s_dev; 64f4ce1299STrond Myklebust __entry->fileid = nfsi->fileid; 65f4ce1299STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 661eb5d98fSJeff Layton __entry->version = inode_peek_iversion_raw(inode); 67f4ce1299STrond Myklebust ), 68f4ce1299STrond Myklebust 69f4ce1299STrond Myklebust TP_printk( 70f4ce1299STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 71f4ce1299STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 72f4ce1299STrond Myklebust (unsigned long long)__entry->fileid, 73f4ce1299STrond Myklebust __entry->fhandle, 74f4ce1299STrond Myklebust (unsigned long long)__entry->version 75f4ce1299STrond Myklebust ) 76f4ce1299STrond Myklebust ); 77f4ce1299STrond Myklebust 78f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event_done, 79f4ce1299STrond Myklebust TP_PROTO( 80f4ce1299STrond Myklebust const struct inode *inode, 81f4ce1299STrond Myklebust int error 82f4ce1299STrond Myklebust ), 83f4ce1299STrond Myklebust 84f4ce1299STrond Myklebust TP_ARGS(inode, error), 85f4ce1299STrond Myklebust 86f4ce1299STrond Myklebust TP_STRUCT__entry( 8738a638a7SChuck Lever __field(unsigned long, error) 88f4ce1299STrond Myklebust __field(dev_t, dev) 89f4ce1299STrond Myklebust __field(u32, fhandle) 90f4ce1299STrond Myklebust __field(unsigned char, type) 91f4ce1299STrond Myklebust __field(u64, fileid) 92f4ce1299STrond Myklebust __field(u64, version) 93f4ce1299STrond Myklebust __field(loff_t, size) 94f4ce1299STrond Myklebust __field(unsigned long, nfsi_flags) 95f4ce1299STrond Myklebust __field(unsigned long, cache_validity) 96f4ce1299STrond Myklebust ), 97f4ce1299STrond Myklebust 98f4ce1299STrond Myklebust TP_fast_assign( 99f4ce1299STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 10038a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 101f4ce1299STrond Myklebust __entry->dev = inode->i_sb->s_dev; 102f4ce1299STrond Myklebust __entry->fileid = nfsi->fileid; 103f4ce1299STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 104f4ce1299STrond Myklebust __entry->type = nfs_umode_to_dtype(inode->i_mode); 1051eb5d98fSJeff Layton __entry->version = inode_peek_iversion_raw(inode); 106f4ce1299STrond Myklebust __entry->size = i_size_read(inode); 107f4ce1299STrond Myklebust __entry->nfsi_flags = nfsi->flags; 108f4ce1299STrond Myklebust __entry->cache_validity = nfsi->cache_validity; 109f4ce1299STrond Myklebust ), 110f4ce1299STrond Myklebust 111f4ce1299STrond Myklebust TP_printk( 11238a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 113f4ce1299STrond Myklebust "type=%u (%s) version=%llu size=%lld " 1147d4006c1SChuck Lever "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)", 1158791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 116f4ce1299STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 117f4ce1299STrond Myklebust (unsigned long long)__entry->fileid, 118f4ce1299STrond Myklebust __entry->fhandle, 119f4ce1299STrond Myklebust __entry->type, 1209d2d48bbSChuck Lever show_fs_dirent_type(__entry->type), 121f4ce1299STrond Myklebust (unsigned long long)__entry->version, 122f4ce1299STrond Myklebust (long long)__entry->size, 123f4ce1299STrond Myklebust __entry->cache_validity, 124f4ce1299STrond Myklebust nfs_show_cache_validity(__entry->cache_validity), 125f4ce1299STrond Myklebust __entry->nfsi_flags, 126f4ce1299STrond Myklebust nfs_show_nfsi_flags(__entry->nfsi_flags) 127f4ce1299STrond Myklebust ) 128f4ce1299STrond Myklebust ); 129f4ce1299STrond Myklebust 130f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT(name) \ 131f4ce1299STrond Myklebust DEFINE_EVENT(nfs_inode_event, name, \ 132f4ce1299STrond Myklebust TP_PROTO( \ 133f4ce1299STrond Myklebust const struct inode *inode \ 134f4ce1299STrond Myklebust ), \ 135f4ce1299STrond Myklebust TP_ARGS(inode)) 136f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 137f4ce1299STrond Myklebust DEFINE_EVENT(nfs_inode_event_done, name, \ 138f4ce1299STrond Myklebust TP_PROTO( \ 139f4ce1299STrond Myklebust const struct inode *inode, \ 140f4ce1299STrond Myklebust int error \ 141f4ce1299STrond Myklebust ), \ 142f4ce1299STrond Myklebust TP_ARGS(inode, error)) 14393ce4af7STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 144f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 145f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 146f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 147f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 148f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 149f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 150f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 151f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 152f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 153f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 154f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 155f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 156f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 157f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 158f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_access_enter); 15993c2e5e0SBenjamin Coddington DEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_invalid); 160b0365ccbSTrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_readdir_force_readdirplus); 161310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done); 162310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done); 163e8194b7dSTrond Myklebust 164e8194b7dSTrond Myklebust TRACE_EVENT(nfs_access_exit, 165e8194b7dSTrond Myklebust TP_PROTO( 166e8194b7dSTrond Myklebust const struct inode *inode, 167e8194b7dSTrond Myklebust unsigned int mask, 168e8194b7dSTrond Myklebust unsigned int permitted, 169e8194b7dSTrond Myklebust int error 170e8194b7dSTrond Myklebust ), 171e8194b7dSTrond Myklebust 172e8194b7dSTrond Myklebust TP_ARGS(inode, mask, permitted, error), 173e8194b7dSTrond Myklebust 174e8194b7dSTrond Myklebust TP_STRUCT__entry( 175e8194b7dSTrond Myklebust __field(unsigned long, error) 176e8194b7dSTrond Myklebust __field(dev_t, dev) 177e8194b7dSTrond Myklebust __field(u32, fhandle) 178e8194b7dSTrond Myklebust __field(unsigned char, type) 179e8194b7dSTrond Myklebust __field(u64, fileid) 180e8194b7dSTrond Myklebust __field(u64, version) 181e8194b7dSTrond Myklebust __field(loff_t, size) 182e8194b7dSTrond Myklebust __field(unsigned long, nfsi_flags) 183e8194b7dSTrond Myklebust __field(unsigned long, cache_validity) 184e8194b7dSTrond Myklebust __field(unsigned int, mask) 185e8194b7dSTrond Myklebust __field(unsigned int, permitted) 186e8194b7dSTrond Myklebust ), 187e8194b7dSTrond Myklebust 188e8194b7dSTrond Myklebust TP_fast_assign( 189e8194b7dSTrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 190e8194b7dSTrond Myklebust __entry->error = error < 0 ? -error : 0; 191e8194b7dSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 192e8194b7dSTrond Myklebust __entry->fileid = nfsi->fileid; 193e8194b7dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 194e8194b7dSTrond Myklebust __entry->type = nfs_umode_to_dtype(inode->i_mode); 195e8194b7dSTrond Myklebust __entry->version = inode_peek_iversion_raw(inode); 196e8194b7dSTrond Myklebust __entry->size = i_size_read(inode); 197e8194b7dSTrond Myklebust __entry->nfsi_flags = nfsi->flags; 198e8194b7dSTrond Myklebust __entry->cache_validity = nfsi->cache_validity; 199e8194b7dSTrond Myklebust __entry->mask = mask; 200e8194b7dSTrond Myklebust __entry->permitted = permitted; 201e8194b7dSTrond Myklebust ), 202e8194b7dSTrond Myklebust 203e8194b7dSTrond Myklebust TP_printk( 204e8194b7dSTrond Myklebust "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 205e8194b7dSTrond Myklebust "type=%u (%s) version=%llu size=%lld " 206e8194b7dSTrond Myklebust "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) " 207e8194b7dSTrond Myklebust "mask=0x%x permitted=0x%x", 2088791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 209e8194b7dSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 210e8194b7dSTrond Myklebust (unsigned long long)__entry->fileid, 211e8194b7dSTrond Myklebust __entry->fhandle, 212e8194b7dSTrond Myklebust __entry->type, 2139d2d48bbSChuck Lever show_fs_dirent_type(__entry->type), 214e8194b7dSTrond Myklebust (unsigned long long)__entry->version, 215e8194b7dSTrond Myklebust (long long)__entry->size, 216e8194b7dSTrond Myklebust __entry->cache_validity, 217e8194b7dSTrond Myklebust nfs_show_cache_validity(__entry->cache_validity), 218e8194b7dSTrond Myklebust __entry->nfsi_flags, 219e8194b7dSTrond Myklebust nfs_show_nfsi_flags(__entry->nfsi_flags), 220e8194b7dSTrond Myklebust __entry->mask, __entry->permitted 221e8194b7dSTrond Myklebust ) 222e8194b7dSTrond Myklebust ); 223f4ce1299STrond Myklebust 224110cb2d2SChuck Lever DECLARE_EVENT_CLASS(nfs_update_size_class, 225110cb2d2SChuck Lever TP_PROTO( 226110cb2d2SChuck Lever const struct inode *inode, 227110cb2d2SChuck Lever loff_t new_size 228110cb2d2SChuck Lever ), 229110cb2d2SChuck Lever 230110cb2d2SChuck Lever TP_ARGS(inode, new_size), 231110cb2d2SChuck Lever 232110cb2d2SChuck Lever TP_STRUCT__entry( 233110cb2d2SChuck Lever __field(dev_t, dev) 234110cb2d2SChuck Lever __field(u32, fhandle) 235110cb2d2SChuck Lever __field(u64, fileid) 236110cb2d2SChuck Lever __field(u64, version) 237110cb2d2SChuck Lever __field(loff_t, cur_size) 238110cb2d2SChuck Lever __field(loff_t, new_size) 239110cb2d2SChuck Lever ), 240110cb2d2SChuck Lever 241110cb2d2SChuck Lever TP_fast_assign( 242110cb2d2SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 243110cb2d2SChuck Lever 244110cb2d2SChuck Lever __entry->dev = inode->i_sb->s_dev; 245110cb2d2SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 246110cb2d2SChuck Lever __entry->fileid = nfsi->fileid; 247110cb2d2SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 248110cb2d2SChuck Lever __entry->cur_size = i_size_read(inode); 249110cb2d2SChuck Lever __entry->new_size = new_size; 250110cb2d2SChuck Lever ), 251110cb2d2SChuck Lever 252110cb2d2SChuck Lever TP_printk( 253110cb2d2SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld", 254110cb2d2SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 255110cb2d2SChuck Lever (unsigned long long)__entry->fileid, 256110cb2d2SChuck Lever __entry->fhandle, __entry->version, 257110cb2d2SChuck Lever __entry->cur_size, __entry->new_size 258110cb2d2SChuck Lever ) 259110cb2d2SChuck Lever ); 260110cb2d2SChuck Lever 261110cb2d2SChuck Lever #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \ 262110cb2d2SChuck Lever DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \ 263110cb2d2SChuck Lever TP_PROTO( \ 264110cb2d2SChuck Lever const struct inode *inode, \ 265110cb2d2SChuck Lever loff_t new_size \ 266110cb2d2SChuck Lever ), \ 267110cb2d2SChuck Lever TP_ARGS(inode, new_size)) 268110cb2d2SChuck Lever 269110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(truncate); 270110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(wcc); 271110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(update); 272110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(grow); 273110cb2d2SChuck Lever 27411d03d0aSTrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_range_event, 27511d03d0aSTrond Myklebust TP_PROTO( 27611d03d0aSTrond Myklebust const struct inode *inode, 27711d03d0aSTrond Myklebust loff_t range_start, 27811d03d0aSTrond Myklebust loff_t range_end 27911d03d0aSTrond Myklebust ), 28011d03d0aSTrond Myklebust 28111d03d0aSTrond Myklebust TP_ARGS(inode, range_start, range_end), 28211d03d0aSTrond Myklebust 28311d03d0aSTrond Myklebust TP_STRUCT__entry( 28411d03d0aSTrond Myklebust __field(dev_t, dev) 28511d03d0aSTrond Myklebust __field(u32, fhandle) 28611d03d0aSTrond Myklebust __field(u64, fileid) 28711d03d0aSTrond Myklebust __field(u64, version) 28811d03d0aSTrond Myklebust __field(loff_t, range_start) 28911d03d0aSTrond Myklebust __field(loff_t, range_end) 29011d03d0aSTrond Myklebust ), 29111d03d0aSTrond Myklebust 29211d03d0aSTrond Myklebust TP_fast_assign( 29311d03d0aSTrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 29411d03d0aSTrond Myklebust 29511d03d0aSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 29611d03d0aSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 29711d03d0aSTrond Myklebust __entry->fileid = nfsi->fileid; 29811d03d0aSTrond Myklebust __entry->version = inode_peek_iversion_raw(inode); 29911d03d0aSTrond Myklebust __entry->range_start = range_start; 30011d03d0aSTrond Myklebust __entry->range_end = range_end; 30111d03d0aSTrond Myklebust ), 30211d03d0aSTrond Myklebust 30311d03d0aSTrond Myklebust TP_printk( 30411d03d0aSTrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 30511d03d0aSTrond Myklebust "range=[%lld, %lld]", 30611d03d0aSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 30711d03d0aSTrond Myklebust (unsigned long long)__entry->fileid, 30811d03d0aSTrond Myklebust __entry->fhandle, __entry->version, 30911d03d0aSTrond Myklebust __entry->range_start, __entry->range_end 31011d03d0aSTrond Myklebust ) 31111d03d0aSTrond Myklebust ); 31211d03d0aSTrond Myklebust 31311d03d0aSTrond Myklebust #define DEFINE_NFS_INODE_RANGE_EVENT(name) \ 31411d03d0aSTrond Myklebust DEFINE_EVENT(nfs_inode_range_event, name, \ 31511d03d0aSTrond Myklebust TP_PROTO( \ 31611d03d0aSTrond Myklebust const struct inode *inode, \ 31711d03d0aSTrond Myklebust loff_t range_start, \ 31811d03d0aSTrond Myklebust loff_t range_end \ 31911d03d0aSTrond Myklebust ), \ 32011d03d0aSTrond Myklebust TP_ARGS(inode, range_start, range_end)) 32111d03d0aSTrond Myklebust 32211d03d0aSTrond Myklebust DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range); 32311d03d0aSTrond Myklebust 324310e3187STrond Myklebust DECLARE_EVENT_CLASS(nfs_readdir_event, 325310e3187STrond Myklebust TP_PROTO( 326310e3187STrond Myklebust const struct file *file, 327310e3187STrond Myklebust const __be32 *verifier, 328310e3187STrond Myklebust u64 cookie, 329310e3187STrond Myklebust pgoff_t page_index, 330310e3187STrond Myklebust unsigned int dtsize 331310e3187STrond Myklebust ), 332310e3187STrond Myklebust 333310e3187STrond Myklebust TP_ARGS(file, verifier, cookie, page_index, dtsize), 334310e3187STrond Myklebust 335310e3187STrond Myklebust TP_STRUCT__entry( 336310e3187STrond Myklebust __field(dev_t, dev) 337310e3187STrond Myklebust __field(u32, fhandle) 338310e3187STrond Myklebust __field(u64, fileid) 339310e3187STrond Myklebust __field(u64, version) 340310e3187STrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 341310e3187STrond Myklebust __field(u64, cookie) 342310e3187STrond Myklebust __field(pgoff_t, index) 343310e3187STrond Myklebust __field(unsigned int, dtsize) 344310e3187STrond Myklebust ), 345310e3187STrond Myklebust 346310e3187STrond Myklebust TP_fast_assign( 347310e3187STrond Myklebust const struct inode *dir = file_inode(file); 348310e3187STrond Myklebust const struct nfs_inode *nfsi = NFS_I(dir); 349310e3187STrond Myklebust 350310e3187STrond Myklebust __entry->dev = dir->i_sb->s_dev; 351310e3187STrond Myklebust __entry->fileid = nfsi->fileid; 352310e3187STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 353310e3187STrond Myklebust __entry->version = inode_peek_iversion_raw(dir); 354310e3187STrond Myklebust if (cookie != 0) 355310e3187STrond Myklebust memcpy(__entry->verifier, verifier, 356310e3187STrond Myklebust NFS4_VERIFIER_SIZE); 357310e3187STrond Myklebust else 358310e3187STrond Myklebust memset(__entry->verifier, 0, 359310e3187STrond Myklebust NFS4_VERIFIER_SIZE); 360310e3187STrond Myklebust __entry->cookie = cookie; 361310e3187STrond Myklebust __entry->index = page_index; 362310e3187STrond Myklebust __entry->dtsize = dtsize; 363310e3187STrond Myklebust ), 364310e3187STrond Myklebust 365310e3187STrond Myklebust TP_printk( 366310e3187STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 367310e3187STrond Myklebust "cookie=%s:0x%llx cache_index=%lu dtsize=%u", 368310e3187STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 369310e3187STrond Myklebust (unsigned long long)__entry->fileid, __entry->fhandle, 370310e3187STrond Myklebust __entry->version, show_nfs4_verifier(__entry->verifier), 371310e3187STrond Myklebust (unsigned long long)__entry->cookie, __entry->index, 372310e3187STrond Myklebust __entry->dtsize 373310e3187STrond Myklebust ) 374310e3187STrond Myklebust ); 375310e3187STrond Myklebust 376310e3187STrond Myklebust #define DEFINE_NFS_READDIR_EVENT(name) \ 377310e3187STrond Myklebust DEFINE_EVENT(nfs_readdir_event, name, \ 378310e3187STrond Myklebust TP_PROTO( \ 379310e3187STrond Myklebust const struct file *file, \ 380310e3187STrond Myklebust const __be32 *verifier, \ 381310e3187STrond Myklebust u64 cookie, \ 382310e3187STrond Myklebust pgoff_t page_index, \ 383310e3187STrond Myklebust unsigned int dtsize \ 384310e3187STrond Myklebust ), \ 385310e3187STrond Myklebust TP_ARGS(file, verifier, cookie, page_index, dtsize)) 386310e3187STrond Myklebust 387310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill); 388310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached); 389310e3187STrond Myklebust 3906e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event, 3916e0d0be7STrond Myklebust TP_PROTO( 3926e0d0be7STrond Myklebust const struct inode *dir, 3936e0d0be7STrond Myklebust const struct dentry *dentry, 3946e0d0be7STrond Myklebust unsigned int flags 3956e0d0be7STrond Myklebust ), 3966e0d0be7STrond Myklebust 3976e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags), 3986e0d0be7STrond Myklebust 3996e0d0be7STrond Myklebust TP_STRUCT__entry( 4007d4006c1SChuck Lever __field(unsigned long, flags) 4016e0d0be7STrond Myklebust __field(dev_t, dev) 4026e0d0be7STrond Myklebust __field(u64, dir) 4036e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 4046e0d0be7STrond Myklebust ), 4056e0d0be7STrond Myklebust 4066e0d0be7STrond Myklebust TP_fast_assign( 4076e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4086e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 4096e0d0be7STrond Myklebust __entry->flags = flags; 4106e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 4116e0d0be7STrond Myklebust ), 4126e0d0be7STrond Myklebust 4136e0d0be7STrond Myklebust TP_printk( 4147d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4156e0d0be7STrond Myklebust __entry->flags, 4169d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 4176e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4186e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4196e0d0be7STrond Myklebust __get_str(name) 4206e0d0be7STrond Myklebust ) 4216e0d0be7STrond Myklebust ); 4226e0d0be7STrond Myklebust 4236e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT(name) \ 4246e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event, name, \ 4256e0d0be7STrond Myklebust TP_PROTO( \ 4266e0d0be7STrond Myklebust const struct inode *dir, \ 4276e0d0be7STrond Myklebust const struct dentry *dentry, \ 4286e0d0be7STrond Myklebust unsigned int flags \ 4296e0d0be7STrond Myklebust ), \ 4306e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags)) 4316e0d0be7STrond Myklebust 4326e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event_done, 4336e0d0be7STrond Myklebust TP_PROTO( 4346e0d0be7STrond Myklebust const struct inode *dir, 4356e0d0be7STrond Myklebust const struct dentry *dentry, 4366e0d0be7STrond Myklebust unsigned int flags, 4376e0d0be7STrond Myklebust int error 4386e0d0be7STrond Myklebust ), 4396e0d0be7STrond Myklebust 4406e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error), 4416e0d0be7STrond Myklebust 4426e0d0be7STrond Myklebust TP_STRUCT__entry( 44338a638a7SChuck Lever __field(unsigned long, error) 4447d4006c1SChuck Lever __field(unsigned long, flags) 4456e0d0be7STrond Myklebust __field(dev_t, dev) 4466e0d0be7STrond Myklebust __field(u64, dir) 4476e0d0be7STrond Myklebust __string(name, dentry->d_name.name) 4486e0d0be7STrond Myklebust ), 4496e0d0be7STrond Myklebust 4506e0d0be7STrond Myklebust TP_fast_assign( 4516e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 4526e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 45338a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 4546e0d0be7STrond Myklebust __entry->flags = flags; 4556e0d0be7STrond Myklebust __assign_str(name, dentry->d_name.name); 4566e0d0be7STrond Myklebust ), 4576e0d0be7STrond Myklebust 4586e0d0be7STrond Myklebust TP_printk( 4597d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 4608791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 4616e0d0be7STrond Myklebust __entry->flags, 4629d2d48bbSChuck Lever show_fs_lookup_flags(__entry->flags), 4636e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 4646e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 4656e0d0be7STrond Myklebust __get_str(name) 4666e0d0be7STrond Myklebust ) 4676e0d0be7STrond Myklebust ); 4686e0d0be7STrond Myklebust 4696e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 4706e0d0be7STrond Myklebust DEFINE_EVENT(nfs_lookup_event_done, name, \ 4716e0d0be7STrond Myklebust TP_PROTO( \ 4726e0d0be7STrond Myklebust const struct inode *dir, \ 4736e0d0be7STrond Myklebust const struct dentry *dentry, \ 4746e0d0be7STrond Myklebust unsigned int flags, \ 4756e0d0be7STrond Myklebust int error \ 4766e0d0be7STrond Myklebust ), \ 4776e0d0be7STrond Myklebust TP_ARGS(dir, dentry, flags, error)) 4786e0d0be7STrond Myklebust 4796e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 4806e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 4816e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 4826e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 483eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup); 484eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed); 485eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate); 4866e0d0be7STrond Myklebust 4876e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_enter, 4886e0d0be7STrond Myklebust TP_PROTO( 4896e0d0be7STrond Myklebust const struct inode *dir, 4906e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 4916e0d0be7STrond Myklebust unsigned int flags 4926e0d0be7STrond Myklebust ), 4936e0d0be7STrond Myklebust 4946e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags), 4956e0d0be7STrond Myklebust 4966e0d0be7STrond Myklebust TP_STRUCT__entry( 4977d4006c1SChuck Lever __field(unsigned long, flags) 4989d2d48bbSChuck Lever __field(unsigned long, fmode) 4996e0d0be7STrond Myklebust __field(dev_t, dev) 5006e0d0be7STrond Myklebust __field(u64, dir) 5016e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 5026e0d0be7STrond Myklebust ), 5036e0d0be7STrond Myklebust 5046e0d0be7STrond Myklebust TP_fast_assign( 5056e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5066e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 5076e0d0be7STrond Myklebust __entry->flags = flags; 5089d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 5096e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 5106e0d0be7STrond Myklebust ), 5116e0d0be7STrond Myklebust 5126e0d0be7STrond Myklebust TP_printk( 5137d4006c1SChuck Lever "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 5146e0d0be7STrond Myklebust __entry->flags, 5159d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5169d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 5176e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5186e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 5196e0d0be7STrond Myklebust __get_str(name) 5206e0d0be7STrond Myklebust ) 5216e0d0be7STrond Myklebust ); 5226e0d0be7STrond Myklebust 5236e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_exit, 5246e0d0be7STrond Myklebust TP_PROTO( 5256e0d0be7STrond Myklebust const struct inode *dir, 5266e0d0be7STrond Myklebust const struct nfs_open_context *ctx, 5276e0d0be7STrond Myklebust unsigned int flags, 5286e0d0be7STrond Myklebust int error 5296e0d0be7STrond Myklebust ), 5306e0d0be7STrond Myklebust 5316e0d0be7STrond Myklebust TP_ARGS(dir, ctx, flags, error), 5326e0d0be7STrond Myklebust 5336e0d0be7STrond Myklebust TP_STRUCT__entry( 53438a638a7SChuck Lever __field(unsigned long, error) 5357d4006c1SChuck Lever __field(unsigned long, flags) 5369d2d48bbSChuck Lever __field(unsigned long, fmode) 5376e0d0be7STrond Myklebust __field(dev_t, dev) 5386e0d0be7STrond Myklebust __field(u64, dir) 5396e0d0be7STrond Myklebust __string(name, ctx->dentry->d_name.name) 5406e0d0be7STrond Myklebust ), 5416e0d0be7STrond Myklebust 5426e0d0be7STrond Myklebust TP_fast_assign( 54338a638a7SChuck Lever __entry->error = -error; 5446e0d0be7STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5456e0d0be7STrond Myklebust __entry->dir = NFS_FILEID(dir); 5466e0d0be7STrond Myklebust __entry->flags = flags; 5479d2d48bbSChuck Lever __entry->fmode = (__force unsigned long)ctx->mode; 5486e0d0be7STrond Myklebust __assign_str(name, ctx->dentry->d_name.name); 5496e0d0be7STrond Myklebust ), 5506e0d0be7STrond Myklebust 5516e0d0be7STrond Myklebust TP_printk( 5527d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 5536e0d0be7STrond Myklebust "name=%02x:%02x:%llu/%s", 5548791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 5556e0d0be7STrond Myklebust __entry->flags, 5569d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5579d2d48bbSChuck Lever show_fs_fmode_flags(__entry->fmode), 5586e0d0be7STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5596e0d0be7STrond Myklebust (unsigned long long)__entry->dir, 5606e0d0be7STrond Myklebust __get_str(name) 5616e0d0be7STrond Myklebust ) 5626e0d0be7STrond Myklebust ); 5636e0d0be7STrond Myklebust 5648b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_enter, 5658b0ad3d4STrond Myklebust TP_PROTO( 5668b0ad3d4STrond Myklebust const struct inode *dir, 5678b0ad3d4STrond Myklebust const struct dentry *dentry, 5688b0ad3d4STrond Myklebust unsigned int flags 5698b0ad3d4STrond Myklebust ), 5708b0ad3d4STrond Myklebust 5718b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags), 5728b0ad3d4STrond Myklebust 5738b0ad3d4STrond Myklebust TP_STRUCT__entry( 5747d4006c1SChuck Lever __field(unsigned long, flags) 5758b0ad3d4STrond Myklebust __field(dev_t, dev) 5768b0ad3d4STrond Myklebust __field(u64, dir) 5778b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 5788b0ad3d4STrond Myklebust ), 5798b0ad3d4STrond Myklebust 5808b0ad3d4STrond Myklebust TP_fast_assign( 5818b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 5828b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 5838b0ad3d4STrond Myklebust __entry->flags = flags; 5848b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 5858b0ad3d4STrond Myklebust ), 5868b0ad3d4STrond Myklebust 5878b0ad3d4STrond Myklebust TP_printk( 5887d4006c1SChuck Lever "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 5898b0ad3d4STrond Myklebust __entry->flags, 5909d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 5918b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 5928b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 5938b0ad3d4STrond Myklebust __get_str(name) 5948b0ad3d4STrond Myklebust ) 5958b0ad3d4STrond Myklebust ); 5968b0ad3d4STrond Myklebust 5978b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_exit, 5988b0ad3d4STrond Myklebust TP_PROTO( 5998b0ad3d4STrond Myklebust const struct inode *dir, 6008b0ad3d4STrond Myklebust const struct dentry *dentry, 6018b0ad3d4STrond Myklebust unsigned int flags, 6028b0ad3d4STrond Myklebust int error 6038b0ad3d4STrond Myklebust ), 6048b0ad3d4STrond Myklebust 6058b0ad3d4STrond Myklebust TP_ARGS(dir, dentry, flags, error), 6068b0ad3d4STrond Myklebust 6078b0ad3d4STrond Myklebust TP_STRUCT__entry( 60838a638a7SChuck Lever __field(unsigned long, error) 6097d4006c1SChuck Lever __field(unsigned long, flags) 6108b0ad3d4STrond Myklebust __field(dev_t, dev) 6118b0ad3d4STrond Myklebust __field(u64, dir) 6128b0ad3d4STrond Myklebust __string(name, dentry->d_name.name) 6138b0ad3d4STrond Myklebust ), 6148b0ad3d4STrond Myklebust 6158b0ad3d4STrond Myklebust TP_fast_assign( 61638a638a7SChuck Lever __entry->error = -error; 6178b0ad3d4STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6188b0ad3d4STrond Myklebust __entry->dir = NFS_FILEID(dir); 6198b0ad3d4STrond Myklebust __entry->flags = flags; 6208b0ad3d4STrond Myklebust __assign_str(name, dentry->d_name.name); 6218b0ad3d4STrond Myklebust ), 6228b0ad3d4STrond Myklebust 6238b0ad3d4STrond Myklebust TP_printk( 6247d4006c1SChuck Lever "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 6258791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6268b0ad3d4STrond Myklebust __entry->flags, 6279d2d48bbSChuck Lever show_fs_fcntl_open_flags(__entry->flags), 6288b0ad3d4STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6298b0ad3d4STrond Myklebust (unsigned long long)__entry->dir, 6308b0ad3d4STrond Myklebust __get_str(name) 6318b0ad3d4STrond Myklebust ) 6328b0ad3d4STrond Myklebust ); 6338b0ad3d4STrond Myklebust 6341ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event, 6351ca42382STrond Myklebust TP_PROTO( 6361ca42382STrond Myklebust const struct inode *dir, 6371ca42382STrond Myklebust const struct dentry *dentry 6381ca42382STrond Myklebust ), 6391ca42382STrond Myklebust 6401ca42382STrond Myklebust TP_ARGS(dir, dentry), 6411ca42382STrond Myklebust 6421ca42382STrond Myklebust TP_STRUCT__entry( 6431ca42382STrond Myklebust __field(dev_t, dev) 6441ca42382STrond Myklebust __field(u64, dir) 6451ca42382STrond Myklebust __string(name, dentry->d_name.name) 6461ca42382STrond Myklebust ), 6471ca42382STrond Myklebust 6481ca42382STrond Myklebust TP_fast_assign( 6491ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6501ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 6511ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 6521ca42382STrond Myklebust ), 6531ca42382STrond Myklebust 6541ca42382STrond Myklebust TP_printk( 6551ca42382STrond Myklebust "name=%02x:%02x:%llu/%s", 6561ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6571ca42382STrond Myklebust (unsigned long long)__entry->dir, 6581ca42382STrond Myklebust __get_str(name) 6591ca42382STrond Myklebust ) 6601ca42382STrond Myklebust ); 6611ca42382STrond Myklebust 6621ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 6631ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event, name, \ 6641ca42382STrond Myklebust TP_PROTO( \ 6651ca42382STrond Myklebust const struct inode *dir, \ 6661ca42382STrond Myklebust const struct dentry *dentry \ 6671ca42382STrond Myklebust ), \ 6681ca42382STrond Myklebust TP_ARGS(dir, dentry)) 6691ca42382STrond Myklebust 6701ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event_done, 6711ca42382STrond Myklebust TP_PROTO( 6721ca42382STrond Myklebust const struct inode *dir, 6731ca42382STrond Myklebust const struct dentry *dentry, 6741ca42382STrond Myklebust int error 6751ca42382STrond Myklebust ), 6761ca42382STrond Myklebust 6771ca42382STrond Myklebust TP_ARGS(dir, dentry, error), 6781ca42382STrond Myklebust 6791ca42382STrond Myklebust TP_STRUCT__entry( 68038a638a7SChuck Lever __field(unsigned long, error) 6811ca42382STrond Myklebust __field(dev_t, dev) 6821ca42382STrond Myklebust __field(u64, dir) 6831ca42382STrond Myklebust __string(name, dentry->d_name.name) 6841ca42382STrond Myklebust ), 6851ca42382STrond Myklebust 6861ca42382STrond Myklebust TP_fast_assign( 6871ca42382STrond Myklebust __entry->dev = dir->i_sb->s_dev; 6881ca42382STrond Myklebust __entry->dir = NFS_FILEID(dir); 68938a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 6901ca42382STrond Myklebust __assign_str(name, dentry->d_name.name); 6911ca42382STrond Myklebust ), 6921ca42382STrond Myklebust 6931ca42382STrond Myklebust TP_printk( 69438a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 6958791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 6961ca42382STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 6971ca42382STrond Myklebust (unsigned long long)__entry->dir, 6981ca42382STrond Myklebust __get_str(name) 6991ca42382STrond Myklebust ) 7001ca42382STrond Myklebust ); 7011ca42382STrond Myklebust 7021ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 7031ca42382STrond Myklebust DEFINE_EVENT(nfs_directory_event_done, name, \ 7041ca42382STrond Myklebust TP_PROTO( \ 7051ca42382STrond Myklebust const struct inode *dir, \ 7061ca42382STrond Myklebust const struct dentry *dentry, \ 7071ca42382STrond Myklebust int error \ 7081ca42382STrond Myklebust ), \ 7091ca42382STrond Myklebust TP_ARGS(dir, dentry, error)) 7101ca42382STrond Myklebust 7111ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 7121ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 7131ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 7141ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 7151ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 7161ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 7171ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 7181ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 7191ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 7201ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 7211ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 7221ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 7231ca42382STrond Myklebust 7241fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_enter, 7251fd1085bSTrond Myklebust TP_PROTO( 7261fd1085bSTrond Myklebust const struct inode *inode, 7271fd1085bSTrond Myklebust const struct inode *dir, 7281fd1085bSTrond Myklebust const struct dentry *dentry 7291fd1085bSTrond Myklebust ), 7301fd1085bSTrond Myklebust 7311fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry), 7321fd1085bSTrond Myklebust 7331fd1085bSTrond Myklebust TP_STRUCT__entry( 7341fd1085bSTrond Myklebust __field(dev_t, dev) 7351fd1085bSTrond Myklebust __field(u64, fileid) 7361fd1085bSTrond Myklebust __field(u64, dir) 7371fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 7381fd1085bSTrond Myklebust ), 7391fd1085bSTrond Myklebust 7401fd1085bSTrond Myklebust TP_fast_assign( 7411fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 7421fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 7431fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 7441fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 7451fd1085bSTrond Myklebust ), 7461fd1085bSTrond Myklebust 7471fd1085bSTrond Myklebust TP_printk( 7481fd1085bSTrond Myklebust "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 7491fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7501fd1085bSTrond Myklebust __entry->fileid, 7511fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7521fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 7531fd1085bSTrond Myklebust __get_str(name) 7541fd1085bSTrond Myklebust ) 7551fd1085bSTrond Myklebust ); 7561fd1085bSTrond Myklebust 7571fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_exit, 7581fd1085bSTrond Myklebust TP_PROTO( 7591fd1085bSTrond Myklebust const struct inode *inode, 7601fd1085bSTrond Myklebust const struct inode *dir, 7611fd1085bSTrond Myklebust const struct dentry *dentry, 7621fd1085bSTrond Myklebust int error 7631fd1085bSTrond Myklebust ), 7641fd1085bSTrond Myklebust 7651fd1085bSTrond Myklebust TP_ARGS(inode, dir, dentry, error), 7661fd1085bSTrond Myklebust 7671fd1085bSTrond Myklebust TP_STRUCT__entry( 76838a638a7SChuck Lever __field(unsigned long, error) 7691fd1085bSTrond Myklebust __field(dev_t, dev) 7701fd1085bSTrond Myklebust __field(u64, fileid) 7711fd1085bSTrond Myklebust __field(u64, dir) 7721fd1085bSTrond Myklebust __string(name, dentry->d_name.name) 7731fd1085bSTrond Myklebust ), 7741fd1085bSTrond Myklebust 7751fd1085bSTrond Myklebust TP_fast_assign( 7761fd1085bSTrond Myklebust __entry->dev = inode->i_sb->s_dev; 7771fd1085bSTrond Myklebust __entry->fileid = NFS_FILEID(inode); 7781fd1085bSTrond Myklebust __entry->dir = NFS_FILEID(dir); 77938a638a7SChuck Lever __entry->error = error < 0 ? -error : 0; 7801fd1085bSTrond Myklebust __assign_str(name, dentry->d_name.name); 7811fd1085bSTrond Myklebust ), 7821fd1085bSTrond Myklebust 7831fd1085bSTrond Myklebust TP_printk( 78438a638a7SChuck Lever "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 7858791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 7861fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7871fd1085bSTrond Myklebust __entry->fileid, 7881fd1085bSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 7891fd1085bSTrond Myklebust (unsigned long long)__entry->dir, 7901fd1085bSTrond Myklebust __get_str(name) 7911fd1085bSTrond Myklebust ) 7921fd1085bSTrond Myklebust ); 7931fd1085bSTrond Myklebust 79470ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event, 79570ded201STrond Myklebust TP_PROTO( 79670ded201STrond Myklebust const struct inode *old_dir, 79770ded201STrond Myklebust const struct dentry *old_dentry, 79870ded201STrond Myklebust const struct inode *new_dir, 79970ded201STrond Myklebust const struct dentry *new_dentry 80070ded201STrond Myklebust ), 80170ded201STrond Myklebust 80270ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 80370ded201STrond Myklebust 80470ded201STrond Myklebust TP_STRUCT__entry( 80570ded201STrond Myklebust __field(dev_t, dev) 80670ded201STrond Myklebust __field(u64, old_dir) 80770ded201STrond Myklebust __field(u64, new_dir) 80870ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 80970ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 81070ded201STrond Myklebust ), 81170ded201STrond Myklebust 81270ded201STrond Myklebust TP_fast_assign( 81370ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 81470ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 81570ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 81670ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 81770ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 81870ded201STrond Myklebust ), 81970ded201STrond Myklebust 82070ded201STrond Myklebust TP_printk( 82170ded201STrond Myklebust "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 82270ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 82370ded201STrond Myklebust (unsigned long long)__entry->old_dir, 82470ded201STrond Myklebust __get_str(old_name), 82570ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 82670ded201STrond Myklebust (unsigned long long)__entry->new_dir, 82770ded201STrond Myklebust __get_str(new_name) 82870ded201STrond Myklebust ) 82970ded201STrond Myklebust ); 83070ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT(name) \ 83170ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event, name, \ 83270ded201STrond Myklebust TP_PROTO( \ 83370ded201STrond Myklebust const struct inode *old_dir, \ 83470ded201STrond Myklebust const struct dentry *old_dentry, \ 83570ded201STrond Myklebust const struct inode *new_dir, \ 83670ded201STrond Myklebust const struct dentry *new_dentry \ 83770ded201STrond Myklebust ), \ 83870ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 83970ded201STrond Myklebust 84070ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event_done, 84170ded201STrond Myklebust TP_PROTO( 84270ded201STrond Myklebust const struct inode *old_dir, 84370ded201STrond Myklebust const struct dentry *old_dentry, 84470ded201STrond Myklebust const struct inode *new_dir, 84570ded201STrond Myklebust const struct dentry *new_dentry, 84670ded201STrond Myklebust int error 84770ded201STrond Myklebust ), 84870ded201STrond Myklebust 84970ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 85070ded201STrond Myklebust 85170ded201STrond Myklebust TP_STRUCT__entry( 85270ded201STrond Myklebust __field(dev_t, dev) 85338a638a7SChuck Lever __field(unsigned long, error) 85470ded201STrond Myklebust __field(u64, old_dir) 85570ded201STrond Myklebust __string(old_name, old_dentry->d_name.name) 85670ded201STrond Myklebust __field(u64, new_dir) 85770ded201STrond Myklebust __string(new_name, new_dentry->d_name.name) 85870ded201STrond Myklebust ), 85970ded201STrond Myklebust 86070ded201STrond Myklebust TP_fast_assign( 86170ded201STrond Myklebust __entry->dev = old_dir->i_sb->s_dev; 86238a638a7SChuck Lever __entry->error = -error; 86370ded201STrond Myklebust __entry->old_dir = NFS_FILEID(old_dir); 86470ded201STrond Myklebust __entry->new_dir = NFS_FILEID(new_dir); 86570ded201STrond Myklebust __assign_str(old_name, old_dentry->d_name.name); 86670ded201STrond Myklebust __assign_str(new_name, new_dentry->d_name.name); 86770ded201STrond Myklebust ), 86870ded201STrond Myklebust 86970ded201STrond Myklebust TP_printk( 87038a638a7SChuck Lever "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 87170ded201STrond Myklebust "new_name=%02x:%02x:%llu/%s", 8728791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 87370ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 87470ded201STrond Myklebust (unsigned long long)__entry->old_dir, 87570ded201STrond Myklebust __get_str(old_name), 87670ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 87770ded201STrond Myklebust (unsigned long long)__entry->new_dir, 87870ded201STrond Myklebust __get_str(new_name) 87970ded201STrond Myklebust ) 88070ded201STrond Myklebust ); 88170ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 88270ded201STrond Myklebust DEFINE_EVENT(nfs_rename_event_done, name, \ 88370ded201STrond Myklebust TP_PROTO( \ 88470ded201STrond Myklebust const struct inode *old_dir, \ 88570ded201STrond Myklebust const struct dentry *old_dentry, \ 88670ded201STrond Myklebust const struct inode *new_dir, \ 88770ded201STrond Myklebust const struct dentry *new_dentry, \ 88870ded201STrond Myklebust int error \ 88970ded201STrond Myklebust ), \ 89070ded201STrond Myklebust TP_ARGS(old_dir, old_dentry, new_dir, \ 89170ded201STrond Myklebust new_dentry, error)) 89270ded201STrond Myklebust 89370ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 89470ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 89570ded201STrond Myklebust 89670ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 89770ded201STrond Myklebust 89870ded201STrond Myklebust TRACE_EVENT(nfs_sillyrename_unlink, 89970ded201STrond Myklebust TP_PROTO( 90070ded201STrond Myklebust const struct nfs_unlinkdata *data, 90170ded201STrond Myklebust int error 90270ded201STrond Myklebust ), 90370ded201STrond Myklebust 90470ded201STrond Myklebust TP_ARGS(data, error), 90570ded201STrond Myklebust 90670ded201STrond Myklebust TP_STRUCT__entry( 90770ded201STrond Myklebust __field(dev_t, dev) 90838a638a7SChuck Lever __field(unsigned long, error) 90970ded201STrond Myklebust __field(u64, dir) 91070ded201STrond Myklebust __dynamic_array(char, name, data->args.name.len + 1) 91170ded201STrond Myklebust ), 91270ded201STrond Myklebust 91370ded201STrond Myklebust TP_fast_assign( 914884be175SAl Viro struct inode *dir = d_inode(data->dentry->d_parent); 91570ded201STrond Myklebust size_t len = data->args.name.len; 91670ded201STrond Myklebust __entry->dev = dir->i_sb->s_dev; 91770ded201STrond Myklebust __entry->dir = NFS_FILEID(dir); 91838a638a7SChuck Lever __entry->error = -error; 919752d596bSDaniel Bristot de Oliveira memcpy(__get_str(name), 92070ded201STrond Myklebust data->args.name.name, len); 921752d596bSDaniel Bristot de Oliveira __get_str(name)[len] = 0; 92270ded201STrond Myklebust ), 92370ded201STrond Myklebust 92470ded201STrond Myklebust TP_printk( 92538a638a7SChuck Lever "error=%ld (%s) name=%02x:%02x:%llu/%s", 9268791545eSChuck Lever -__entry->error, show_nfs_status(__entry->error), 92770ded201STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 92870ded201STrond Myklebust (unsigned long long)__entry->dir, 92970ded201STrond Myklebust __get_str(name) 93070ded201STrond Myklebust ) 93170ded201STrond Myklebust ); 9328224b273SChuck Lever 933eb5654b3STrond Myklebust DECLARE_EVENT_CLASS(nfs_folio_event, 934d9f87743SChuck Lever TP_PROTO( 935d9f87743SChuck Lever const struct inode *inode, 936ab75bff1STrond Myklebust struct folio *folio 937d9f87743SChuck Lever ), 938d9f87743SChuck Lever 939ab75bff1STrond Myklebust TP_ARGS(inode, folio), 940d9f87743SChuck Lever 941d9f87743SChuck Lever TP_STRUCT__entry( 942d9f87743SChuck Lever __field(dev_t, dev) 943d9f87743SChuck Lever __field(u32, fhandle) 944d9f87743SChuck Lever __field(u64, fileid) 945d9f87743SChuck Lever __field(u64, version) 946d9f87743SChuck Lever __field(loff_t, offset) 947eb5654b3STrond Myklebust __field(u32, count) 948d9f87743SChuck Lever ), 949d9f87743SChuck Lever 950d9f87743SChuck Lever TP_fast_assign( 951d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 952d9f87743SChuck Lever 953d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 954d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 955d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 956d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 957ab75bff1STrond Myklebust __entry->offset = folio_file_pos(folio); 958eb5654b3STrond Myklebust __entry->count = nfs_folio_length(folio); 959d9f87743SChuck Lever ), 960d9f87743SChuck Lever 961d9f87743SChuck Lever TP_printk( 962eb5654b3STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 963eb5654b3STrond Myklebust "offset=%lld count=%u", 964d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 965d9f87743SChuck Lever (unsigned long long)__entry->fileid, 966d9f87743SChuck Lever __entry->fhandle, __entry->version, 967eb5654b3STrond Myklebust __entry->offset, __entry->count 968d9f87743SChuck Lever ) 969d9f87743SChuck Lever ); 970d9f87743SChuck Lever 971eb5654b3STrond Myklebust #define DEFINE_NFS_FOLIO_EVENT(name) \ 972eb5654b3STrond Myklebust DEFINE_EVENT(nfs_folio_event, name, \ 973eb5654b3STrond Myklebust TP_PROTO( \ 974eb5654b3STrond Myklebust const struct inode *inode, \ 975eb5654b3STrond Myklebust struct folio *folio \ 976eb5654b3STrond Myklebust ), \ 977eb5654b3STrond Myklebust TP_ARGS(inode, folio)) 978eb5654b3STrond Myklebust 979eb5654b3STrond Myklebust DECLARE_EVENT_CLASS(nfs_folio_event_done, 980d9f87743SChuck Lever TP_PROTO( 981d9f87743SChuck Lever const struct inode *inode, 982ab75bff1STrond Myklebust struct folio *folio, 983d9f87743SChuck Lever int ret 984d9f87743SChuck Lever ), 985d9f87743SChuck Lever 986ab75bff1STrond Myklebust TP_ARGS(inode, folio, ret), 987d9f87743SChuck Lever 988d9f87743SChuck Lever TP_STRUCT__entry( 989d9f87743SChuck Lever __field(dev_t, dev) 990d9f87743SChuck Lever __field(u32, fhandle) 991d9f87743SChuck Lever __field(int, ret) 992d9f87743SChuck Lever __field(u64, fileid) 993d9f87743SChuck Lever __field(u64, version) 994d9f87743SChuck Lever __field(loff_t, offset) 995eb5654b3STrond Myklebust __field(u32, count) 996d9f87743SChuck Lever ), 997d9f87743SChuck Lever 998d9f87743SChuck Lever TP_fast_assign( 999d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1000d9f87743SChuck Lever 1001d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1002d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1003d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1004d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 1005ab75bff1STrond Myklebust __entry->offset = folio_file_pos(folio); 1006eb5654b3STrond Myklebust __entry->count = nfs_folio_length(folio); 1007d9f87743SChuck Lever __entry->ret = ret; 1008d9f87743SChuck Lever ), 1009d9f87743SChuck Lever 1010d9f87743SChuck Lever TP_printk( 1011eb5654b3STrond Myklebust "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 1012eb5654b3STrond Myklebust "offset=%lld count=%u ret=%d", 1013d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1014d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1015d9f87743SChuck Lever __entry->fhandle, __entry->version, 1016eb5654b3STrond Myklebust __entry->offset, __entry->count, __entry->ret 1017d9f87743SChuck Lever ) 1018d9f87743SChuck Lever ); 1019d9f87743SChuck Lever 1020eb5654b3STrond Myklebust #define DEFINE_NFS_FOLIO_EVENT_DONE(name) \ 1021eb5654b3STrond Myklebust DEFINE_EVENT(nfs_folio_event_done, name, \ 1022eb5654b3STrond Myklebust TP_PROTO( \ 1023eb5654b3STrond Myklebust const struct inode *inode, \ 1024eb5654b3STrond Myklebust struct folio *folio, \ 1025eb5654b3STrond Myklebust int ret \ 1026eb5654b3STrond Myklebust ), \ 1027eb5654b3STrond Myklebust TP_ARGS(inode, folio, ret)) 1028eb5654b3STrond Myklebust 1029eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage); 1030eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_done); 1031eb5654b3STrond Myklebust 1032*256093feSTrond Myklebust DEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio); 1033*256093feSTrond Myklebust DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_folio_done); 1034*256093feSTrond Myklebust 1035eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio); 1036eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio_done); 1037eb5654b3STrond Myklebust 1038d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead, 1039d9f87743SChuck Lever TP_PROTO( 1040d9f87743SChuck Lever const struct inode *inode, 10418786fde8SMatthew Wilcox (Oracle) loff_t pos, 1042d9f87743SChuck Lever unsigned int nr_pages 1043d9f87743SChuck Lever ), 1044d9f87743SChuck Lever 10458786fde8SMatthew Wilcox (Oracle) TP_ARGS(inode, pos, nr_pages), 1046d9f87743SChuck Lever 1047d9f87743SChuck Lever TP_STRUCT__entry( 1048d9f87743SChuck Lever __field(dev_t, dev) 1049d9f87743SChuck Lever __field(u32, fhandle) 1050d9f87743SChuck Lever __field(u64, fileid) 1051d9f87743SChuck Lever __field(u64, version) 1052edfa0b16SDave Wysochanski __field(loff_t, offset) 1053d9f87743SChuck Lever __field(unsigned int, nr_pages) 1054d9f87743SChuck Lever ), 1055d9f87743SChuck Lever 1056d9f87743SChuck Lever TP_fast_assign( 1057d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1058d9f87743SChuck Lever 1059d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1060d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1061d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1062d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 10638786fde8SMatthew Wilcox (Oracle) __entry->offset = pos; 1064d9f87743SChuck Lever __entry->nr_pages = nr_pages; 1065d9f87743SChuck Lever ), 1066d9f87743SChuck Lever 1067d9f87743SChuck Lever TP_printk( 1068edfa0b16SDave Wysochanski "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u", 1069d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1070d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1071d9f87743SChuck Lever __entry->fhandle, __entry->version, 1072edfa0b16SDave Wysochanski __entry->offset, __entry->nr_pages 1073d9f87743SChuck Lever ) 1074d9f87743SChuck Lever ); 1075d9f87743SChuck Lever 1076d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead_done, 1077d9f87743SChuck Lever TP_PROTO( 1078d9f87743SChuck Lever const struct inode *inode, 1079d9f87743SChuck Lever unsigned int nr_pages, 1080d9f87743SChuck Lever int ret 1081d9f87743SChuck Lever ), 1082d9f87743SChuck Lever 1083d9f87743SChuck Lever TP_ARGS(inode, nr_pages, ret), 1084d9f87743SChuck Lever 1085d9f87743SChuck Lever TP_STRUCT__entry( 1086d9f87743SChuck Lever __field(dev_t, dev) 1087d9f87743SChuck Lever __field(u32, fhandle) 1088d9f87743SChuck Lever __field(int, ret) 1089d9f87743SChuck Lever __field(u64, fileid) 1090d9f87743SChuck Lever __field(u64, version) 1091edfa0b16SDave Wysochanski __field(loff_t, offset) 1092d9f87743SChuck Lever __field(unsigned int, nr_pages) 1093d9f87743SChuck Lever ), 1094d9f87743SChuck Lever 1095d9f87743SChuck Lever TP_fast_assign( 1096d9f87743SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1097d9f87743SChuck Lever 1098d9f87743SChuck Lever __entry->dev = inode->i_sb->s_dev; 1099d9f87743SChuck Lever __entry->fileid = nfsi->fileid; 1100d9f87743SChuck Lever __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1101d9f87743SChuck Lever __entry->version = inode_peek_iversion_raw(inode); 1102d9f87743SChuck Lever __entry->nr_pages = nr_pages; 1103d9f87743SChuck Lever __entry->ret = ret; 1104d9f87743SChuck Lever ), 1105d9f87743SChuck Lever 1106d9f87743SChuck Lever TP_printk( 1107d9f87743SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d", 1108d9f87743SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1109d9f87743SChuck Lever (unsigned long long)__entry->fileid, 1110d9f87743SChuck Lever __entry->fhandle, __entry->version, 1111d9f87743SChuck Lever __entry->nr_pages, __entry->ret 1112d9f87743SChuck Lever ) 1113d9f87743SChuck Lever ); 1114d9f87743SChuck Lever 11158224b273SChuck Lever TRACE_EVENT(nfs_initiate_read, 11168224b273SChuck Lever TP_PROTO( 11172343172dSTrond Myklebust const struct nfs_pgio_header *hdr 11188224b273SChuck Lever ), 11198224b273SChuck Lever 11202343172dSTrond Myklebust TP_ARGS(hdr), 11218224b273SChuck Lever 11228224b273SChuck Lever TP_STRUCT__entry( 11238224b273SChuck Lever __field(dev_t, dev) 11248224b273SChuck Lever __field(u32, fhandle) 11258224b273SChuck Lever __field(u64, fileid) 11262343172dSTrond Myklebust __field(loff_t, offset) 11272343172dSTrond Myklebust __field(u32, count) 11288224b273SChuck Lever ), 11298224b273SChuck Lever 11308224b273SChuck Lever TP_fast_assign( 11312343172dSTrond Myklebust const struct inode *inode = hdr->inode; 11328224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11332343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11342343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 11358224b273SChuck Lever 11362343172dSTrond Myklebust __entry->offset = hdr->args.offset; 11372343172dSTrond Myklebust __entry->count = hdr->args.count; 11388224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11398224b273SChuck Lever __entry->fileid = nfsi->fileid; 11402343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11418224b273SChuck Lever ), 11428224b273SChuck Lever 11438224b273SChuck Lever TP_printk( 11448224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 11452343172dSTrond Myklebust "offset=%lld count=%u", 11468224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11478224b273SChuck Lever (unsigned long long)__entry->fileid, 11488224b273SChuck Lever __entry->fhandle, 11492343172dSTrond Myklebust (long long)__entry->offset, __entry->count 11508224b273SChuck Lever ) 11518224b273SChuck Lever ); 11528224b273SChuck Lever 11538224b273SChuck Lever TRACE_EVENT(nfs_readpage_done, 11548224b273SChuck Lever TP_PROTO( 11552343172dSTrond Myklebust const struct rpc_task *task, 11562343172dSTrond Myklebust const struct nfs_pgio_header *hdr 11578224b273SChuck Lever ), 11588224b273SChuck Lever 11592343172dSTrond Myklebust TP_ARGS(task, hdr), 11608224b273SChuck Lever 11618224b273SChuck Lever TP_STRUCT__entry( 11628224b273SChuck Lever __field(dev_t, dev) 11638224b273SChuck Lever __field(u32, fhandle) 11648224b273SChuck Lever __field(u64, fileid) 11652343172dSTrond Myklebust __field(loff_t, offset) 11662343172dSTrond Myklebust __field(u32, arg_count) 11672343172dSTrond Myklebust __field(u32, res_count) 11682343172dSTrond Myklebust __field(bool, eof) 11693fa5cbdcSTrond Myklebust __field(int, error) 11708224b273SChuck Lever ), 11718224b273SChuck Lever 11728224b273SChuck Lever TP_fast_assign( 11732343172dSTrond Myklebust const struct inode *inode = hdr->inode; 11748224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 11752343172dSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 11762343172dSTrond Myklebust hdr->args.fh : &nfsi->fh; 11778224b273SChuck Lever 11783fa5cbdcSTrond Myklebust __entry->error = task->tk_status; 11792343172dSTrond Myklebust __entry->offset = hdr->args.offset; 11802343172dSTrond Myklebust __entry->arg_count = hdr->args.count; 11812343172dSTrond Myklebust __entry->res_count = hdr->res.count; 11822343172dSTrond Myklebust __entry->eof = hdr->res.eof; 11838224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 11848224b273SChuck Lever __entry->fileid = nfsi->fileid; 11852343172dSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 11868224b273SChuck Lever ), 11878224b273SChuck Lever 11888224b273SChuck Lever TP_printk( 11893fa5cbdcSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 11903fa5cbdcSTrond Myklebust "offset=%lld count=%u res=%u%s", __entry->error, 11918224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 11928224b273SChuck Lever (unsigned long long)__entry->fileid, 11938224b273SChuck Lever __entry->fhandle, 11942343172dSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 11953fa5cbdcSTrond Myklebust __entry->res_count, __entry->eof ? " eof" : "" 11968224b273SChuck Lever ) 11978224b273SChuck Lever ); 11988224b273SChuck Lever 1199fd2b6121SChuck Lever TRACE_EVENT(nfs_readpage_short, 1200fd2b6121SChuck Lever TP_PROTO( 1201fd2b6121SChuck Lever const struct rpc_task *task, 1202fd2b6121SChuck Lever const struct nfs_pgio_header *hdr 1203fd2b6121SChuck Lever ), 1204fd2b6121SChuck Lever 1205fd2b6121SChuck Lever TP_ARGS(task, hdr), 1206fd2b6121SChuck Lever 1207fd2b6121SChuck Lever TP_STRUCT__entry( 1208fd2b6121SChuck Lever __field(dev_t, dev) 1209fd2b6121SChuck Lever __field(u32, fhandle) 1210fd2b6121SChuck Lever __field(u64, fileid) 1211fd2b6121SChuck Lever __field(loff_t, offset) 1212fd2b6121SChuck Lever __field(u32, arg_count) 1213fd2b6121SChuck Lever __field(u32, res_count) 1214fd2b6121SChuck Lever __field(bool, eof) 12153fa5cbdcSTrond Myklebust __field(int, error) 1216fd2b6121SChuck Lever ), 1217fd2b6121SChuck Lever 1218fd2b6121SChuck Lever TP_fast_assign( 1219fd2b6121SChuck Lever const struct inode *inode = hdr->inode; 1220fd2b6121SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1221fd2b6121SChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1222fd2b6121SChuck Lever hdr->args.fh : &nfsi->fh; 1223fd2b6121SChuck Lever 12243fa5cbdcSTrond Myklebust __entry->error = task->tk_status; 1225fd2b6121SChuck Lever __entry->offset = hdr->args.offset; 1226fd2b6121SChuck Lever __entry->arg_count = hdr->args.count; 1227fd2b6121SChuck Lever __entry->res_count = hdr->res.count; 1228fd2b6121SChuck Lever __entry->eof = hdr->res.eof; 1229fd2b6121SChuck Lever __entry->dev = inode->i_sb->s_dev; 1230fd2b6121SChuck Lever __entry->fileid = nfsi->fileid; 1231fd2b6121SChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1232fd2b6121SChuck Lever ), 1233fd2b6121SChuck Lever 1234fd2b6121SChuck Lever TP_printk( 12353fa5cbdcSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 12363fa5cbdcSTrond Myklebust "offset=%lld count=%u res=%u%s", __entry->error, 1237fd2b6121SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1238fd2b6121SChuck Lever (unsigned long long)__entry->fileid, 1239fd2b6121SChuck Lever __entry->fhandle, 1240fd2b6121SChuck Lever (long long)__entry->offset, __entry->arg_count, 12413fa5cbdcSTrond Myklebust __entry->res_count, __entry->eof ? " eof" : "" 1242fd2b6121SChuck Lever ) 1243fd2b6121SChuck Lever ); 1244fd2b6121SChuck Lever 1245e3f0a7feSDave Wysochanski 1246cd2ed9bdSChuck Lever TRACE_EVENT(nfs_pgio_error, 1247cd2ed9bdSChuck Lever TP_PROTO( 1248cd2ed9bdSChuck Lever const struct nfs_pgio_header *hdr, 1249cd2ed9bdSChuck Lever int error, 1250cd2ed9bdSChuck Lever loff_t pos 1251cd2ed9bdSChuck Lever ), 1252cd2ed9bdSChuck Lever 1253cd2ed9bdSChuck Lever TP_ARGS(hdr, error, pos), 1254cd2ed9bdSChuck Lever 1255cd2ed9bdSChuck Lever TP_STRUCT__entry( 1256cd2ed9bdSChuck Lever __field(dev_t, dev) 1257cd2ed9bdSChuck Lever __field(u32, fhandle) 1258cd2ed9bdSChuck Lever __field(u64, fileid) 1259cd2ed9bdSChuck Lever __field(loff_t, offset) 1260cd2ed9bdSChuck Lever __field(u32, arg_count) 1261cd2ed9bdSChuck Lever __field(u32, res_count) 1262cd2ed9bdSChuck Lever __field(loff_t, pos) 12633fa5cbdcSTrond Myklebust __field(int, error) 1264cd2ed9bdSChuck Lever ), 1265cd2ed9bdSChuck Lever 1266cd2ed9bdSChuck Lever TP_fast_assign( 1267cd2ed9bdSChuck Lever const struct inode *inode = hdr->inode; 1268cd2ed9bdSChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 1269cd2ed9bdSChuck Lever const struct nfs_fh *fh = hdr->args.fh ? 1270cd2ed9bdSChuck Lever hdr->args.fh : &nfsi->fh; 1271cd2ed9bdSChuck Lever 12723fa5cbdcSTrond Myklebust __entry->error = error; 1273cd2ed9bdSChuck Lever __entry->offset = hdr->args.offset; 1274cd2ed9bdSChuck Lever __entry->arg_count = hdr->args.count; 1275cd2ed9bdSChuck Lever __entry->res_count = hdr->res.count; 1276cd2ed9bdSChuck Lever __entry->dev = inode->i_sb->s_dev; 1277cd2ed9bdSChuck Lever __entry->fileid = nfsi->fileid; 1278cd2ed9bdSChuck Lever __entry->fhandle = nfs_fhandle_hash(fh); 1279cd2ed9bdSChuck Lever ), 1280cd2ed9bdSChuck Lever 12813fa5cbdcSTrond Myklebust TP_printk("error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 12823fa5cbdcSTrond Myklebust "offset=%lld count=%u res=%u pos=%llu", __entry->error, 1283cd2ed9bdSChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 1284cd2ed9bdSChuck Lever (unsigned long long)__entry->fileid, __entry->fhandle, 1285cd2ed9bdSChuck Lever (long long)__entry->offset, __entry->arg_count, __entry->res_count, 12863fa5cbdcSTrond Myklebust __entry->pos 1287cd2ed9bdSChuck Lever ) 1288cd2ed9bdSChuck Lever ); 1289cd2ed9bdSChuck Lever 12908224b273SChuck Lever TRACE_EVENT(nfs_initiate_write, 12918224b273SChuck Lever TP_PROTO( 12925bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 12938224b273SChuck Lever ), 12948224b273SChuck Lever 12955bb2a7cbSTrond Myklebust TP_ARGS(hdr), 12968224b273SChuck Lever 12978224b273SChuck Lever TP_STRUCT__entry( 12988224b273SChuck Lever __field(dev_t, dev) 12998224b273SChuck Lever __field(u32, fhandle) 13008224b273SChuck Lever __field(u64, fileid) 13015bb2a7cbSTrond Myklebust __field(loff_t, offset) 13025bb2a7cbSTrond Myklebust __field(u32, count) 13038791545eSChuck Lever __field(unsigned long, stable) 13048224b273SChuck Lever ), 13058224b273SChuck Lever 13068224b273SChuck Lever TP_fast_assign( 13075bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 13088224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 13095bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 13105bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 13118224b273SChuck Lever 13125bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 13135bb2a7cbSTrond Myklebust __entry->count = hdr->args.count; 13145bb2a7cbSTrond Myklebust __entry->stable = hdr->args.stable; 13158224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 13168224b273SChuck Lever __entry->fileid = nfsi->fileid; 13175bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 13188224b273SChuck Lever ), 13198224b273SChuck Lever 13208224b273SChuck Lever TP_printk( 13218224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 13225bb2a7cbSTrond Myklebust "offset=%lld count=%u stable=%s", 13238224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 13248224b273SChuck Lever (unsigned long long)__entry->fileid, 13258224b273SChuck Lever __entry->fhandle, 13265bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->count, 13278791545eSChuck Lever show_nfs_stable_how(__entry->stable) 13288224b273SChuck Lever ) 13298224b273SChuck Lever ); 13308224b273SChuck Lever 13318224b273SChuck Lever TRACE_EVENT(nfs_writeback_done, 13328224b273SChuck Lever TP_PROTO( 13335bb2a7cbSTrond Myklebust const struct rpc_task *task, 13345bb2a7cbSTrond Myklebust const struct nfs_pgio_header *hdr 13358224b273SChuck Lever ), 13368224b273SChuck Lever 13375bb2a7cbSTrond Myklebust TP_ARGS(task, hdr), 13388224b273SChuck Lever 13398224b273SChuck Lever TP_STRUCT__entry( 13408224b273SChuck Lever __field(dev_t, dev) 13418224b273SChuck Lever __field(u32, fhandle) 13428224b273SChuck Lever __field(u64, fileid) 13435bb2a7cbSTrond Myklebust __field(loff_t, offset) 13445bb2a7cbSTrond Myklebust __field(u32, arg_count) 13455bb2a7cbSTrond Myklebust __field(u32, res_count) 13463fa5cbdcSTrond Myklebust __field(int, error) 13478791545eSChuck Lever __field(unsigned long, stable) 13485bb2a7cbSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 13498224b273SChuck Lever ), 13508224b273SChuck Lever 13518224b273SChuck Lever TP_fast_assign( 13525bb2a7cbSTrond Myklebust const struct inode *inode = hdr->inode; 13538224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 13545bb2a7cbSTrond Myklebust const struct nfs_fh *fh = hdr->args.fh ? 13555bb2a7cbSTrond Myklebust hdr->args.fh : &nfsi->fh; 13565bb2a7cbSTrond Myklebust const struct nfs_writeverf *verf = hdr->res.verf; 13578224b273SChuck Lever 13583fa5cbdcSTrond Myklebust __entry->error = task->tk_status; 13595bb2a7cbSTrond Myklebust __entry->offset = hdr->args.offset; 13605bb2a7cbSTrond Myklebust __entry->arg_count = hdr->args.count; 13615bb2a7cbSTrond Myklebust __entry->res_count = hdr->res.count; 13625bb2a7cbSTrond Myklebust __entry->stable = verf->committed; 13635bb2a7cbSTrond Myklebust memcpy(__entry->verifier, 13645bb2a7cbSTrond Myklebust &verf->verifier, 13655bb2a7cbSTrond Myklebust NFS4_VERIFIER_SIZE); 13668224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 13678224b273SChuck Lever __entry->fileid = nfsi->fileid; 13685bb2a7cbSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 13698224b273SChuck Lever ), 13708224b273SChuck Lever 13718224b273SChuck Lever TP_printk( 13723fa5cbdcSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 13733fa5cbdcSTrond Myklebust "offset=%lld count=%u res=%u stable=%s " 13743fa5cbdcSTrond Myklebust "verifier=%s", __entry->error, 13758224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 13768224b273SChuck Lever (unsigned long long)__entry->fileid, 13778224b273SChuck Lever __entry->fhandle, 13785bb2a7cbSTrond Myklebust (long long)__entry->offset, __entry->arg_count, 13793fa5cbdcSTrond Myklebust __entry->res_count, 13808791545eSChuck Lever show_nfs_stable_how(__entry->stable), 13818791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 13828224b273SChuck Lever ) 13838224b273SChuck Lever ); 13848224b273SChuck Lever 1385861e1671SChuck Lever DECLARE_EVENT_CLASS(nfs_page_error_class, 1386861e1671SChuck Lever TP_PROTO( 1387af887e43STrond Myklebust const struct inode *inode, 1388861e1671SChuck Lever const struct nfs_page *req, 1389861e1671SChuck Lever int error 1390861e1671SChuck Lever ), 1391861e1671SChuck Lever 1392af887e43STrond Myklebust TP_ARGS(inode, req, error), 1393861e1671SChuck Lever 1394861e1671SChuck Lever TP_STRUCT__entry( 1395af887e43STrond Myklebust __field(dev_t, dev) 1396af887e43STrond Myklebust __field(u32, fhandle) 1397af887e43STrond Myklebust __field(u64, fileid) 1398af887e43STrond Myklebust __field(loff_t, offset) 1399af887e43STrond Myklebust __field(unsigned int, count) 1400861e1671SChuck Lever __field(int, error) 1401861e1671SChuck Lever ), 1402861e1671SChuck Lever 1403861e1671SChuck Lever TP_fast_assign( 1404af887e43STrond Myklebust const struct nfs_inode *nfsi = NFS_I(inode); 1405af887e43STrond Myklebust __entry->dev = inode->i_sb->s_dev; 1406af887e43STrond Myklebust __entry->fileid = nfsi->fileid; 1407af887e43STrond Myklebust __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1408af887e43STrond Myklebust __entry->offset = req_offset(req); 1409af887e43STrond Myklebust __entry->count = req->wb_bytes; 1410861e1671SChuck Lever __entry->error = error; 1411861e1671SChuck Lever ), 1412861e1671SChuck Lever 1413861e1671SChuck Lever TP_printk( 1414af887e43STrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 1415af887e43STrond Myklebust "offset=%lld count=%u", __entry->error, 1416af887e43STrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 1417af887e43STrond Myklebust (unsigned long long)__entry->fileid, 1418af887e43STrond Myklebust __entry->fhandle, __entry->offset, 1419af887e43STrond Myklebust __entry->count 1420861e1671SChuck Lever ) 1421861e1671SChuck Lever ); 1422861e1671SChuck Lever 1423861e1671SChuck Lever #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1424861e1671SChuck Lever DEFINE_EVENT(nfs_page_error_class, name, \ 1425861e1671SChuck Lever TP_PROTO( \ 1426af887e43STrond Myklebust const struct inode *inode, \ 1427861e1671SChuck Lever const struct nfs_page *req, \ 1428861e1671SChuck Lever int error \ 1429861e1671SChuck Lever ), \ 1430af887e43STrond Myklebust TP_ARGS(inode, req, error)) 1431861e1671SChuck Lever 1432861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1433861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1434861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1435861e1671SChuck Lever 14368224b273SChuck Lever TRACE_EVENT(nfs_initiate_commit, 14378224b273SChuck Lever TP_PROTO( 14388224b273SChuck Lever const struct nfs_commit_data *data 14398224b273SChuck Lever ), 14408224b273SChuck Lever 14418224b273SChuck Lever TP_ARGS(data), 14428224b273SChuck Lever 14438224b273SChuck Lever TP_STRUCT__entry( 14448224b273SChuck Lever __field(dev_t, dev) 14458224b273SChuck Lever __field(u32, fhandle) 14468224b273SChuck Lever __field(u64, fileid) 14477bdd297eSTrond Myklebust __field(loff_t, offset) 14487bdd297eSTrond Myklebust __field(u32, count) 14498224b273SChuck Lever ), 14508224b273SChuck Lever 14518224b273SChuck Lever TP_fast_assign( 14528224b273SChuck Lever const struct inode *inode = data->inode; 14538224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 14547bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 14557bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 14568224b273SChuck Lever 14578224b273SChuck Lever __entry->offset = data->args.offset; 14588224b273SChuck Lever __entry->count = data->args.count; 14598224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 14608224b273SChuck Lever __entry->fileid = nfsi->fileid; 14617bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 14628224b273SChuck Lever ), 14638224b273SChuck Lever 14648224b273SChuck Lever TP_printk( 14658224b273SChuck Lever "fileid=%02x:%02x:%llu fhandle=0x%08x " 14667bdd297eSTrond Myklebust "offset=%lld count=%u", 14678224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 14688224b273SChuck Lever (unsigned long long)__entry->fileid, 14698224b273SChuck Lever __entry->fhandle, 14707bdd297eSTrond Myklebust (long long)__entry->offset, __entry->count 14718224b273SChuck Lever ) 14728224b273SChuck Lever ); 14738224b273SChuck Lever 14748224b273SChuck Lever TRACE_EVENT(nfs_commit_done, 14758224b273SChuck Lever TP_PROTO( 14767bdd297eSTrond Myklebust const struct rpc_task *task, 14778224b273SChuck Lever const struct nfs_commit_data *data 14788224b273SChuck Lever ), 14798224b273SChuck Lever 14807bdd297eSTrond Myklebust TP_ARGS(task, data), 14818224b273SChuck Lever 14828224b273SChuck Lever TP_STRUCT__entry( 14838224b273SChuck Lever __field(dev_t, dev) 14848224b273SChuck Lever __field(u32, fhandle) 14858224b273SChuck Lever __field(u64, fileid) 14867bdd297eSTrond Myklebust __field(loff_t, offset) 14873fa5cbdcSTrond Myklebust __field(int, error) 14888791545eSChuck Lever __field(unsigned long, stable) 14897bdd297eSTrond Myklebust __array(char, verifier, NFS4_VERIFIER_SIZE) 14908224b273SChuck Lever ), 14918224b273SChuck Lever 14928224b273SChuck Lever TP_fast_assign( 14938224b273SChuck Lever const struct inode *inode = data->inode; 14948224b273SChuck Lever const struct nfs_inode *nfsi = NFS_I(inode); 14957bdd297eSTrond Myklebust const struct nfs_fh *fh = data->args.fh ? 14967bdd297eSTrond Myklebust data->args.fh : &nfsi->fh; 14977bdd297eSTrond Myklebust const struct nfs_writeverf *verf = data->res.verf; 14988224b273SChuck Lever 14993fa5cbdcSTrond Myklebust __entry->error = task->tk_status; 15008224b273SChuck Lever __entry->offset = data->args.offset; 15017bdd297eSTrond Myklebust __entry->stable = verf->committed; 15027bdd297eSTrond Myklebust memcpy(__entry->verifier, 15037bdd297eSTrond Myklebust &verf->verifier, 15047bdd297eSTrond Myklebust NFS4_VERIFIER_SIZE); 15058224b273SChuck Lever __entry->dev = inode->i_sb->s_dev; 15068224b273SChuck Lever __entry->fileid = nfsi->fileid; 15077bdd297eSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 15088224b273SChuck Lever ), 15098224b273SChuck Lever 15108224b273SChuck Lever TP_printk( 15113fa5cbdcSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 15123fa5cbdcSTrond Myklebust "offset=%lld stable=%s verifier=%s", __entry->error, 15138224b273SChuck Lever MAJOR(__entry->dev), MINOR(__entry->dev), 15148224b273SChuck Lever (unsigned long long)__entry->fileid, 15158224b273SChuck Lever __entry->fhandle, 15163fa5cbdcSTrond Myklebust (long long)__entry->offset, 15178791545eSChuck Lever show_nfs_stable_how(__entry->stable), 15188791545eSChuck Lever show_nfs4_verifier(__entry->verifier) 15198224b273SChuck Lever ) 15208224b273SChuck Lever ); 15218224b273SChuck Lever 15228efc4bbeSJeff Layton #define nfs_show_direct_req_flags(v) \ 15238efc4bbeSJeff Layton __print_flags(v, "|", \ 15248efc4bbeSJeff Layton { NFS_ODIRECT_DO_COMMIT, "DO_COMMIT" }, \ 15258efc4bbeSJeff Layton { NFS_ODIRECT_RESCHED_WRITES, "RESCHED_WRITES" }, \ 15268efc4bbeSJeff Layton { NFS_ODIRECT_SHOULD_DIRTY, "SHOULD DIRTY" }, \ 15278efc4bbeSJeff Layton { NFS_ODIRECT_DONE, "DONE" } ) 15288efc4bbeSJeff Layton 15298efc4bbeSJeff Layton DECLARE_EVENT_CLASS(nfs_direct_req_class, 15308efc4bbeSJeff Layton TP_PROTO( 15318efc4bbeSJeff Layton const struct nfs_direct_req *dreq 15328efc4bbeSJeff Layton ), 15338efc4bbeSJeff Layton 15348efc4bbeSJeff Layton TP_ARGS(dreq), 15358efc4bbeSJeff Layton 15368efc4bbeSJeff Layton TP_STRUCT__entry( 15378efc4bbeSJeff Layton __field(dev_t, dev) 15388efc4bbeSJeff Layton __field(u64, fileid) 15398efc4bbeSJeff Layton __field(u32, fhandle) 1540b313eb91STrond Myklebust __field(loff_t, offset) 15418efc4bbeSJeff Layton __field(ssize_t, count) 15428efc4bbeSJeff Layton __field(ssize_t, bytes_left) 15438efc4bbeSJeff Layton __field(ssize_t, error) 15448efc4bbeSJeff Layton __field(int, flags) 15458efc4bbeSJeff Layton ), 15468efc4bbeSJeff Layton 15478efc4bbeSJeff Layton TP_fast_assign( 15488efc4bbeSJeff Layton const struct inode *inode = dreq->inode; 15498efc4bbeSJeff Layton const struct nfs_inode *nfsi = NFS_I(inode); 15508efc4bbeSJeff Layton const struct nfs_fh *fh = &nfsi->fh; 15518efc4bbeSJeff Layton 15528efc4bbeSJeff Layton __entry->dev = inode->i_sb->s_dev; 15538efc4bbeSJeff Layton __entry->fileid = nfsi->fileid; 15548efc4bbeSJeff Layton __entry->fhandle = nfs_fhandle_hash(fh); 1555b313eb91STrond Myklebust __entry->offset = dreq->io_start; 15568efc4bbeSJeff Layton __entry->count = dreq->count; 15578efc4bbeSJeff Layton __entry->bytes_left = dreq->bytes_left; 15588efc4bbeSJeff Layton __entry->error = dreq->error; 15598efc4bbeSJeff Layton __entry->flags = dreq->flags; 15608efc4bbeSJeff Layton ), 15618efc4bbeSJeff Layton 15628efc4bbeSJeff Layton TP_printk( 1563b313eb91STrond Myklebust "error=%zd fileid=%02x:%02x:%llu fhandle=0x%08x " 1564b313eb91STrond Myklebust "offset=%lld count=%zd bytes_left=%zd flags=%s", 1565b313eb91STrond Myklebust __entry->error, MAJOR(__entry->dev), 1566b313eb91STrond Myklebust MINOR(__entry->dev), 15678efc4bbeSJeff Layton (unsigned long long)__entry->fileid, 1568b313eb91STrond Myklebust __entry->fhandle, __entry->offset, 1569b313eb91STrond Myklebust __entry->count, __entry->bytes_left, 1570b313eb91STrond Myklebust nfs_show_direct_req_flags(__entry->flags) 15718efc4bbeSJeff Layton ) 15728efc4bbeSJeff Layton ); 15738efc4bbeSJeff Layton 15748efc4bbeSJeff Layton #define DEFINE_NFS_DIRECT_REQ_EVENT(name) \ 15758efc4bbeSJeff Layton DEFINE_EVENT(nfs_direct_req_class, name, \ 15768efc4bbeSJeff Layton TP_PROTO( \ 15778efc4bbeSJeff Layton const struct nfs_direct_req *dreq \ 15788efc4bbeSJeff Layton ), \ 15798efc4bbeSJeff Layton TP_ARGS(dreq)) 15808efc4bbeSJeff Layton 15818efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_commit_complete); 15828efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_resched_write); 15838efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_complete); 15848efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_completion); 15858efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_schedule_iovec); 15868efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_reschedule_io); 15878efc4bbeSJeff Layton 158843622eabSTrond Myklebust TRACE_EVENT(nfs_fh_to_dentry, 158943622eabSTrond Myklebust TP_PROTO( 159043622eabSTrond Myklebust const struct super_block *sb, 159143622eabSTrond Myklebust const struct nfs_fh *fh, 159243622eabSTrond Myklebust u64 fileid, 159343622eabSTrond Myklebust int error 159443622eabSTrond Myklebust ), 159543622eabSTrond Myklebust 159643622eabSTrond Myklebust TP_ARGS(sb, fh, fileid, error), 159743622eabSTrond Myklebust 159843622eabSTrond Myklebust TP_STRUCT__entry( 159943622eabSTrond Myklebust __field(int, error) 160043622eabSTrond Myklebust __field(dev_t, dev) 160143622eabSTrond Myklebust __field(u32, fhandle) 160243622eabSTrond Myklebust __field(u64, fileid) 160343622eabSTrond Myklebust ), 160443622eabSTrond Myklebust 160543622eabSTrond Myklebust TP_fast_assign( 160643622eabSTrond Myklebust __entry->error = error; 160743622eabSTrond Myklebust __entry->dev = sb->s_dev; 160843622eabSTrond Myklebust __entry->fileid = fileid; 160943622eabSTrond Myklebust __entry->fhandle = nfs_fhandle_hash(fh); 161043622eabSTrond Myklebust ), 161143622eabSTrond Myklebust 161243622eabSTrond Myklebust TP_printk( 161343622eabSTrond Myklebust "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 161443622eabSTrond Myklebust __entry->error, 161543622eabSTrond Myklebust MAJOR(__entry->dev), MINOR(__entry->dev), 161643622eabSTrond Myklebust (unsigned long long)__entry->fileid, 161743622eabSTrond Myklebust __entry->fhandle 161843622eabSTrond Myklebust ) 161943622eabSTrond Myklebust ); 162043622eabSTrond Myklebust 162133ce83efSChuck Lever TRACE_EVENT(nfs_mount_assign, 162233ce83efSChuck Lever TP_PROTO( 162333ce83efSChuck Lever const char *option, 162433ce83efSChuck Lever const char *value 162533ce83efSChuck Lever ), 162633ce83efSChuck Lever 162733ce83efSChuck Lever TP_ARGS(option, value), 162833ce83efSChuck Lever 162933ce83efSChuck Lever TP_STRUCT__entry( 163033ce83efSChuck Lever __string(option, option) 163133ce83efSChuck Lever __string(value, value) 163233ce83efSChuck Lever ), 163333ce83efSChuck Lever 163433ce83efSChuck Lever TP_fast_assign( 163533ce83efSChuck Lever __assign_str(option, option); 163633ce83efSChuck Lever __assign_str(value, value); 163733ce83efSChuck Lever ), 163833ce83efSChuck Lever 163933ce83efSChuck Lever TP_printk("option %s=%s", 164033ce83efSChuck Lever __get_str(option), __get_str(value) 164133ce83efSChuck Lever ) 164233ce83efSChuck Lever ); 164333ce83efSChuck Lever 164433ce83efSChuck Lever TRACE_EVENT(nfs_mount_option, 164533ce83efSChuck Lever TP_PROTO( 164633ce83efSChuck Lever const struct fs_parameter *param 164733ce83efSChuck Lever ), 164833ce83efSChuck Lever 164933ce83efSChuck Lever TP_ARGS(param), 165033ce83efSChuck Lever 165133ce83efSChuck Lever TP_STRUCT__entry( 165233ce83efSChuck Lever __string(option, param->key) 165333ce83efSChuck Lever ), 165433ce83efSChuck Lever 165533ce83efSChuck Lever TP_fast_assign( 165633ce83efSChuck Lever __assign_str(option, param->key); 165733ce83efSChuck Lever ), 165833ce83efSChuck Lever 165933ce83efSChuck Lever TP_printk("option %s", __get_str(option)) 166033ce83efSChuck Lever ); 166133ce83efSChuck Lever 166233ce83efSChuck Lever TRACE_EVENT(nfs_mount_path, 166333ce83efSChuck Lever TP_PROTO( 166433ce83efSChuck Lever const char *path 166533ce83efSChuck Lever ), 166633ce83efSChuck Lever 166733ce83efSChuck Lever TP_ARGS(path), 166833ce83efSChuck Lever 166933ce83efSChuck Lever TP_STRUCT__entry( 167033ce83efSChuck Lever __string(path, path) 167133ce83efSChuck Lever ), 167233ce83efSChuck Lever 167333ce83efSChuck Lever TP_fast_assign( 167433ce83efSChuck Lever __assign_str(path, path); 167533ce83efSChuck Lever ), 167633ce83efSChuck Lever 167733ce83efSChuck Lever TP_printk("path='%s'", __get_str(path)) 167833ce83efSChuck Lever ); 167933ce83efSChuck Lever 16803d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs_xdr_event, 1681f23f6584SChuck Lever TP_PROTO( 168262a92ba9SChuck Lever const struct xdr_stream *xdr, 1683f23f6584SChuck Lever int error 1684f23f6584SChuck Lever ), 1685f23f6584SChuck Lever 168662a92ba9SChuck Lever TP_ARGS(xdr, error), 1687f23f6584SChuck Lever 1688f23f6584SChuck Lever TP_STRUCT__entry( 168962a92ba9SChuck Lever __field(unsigned int, task_id) 169062a92ba9SChuck Lever __field(unsigned int, client_id) 169162a92ba9SChuck Lever __field(u32, xid) 16925be59458SChuck Lever __field(int, version) 169338a638a7SChuck Lever __field(unsigned long, error) 16945be59458SChuck Lever __string(program, 16955be59458SChuck Lever xdr->rqst->rq_task->tk_client->cl_program->name) 16965be59458SChuck Lever __string(procedure, 16975be59458SChuck Lever xdr->rqst->rq_task->tk_msg.rpc_proc->p_name) 1698f23f6584SChuck Lever ), 1699f23f6584SChuck Lever 1700f23f6584SChuck Lever TP_fast_assign( 170162a92ba9SChuck Lever const struct rpc_rqst *rqstp = xdr->rqst; 170262a92ba9SChuck Lever const struct rpc_task *task = rqstp->rq_task; 170362a92ba9SChuck Lever 170462a92ba9SChuck Lever __entry->task_id = task->tk_pid; 170562a92ba9SChuck Lever __entry->client_id = task->tk_client->cl_clid; 170662a92ba9SChuck Lever __entry->xid = be32_to_cpu(rqstp->rq_xid); 17075be59458SChuck Lever __entry->version = task->tk_client->cl_vers; 1708f23f6584SChuck Lever __entry->error = error; 17095be59458SChuck Lever __assign_str(program, 171078c14b38SJoe Perches task->tk_client->cl_program->name); 171178c14b38SJoe Perches __assign_str(procedure, task->tk_msg.rpc_proc->p_name); 1712f23f6584SChuck Lever ), 1713f23f6584SChuck Lever 1714b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 1715b4776a34SChuck Lever " xid=0x%08x %sv%d %s error=%ld (%s)", 171662a92ba9SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 17175be59458SChuck Lever __get_str(program), __entry->version, 17185be59458SChuck Lever __get_str(procedure), -__entry->error, 17198791545eSChuck Lever show_nfs_status(__entry->error) 1720f23f6584SChuck Lever ) 1721f23f6584SChuck Lever ); 17223d66bae1STrond Myklebust #define DEFINE_NFS_XDR_EVENT(name) \ 17233d66bae1STrond Myklebust DEFINE_EVENT(nfs_xdr_event, name, \ 17243d66bae1STrond Myklebust TP_PROTO( \ 17253d66bae1STrond Myklebust const struct xdr_stream *xdr, \ 17263d66bae1STrond Myklebust int error \ 17273d66bae1STrond Myklebust ), \ 17283d66bae1STrond Myklebust TP_ARGS(xdr, error)) 17293d66bae1STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_status); 1730eb3d58c6STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle); 1731f23f6584SChuck Lever 1732f4ce1299STrond Myklebust #endif /* _TRACE_NFS_H */ 1733f4ce1299STrond Myklebust 1734f4ce1299STrond Myklebust #undef TRACE_INCLUDE_PATH 1735f4ce1299STrond Myklebust #define TRACE_INCLUDE_PATH . 1736f4ce1299STrond Myklebust #define TRACE_INCLUDE_FILE nfstrace 1737f4ce1299STrond Myklebust /* This part must be outside protection */ 1738f4ce1299STrond Myklebust #include <trace/define_trace.h> 1739