162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#undef TRACE_SYSTEM 662306a36Sopenharmony_ci#define TRACE_SYSTEM nfs 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ) 962306a36Sopenharmony_ci#define _TRACE_NFS_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/tracepoint.h> 1262306a36Sopenharmony_ci#include <linux/iversion.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <trace/misc/fs.h> 1562306a36Sopenharmony_ci#include <trace/misc/nfs.h> 1662306a36Sopenharmony_ci#include <trace/misc/sunrpc.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define nfs_show_cache_validity(v) \ 1962306a36Sopenharmony_ci __print_flags(v, "|", \ 2062306a36Sopenharmony_ci { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \ 2162306a36Sopenharmony_ci { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \ 2262306a36Sopenharmony_ci { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \ 2362306a36Sopenharmony_ci { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \ 2462306a36Sopenharmony_ci { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \ 2562306a36Sopenharmony_ci { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \ 2662306a36Sopenharmony_ci { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \ 2762306a36Sopenharmony_ci { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \ 2862306a36Sopenharmony_ci { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \ 2962306a36Sopenharmony_ci { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \ 3062306a36Sopenharmony_ci { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \ 3162306a36Sopenharmony_ci { NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \ 3262306a36Sopenharmony_ci { NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \ 3362306a36Sopenharmony_ci { NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \ 3462306a36Sopenharmony_ci { NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \ 3562306a36Sopenharmony_ci { NFS_INO_INVALID_MODE, "INVALID_MODE" }) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define nfs_show_nfsi_flags(v) \ 3862306a36Sopenharmony_ci __print_flags(v, "|", \ 3962306a36Sopenharmony_ci { BIT(NFS_INO_STALE), "STALE" }, \ 4062306a36Sopenharmony_ci { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \ 4162306a36Sopenharmony_ci { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \ 4262306a36Sopenharmony_ci { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \ 4362306a36Sopenharmony_ci { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \ 4462306a36Sopenharmony_ci { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 4562306a36Sopenharmony_ci { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_inode_event, 4862306a36Sopenharmony_ci TP_PROTO( 4962306a36Sopenharmony_ci const struct inode *inode 5062306a36Sopenharmony_ci ), 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci TP_ARGS(inode), 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci TP_STRUCT__entry( 5562306a36Sopenharmony_ci __field(dev_t, dev) 5662306a36Sopenharmony_ci __field(u32, fhandle) 5762306a36Sopenharmony_ci __field(u64, fileid) 5862306a36Sopenharmony_ci __field(u64, version) 5962306a36Sopenharmony_ci ), 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci TP_fast_assign( 6262306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 6362306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 6462306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 6562306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 6662306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 6762306a36Sopenharmony_ci ), 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci TP_printk( 7062306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 7162306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 7262306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 7362306a36Sopenharmony_ci __entry->fhandle, 7462306a36Sopenharmony_ci (unsigned long long)__entry->version 7562306a36Sopenharmony_ci ) 7662306a36Sopenharmony_ci); 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_inode_event_done, 7962306a36Sopenharmony_ci TP_PROTO( 8062306a36Sopenharmony_ci const struct inode *inode, 8162306a36Sopenharmony_ci int error 8262306a36Sopenharmony_ci ), 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci TP_ARGS(inode, error), 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci TP_STRUCT__entry( 8762306a36Sopenharmony_ci __field(unsigned long, error) 8862306a36Sopenharmony_ci __field(dev_t, dev) 8962306a36Sopenharmony_ci __field(u32, fhandle) 9062306a36Sopenharmony_ci __field(unsigned char, type) 9162306a36Sopenharmony_ci __field(u64, fileid) 9262306a36Sopenharmony_ci __field(u64, version) 9362306a36Sopenharmony_ci __field(loff_t, size) 9462306a36Sopenharmony_ci __field(unsigned long, nfsi_flags) 9562306a36Sopenharmony_ci __field(unsigned long, cache_validity) 9662306a36Sopenharmony_ci ), 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci TP_fast_assign( 9962306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 10062306a36Sopenharmony_ci __entry->error = error < 0 ? -error : 0; 10162306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 10262306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 10362306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 10462306a36Sopenharmony_ci __entry->type = nfs_umode_to_dtype(inode->i_mode); 10562306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 10662306a36Sopenharmony_ci __entry->size = i_size_read(inode); 10762306a36Sopenharmony_ci __entry->nfsi_flags = nfsi->flags; 10862306a36Sopenharmony_ci __entry->cache_validity = nfsi->cache_validity; 10962306a36Sopenharmony_ci ), 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci TP_printk( 11262306a36Sopenharmony_ci "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 11362306a36Sopenharmony_ci "type=%u (%s) version=%llu size=%lld " 11462306a36Sopenharmony_ci "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)", 11562306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 11662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 11762306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 11862306a36Sopenharmony_ci __entry->fhandle, 11962306a36Sopenharmony_ci __entry->type, 12062306a36Sopenharmony_ci show_fs_dirent_type(__entry->type), 12162306a36Sopenharmony_ci (unsigned long long)__entry->version, 12262306a36Sopenharmony_ci (long long)__entry->size, 12362306a36Sopenharmony_ci __entry->cache_validity, 12462306a36Sopenharmony_ci nfs_show_cache_validity(__entry->cache_validity), 12562306a36Sopenharmony_ci __entry->nfsi_flags, 12662306a36Sopenharmony_ci nfs_show_nfsi_flags(__entry->nfsi_flags) 12762306a36Sopenharmony_ci ) 12862306a36Sopenharmony_ci); 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci#define DEFINE_NFS_INODE_EVENT(name) \ 13162306a36Sopenharmony_ci DEFINE_EVENT(nfs_inode_event, name, \ 13262306a36Sopenharmony_ci TP_PROTO( \ 13362306a36Sopenharmony_ci const struct inode *inode \ 13462306a36Sopenharmony_ci ), \ 13562306a36Sopenharmony_ci TP_ARGS(inode)) 13662306a36Sopenharmony_ci#define DEFINE_NFS_INODE_EVENT_DONE(name) \ 13762306a36Sopenharmony_ci DEFINE_EVENT(nfs_inode_event_done, name, \ 13862306a36Sopenharmony_ci TP_PROTO( \ 13962306a36Sopenharmony_ci const struct inode *inode, \ 14062306a36Sopenharmony_ci int error \ 14162306a36Sopenharmony_ci ), \ 14262306a36Sopenharmony_ci TP_ARGS(inode, error)) 14362306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 14462306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 14562306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 14662306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 14762306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 14862306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 14962306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 15062306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 15162306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 15262306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 15362306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 15462306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 15562306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 15662306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 15762306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 15862306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_access_enter); 15962306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_invalid); 16062306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT(nfs_readdir_force_readdirplus); 16162306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done); 16262306a36Sopenharmony_ciDEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done); 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ciTRACE_EVENT(nfs_access_exit, 16562306a36Sopenharmony_ci TP_PROTO( 16662306a36Sopenharmony_ci const struct inode *inode, 16762306a36Sopenharmony_ci unsigned int mask, 16862306a36Sopenharmony_ci unsigned int permitted, 16962306a36Sopenharmony_ci int error 17062306a36Sopenharmony_ci ), 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci TP_ARGS(inode, mask, permitted, error), 17362306a36Sopenharmony_ci 17462306a36Sopenharmony_ci TP_STRUCT__entry( 17562306a36Sopenharmony_ci __field(unsigned long, error) 17662306a36Sopenharmony_ci __field(dev_t, dev) 17762306a36Sopenharmony_ci __field(u32, fhandle) 17862306a36Sopenharmony_ci __field(unsigned char, type) 17962306a36Sopenharmony_ci __field(u64, fileid) 18062306a36Sopenharmony_ci __field(u64, version) 18162306a36Sopenharmony_ci __field(loff_t, size) 18262306a36Sopenharmony_ci __field(unsigned long, nfsi_flags) 18362306a36Sopenharmony_ci __field(unsigned long, cache_validity) 18462306a36Sopenharmony_ci __field(unsigned int, mask) 18562306a36Sopenharmony_ci __field(unsigned int, permitted) 18662306a36Sopenharmony_ci ), 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci TP_fast_assign( 18962306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 19062306a36Sopenharmony_ci __entry->error = error < 0 ? -error : 0; 19162306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 19262306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 19362306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 19462306a36Sopenharmony_ci __entry->type = nfs_umode_to_dtype(inode->i_mode); 19562306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 19662306a36Sopenharmony_ci __entry->size = i_size_read(inode); 19762306a36Sopenharmony_ci __entry->nfsi_flags = nfsi->flags; 19862306a36Sopenharmony_ci __entry->cache_validity = nfsi->cache_validity; 19962306a36Sopenharmony_ci __entry->mask = mask; 20062306a36Sopenharmony_ci __entry->permitted = permitted; 20162306a36Sopenharmony_ci ), 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci TP_printk( 20462306a36Sopenharmony_ci "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 20562306a36Sopenharmony_ci "type=%u (%s) version=%llu size=%lld " 20662306a36Sopenharmony_ci "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) " 20762306a36Sopenharmony_ci "mask=0x%x permitted=0x%x", 20862306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 20962306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 21062306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 21162306a36Sopenharmony_ci __entry->fhandle, 21262306a36Sopenharmony_ci __entry->type, 21362306a36Sopenharmony_ci show_fs_dirent_type(__entry->type), 21462306a36Sopenharmony_ci (unsigned long long)__entry->version, 21562306a36Sopenharmony_ci (long long)__entry->size, 21662306a36Sopenharmony_ci __entry->cache_validity, 21762306a36Sopenharmony_ci nfs_show_cache_validity(__entry->cache_validity), 21862306a36Sopenharmony_ci __entry->nfsi_flags, 21962306a36Sopenharmony_ci nfs_show_nfsi_flags(__entry->nfsi_flags), 22062306a36Sopenharmony_ci __entry->mask, __entry->permitted 22162306a36Sopenharmony_ci ) 22262306a36Sopenharmony_ci); 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_update_size_class, 22562306a36Sopenharmony_ci TP_PROTO( 22662306a36Sopenharmony_ci const struct inode *inode, 22762306a36Sopenharmony_ci loff_t new_size 22862306a36Sopenharmony_ci ), 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci TP_ARGS(inode, new_size), 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci TP_STRUCT__entry( 23362306a36Sopenharmony_ci __field(dev_t, dev) 23462306a36Sopenharmony_ci __field(u32, fhandle) 23562306a36Sopenharmony_ci __field(u64, fileid) 23662306a36Sopenharmony_ci __field(u64, version) 23762306a36Sopenharmony_ci __field(loff_t, cur_size) 23862306a36Sopenharmony_ci __field(loff_t, new_size) 23962306a36Sopenharmony_ci ), 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci TP_fast_assign( 24262306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 24562306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 24662306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 24762306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 24862306a36Sopenharmony_ci __entry->cur_size = i_size_read(inode); 24962306a36Sopenharmony_ci __entry->new_size = new_size; 25062306a36Sopenharmony_ci ), 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci TP_printk( 25362306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld", 25462306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 25562306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 25662306a36Sopenharmony_ci __entry->fhandle, __entry->version, 25762306a36Sopenharmony_ci __entry->cur_size, __entry->new_size 25862306a36Sopenharmony_ci ) 25962306a36Sopenharmony_ci); 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci#define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \ 26262306a36Sopenharmony_ci DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \ 26362306a36Sopenharmony_ci TP_PROTO( \ 26462306a36Sopenharmony_ci const struct inode *inode, \ 26562306a36Sopenharmony_ci loff_t new_size \ 26662306a36Sopenharmony_ci ), \ 26762306a36Sopenharmony_ci TP_ARGS(inode, new_size)) 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ciDEFINE_NFS_UPDATE_SIZE_EVENT(truncate); 27062306a36Sopenharmony_ciDEFINE_NFS_UPDATE_SIZE_EVENT(wcc); 27162306a36Sopenharmony_ciDEFINE_NFS_UPDATE_SIZE_EVENT(update); 27262306a36Sopenharmony_ciDEFINE_NFS_UPDATE_SIZE_EVENT(grow); 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_inode_range_event, 27562306a36Sopenharmony_ci TP_PROTO( 27662306a36Sopenharmony_ci const struct inode *inode, 27762306a36Sopenharmony_ci loff_t range_start, 27862306a36Sopenharmony_ci loff_t range_end 27962306a36Sopenharmony_ci ), 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ci TP_ARGS(inode, range_start, range_end), 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci TP_STRUCT__entry( 28462306a36Sopenharmony_ci __field(dev_t, dev) 28562306a36Sopenharmony_ci __field(u32, fhandle) 28662306a36Sopenharmony_ci __field(u64, fileid) 28762306a36Sopenharmony_ci __field(u64, version) 28862306a36Sopenharmony_ci __field(loff_t, range_start) 28962306a36Sopenharmony_ci __field(loff_t, range_end) 29062306a36Sopenharmony_ci ), 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci TP_fast_assign( 29362306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 29662306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 29762306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 29862306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 29962306a36Sopenharmony_ci __entry->range_start = range_start; 30062306a36Sopenharmony_ci __entry->range_end = range_end; 30162306a36Sopenharmony_ci ), 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci TP_printk( 30462306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 30562306a36Sopenharmony_ci "range=[%lld, %lld]", 30662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 30762306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 30862306a36Sopenharmony_ci __entry->fhandle, __entry->version, 30962306a36Sopenharmony_ci __entry->range_start, __entry->range_end 31062306a36Sopenharmony_ci ) 31162306a36Sopenharmony_ci); 31262306a36Sopenharmony_ci 31362306a36Sopenharmony_ci#define DEFINE_NFS_INODE_RANGE_EVENT(name) \ 31462306a36Sopenharmony_ci DEFINE_EVENT(nfs_inode_range_event, name, \ 31562306a36Sopenharmony_ci TP_PROTO( \ 31662306a36Sopenharmony_ci const struct inode *inode, \ 31762306a36Sopenharmony_ci loff_t range_start, \ 31862306a36Sopenharmony_ci loff_t range_end \ 31962306a36Sopenharmony_ci ), \ 32062306a36Sopenharmony_ci TP_ARGS(inode, range_start, range_end)) 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ciDEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range); 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_readdir_event, 32562306a36Sopenharmony_ci TP_PROTO( 32662306a36Sopenharmony_ci const struct file *file, 32762306a36Sopenharmony_ci const __be32 *verifier, 32862306a36Sopenharmony_ci u64 cookie, 32962306a36Sopenharmony_ci pgoff_t page_index, 33062306a36Sopenharmony_ci unsigned int dtsize 33162306a36Sopenharmony_ci ), 33262306a36Sopenharmony_ci 33362306a36Sopenharmony_ci TP_ARGS(file, verifier, cookie, page_index, dtsize), 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci TP_STRUCT__entry( 33662306a36Sopenharmony_ci __field(dev_t, dev) 33762306a36Sopenharmony_ci __field(u32, fhandle) 33862306a36Sopenharmony_ci __field(u64, fileid) 33962306a36Sopenharmony_ci __field(u64, version) 34062306a36Sopenharmony_ci __array(char, verifier, NFS4_VERIFIER_SIZE) 34162306a36Sopenharmony_ci __field(u64, cookie) 34262306a36Sopenharmony_ci __field(pgoff_t, index) 34362306a36Sopenharmony_ci __field(unsigned int, dtsize) 34462306a36Sopenharmony_ci ), 34562306a36Sopenharmony_ci 34662306a36Sopenharmony_ci TP_fast_assign( 34762306a36Sopenharmony_ci const struct inode *dir = file_inode(file); 34862306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(dir); 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 35162306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 35262306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 35362306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(dir); 35462306a36Sopenharmony_ci if (cookie != 0) 35562306a36Sopenharmony_ci memcpy(__entry->verifier, verifier, 35662306a36Sopenharmony_ci NFS4_VERIFIER_SIZE); 35762306a36Sopenharmony_ci else 35862306a36Sopenharmony_ci memset(__entry->verifier, 0, 35962306a36Sopenharmony_ci NFS4_VERIFIER_SIZE); 36062306a36Sopenharmony_ci __entry->cookie = cookie; 36162306a36Sopenharmony_ci __entry->index = page_index; 36262306a36Sopenharmony_ci __entry->dtsize = dtsize; 36362306a36Sopenharmony_ci ), 36462306a36Sopenharmony_ci 36562306a36Sopenharmony_ci TP_printk( 36662306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 36762306a36Sopenharmony_ci "cookie=%s:0x%llx cache_index=%lu dtsize=%u", 36862306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 36962306a36Sopenharmony_ci (unsigned long long)__entry->fileid, __entry->fhandle, 37062306a36Sopenharmony_ci __entry->version, show_nfs4_verifier(__entry->verifier), 37162306a36Sopenharmony_ci (unsigned long long)__entry->cookie, __entry->index, 37262306a36Sopenharmony_ci __entry->dtsize 37362306a36Sopenharmony_ci ) 37462306a36Sopenharmony_ci); 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci#define DEFINE_NFS_READDIR_EVENT(name) \ 37762306a36Sopenharmony_ci DEFINE_EVENT(nfs_readdir_event, name, \ 37862306a36Sopenharmony_ci TP_PROTO( \ 37962306a36Sopenharmony_ci const struct file *file, \ 38062306a36Sopenharmony_ci const __be32 *verifier, \ 38162306a36Sopenharmony_ci u64 cookie, \ 38262306a36Sopenharmony_ci pgoff_t page_index, \ 38362306a36Sopenharmony_ci unsigned int dtsize \ 38462306a36Sopenharmony_ci ), \ 38562306a36Sopenharmony_ci TP_ARGS(file, verifier, cookie, page_index, dtsize)) 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_ciDEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill); 38862306a36Sopenharmony_ciDEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached); 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_lookup_event, 39162306a36Sopenharmony_ci TP_PROTO( 39262306a36Sopenharmony_ci const struct inode *dir, 39362306a36Sopenharmony_ci const struct dentry *dentry, 39462306a36Sopenharmony_ci unsigned int flags 39562306a36Sopenharmony_ci ), 39662306a36Sopenharmony_ci 39762306a36Sopenharmony_ci TP_ARGS(dir, dentry, flags), 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ci TP_STRUCT__entry( 40062306a36Sopenharmony_ci __field(unsigned long, flags) 40162306a36Sopenharmony_ci __field(dev_t, dev) 40262306a36Sopenharmony_ci __field(u64, dir) 40362306a36Sopenharmony_ci __string(name, dentry->d_name.name) 40462306a36Sopenharmony_ci ), 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci TP_fast_assign( 40762306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 40862306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 40962306a36Sopenharmony_ci __entry->flags = flags; 41062306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 41162306a36Sopenharmony_ci ), 41262306a36Sopenharmony_ci 41362306a36Sopenharmony_ci TP_printk( 41462306a36Sopenharmony_ci "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 41562306a36Sopenharmony_ci __entry->flags, 41662306a36Sopenharmony_ci show_fs_lookup_flags(__entry->flags), 41762306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 41862306a36Sopenharmony_ci (unsigned long long)__entry->dir, 41962306a36Sopenharmony_ci __get_str(name) 42062306a36Sopenharmony_ci ) 42162306a36Sopenharmony_ci); 42262306a36Sopenharmony_ci 42362306a36Sopenharmony_ci#define DEFINE_NFS_LOOKUP_EVENT(name) \ 42462306a36Sopenharmony_ci DEFINE_EVENT(nfs_lookup_event, name, \ 42562306a36Sopenharmony_ci TP_PROTO( \ 42662306a36Sopenharmony_ci const struct inode *dir, \ 42762306a36Sopenharmony_ci const struct dentry *dentry, \ 42862306a36Sopenharmony_ci unsigned int flags \ 42962306a36Sopenharmony_ci ), \ 43062306a36Sopenharmony_ci TP_ARGS(dir, dentry, flags)) 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_lookup_event_done, 43362306a36Sopenharmony_ci TP_PROTO( 43462306a36Sopenharmony_ci const struct inode *dir, 43562306a36Sopenharmony_ci const struct dentry *dentry, 43662306a36Sopenharmony_ci unsigned int flags, 43762306a36Sopenharmony_ci int error 43862306a36Sopenharmony_ci ), 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_ci TP_ARGS(dir, dentry, flags, error), 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci TP_STRUCT__entry( 44362306a36Sopenharmony_ci __field(unsigned long, error) 44462306a36Sopenharmony_ci __field(unsigned long, flags) 44562306a36Sopenharmony_ci __field(dev_t, dev) 44662306a36Sopenharmony_ci __field(u64, dir) 44762306a36Sopenharmony_ci __string(name, dentry->d_name.name) 44862306a36Sopenharmony_ci ), 44962306a36Sopenharmony_ci 45062306a36Sopenharmony_ci TP_fast_assign( 45162306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 45262306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 45362306a36Sopenharmony_ci __entry->error = error < 0 ? -error : 0; 45462306a36Sopenharmony_ci __entry->flags = flags; 45562306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 45662306a36Sopenharmony_ci ), 45762306a36Sopenharmony_ci 45862306a36Sopenharmony_ci TP_printk( 45962306a36Sopenharmony_ci "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 46062306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 46162306a36Sopenharmony_ci __entry->flags, 46262306a36Sopenharmony_ci show_fs_lookup_flags(__entry->flags), 46362306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 46462306a36Sopenharmony_ci (unsigned long long)__entry->dir, 46562306a36Sopenharmony_ci __get_str(name) 46662306a36Sopenharmony_ci ) 46762306a36Sopenharmony_ci); 46862306a36Sopenharmony_ci 46962306a36Sopenharmony_ci#define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 47062306a36Sopenharmony_ci DEFINE_EVENT(nfs_lookup_event_done, name, \ 47162306a36Sopenharmony_ci TP_PROTO( \ 47262306a36Sopenharmony_ci const struct inode *dir, \ 47362306a36Sopenharmony_ci const struct dentry *dentry, \ 47462306a36Sopenharmony_ci unsigned int flags, \ 47562306a36Sopenharmony_ci int error \ 47662306a36Sopenharmony_ci ), \ 47762306a36Sopenharmony_ci TP_ARGS(dir, dentry, flags, error)) 47862306a36Sopenharmony_ci 47962306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 48062306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 48162306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 48262306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 48362306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup); 48462306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed); 48562306a36Sopenharmony_ciDEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate); 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ciTRACE_EVENT(nfs_atomic_open_enter, 48862306a36Sopenharmony_ci TP_PROTO( 48962306a36Sopenharmony_ci const struct inode *dir, 49062306a36Sopenharmony_ci const struct nfs_open_context *ctx, 49162306a36Sopenharmony_ci unsigned int flags 49262306a36Sopenharmony_ci ), 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci TP_ARGS(dir, ctx, flags), 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_ci TP_STRUCT__entry( 49762306a36Sopenharmony_ci __field(unsigned long, flags) 49862306a36Sopenharmony_ci __field(unsigned long, fmode) 49962306a36Sopenharmony_ci __field(dev_t, dev) 50062306a36Sopenharmony_ci __field(u64, dir) 50162306a36Sopenharmony_ci __string(name, ctx->dentry->d_name.name) 50262306a36Sopenharmony_ci ), 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_ci TP_fast_assign( 50562306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 50662306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 50762306a36Sopenharmony_ci __entry->flags = flags; 50862306a36Sopenharmony_ci __entry->fmode = (__force unsigned long)ctx->mode; 50962306a36Sopenharmony_ci __assign_str(name, ctx->dentry->d_name.name); 51062306a36Sopenharmony_ci ), 51162306a36Sopenharmony_ci 51262306a36Sopenharmony_ci TP_printk( 51362306a36Sopenharmony_ci "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 51462306a36Sopenharmony_ci __entry->flags, 51562306a36Sopenharmony_ci show_fs_fcntl_open_flags(__entry->flags), 51662306a36Sopenharmony_ci show_fs_fmode_flags(__entry->fmode), 51762306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 51862306a36Sopenharmony_ci (unsigned long long)__entry->dir, 51962306a36Sopenharmony_ci __get_str(name) 52062306a36Sopenharmony_ci ) 52162306a36Sopenharmony_ci); 52262306a36Sopenharmony_ci 52362306a36Sopenharmony_ciTRACE_EVENT(nfs_atomic_open_exit, 52462306a36Sopenharmony_ci TP_PROTO( 52562306a36Sopenharmony_ci const struct inode *dir, 52662306a36Sopenharmony_ci const struct nfs_open_context *ctx, 52762306a36Sopenharmony_ci unsigned int flags, 52862306a36Sopenharmony_ci int error 52962306a36Sopenharmony_ci ), 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_ci TP_ARGS(dir, ctx, flags, error), 53262306a36Sopenharmony_ci 53362306a36Sopenharmony_ci TP_STRUCT__entry( 53462306a36Sopenharmony_ci __field(unsigned long, error) 53562306a36Sopenharmony_ci __field(unsigned long, flags) 53662306a36Sopenharmony_ci __field(unsigned long, fmode) 53762306a36Sopenharmony_ci __field(dev_t, dev) 53862306a36Sopenharmony_ci __field(u64, dir) 53962306a36Sopenharmony_ci __string(name, ctx->dentry->d_name.name) 54062306a36Sopenharmony_ci ), 54162306a36Sopenharmony_ci 54262306a36Sopenharmony_ci TP_fast_assign( 54362306a36Sopenharmony_ci __entry->error = -error; 54462306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 54562306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 54662306a36Sopenharmony_ci __entry->flags = flags; 54762306a36Sopenharmony_ci __entry->fmode = (__force unsigned long)ctx->mode; 54862306a36Sopenharmony_ci __assign_str(name, ctx->dentry->d_name.name); 54962306a36Sopenharmony_ci ), 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_ci TP_printk( 55262306a36Sopenharmony_ci "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 55362306a36Sopenharmony_ci "name=%02x:%02x:%llu/%s", 55462306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 55562306a36Sopenharmony_ci __entry->flags, 55662306a36Sopenharmony_ci show_fs_fcntl_open_flags(__entry->flags), 55762306a36Sopenharmony_ci show_fs_fmode_flags(__entry->fmode), 55862306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 55962306a36Sopenharmony_ci (unsigned long long)__entry->dir, 56062306a36Sopenharmony_ci __get_str(name) 56162306a36Sopenharmony_ci ) 56262306a36Sopenharmony_ci); 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_ciTRACE_EVENT(nfs_create_enter, 56562306a36Sopenharmony_ci TP_PROTO( 56662306a36Sopenharmony_ci const struct inode *dir, 56762306a36Sopenharmony_ci const struct dentry *dentry, 56862306a36Sopenharmony_ci unsigned int flags 56962306a36Sopenharmony_ci ), 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci TP_ARGS(dir, dentry, flags), 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci TP_STRUCT__entry( 57462306a36Sopenharmony_ci __field(unsigned long, flags) 57562306a36Sopenharmony_ci __field(dev_t, dev) 57662306a36Sopenharmony_ci __field(u64, dir) 57762306a36Sopenharmony_ci __string(name, dentry->d_name.name) 57862306a36Sopenharmony_ci ), 57962306a36Sopenharmony_ci 58062306a36Sopenharmony_ci TP_fast_assign( 58162306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 58262306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 58362306a36Sopenharmony_ci __entry->flags = flags; 58462306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 58562306a36Sopenharmony_ci ), 58662306a36Sopenharmony_ci 58762306a36Sopenharmony_ci TP_printk( 58862306a36Sopenharmony_ci "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 58962306a36Sopenharmony_ci __entry->flags, 59062306a36Sopenharmony_ci show_fs_fcntl_open_flags(__entry->flags), 59162306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 59262306a36Sopenharmony_ci (unsigned long long)__entry->dir, 59362306a36Sopenharmony_ci __get_str(name) 59462306a36Sopenharmony_ci ) 59562306a36Sopenharmony_ci); 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ciTRACE_EVENT(nfs_create_exit, 59862306a36Sopenharmony_ci TP_PROTO( 59962306a36Sopenharmony_ci const struct inode *dir, 60062306a36Sopenharmony_ci const struct dentry *dentry, 60162306a36Sopenharmony_ci unsigned int flags, 60262306a36Sopenharmony_ci int error 60362306a36Sopenharmony_ci ), 60462306a36Sopenharmony_ci 60562306a36Sopenharmony_ci TP_ARGS(dir, dentry, flags, error), 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ci TP_STRUCT__entry( 60862306a36Sopenharmony_ci __field(unsigned long, error) 60962306a36Sopenharmony_ci __field(unsigned long, flags) 61062306a36Sopenharmony_ci __field(dev_t, dev) 61162306a36Sopenharmony_ci __field(u64, dir) 61262306a36Sopenharmony_ci __string(name, dentry->d_name.name) 61362306a36Sopenharmony_ci ), 61462306a36Sopenharmony_ci 61562306a36Sopenharmony_ci TP_fast_assign( 61662306a36Sopenharmony_ci __entry->error = -error; 61762306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 61862306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 61962306a36Sopenharmony_ci __entry->flags = flags; 62062306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 62162306a36Sopenharmony_ci ), 62262306a36Sopenharmony_ci 62362306a36Sopenharmony_ci TP_printk( 62462306a36Sopenharmony_ci "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 62562306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 62662306a36Sopenharmony_ci __entry->flags, 62762306a36Sopenharmony_ci show_fs_fcntl_open_flags(__entry->flags), 62862306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 62962306a36Sopenharmony_ci (unsigned long long)__entry->dir, 63062306a36Sopenharmony_ci __get_str(name) 63162306a36Sopenharmony_ci ) 63262306a36Sopenharmony_ci); 63362306a36Sopenharmony_ci 63462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_directory_event, 63562306a36Sopenharmony_ci TP_PROTO( 63662306a36Sopenharmony_ci const struct inode *dir, 63762306a36Sopenharmony_ci const struct dentry *dentry 63862306a36Sopenharmony_ci ), 63962306a36Sopenharmony_ci 64062306a36Sopenharmony_ci TP_ARGS(dir, dentry), 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci TP_STRUCT__entry( 64362306a36Sopenharmony_ci __field(dev_t, dev) 64462306a36Sopenharmony_ci __field(u64, dir) 64562306a36Sopenharmony_ci __string(name, dentry->d_name.name) 64662306a36Sopenharmony_ci ), 64762306a36Sopenharmony_ci 64862306a36Sopenharmony_ci TP_fast_assign( 64962306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 65062306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 65162306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 65262306a36Sopenharmony_ci ), 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_ci TP_printk( 65562306a36Sopenharmony_ci "name=%02x:%02x:%llu/%s", 65662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 65762306a36Sopenharmony_ci (unsigned long long)__entry->dir, 65862306a36Sopenharmony_ci __get_str(name) 65962306a36Sopenharmony_ci ) 66062306a36Sopenharmony_ci); 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci#define DEFINE_NFS_DIRECTORY_EVENT(name) \ 66362306a36Sopenharmony_ci DEFINE_EVENT(nfs_directory_event, name, \ 66462306a36Sopenharmony_ci TP_PROTO( \ 66562306a36Sopenharmony_ci const struct inode *dir, \ 66662306a36Sopenharmony_ci const struct dentry *dentry \ 66762306a36Sopenharmony_ci ), \ 66862306a36Sopenharmony_ci TP_ARGS(dir, dentry)) 66962306a36Sopenharmony_ci 67062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_directory_event_done, 67162306a36Sopenharmony_ci TP_PROTO( 67262306a36Sopenharmony_ci const struct inode *dir, 67362306a36Sopenharmony_ci const struct dentry *dentry, 67462306a36Sopenharmony_ci int error 67562306a36Sopenharmony_ci ), 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci TP_ARGS(dir, dentry, error), 67862306a36Sopenharmony_ci 67962306a36Sopenharmony_ci TP_STRUCT__entry( 68062306a36Sopenharmony_ci __field(unsigned long, error) 68162306a36Sopenharmony_ci __field(dev_t, dev) 68262306a36Sopenharmony_ci __field(u64, dir) 68362306a36Sopenharmony_ci __string(name, dentry->d_name.name) 68462306a36Sopenharmony_ci ), 68562306a36Sopenharmony_ci 68662306a36Sopenharmony_ci TP_fast_assign( 68762306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 68862306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 68962306a36Sopenharmony_ci __entry->error = error < 0 ? -error : 0; 69062306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 69162306a36Sopenharmony_ci ), 69262306a36Sopenharmony_ci 69362306a36Sopenharmony_ci TP_printk( 69462306a36Sopenharmony_ci "error=%ld (%s) name=%02x:%02x:%llu/%s", 69562306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 69662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 69762306a36Sopenharmony_ci (unsigned long long)__entry->dir, 69862306a36Sopenharmony_ci __get_str(name) 69962306a36Sopenharmony_ci ) 70062306a36Sopenharmony_ci); 70162306a36Sopenharmony_ci 70262306a36Sopenharmony_ci#define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 70362306a36Sopenharmony_ci DEFINE_EVENT(nfs_directory_event_done, name, \ 70462306a36Sopenharmony_ci TP_PROTO( \ 70562306a36Sopenharmony_ci const struct inode *dir, \ 70662306a36Sopenharmony_ci const struct dentry *dentry, \ 70762306a36Sopenharmony_ci int error \ 70862306a36Sopenharmony_ci ), \ 70962306a36Sopenharmony_ci TP_ARGS(dir, dentry, error)) 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 71262306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 71362306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 71462306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 71562306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 71662306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 71762306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 71862306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 71962306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 72062306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 72162306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 72262306a36Sopenharmony_ciDEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_ciTRACE_EVENT(nfs_link_enter, 72562306a36Sopenharmony_ci TP_PROTO( 72662306a36Sopenharmony_ci const struct inode *inode, 72762306a36Sopenharmony_ci const struct inode *dir, 72862306a36Sopenharmony_ci const struct dentry *dentry 72962306a36Sopenharmony_ci ), 73062306a36Sopenharmony_ci 73162306a36Sopenharmony_ci TP_ARGS(inode, dir, dentry), 73262306a36Sopenharmony_ci 73362306a36Sopenharmony_ci TP_STRUCT__entry( 73462306a36Sopenharmony_ci __field(dev_t, dev) 73562306a36Sopenharmony_ci __field(u64, fileid) 73662306a36Sopenharmony_ci __field(u64, dir) 73762306a36Sopenharmony_ci __string(name, dentry->d_name.name) 73862306a36Sopenharmony_ci ), 73962306a36Sopenharmony_ci 74062306a36Sopenharmony_ci TP_fast_assign( 74162306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 74262306a36Sopenharmony_ci __entry->fileid = NFS_FILEID(inode); 74362306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 74462306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 74562306a36Sopenharmony_ci ), 74662306a36Sopenharmony_ci 74762306a36Sopenharmony_ci TP_printk( 74862306a36Sopenharmony_ci "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 74962306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 75062306a36Sopenharmony_ci __entry->fileid, 75162306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 75262306a36Sopenharmony_ci (unsigned long long)__entry->dir, 75362306a36Sopenharmony_ci __get_str(name) 75462306a36Sopenharmony_ci ) 75562306a36Sopenharmony_ci); 75662306a36Sopenharmony_ci 75762306a36Sopenharmony_ciTRACE_EVENT(nfs_link_exit, 75862306a36Sopenharmony_ci TP_PROTO( 75962306a36Sopenharmony_ci const struct inode *inode, 76062306a36Sopenharmony_ci const struct inode *dir, 76162306a36Sopenharmony_ci const struct dentry *dentry, 76262306a36Sopenharmony_ci int error 76362306a36Sopenharmony_ci ), 76462306a36Sopenharmony_ci 76562306a36Sopenharmony_ci TP_ARGS(inode, dir, dentry, error), 76662306a36Sopenharmony_ci 76762306a36Sopenharmony_ci TP_STRUCT__entry( 76862306a36Sopenharmony_ci __field(unsigned long, error) 76962306a36Sopenharmony_ci __field(dev_t, dev) 77062306a36Sopenharmony_ci __field(u64, fileid) 77162306a36Sopenharmony_ci __field(u64, dir) 77262306a36Sopenharmony_ci __string(name, dentry->d_name.name) 77362306a36Sopenharmony_ci ), 77462306a36Sopenharmony_ci 77562306a36Sopenharmony_ci TP_fast_assign( 77662306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 77762306a36Sopenharmony_ci __entry->fileid = NFS_FILEID(inode); 77862306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 77962306a36Sopenharmony_ci __entry->error = error < 0 ? -error : 0; 78062306a36Sopenharmony_ci __assign_str(name, dentry->d_name.name); 78162306a36Sopenharmony_ci ), 78262306a36Sopenharmony_ci 78362306a36Sopenharmony_ci TP_printk( 78462306a36Sopenharmony_ci "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 78562306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 78662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 78762306a36Sopenharmony_ci __entry->fileid, 78862306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 78962306a36Sopenharmony_ci (unsigned long long)__entry->dir, 79062306a36Sopenharmony_ci __get_str(name) 79162306a36Sopenharmony_ci ) 79262306a36Sopenharmony_ci); 79362306a36Sopenharmony_ci 79462306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_rename_event, 79562306a36Sopenharmony_ci TP_PROTO( 79662306a36Sopenharmony_ci const struct inode *old_dir, 79762306a36Sopenharmony_ci const struct dentry *old_dentry, 79862306a36Sopenharmony_ci const struct inode *new_dir, 79962306a36Sopenharmony_ci const struct dentry *new_dentry 80062306a36Sopenharmony_ci ), 80162306a36Sopenharmony_ci 80262306a36Sopenharmony_ci TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 80362306a36Sopenharmony_ci 80462306a36Sopenharmony_ci TP_STRUCT__entry( 80562306a36Sopenharmony_ci __field(dev_t, dev) 80662306a36Sopenharmony_ci __field(u64, old_dir) 80762306a36Sopenharmony_ci __field(u64, new_dir) 80862306a36Sopenharmony_ci __string(old_name, old_dentry->d_name.name) 80962306a36Sopenharmony_ci __string(new_name, new_dentry->d_name.name) 81062306a36Sopenharmony_ci ), 81162306a36Sopenharmony_ci 81262306a36Sopenharmony_ci TP_fast_assign( 81362306a36Sopenharmony_ci __entry->dev = old_dir->i_sb->s_dev; 81462306a36Sopenharmony_ci __entry->old_dir = NFS_FILEID(old_dir); 81562306a36Sopenharmony_ci __entry->new_dir = NFS_FILEID(new_dir); 81662306a36Sopenharmony_ci __assign_str(old_name, old_dentry->d_name.name); 81762306a36Sopenharmony_ci __assign_str(new_name, new_dentry->d_name.name); 81862306a36Sopenharmony_ci ), 81962306a36Sopenharmony_ci 82062306a36Sopenharmony_ci TP_printk( 82162306a36Sopenharmony_ci "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 82262306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 82362306a36Sopenharmony_ci (unsigned long long)__entry->old_dir, 82462306a36Sopenharmony_ci __get_str(old_name), 82562306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 82662306a36Sopenharmony_ci (unsigned long long)__entry->new_dir, 82762306a36Sopenharmony_ci __get_str(new_name) 82862306a36Sopenharmony_ci ) 82962306a36Sopenharmony_ci); 83062306a36Sopenharmony_ci#define DEFINE_NFS_RENAME_EVENT(name) \ 83162306a36Sopenharmony_ci DEFINE_EVENT(nfs_rename_event, name, \ 83262306a36Sopenharmony_ci TP_PROTO( \ 83362306a36Sopenharmony_ci const struct inode *old_dir, \ 83462306a36Sopenharmony_ci const struct dentry *old_dentry, \ 83562306a36Sopenharmony_ci const struct inode *new_dir, \ 83662306a36Sopenharmony_ci const struct dentry *new_dentry \ 83762306a36Sopenharmony_ci ), \ 83862306a36Sopenharmony_ci TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 83962306a36Sopenharmony_ci 84062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_rename_event_done, 84162306a36Sopenharmony_ci TP_PROTO( 84262306a36Sopenharmony_ci const struct inode *old_dir, 84362306a36Sopenharmony_ci const struct dentry *old_dentry, 84462306a36Sopenharmony_ci const struct inode *new_dir, 84562306a36Sopenharmony_ci const struct dentry *new_dentry, 84662306a36Sopenharmony_ci int error 84762306a36Sopenharmony_ci ), 84862306a36Sopenharmony_ci 84962306a36Sopenharmony_ci TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 85062306a36Sopenharmony_ci 85162306a36Sopenharmony_ci TP_STRUCT__entry( 85262306a36Sopenharmony_ci __field(dev_t, dev) 85362306a36Sopenharmony_ci __field(unsigned long, error) 85462306a36Sopenharmony_ci __field(u64, old_dir) 85562306a36Sopenharmony_ci __string(old_name, old_dentry->d_name.name) 85662306a36Sopenharmony_ci __field(u64, new_dir) 85762306a36Sopenharmony_ci __string(new_name, new_dentry->d_name.name) 85862306a36Sopenharmony_ci ), 85962306a36Sopenharmony_ci 86062306a36Sopenharmony_ci TP_fast_assign( 86162306a36Sopenharmony_ci __entry->dev = old_dir->i_sb->s_dev; 86262306a36Sopenharmony_ci __entry->error = -error; 86362306a36Sopenharmony_ci __entry->old_dir = NFS_FILEID(old_dir); 86462306a36Sopenharmony_ci __entry->new_dir = NFS_FILEID(new_dir); 86562306a36Sopenharmony_ci __assign_str(old_name, old_dentry->d_name.name); 86662306a36Sopenharmony_ci __assign_str(new_name, new_dentry->d_name.name); 86762306a36Sopenharmony_ci ), 86862306a36Sopenharmony_ci 86962306a36Sopenharmony_ci TP_printk( 87062306a36Sopenharmony_ci "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 87162306a36Sopenharmony_ci "new_name=%02x:%02x:%llu/%s", 87262306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 87362306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 87462306a36Sopenharmony_ci (unsigned long long)__entry->old_dir, 87562306a36Sopenharmony_ci __get_str(old_name), 87662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 87762306a36Sopenharmony_ci (unsigned long long)__entry->new_dir, 87862306a36Sopenharmony_ci __get_str(new_name) 87962306a36Sopenharmony_ci ) 88062306a36Sopenharmony_ci); 88162306a36Sopenharmony_ci#define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 88262306a36Sopenharmony_ci DEFINE_EVENT(nfs_rename_event_done, name, \ 88362306a36Sopenharmony_ci TP_PROTO( \ 88462306a36Sopenharmony_ci const struct inode *old_dir, \ 88562306a36Sopenharmony_ci const struct dentry *old_dentry, \ 88662306a36Sopenharmony_ci const struct inode *new_dir, \ 88762306a36Sopenharmony_ci const struct dentry *new_dentry, \ 88862306a36Sopenharmony_ci int error \ 88962306a36Sopenharmony_ci ), \ 89062306a36Sopenharmony_ci TP_ARGS(old_dir, old_dentry, new_dir, \ 89162306a36Sopenharmony_ci new_dentry, error)) 89262306a36Sopenharmony_ci 89362306a36Sopenharmony_ciDEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 89462306a36Sopenharmony_ciDEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_ciDEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 89762306a36Sopenharmony_ci 89862306a36Sopenharmony_ciTRACE_EVENT(nfs_sillyrename_unlink, 89962306a36Sopenharmony_ci TP_PROTO( 90062306a36Sopenharmony_ci const struct nfs_unlinkdata *data, 90162306a36Sopenharmony_ci int error 90262306a36Sopenharmony_ci ), 90362306a36Sopenharmony_ci 90462306a36Sopenharmony_ci TP_ARGS(data, error), 90562306a36Sopenharmony_ci 90662306a36Sopenharmony_ci TP_STRUCT__entry( 90762306a36Sopenharmony_ci __field(dev_t, dev) 90862306a36Sopenharmony_ci __field(unsigned long, error) 90962306a36Sopenharmony_ci __field(u64, dir) 91062306a36Sopenharmony_ci __dynamic_array(char, name, data->args.name.len + 1) 91162306a36Sopenharmony_ci ), 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_ci TP_fast_assign( 91462306a36Sopenharmony_ci struct inode *dir = d_inode(data->dentry->d_parent); 91562306a36Sopenharmony_ci size_t len = data->args.name.len; 91662306a36Sopenharmony_ci __entry->dev = dir->i_sb->s_dev; 91762306a36Sopenharmony_ci __entry->dir = NFS_FILEID(dir); 91862306a36Sopenharmony_ci __entry->error = -error; 91962306a36Sopenharmony_ci memcpy(__get_str(name), 92062306a36Sopenharmony_ci data->args.name.name, len); 92162306a36Sopenharmony_ci __get_str(name)[len] = 0; 92262306a36Sopenharmony_ci ), 92362306a36Sopenharmony_ci 92462306a36Sopenharmony_ci TP_printk( 92562306a36Sopenharmony_ci "error=%ld (%s) name=%02x:%02x:%llu/%s", 92662306a36Sopenharmony_ci -__entry->error, show_nfs_status(__entry->error), 92762306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 92862306a36Sopenharmony_ci (unsigned long long)__entry->dir, 92962306a36Sopenharmony_ci __get_str(name) 93062306a36Sopenharmony_ci ) 93162306a36Sopenharmony_ci); 93262306a36Sopenharmony_ci 93362306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_folio_event, 93462306a36Sopenharmony_ci TP_PROTO( 93562306a36Sopenharmony_ci const struct inode *inode, 93662306a36Sopenharmony_ci struct folio *folio 93762306a36Sopenharmony_ci ), 93862306a36Sopenharmony_ci 93962306a36Sopenharmony_ci TP_ARGS(inode, folio), 94062306a36Sopenharmony_ci 94162306a36Sopenharmony_ci TP_STRUCT__entry( 94262306a36Sopenharmony_ci __field(dev_t, dev) 94362306a36Sopenharmony_ci __field(u32, fhandle) 94462306a36Sopenharmony_ci __field(u64, fileid) 94562306a36Sopenharmony_ci __field(u64, version) 94662306a36Sopenharmony_ci __field(loff_t, offset) 94762306a36Sopenharmony_ci __field(u32, count) 94862306a36Sopenharmony_ci ), 94962306a36Sopenharmony_ci 95062306a36Sopenharmony_ci TP_fast_assign( 95162306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 95262306a36Sopenharmony_ci 95362306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 95462306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 95562306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 95662306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 95762306a36Sopenharmony_ci __entry->offset = folio_file_pos(folio); 95862306a36Sopenharmony_ci __entry->count = nfs_folio_length(folio); 95962306a36Sopenharmony_ci ), 96062306a36Sopenharmony_ci 96162306a36Sopenharmony_ci TP_printk( 96262306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 96362306a36Sopenharmony_ci "offset=%lld count=%u", 96462306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 96562306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 96662306a36Sopenharmony_ci __entry->fhandle, __entry->version, 96762306a36Sopenharmony_ci __entry->offset, __entry->count 96862306a36Sopenharmony_ci ) 96962306a36Sopenharmony_ci); 97062306a36Sopenharmony_ci 97162306a36Sopenharmony_ci#define DEFINE_NFS_FOLIO_EVENT(name) \ 97262306a36Sopenharmony_ci DEFINE_EVENT(nfs_folio_event, name, \ 97362306a36Sopenharmony_ci TP_PROTO( \ 97462306a36Sopenharmony_ci const struct inode *inode, \ 97562306a36Sopenharmony_ci struct folio *folio \ 97662306a36Sopenharmony_ci ), \ 97762306a36Sopenharmony_ci TP_ARGS(inode, folio)) 97862306a36Sopenharmony_ci 97962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_folio_event_done, 98062306a36Sopenharmony_ci TP_PROTO( 98162306a36Sopenharmony_ci const struct inode *inode, 98262306a36Sopenharmony_ci struct folio *folio, 98362306a36Sopenharmony_ci int ret 98462306a36Sopenharmony_ci ), 98562306a36Sopenharmony_ci 98662306a36Sopenharmony_ci TP_ARGS(inode, folio, ret), 98762306a36Sopenharmony_ci 98862306a36Sopenharmony_ci TP_STRUCT__entry( 98962306a36Sopenharmony_ci __field(dev_t, dev) 99062306a36Sopenharmony_ci __field(u32, fhandle) 99162306a36Sopenharmony_ci __field(int, ret) 99262306a36Sopenharmony_ci __field(u64, fileid) 99362306a36Sopenharmony_ci __field(u64, version) 99462306a36Sopenharmony_ci __field(loff_t, offset) 99562306a36Sopenharmony_ci __field(u32, count) 99662306a36Sopenharmony_ci ), 99762306a36Sopenharmony_ci 99862306a36Sopenharmony_ci TP_fast_assign( 99962306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 100062306a36Sopenharmony_ci 100162306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 100262306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 100362306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 100462306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 100562306a36Sopenharmony_ci __entry->offset = folio_file_pos(folio); 100662306a36Sopenharmony_ci __entry->count = nfs_folio_length(folio); 100762306a36Sopenharmony_ci __entry->ret = ret; 100862306a36Sopenharmony_ci ), 100962306a36Sopenharmony_ci 101062306a36Sopenharmony_ci TP_printk( 101162306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu " 101262306a36Sopenharmony_ci "offset=%lld count=%u ret=%d", 101362306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 101462306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 101562306a36Sopenharmony_ci __entry->fhandle, __entry->version, 101662306a36Sopenharmony_ci __entry->offset, __entry->count, __entry->ret 101762306a36Sopenharmony_ci ) 101862306a36Sopenharmony_ci); 101962306a36Sopenharmony_ci 102062306a36Sopenharmony_ci#define DEFINE_NFS_FOLIO_EVENT_DONE(name) \ 102162306a36Sopenharmony_ci DEFINE_EVENT(nfs_folio_event_done, name, \ 102262306a36Sopenharmony_ci TP_PROTO( \ 102362306a36Sopenharmony_ci const struct inode *inode, \ 102462306a36Sopenharmony_ci struct folio *folio, \ 102562306a36Sopenharmony_ci int ret \ 102662306a36Sopenharmony_ci ), \ 102762306a36Sopenharmony_ci TP_ARGS(inode, folio, ret)) 102862306a36Sopenharmony_ci 102962306a36Sopenharmony_ciDEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage); 103062306a36Sopenharmony_ciDEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_done); 103162306a36Sopenharmony_ci 103262306a36Sopenharmony_ciDEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio); 103362306a36Sopenharmony_ciDEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_folio_done); 103462306a36Sopenharmony_ci 103562306a36Sopenharmony_ciDEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio); 103662306a36Sopenharmony_ciDEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio_done); 103762306a36Sopenharmony_ci 103862306a36Sopenharmony_ciTRACE_EVENT(nfs_aop_readahead, 103962306a36Sopenharmony_ci TP_PROTO( 104062306a36Sopenharmony_ci const struct inode *inode, 104162306a36Sopenharmony_ci loff_t pos, 104262306a36Sopenharmony_ci unsigned int nr_pages 104362306a36Sopenharmony_ci ), 104462306a36Sopenharmony_ci 104562306a36Sopenharmony_ci TP_ARGS(inode, pos, nr_pages), 104662306a36Sopenharmony_ci 104762306a36Sopenharmony_ci TP_STRUCT__entry( 104862306a36Sopenharmony_ci __field(dev_t, dev) 104962306a36Sopenharmony_ci __field(u32, fhandle) 105062306a36Sopenharmony_ci __field(u64, fileid) 105162306a36Sopenharmony_ci __field(u64, version) 105262306a36Sopenharmony_ci __field(loff_t, offset) 105362306a36Sopenharmony_ci __field(unsigned int, nr_pages) 105462306a36Sopenharmony_ci ), 105562306a36Sopenharmony_ci 105662306a36Sopenharmony_ci TP_fast_assign( 105762306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 105862306a36Sopenharmony_ci 105962306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 106062306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 106162306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 106262306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 106362306a36Sopenharmony_ci __entry->offset = pos; 106462306a36Sopenharmony_ci __entry->nr_pages = nr_pages; 106562306a36Sopenharmony_ci ), 106662306a36Sopenharmony_ci 106762306a36Sopenharmony_ci TP_printk( 106862306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u", 106962306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 107062306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 107162306a36Sopenharmony_ci __entry->fhandle, __entry->version, 107262306a36Sopenharmony_ci __entry->offset, __entry->nr_pages 107362306a36Sopenharmony_ci ) 107462306a36Sopenharmony_ci); 107562306a36Sopenharmony_ci 107662306a36Sopenharmony_ciTRACE_EVENT(nfs_aop_readahead_done, 107762306a36Sopenharmony_ci TP_PROTO( 107862306a36Sopenharmony_ci const struct inode *inode, 107962306a36Sopenharmony_ci unsigned int nr_pages, 108062306a36Sopenharmony_ci int ret 108162306a36Sopenharmony_ci ), 108262306a36Sopenharmony_ci 108362306a36Sopenharmony_ci TP_ARGS(inode, nr_pages, ret), 108462306a36Sopenharmony_ci 108562306a36Sopenharmony_ci TP_STRUCT__entry( 108662306a36Sopenharmony_ci __field(dev_t, dev) 108762306a36Sopenharmony_ci __field(u32, fhandle) 108862306a36Sopenharmony_ci __field(int, ret) 108962306a36Sopenharmony_ci __field(u64, fileid) 109062306a36Sopenharmony_ci __field(u64, version) 109162306a36Sopenharmony_ci __field(loff_t, offset) 109262306a36Sopenharmony_ci __field(unsigned int, nr_pages) 109362306a36Sopenharmony_ci ), 109462306a36Sopenharmony_ci 109562306a36Sopenharmony_ci TP_fast_assign( 109662306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 109762306a36Sopenharmony_ci 109862306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 109962306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 110062306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 110162306a36Sopenharmony_ci __entry->version = inode_peek_iversion_raw(inode); 110262306a36Sopenharmony_ci __entry->nr_pages = nr_pages; 110362306a36Sopenharmony_ci __entry->ret = ret; 110462306a36Sopenharmony_ci ), 110562306a36Sopenharmony_ci 110662306a36Sopenharmony_ci TP_printk( 110762306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d", 110862306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 110962306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 111062306a36Sopenharmony_ci __entry->fhandle, __entry->version, 111162306a36Sopenharmony_ci __entry->nr_pages, __entry->ret 111262306a36Sopenharmony_ci ) 111362306a36Sopenharmony_ci); 111462306a36Sopenharmony_ci 111562306a36Sopenharmony_ciTRACE_EVENT(nfs_initiate_read, 111662306a36Sopenharmony_ci TP_PROTO( 111762306a36Sopenharmony_ci const struct nfs_pgio_header *hdr 111862306a36Sopenharmony_ci ), 111962306a36Sopenharmony_ci 112062306a36Sopenharmony_ci TP_ARGS(hdr), 112162306a36Sopenharmony_ci 112262306a36Sopenharmony_ci TP_STRUCT__entry( 112362306a36Sopenharmony_ci __field(dev_t, dev) 112462306a36Sopenharmony_ci __field(u32, fhandle) 112562306a36Sopenharmony_ci __field(u64, fileid) 112662306a36Sopenharmony_ci __field(loff_t, offset) 112762306a36Sopenharmony_ci __field(u32, count) 112862306a36Sopenharmony_ci ), 112962306a36Sopenharmony_ci 113062306a36Sopenharmony_ci TP_fast_assign( 113162306a36Sopenharmony_ci const struct inode *inode = hdr->inode; 113262306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 113362306a36Sopenharmony_ci const struct nfs_fh *fh = hdr->args.fh ? 113462306a36Sopenharmony_ci hdr->args.fh : &nfsi->fh; 113562306a36Sopenharmony_ci 113662306a36Sopenharmony_ci __entry->offset = hdr->args.offset; 113762306a36Sopenharmony_ci __entry->count = hdr->args.count; 113862306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 113962306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 114062306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 114162306a36Sopenharmony_ci ), 114262306a36Sopenharmony_ci 114362306a36Sopenharmony_ci TP_printk( 114462306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x " 114562306a36Sopenharmony_ci "offset=%lld count=%u", 114662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 114762306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 114862306a36Sopenharmony_ci __entry->fhandle, 114962306a36Sopenharmony_ci (long long)__entry->offset, __entry->count 115062306a36Sopenharmony_ci ) 115162306a36Sopenharmony_ci); 115262306a36Sopenharmony_ci 115362306a36Sopenharmony_ciTRACE_EVENT(nfs_readpage_done, 115462306a36Sopenharmony_ci TP_PROTO( 115562306a36Sopenharmony_ci const struct rpc_task *task, 115662306a36Sopenharmony_ci const struct nfs_pgio_header *hdr 115762306a36Sopenharmony_ci ), 115862306a36Sopenharmony_ci 115962306a36Sopenharmony_ci TP_ARGS(task, hdr), 116062306a36Sopenharmony_ci 116162306a36Sopenharmony_ci TP_STRUCT__entry( 116262306a36Sopenharmony_ci __field(dev_t, dev) 116362306a36Sopenharmony_ci __field(u32, fhandle) 116462306a36Sopenharmony_ci __field(u64, fileid) 116562306a36Sopenharmony_ci __field(loff_t, offset) 116662306a36Sopenharmony_ci __field(u32, arg_count) 116762306a36Sopenharmony_ci __field(u32, res_count) 116862306a36Sopenharmony_ci __field(bool, eof) 116962306a36Sopenharmony_ci __field(int, error) 117062306a36Sopenharmony_ci ), 117162306a36Sopenharmony_ci 117262306a36Sopenharmony_ci TP_fast_assign( 117362306a36Sopenharmony_ci const struct inode *inode = hdr->inode; 117462306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 117562306a36Sopenharmony_ci const struct nfs_fh *fh = hdr->args.fh ? 117662306a36Sopenharmony_ci hdr->args.fh : &nfsi->fh; 117762306a36Sopenharmony_ci 117862306a36Sopenharmony_ci __entry->error = task->tk_status; 117962306a36Sopenharmony_ci __entry->offset = hdr->args.offset; 118062306a36Sopenharmony_ci __entry->arg_count = hdr->args.count; 118162306a36Sopenharmony_ci __entry->res_count = hdr->res.count; 118262306a36Sopenharmony_ci __entry->eof = hdr->res.eof; 118362306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 118462306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 118562306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 118662306a36Sopenharmony_ci ), 118762306a36Sopenharmony_ci 118862306a36Sopenharmony_ci TP_printk( 118962306a36Sopenharmony_ci "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 119062306a36Sopenharmony_ci "offset=%lld count=%u res=%u%s", __entry->error, 119162306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 119262306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 119362306a36Sopenharmony_ci __entry->fhandle, 119462306a36Sopenharmony_ci (long long)__entry->offset, __entry->arg_count, 119562306a36Sopenharmony_ci __entry->res_count, __entry->eof ? " eof" : "" 119662306a36Sopenharmony_ci ) 119762306a36Sopenharmony_ci); 119862306a36Sopenharmony_ci 119962306a36Sopenharmony_ciTRACE_EVENT(nfs_readpage_short, 120062306a36Sopenharmony_ci TP_PROTO( 120162306a36Sopenharmony_ci const struct rpc_task *task, 120262306a36Sopenharmony_ci const struct nfs_pgio_header *hdr 120362306a36Sopenharmony_ci ), 120462306a36Sopenharmony_ci 120562306a36Sopenharmony_ci TP_ARGS(task, hdr), 120662306a36Sopenharmony_ci 120762306a36Sopenharmony_ci TP_STRUCT__entry( 120862306a36Sopenharmony_ci __field(dev_t, dev) 120962306a36Sopenharmony_ci __field(u32, fhandle) 121062306a36Sopenharmony_ci __field(u64, fileid) 121162306a36Sopenharmony_ci __field(loff_t, offset) 121262306a36Sopenharmony_ci __field(u32, arg_count) 121362306a36Sopenharmony_ci __field(u32, res_count) 121462306a36Sopenharmony_ci __field(bool, eof) 121562306a36Sopenharmony_ci __field(int, error) 121662306a36Sopenharmony_ci ), 121762306a36Sopenharmony_ci 121862306a36Sopenharmony_ci TP_fast_assign( 121962306a36Sopenharmony_ci const struct inode *inode = hdr->inode; 122062306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 122162306a36Sopenharmony_ci const struct nfs_fh *fh = hdr->args.fh ? 122262306a36Sopenharmony_ci hdr->args.fh : &nfsi->fh; 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_ci __entry->error = task->tk_status; 122562306a36Sopenharmony_ci __entry->offset = hdr->args.offset; 122662306a36Sopenharmony_ci __entry->arg_count = hdr->args.count; 122762306a36Sopenharmony_ci __entry->res_count = hdr->res.count; 122862306a36Sopenharmony_ci __entry->eof = hdr->res.eof; 122962306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 123062306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 123162306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 123262306a36Sopenharmony_ci ), 123362306a36Sopenharmony_ci 123462306a36Sopenharmony_ci TP_printk( 123562306a36Sopenharmony_ci "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 123662306a36Sopenharmony_ci "offset=%lld count=%u res=%u%s", __entry->error, 123762306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 123862306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 123962306a36Sopenharmony_ci __entry->fhandle, 124062306a36Sopenharmony_ci (long long)__entry->offset, __entry->arg_count, 124162306a36Sopenharmony_ci __entry->res_count, __entry->eof ? " eof" : "" 124262306a36Sopenharmony_ci ) 124362306a36Sopenharmony_ci); 124462306a36Sopenharmony_ci 124562306a36Sopenharmony_ci 124662306a36Sopenharmony_ciTRACE_EVENT(nfs_pgio_error, 124762306a36Sopenharmony_ci TP_PROTO( 124862306a36Sopenharmony_ci const struct nfs_pgio_header *hdr, 124962306a36Sopenharmony_ci int error, 125062306a36Sopenharmony_ci loff_t pos 125162306a36Sopenharmony_ci ), 125262306a36Sopenharmony_ci 125362306a36Sopenharmony_ci TP_ARGS(hdr, error, pos), 125462306a36Sopenharmony_ci 125562306a36Sopenharmony_ci TP_STRUCT__entry( 125662306a36Sopenharmony_ci __field(dev_t, dev) 125762306a36Sopenharmony_ci __field(u32, fhandle) 125862306a36Sopenharmony_ci __field(u64, fileid) 125962306a36Sopenharmony_ci __field(loff_t, offset) 126062306a36Sopenharmony_ci __field(u32, arg_count) 126162306a36Sopenharmony_ci __field(u32, res_count) 126262306a36Sopenharmony_ci __field(loff_t, pos) 126362306a36Sopenharmony_ci __field(int, error) 126462306a36Sopenharmony_ci ), 126562306a36Sopenharmony_ci 126662306a36Sopenharmony_ci TP_fast_assign( 126762306a36Sopenharmony_ci const struct inode *inode = hdr->inode; 126862306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 126962306a36Sopenharmony_ci const struct nfs_fh *fh = hdr->args.fh ? 127062306a36Sopenharmony_ci hdr->args.fh : &nfsi->fh; 127162306a36Sopenharmony_ci 127262306a36Sopenharmony_ci __entry->error = error; 127362306a36Sopenharmony_ci __entry->offset = hdr->args.offset; 127462306a36Sopenharmony_ci __entry->arg_count = hdr->args.count; 127562306a36Sopenharmony_ci __entry->res_count = hdr->res.count; 127662306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 127762306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 127862306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 127962306a36Sopenharmony_ci ), 128062306a36Sopenharmony_ci 128162306a36Sopenharmony_ci TP_printk("error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 128262306a36Sopenharmony_ci "offset=%lld count=%u res=%u pos=%llu", __entry->error, 128362306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 128462306a36Sopenharmony_ci (unsigned long long)__entry->fileid, __entry->fhandle, 128562306a36Sopenharmony_ci (long long)__entry->offset, __entry->arg_count, __entry->res_count, 128662306a36Sopenharmony_ci __entry->pos 128762306a36Sopenharmony_ci ) 128862306a36Sopenharmony_ci); 128962306a36Sopenharmony_ci 129062306a36Sopenharmony_ciTRACE_EVENT(nfs_initiate_write, 129162306a36Sopenharmony_ci TP_PROTO( 129262306a36Sopenharmony_ci const struct nfs_pgio_header *hdr 129362306a36Sopenharmony_ci ), 129462306a36Sopenharmony_ci 129562306a36Sopenharmony_ci TP_ARGS(hdr), 129662306a36Sopenharmony_ci 129762306a36Sopenharmony_ci TP_STRUCT__entry( 129862306a36Sopenharmony_ci __field(dev_t, dev) 129962306a36Sopenharmony_ci __field(u32, fhandle) 130062306a36Sopenharmony_ci __field(u64, fileid) 130162306a36Sopenharmony_ci __field(loff_t, offset) 130262306a36Sopenharmony_ci __field(u32, count) 130362306a36Sopenharmony_ci __field(unsigned long, stable) 130462306a36Sopenharmony_ci ), 130562306a36Sopenharmony_ci 130662306a36Sopenharmony_ci TP_fast_assign( 130762306a36Sopenharmony_ci const struct inode *inode = hdr->inode; 130862306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 130962306a36Sopenharmony_ci const struct nfs_fh *fh = hdr->args.fh ? 131062306a36Sopenharmony_ci hdr->args.fh : &nfsi->fh; 131162306a36Sopenharmony_ci 131262306a36Sopenharmony_ci __entry->offset = hdr->args.offset; 131362306a36Sopenharmony_ci __entry->count = hdr->args.count; 131462306a36Sopenharmony_ci __entry->stable = hdr->args.stable; 131562306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 131662306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 131762306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 131862306a36Sopenharmony_ci ), 131962306a36Sopenharmony_ci 132062306a36Sopenharmony_ci TP_printk( 132162306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x " 132262306a36Sopenharmony_ci "offset=%lld count=%u stable=%s", 132362306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 132462306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 132562306a36Sopenharmony_ci __entry->fhandle, 132662306a36Sopenharmony_ci (long long)__entry->offset, __entry->count, 132762306a36Sopenharmony_ci show_nfs_stable_how(__entry->stable) 132862306a36Sopenharmony_ci ) 132962306a36Sopenharmony_ci); 133062306a36Sopenharmony_ci 133162306a36Sopenharmony_ciTRACE_EVENT(nfs_writeback_done, 133262306a36Sopenharmony_ci TP_PROTO( 133362306a36Sopenharmony_ci const struct rpc_task *task, 133462306a36Sopenharmony_ci const struct nfs_pgio_header *hdr 133562306a36Sopenharmony_ci ), 133662306a36Sopenharmony_ci 133762306a36Sopenharmony_ci TP_ARGS(task, hdr), 133862306a36Sopenharmony_ci 133962306a36Sopenharmony_ci TP_STRUCT__entry( 134062306a36Sopenharmony_ci __field(dev_t, dev) 134162306a36Sopenharmony_ci __field(u32, fhandle) 134262306a36Sopenharmony_ci __field(u64, fileid) 134362306a36Sopenharmony_ci __field(loff_t, offset) 134462306a36Sopenharmony_ci __field(u32, arg_count) 134562306a36Sopenharmony_ci __field(u32, res_count) 134662306a36Sopenharmony_ci __field(int, error) 134762306a36Sopenharmony_ci __field(unsigned long, stable) 134862306a36Sopenharmony_ci __array(char, verifier, NFS4_VERIFIER_SIZE) 134962306a36Sopenharmony_ci ), 135062306a36Sopenharmony_ci 135162306a36Sopenharmony_ci TP_fast_assign( 135262306a36Sopenharmony_ci const struct inode *inode = hdr->inode; 135362306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 135462306a36Sopenharmony_ci const struct nfs_fh *fh = hdr->args.fh ? 135562306a36Sopenharmony_ci hdr->args.fh : &nfsi->fh; 135662306a36Sopenharmony_ci const struct nfs_writeverf *verf = hdr->res.verf; 135762306a36Sopenharmony_ci 135862306a36Sopenharmony_ci __entry->error = task->tk_status; 135962306a36Sopenharmony_ci __entry->offset = hdr->args.offset; 136062306a36Sopenharmony_ci __entry->arg_count = hdr->args.count; 136162306a36Sopenharmony_ci __entry->res_count = hdr->res.count; 136262306a36Sopenharmony_ci __entry->stable = verf->committed; 136362306a36Sopenharmony_ci memcpy(__entry->verifier, 136462306a36Sopenharmony_ci &verf->verifier, 136562306a36Sopenharmony_ci NFS4_VERIFIER_SIZE); 136662306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 136762306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 136862306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 136962306a36Sopenharmony_ci ), 137062306a36Sopenharmony_ci 137162306a36Sopenharmony_ci TP_printk( 137262306a36Sopenharmony_ci "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 137362306a36Sopenharmony_ci "offset=%lld count=%u res=%u stable=%s " 137462306a36Sopenharmony_ci "verifier=%s", __entry->error, 137562306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 137662306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 137762306a36Sopenharmony_ci __entry->fhandle, 137862306a36Sopenharmony_ci (long long)__entry->offset, __entry->arg_count, 137962306a36Sopenharmony_ci __entry->res_count, 138062306a36Sopenharmony_ci show_nfs_stable_how(__entry->stable), 138162306a36Sopenharmony_ci show_nfs4_verifier(__entry->verifier) 138262306a36Sopenharmony_ci ) 138362306a36Sopenharmony_ci); 138462306a36Sopenharmony_ci 138562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_page_error_class, 138662306a36Sopenharmony_ci TP_PROTO( 138762306a36Sopenharmony_ci const struct inode *inode, 138862306a36Sopenharmony_ci const struct nfs_page *req, 138962306a36Sopenharmony_ci int error 139062306a36Sopenharmony_ci ), 139162306a36Sopenharmony_ci 139262306a36Sopenharmony_ci TP_ARGS(inode, req, error), 139362306a36Sopenharmony_ci 139462306a36Sopenharmony_ci TP_STRUCT__entry( 139562306a36Sopenharmony_ci __field(dev_t, dev) 139662306a36Sopenharmony_ci __field(u32, fhandle) 139762306a36Sopenharmony_ci __field(u64, fileid) 139862306a36Sopenharmony_ci __field(loff_t, offset) 139962306a36Sopenharmony_ci __field(unsigned int, count) 140062306a36Sopenharmony_ci __field(int, error) 140162306a36Sopenharmony_ci ), 140262306a36Sopenharmony_ci 140362306a36Sopenharmony_ci TP_fast_assign( 140462306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 140562306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 140662306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 140762306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 140862306a36Sopenharmony_ci __entry->offset = req_offset(req); 140962306a36Sopenharmony_ci __entry->count = req->wb_bytes; 141062306a36Sopenharmony_ci __entry->error = error; 141162306a36Sopenharmony_ci ), 141262306a36Sopenharmony_ci 141362306a36Sopenharmony_ci TP_printk( 141462306a36Sopenharmony_ci "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 141562306a36Sopenharmony_ci "offset=%lld count=%u", __entry->error, 141662306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 141762306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 141862306a36Sopenharmony_ci __entry->fhandle, __entry->offset, 141962306a36Sopenharmony_ci __entry->count 142062306a36Sopenharmony_ci ) 142162306a36Sopenharmony_ci); 142262306a36Sopenharmony_ci 142362306a36Sopenharmony_ci#define DEFINE_NFS_PAGEERR_EVENT(name) \ 142462306a36Sopenharmony_ci DEFINE_EVENT(nfs_page_error_class, name, \ 142562306a36Sopenharmony_ci TP_PROTO( \ 142662306a36Sopenharmony_ci const struct inode *inode, \ 142762306a36Sopenharmony_ci const struct nfs_page *req, \ 142862306a36Sopenharmony_ci int error \ 142962306a36Sopenharmony_ci ), \ 143062306a36Sopenharmony_ci TP_ARGS(inode, req, error)) 143162306a36Sopenharmony_ci 143262306a36Sopenharmony_ciDEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 143362306a36Sopenharmony_ciDEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 143462306a36Sopenharmony_ciDEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 143562306a36Sopenharmony_ci 143662306a36Sopenharmony_ciTRACE_EVENT(nfs_initiate_commit, 143762306a36Sopenharmony_ci TP_PROTO( 143862306a36Sopenharmony_ci const struct nfs_commit_data *data 143962306a36Sopenharmony_ci ), 144062306a36Sopenharmony_ci 144162306a36Sopenharmony_ci TP_ARGS(data), 144262306a36Sopenharmony_ci 144362306a36Sopenharmony_ci TP_STRUCT__entry( 144462306a36Sopenharmony_ci __field(dev_t, dev) 144562306a36Sopenharmony_ci __field(u32, fhandle) 144662306a36Sopenharmony_ci __field(u64, fileid) 144762306a36Sopenharmony_ci __field(loff_t, offset) 144862306a36Sopenharmony_ci __field(u32, count) 144962306a36Sopenharmony_ci ), 145062306a36Sopenharmony_ci 145162306a36Sopenharmony_ci TP_fast_assign( 145262306a36Sopenharmony_ci const struct inode *inode = data->inode; 145362306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 145462306a36Sopenharmony_ci const struct nfs_fh *fh = data->args.fh ? 145562306a36Sopenharmony_ci data->args.fh : &nfsi->fh; 145662306a36Sopenharmony_ci 145762306a36Sopenharmony_ci __entry->offset = data->args.offset; 145862306a36Sopenharmony_ci __entry->count = data->args.count; 145962306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 146062306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 146162306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 146262306a36Sopenharmony_ci ), 146362306a36Sopenharmony_ci 146462306a36Sopenharmony_ci TP_printk( 146562306a36Sopenharmony_ci "fileid=%02x:%02x:%llu fhandle=0x%08x " 146662306a36Sopenharmony_ci "offset=%lld count=%u", 146762306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 146862306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 146962306a36Sopenharmony_ci __entry->fhandle, 147062306a36Sopenharmony_ci (long long)__entry->offset, __entry->count 147162306a36Sopenharmony_ci ) 147262306a36Sopenharmony_ci); 147362306a36Sopenharmony_ci 147462306a36Sopenharmony_ciTRACE_EVENT(nfs_commit_done, 147562306a36Sopenharmony_ci TP_PROTO( 147662306a36Sopenharmony_ci const struct rpc_task *task, 147762306a36Sopenharmony_ci const struct nfs_commit_data *data 147862306a36Sopenharmony_ci ), 147962306a36Sopenharmony_ci 148062306a36Sopenharmony_ci TP_ARGS(task, data), 148162306a36Sopenharmony_ci 148262306a36Sopenharmony_ci TP_STRUCT__entry( 148362306a36Sopenharmony_ci __field(dev_t, dev) 148462306a36Sopenharmony_ci __field(u32, fhandle) 148562306a36Sopenharmony_ci __field(u64, fileid) 148662306a36Sopenharmony_ci __field(loff_t, offset) 148762306a36Sopenharmony_ci __field(int, error) 148862306a36Sopenharmony_ci __field(unsigned long, stable) 148962306a36Sopenharmony_ci __array(char, verifier, NFS4_VERIFIER_SIZE) 149062306a36Sopenharmony_ci ), 149162306a36Sopenharmony_ci 149262306a36Sopenharmony_ci TP_fast_assign( 149362306a36Sopenharmony_ci const struct inode *inode = data->inode; 149462306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 149562306a36Sopenharmony_ci const struct nfs_fh *fh = data->args.fh ? 149662306a36Sopenharmony_ci data->args.fh : &nfsi->fh; 149762306a36Sopenharmony_ci const struct nfs_writeverf *verf = data->res.verf; 149862306a36Sopenharmony_ci 149962306a36Sopenharmony_ci __entry->error = task->tk_status; 150062306a36Sopenharmony_ci __entry->offset = data->args.offset; 150162306a36Sopenharmony_ci __entry->stable = verf->committed; 150262306a36Sopenharmony_ci memcpy(__entry->verifier, 150362306a36Sopenharmony_ci &verf->verifier, 150462306a36Sopenharmony_ci NFS4_VERIFIER_SIZE); 150562306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 150662306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 150762306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 150862306a36Sopenharmony_ci ), 150962306a36Sopenharmony_ci 151062306a36Sopenharmony_ci TP_printk( 151162306a36Sopenharmony_ci "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x " 151262306a36Sopenharmony_ci "offset=%lld stable=%s verifier=%s", __entry->error, 151362306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 151462306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 151562306a36Sopenharmony_ci __entry->fhandle, 151662306a36Sopenharmony_ci (long long)__entry->offset, 151762306a36Sopenharmony_ci show_nfs_stable_how(__entry->stable), 151862306a36Sopenharmony_ci show_nfs4_verifier(__entry->verifier) 151962306a36Sopenharmony_ci ) 152062306a36Sopenharmony_ci); 152162306a36Sopenharmony_ci 152262306a36Sopenharmony_ci#define nfs_show_direct_req_flags(v) \ 152362306a36Sopenharmony_ci __print_flags(v, "|", \ 152462306a36Sopenharmony_ci { NFS_ODIRECT_DO_COMMIT, "DO_COMMIT" }, \ 152562306a36Sopenharmony_ci { NFS_ODIRECT_RESCHED_WRITES, "RESCHED_WRITES" }, \ 152662306a36Sopenharmony_ci { NFS_ODIRECT_SHOULD_DIRTY, "SHOULD DIRTY" }, \ 152762306a36Sopenharmony_ci { NFS_ODIRECT_DONE, "DONE" } ) 152862306a36Sopenharmony_ci 152962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_direct_req_class, 153062306a36Sopenharmony_ci TP_PROTO( 153162306a36Sopenharmony_ci const struct nfs_direct_req *dreq 153262306a36Sopenharmony_ci ), 153362306a36Sopenharmony_ci 153462306a36Sopenharmony_ci TP_ARGS(dreq), 153562306a36Sopenharmony_ci 153662306a36Sopenharmony_ci TP_STRUCT__entry( 153762306a36Sopenharmony_ci __field(dev_t, dev) 153862306a36Sopenharmony_ci __field(u64, fileid) 153962306a36Sopenharmony_ci __field(u32, fhandle) 154062306a36Sopenharmony_ci __field(loff_t, offset) 154162306a36Sopenharmony_ci __field(ssize_t, count) 154262306a36Sopenharmony_ci __field(ssize_t, bytes_left) 154362306a36Sopenharmony_ci __field(ssize_t, error) 154462306a36Sopenharmony_ci __field(int, flags) 154562306a36Sopenharmony_ci ), 154662306a36Sopenharmony_ci 154762306a36Sopenharmony_ci TP_fast_assign( 154862306a36Sopenharmony_ci const struct inode *inode = dreq->inode; 154962306a36Sopenharmony_ci const struct nfs_inode *nfsi = NFS_I(inode); 155062306a36Sopenharmony_ci const struct nfs_fh *fh = &nfsi->fh; 155162306a36Sopenharmony_ci 155262306a36Sopenharmony_ci __entry->dev = inode->i_sb->s_dev; 155362306a36Sopenharmony_ci __entry->fileid = nfsi->fileid; 155462306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 155562306a36Sopenharmony_ci __entry->offset = dreq->io_start; 155662306a36Sopenharmony_ci __entry->count = dreq->count; 155762306a36Sopenharmony_ci __entry->bytes_left = dreq->bytes_left; 155862306a36Sopenharmony_ci __entry->error = dreq->error; 155962306a36Sopenharmony_ci __entry->flags = dreq->flags; 156062306a36Sopenharmony_ci ), 156162306a36Sopenharmony_ci 156262306a36Sopenharmony_ci TP_printk( 156362306a36Sopenharmony_ci "error=%zd fileid=%02x:%02x:%llu fhandle=0x%08x " 156462306a36Sopenharmony_ci "offset=%lld count=%zd bytes_left=%zd flags=%s", 156562306a36Sopenharmony_ci __entry->error, MAJOR(__entry->dev), 156662306a36Sopenharmony_ci MINOR(__entry->dev), 156762306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 156862306a36Sopenharmony_ci __entry->fhandle, __entry->offset, 156962306a36Sopenharmony_ci __entry->count, __entry->bytes_left, 157062306a36Sopenharmony_ci nfs_show_direct_req_flags(__entry->flags) 157162306a36Sopenharmony_ci ) 157262306a36Sopenharmony_ci); 157362306a36Sopenharmony_ci 157462306a36Sopenharmony_ci#define DEFINE_NFS_DIRECT_REQ_EVENT(name) \ 157562306a36Sopenharmony_ci DEFINE_EVENT(nfs_direct_req_class, name, \ 157662306a36Sopenharmony_ci TP_PROTO( \ 157762306a36Sopenharmony_ci const struct nfs_direct_req *dreq \ 157862306a36Sopenharmony_ci ), \ 157962306a36Sopenharmony_ci TP_ARGS(dreq)) 158062306a36Sopenharmony_ci 158162306a36Sopenharmony_ciDEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_commit_complete); 158262306a36Sopenharmony_ciDEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_resched_write); 158362306a36Sopenharmony_ciDEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_complete); 158462306a36Sopenharmony_ciDEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_completion); 158562306a36Sopenharmony_ciDEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_schedule_iovec); 158662306a36Sopenharmony_ciDEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_reschedule_io); 158762306a36Sopenharmony_ci 158862306a36Sopenharmony_ciTRACE_EVENT(nfs_fh_to_dentry, 158962306a36Sopenharmony_ci TP_PROTO( 159062306a36Sopenharmony_ci const struct super_block *sb, 159162306a36Sopenharmony_ci const struct nfs_fh *fh, 159262306a36Sopenharmony_ci u64 fileid, 159362306a36Sopenharmony_ci int error 159462306a36Sopenharmony_ci ), 159562306a36Sopenharmony_ci 159662306a36Sopenharmony_ci TP_ARGS(sb, fh, fileid, error), 159762306a36Sopenharmony_ci 159862306a36Sopenharmony_ci TP_STRUCT__entry( 159962306a36Sopenharmony_ci __field(int, error) 160062306a36Sopenharmony_ci __field(dev_t, dev) 160162306a36Sopenharmony_ci __field(u32, fhandle) 160262306a36Sopenharmony_ci __field(u64, fileid) 160362306a36Sopenharmony_ci ), 160462306a36Sopenharmony_ci 160562306a36Sopenharmony_ci TP_fast_assign( 160662306a36Sopenharmony_ci __entry->error = error; 160762306a36Sopenharmony_ci __entry->dev = sb->s_dev; 160862306a36Sopenharmony_ci __entry->fileid = fileid; 160962306a36Sopenharmony_ci __entry->fhandle = nfs_fhandle_hash(fh); 161062306a36Sopenharmony_ci ), 161162306a36Sopenharmony_ci 161262306a36Sopenharmony_ci TP_printk( 161362306a36Sopenharmony_ci "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 161462306a36Sopenharmony_ci __entry->error, 161562306a36Sopenharmony_ci MAJOR(__entry->dev), MINOR(__entry->dev), 161662306a36Sopenharmony_ci (unsigned long long)__entry->fileid, 161762306a36Sopenharmony_ci __entry->fhandle 161862306a36Sopenharmony_ci ) 161962306a36Sopenharmony_ci); 162062306a36Sopenharmony_ci 162162306a36Sopenharmony_ciTRACE_EVENT(nfs_mount_assign, 162262306a36Sopenharmony_ci TP_PROTO( 162362306a36Sopenharmony_ci const char *option, 162462306a36Sopenharmony_ci const char *value 162562306a36Sopenharmony_ci ), 162662306a36Sopenharmony_ci 162762306a36Sopenharmony_ci TP_ARGS(option, value), 162862306a36Sopenharmony_ci 162962306a36Sopenharmony_ci TP_STRUCT__entry( 163062306a36Sopenharmony_ci __string(option, option) 163162306a36Sopenharmony_ci __string(value, value) 163262306a36Sopenharmony_ci ), 163362306a36Sopenharmony_ci 163462306a36Sopenharmony_ci TP_fast_assign( 163562306a36Sopenharmony_ci __assign_str(option, option); 163662306a36Sopenharmony_ci __assign_str(value, value); 163762306a36Sopenharmony_ci ), 163862306a36Sopenharmony_ci 163962306a36Sopenharmony_ci TP_printk("option %s=%s", 164062306a36Sopenharmony_ci __get_str(option), __get_str(value) 164162306a36Sopenharmony_ci ) 164262306a36Sopenharmony_ci); 164362306a36Sopenharmony_ci 164462306a36Sopenharmony_ciTRACE_EVENT(nfs_mount_option, 164562306a36Sopenharmony_ci TP_PROTO( 164662306a36Sopenharmony_ci const struct fs_parameter *param 164762306a36Sopenharmony_ci ), 164862306a36Sopenharmony_ci 164962306a36Sopenharmony_ci TP_ARGS(param), 165062306a36Sopenharmony_ci 165162306a36Sopenharmony_ci TP_STRUCT__entry( 165262306a36Sopenharmony_ci __string(option, param->key) 165362306a36Sopenharmony_ci ), 165462306a36Sopenharmony_ci 165562306a36Sopenharmony_ci TP_fast_assign( 165662306a36Sopenharmony_ci __assign_str(option, param->key); 165762306a36Sopenharmony_ci ), 165862306a36Sopenharmony_ci 165962306a36Sopenharmony_ci TP_printk("option %s", __get_str(option)) 166062306a36Sopenharmony_ci); 166162306a36Sopenharmony_ci 166262306a36Sopenharmony_ciTRACE_EVENT(nfs_mount_path, 166362306a36Sopenharmony_ci TP_PROTO( 166462306a36Sopenharmony_ci const char *path 166562306a36Sopenharmony_ci ), 166662306a36Sopenharmony_ci 166762306a36Sopenharmony_ci TP_ARGS(path), 166862306a36Sopenharmony_ci 166962306a36Sopenharmony_ci TP_STRUCT__entry( 167062306a36Sopenharmony_ci __string(path, path) 167162306a36Sopenharmony_ci ), 167262306a36Sopenharmony_ci 167362306a36Sopenharmony_ci TP_fast_assign( 167462306a36Sopenharmony_ci __assign_str(path, path); 167562306a36Sopenharmony_ci ), 167662306a36Sopenharmony_ci 167762306a36Sopenharmony_ci TP_printk("path='%s'", __get_str(path)) 167862306a36Sopenharmony_ci); 167962306a36Sopenharmony_ci 168062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(nfs_xdr_event, 168162306a36Sopenharmony_ci TP_PROTO( 168262306a36Sopenharmony_ci const struct xdr_stream *xdr, 168362306a36Sopenharmony_ci int error 168462306a36Sopenharmony_ci ), 168562306a36Sopenharmony_ci 168662306a36Sopenharmony_ci TP_ARGS(xdr, error), 168762306a36Sopenharmony_ci 168862306a36Sopenharmony_ci TP_STRUCT__entry( 168962306a36Sopenharmony_ci __field(unsigned int, task_id) 169062306a36Sopenharmony_ci __field(unsigned int, client_id) 169162306a36Sopenharmony_ci __field(u32, xid) 169262306a36Sopenharmony_ci __field(int, version) 169362306a36Sopenharmony_ci __field(unsigned long, error) 169462306a36Sopenharmony_ci __string(program, 169562306a36Sopenharmony_ci xdr->rqst->rq_task->tk_client->cl_program->name) 169662306a36Sopenharmony_ci __string(procedure, 169762306a36Sopenharmony_ci xdr->rqst->rq_task->tk_msg.rpc_proc->p_name) 169862306a36Sopenharmony_ci ), 169962306a36Sopenharmony_ci 170062306a36Sopenharmony_ci TP_fast_assign( 170162306a36Sopenharmony_ci const struct rpc_rqst *rqstp = xdr->rqst; 170262306a36Sopenharmony_ci const struct rpc_task *task = rqstp->rq_task; 170362306a36Sopenharmony_ci 170462306a36Sopenharmony_ci __entry->task_id = task->tk_pid; 170562306a36Sopenharmony_ci __entry->client_id = task->tk_client->cl_clid; 170662306a36Sopenharmony_ci __entry->xid = be32_to_cpu(rqstp->rq_xid); 170762306a36Sopenharmony_ci __entry->version = task->tk_client->cl_vers; 170862306a36Sopenharmony_ci __entry->error = error; 170962306a36Sopenharmony_ci __assign_str(program, 171062306a36Sopenharmony_ci task->tk_client->cl_program->name); 171162306a36Sopenharmony_ci __assign_str(procedure, task->tk_msg.rpc_proc->p_name); 171262306a36Sopenharmony_ci ), 171362306a36Sopenharmony_ci 171462306a36Sopenharmony_ci TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 171562306a36Sopenharmony_ci " xid=0x%08x %sv%d %s error=%ld (%s)", 171662306a36Sopenharmony_ci __entry->task_id, __entry->client_id, __entry->xid, 171762306a36Sopenharmony_ci __get_str(program), __entry->version, 171862306a36Sopenharmony_ci __get_str(procedure), -__entry->error, 171962306a36Sopenharmony_ci show_nfs_status(__entry->error) 172062306a36Sopenharmony_ci ) 172162306a36Sopenharmony_ci); 172262306a36Sopenharmony_ci#define DEFINE_NFS_XDR_EVENT(name) \ 172362306a36Sopenharmony_ci DEFINE_EVENT(nfs_xdr_event, name, \ 172462306a36Sopenharmony_ci TP_PROTO( \ 172562306a36Sopenharmony_ci const struct xdr_stream *xdr, \ 172662306a36Sopenharmony_ci int error \ 172762306a36Sopenharmony_ci ), \ 172862306a36Sopenharmony_ci TP_ARGS(xdr, error)) 172962306a36Sopenharmony_ciDEFINE_NFS_XDR_EVENT(nfs_xdr_status); 173062306a36Sopenharmony_ciDEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle); 173162306a36Sopenharmony_ci 173262306a36Sopenharmony_ci#endif /* _TRACE_NFS_H */ 173362306a36Sopenharmony_ci 173462306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 173562306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 173662306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE nfstrace 173762306a36Sopenharmony_ci/* This part must be outside protection */ 173862306a36Sopenharmony_ci#include <trace/define_trace.h> 1739