1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 2 /* 3 * Copyright (c) 2013 Trond Myklebust <Trond.M 3 * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com> 4 */ 4 */ 5 #undef TRACE_SYSTEM 5 #undef TRACE_SYSTEM 6 #define TRACE_SYSTEM nfs 6 #define TRACE_SYSTEM nfs 7 7 8 #if !defined(_TRACE_NFS_H) || defined(TRACE_HE 8 #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ) 9 #define _TRACE_NFS_H 9 #define _TRACE_NFS_H 10 10 11 #include <linux/tracepoint.h> 11 #include <linux/tracepoint.h> 12 #include <linux/iversion.h> 12 #include <linux/iversion.h> 13 13 14 #include <trace/misc/fs.h> !! 14 TRACE_DEFINE_ENUM(DT_UNKNOWN); 15 #include <trace/misc/nfs.h> !! 15 TRACE_DEFINE_ENUM(DT_FIFO); 16 #include <trace/misc/sunrpc.h> !! 16 TRACE_DEFINE_ENUM(DT_CHR); >> 17 TRACE_DEFINE_ENUM(DT_DIR); >> 18 TRACE_DEFINE_ENUM(DT_BLK); >> 19 TRACE_DEFINE_ENUM(DT_REG); >> 20 TRACE_DEFINE_ENUM(DT_LNK); >> 21 TRACE_DEFINE_ENUM(DT_SOCK); >> 22 TRACE_DEFINE_ENUM(DT_WHT); >> 23 >> 24 #define nfs_show_file_type(ftype) \ >> 25 __print_symbolic(ftype, \ >> 26 { DT_UNKNOWN, "UNKNOWN" }, \ >> 27 { DT_FIFO, "FIFO" }, \ >> 28 { DT_CHR, "CHR" }, \ >> 29 { DT_DIR, "DIR" }, \ >> 30 { DT_BLK, "BLK" }, \ >> 31 { DT_REG, "REG" }, \ >> 32 { DT_LNK, "LNK" }, \ >> 33 { DT_SOCK, "SOCK" }, \ >> 34 { DT_WHT, "WHT" }) >> 35 >> 36 TRACE_DEFINE_ENUM(NFS_INO_INVALID_DATA); >> 37 TRACE_DEFINE_ENUM(NFS_INO_INVALID_ATIME); >> 38 TRACE_DEFINE_ENUM(NFS_INO_INVALID_ACCESS); >> 39 TRACE_DEFINE_ENUM(NFS_INO_INVALID_ACL); >> 40 TRACE_DEFINE_ENUM(NFS_INO_REVAL_PAGECACHE); >> 41 TRACE_DEFINE_ENUM(NFS_INO_REVAL_FORCED); >> 42 TRACE_DEFINE_ENUM(NFS_INO_INVALID_LABEL); >> 43 TRACE_DEFINE_ENUM(NFS_INO_INVALID_CHANGE); >> 44 TRACE_DEFINE_ENUM(NFS_INO_INVALID_CTIME); >> 45 TRACE_DEFINE_ENUM(NFS_INO_INVALID_MTIME); >> 46 TRACE_DEFINE_ENUM(NFS_INO_INVALID_SIZE); >> 47 TRACE_DEFINE_ENUM(NFS_INO_INVALID_OTHER); 17 48 18 #define nfs_show_cache_validity(v) \ 49 #define nfs_show_cache_validity(v) \ 19 __print_flags(v, "|", \ 50 __print_flags(v, "|", \ 20 { NFS_INO_INVALID_DATA 51 { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \ 21 { NFS_INO_INVALID_ATIM 52 { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \ 22 { NFS_INO_INVALID_ACCE 53 { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \ 23 { NFS_INO_INVALID_ACL, 54 { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \ >> 55 { NFS_INO_REVAL_PAGECACHE, "REVAL_PAGECACHE" }, \ 24 { NFS_INO_REVAL_FORCED 56 { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \ 25 { NFS_INO_INVALID_LABE 57 { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \ 26 { NFS_INO_INVALID_CHAN 58 { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \ 27 { NFS_INO_INVALID_CTIM 59 { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \ 28 { NFS_INO_INVALID_MTIM 60 { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \ 29 { NFS_INO_INVALID_SIZE 61 { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \ 30 { NFS_INO_INVALID_OTHE !! 62 { NFS_INO_INVALID_OTHER, "INVALID_OTHER" }) 31 { NFS_INO_DATA_INVAL_D !! 63 32 { NFS_INO_INVALID_BLOC !! 64 TRACE_DEFINE_ENUM(NFS_INO_ADVISE_RDPLUS); 33 { NFS_INO_INVALID_XATT !! 65 TRACE_DEFINE_ENUM(NFS_INO_STALE); 34 { NFS_INO_INVALID_NLIN !! 66 TRACE_DEFINE_ENUM(NFS_INO_ACL_LRU_SET); 35 { NFS_INO_INVALID_MODE !! 67 TRACE_DEFINE_ENUM(NFS_INO_INVALIDATING); >> 68 TRACE_DEFINE_ENUM(NFS_INO_FSCACHE); >> 69 TRACE_DEFINE_ENUM(NFS_INO_FSCACHE_LOCK); >> 70 TRACE_DEFINE_ENUM(NFS_INO_LAYOUTCOMMIT); >> 71 TRACE_DEFINE_ENUM(NFS_INO_LAYOUTCOMMITTING); >> 72 TRACE_DEFINE_ENUM(NFS_INO_LAYOUTSTATS); >> 73 TRACE_DEFINE_ENUM(NFS_INO_ODIRECT); 36 74 37 #define nfs_show_nfsi_flags(v) \ 75 #define nfs_show_nfsi_flags(v) \ 38 __print_flags(v, "|", \ 76 __print_flags(v, "|", \ >> 77 { BIT(NFS_INO_ADVISE_RDPLUS), "ADVISE_RDPLUS" }, \ 39 { BIT(NFS_INO_STALE), 78 { BIT(NFS_INO_STALE), "STALE" }, \ 40 { BIT(NFS_INO_ACL_LRU_ 79 { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \ 41 { BIT(NFS_INO_INVALIDA 80 { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \ >> 81 { BIT(NFS_INO_FSCACHE), "FSCACHE" }, \ >> 82 { BIT(NFS_INO_FSCACHE_LOCK), "FSCACHE_LOCK" }, \ 42 { BIT(NFS_INO_LAYOUTCO 83 { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \ 43 { BIT(NFS_INO_LAYOUTCO 84 { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \ 44 { BIT(NFS_INO_LAYOUTST 85 { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 45 { BIT(NFS_INO_ODIRECT) 86 { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 46 87 47 DECLARE_EVENT_CLASS(nfs_inode_event, 88 DECLARE_EVENT_CLASS(nfs_inode_event, 48 TP_PROTO( 89 TP_PROTO( 49 const struct inode *in 90 const struct inode *inode 50 ), 91 ), 51 92 52 TP_ARGS(inode), 93 TP_ARGS(inode), 53 94 54 TP_STRUCT__entry( 95 TP_STRUCT__entry( 55 __field(dev_t, dev) 96 __field(dev_t, dev) 56 __field(u32, fhandle) 97 __field(u32, fhandle) 57 __field(u64, fileid) 98 __field(u64, fileid) 58 __field(u64, version) 99 __field(u64, version) 59 ), 100 ), 60 101 61 TP_fast_assign( 102 TP_fast_assign( 62 const struct nfs_inode 103 const struct nfs_inode *nfsi = NFS_I(inode); 63 __entry->dev = inode-> 104 __entry->dev = inode->i_sb->s_dev; 64 __entry->fileid = nfsi 105 __entry->fileid = nfsi->fileid; 65 __entry->fhandle = nfs 106 __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 66 __entry->version = ino 107 __entry->version = inode_peek_iversion_raw(inode); 67 ), 108 ), 68 109 69 TP_printk( 110 TP_printk( 70 "fileid=%02x:%02x:%llu 111 "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ", 71 MAJOR(__entry->dev), M 112 MAJOR(__entry->dev), MINOR(__entry->dev), 72 (unsigned long long)__ 113 (unsigned long long)__entry->fileid, 73 __entry->fhandle, 114 __entry->fhandle, 74 (unsigned long long)__ 115 (unsigned long long)__entry->version 75 ) 116 ) 76 ); 117 ); 77 118 78 DECLARE_EVENT_CLASS(nfs_inode_event_done, 119 DECLARE_EVENT_CLASS(nfs_inode_event_done, 79 TP_PROTO( 120 TP_PROTO( 80 const struct inode *in 121 const struct inode *inode, 81 int error 122 int error 82 ), 123 ), 83 124 84 TP_ARGS(inode, error), 125 TP_ARGS(inode, error), 85 126 86 TP_STRUCT__entry( 127 TP_STRUCT__entry( 87 __field(unsigned long, 128 __field(unsigned long, error) 88 __field(dev_t, dev) 129 __field(dev_t, dev) 89 __field(u32, fhandle) 130 __field(u32, fhandle) 90 __field(unsigned char, 131 __field(unsigned char, type) 91 __field(u64, fileid) 132 __field(u64, fileid) 92 __field(u64, version) 133 __field(u64, version) 93 __field(loff_t, size) 134 __field(loff_t, size) 94 __field(unsigned long, 135 __field(unsigned long, nfsi_flags) 95 __field(unsigned long, 136 __field(unsigned long, cache_validity) 96 ), 137 ), 97 138 98 TP_fast_assign( 139 TP_fast_assign( 99 const struct nfs_inode 140 const struct nfs_inode *nfsi = NFS_I(inode); 100 __entry->error = error 141 __entry->error = error < 0 ? -error : 0; 101 __entry->dev = inode-> 142 __entry->dev = inode->i_sb->s_dev; 102 __entry->fileid = nfsi 143 __entry->fileid = nfsi->fileid; 103 __entry->fhandle = nfs 144 __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 104 __entry->type = nfs_um 145 __entry->type = nfs_umode_to_dtype(inode->i_mode); 105 __entry->version = ino 146 __entry->version = inode_peek_iversion_raw(inode); 106 __entry->size = i_size 147 __entry->size = i_size_read(inode); 107 __entry->nfsi_flags = 148 __entry->nfsi_flags = nfsi->flags; 108 __entry->cache_validit 149 __entry->cache_validity = nfsi->cache_validity; 109 ), 150 ), 110 151 111 TP_printk( 152 TP_printk( 112 "error=%ld (%s) fileid 153 "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 113 "type=%u (%s) version= 154 "type=%u (%s) version=%llu size=%lld " 114 "cache_validity=0x%lx 155 "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)", 115 -__entry->error, show_ !! 156 -__entry->error, nfs_show_status(__entry->error), 116 MAJOR(__entry->dev), M 157 MAJOR(__entry->dev), MINOR(__entry->dev), 117 (unsigned long long)__ 158 (unsigned long long)__entry->fileid, 118 __entry->fhandle, 159 __entry->fhandle, 119 __entry->type, 160 __entry->type, 120 show_fs_dirent_type(__ !! 161 nfs_show_file_type(__entry->type), 121 (unsigned long long)__ 162 (unsigned long long)__entry->version, 122 (long long)__entry->si 163 (long long)__entry->size, 123 __entry->cache_validit 164 __entry->cache_validity, 124 nfs_show_cache_validit 165 nfs_show_cache_validity(__entry->cache_validity), 125 __entry->nfsi_flags, 166 __entry->nfsi_flags, 126 nfs_show_nfsi_flags(__ 167 nfs_show_nfsi_flags(__entry->nfsi_flags) 127 ) 168 ) 128 ); 169 ); 129 170 130 #define DEFINE_NFS_INODE_EVENT(name) \ 171 #define DEFINE_NFS_INODE_EVENT(name) \ 131 DEFINE_EVENT(nfs_inode_event, name, \ 172 DEFINE_EVENT(nfs_inode_event, name, \ 132 TP_PROTO( \ 173 TP_PROTO( \ 133 const struct i 174 const struct inode *inode \ 134 ), \ 175 ), \ 135 TP_ARGS(inode)) 176 TP_ARGS(inode)) 136 #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 177 #define DEFINE_NFS_INODE_EVENT_DONE(name) \ 137 DEFINE_EVENT(nfs_inode_event_done, nam 178 DEFINE_EVENT(nfs_inode_event_done, name, \ 138 TP_PROTO( \ 179 TP_PROTO( \ 139 const struct i 180 const struct inode *inode, \ 140 int error \ 181 int error \ 141 ), \ 182 ), \ 142 TP_ARGS(inode, error)) 183 TP_ARGS(inode, error)) 143 DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 184 DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale); 144 DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter 185 DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter); 145 DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_ 186 DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit); 146 DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_en 187 DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter); 147 DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_ino 188 DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit); 148 DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_ 189 DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter); 149 DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_map 190 DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit); 150 DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 191 DEFINE_NFS_INODE_EVENT(nfs_getattr_enter); 151 DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 192 DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit); 152 DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 193 DEFINE_NFS_INODE_EVENT(nfs_setattr_enter); 153 DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); 194 DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit); >> 195 DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter); >> 196 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit); 154 DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_ent 197 DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter); 155 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inod 198 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit); 156 DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 199 DEFINE_NFS_INODE_EVENT(nfs_fsync_enter); 157 DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 200 DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit); 158 DEFINE_NFS_INODE_EVENT(nfs_access_enter); 201 DEFINE_NFS_INODE_EVENT(nfs_access_enter); 159 DEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_inva << 160 DEFINE_NFS_INODE_EVENT(nfs_readdir_force_readd << 161 DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_ << 162 DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncach << 163 202 164 TRACE_EVENT(nfs_access_exit, 203 TRACE_EVENT(nfs_access_exit, 165 TP_PROTO( 204 TP_PROTO( 166 const struct inode *in 205 const struct inode *inode, 167 unsigned int mask, 206 unsigned int mask, 168 unsigned int permitted 207 unsigned int permitted, 169 int error 208 int error 170 ), 209 ), 171 210 172 TP_ARGS(inode, mask, permitted 211 TP_ARGS(inode, mask, permitted, error), 173 212 174 TP_STRUCT__entry( 213 TP_STRUCT__entry( 175 __field(unsigned long, 214 __field(unsigned long, error) 176 __field(dev_t, dev) 215 __field(dev_t, dev) 177 __field(u32, fhandle) 216 __field(u32, fhandle) 178 __field(unsigned char, 217 __field(unsigned char, type) 179 __field(u64, fileid) 218 __field(u64, fileid) 180 __field(u64, version) 219 __field(u64, version) 181 __field(loff_t, size) 220 __field(loff_t, size) 182 __field(unsigned long, 221 __field(unsigned long, nfsi_flags) 183 __field(unsigned long, 222 __field(unsigned long, cache_validity) 184 __field(unsigned int, 223 __field(unsigned int, mask) 185 __field(unsigned int, 224 __field(unsigned int, permitted) 186 ), 225 ), 187 226 188 TP_fast_assign( 227 TP_fast_assign( 189 const struct nfs_inode 228 const struct nfs_inode *nfsi = NFS_I(inode); 190 __entry->error = error 229 __entry->error = error < 0 ? -error : 0; 191 __entry->dev = inode-> 230 __entry->dev = inode->i_sb->s_dev; 192 __entry->fileid = nfsi 231 __entry->fileid = nfsi->fileid; 193 __entry->fhandle = nfs 232 __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 194 __entry->type = nfs_um 233 __entry->type = nfs_umode_to_dtype(inode->i_mode); 195 __entry->version = ino 234 __entry->version = inode_peek_iversion_raw(inode); 196 __entry->size = i_size 235 __entry->size = i_size_read(inode); 197 __entry->nfsi_flags = 236 __entry->nfsi_flags = nfsi->flags; 198 __entry->cache_validit 237 __entry->cache_validity = nfsi->cache_validity; 199 __entry->mask = mask; 238 __entry->mask = mask; 200 __entry->permitted = p 239 __entry->permitted = permitted; 201 ), 240 ), 202 241 203 TP_printk( 242 TP_printk( 204 "error=%ld (%s) fileid 243 "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x " 205 "type=%u (%s) version= 244 "type=%u (%s) version=%llu size=%lld " 206 "cache_validity=0x%lx 245 "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) " 207 "mask=0x%x permitted=0 246 "mask=0x%x permitted=0x%x", 208 -__entry->error, show_ !! 247 -__entry->error, nfs_show_status(__entry->error), 209 MAJOR(__entry->dev), M 248 MAJOR(__entry->dev), MINOR(__entry->dev), 210 (unsigned long long)__ 249 (unsigned long long)__entry->fileid, 211 __entry->fhandle, 250 __entry->fhandle, 212 __entry->type, 251 __entry->type, 213 show_fs_dirent_type(__ !! 252 nfs_show_file_type(__entry->type), 214 (unsigned long long)__ 253 (unsigned long long)__entry->version, 215 (long long)__entry->si 254 (long long)__entry->size, 216 __entry->cache_validit 255 __entry->cache_validity, 217 nfs_show_cache_validit 256 nfs_show_cache_validity(__entry->cache_validity), 218 __entry->nfsi_flags, 257 __entry->nfsi_flags, 219 nfs_show_nfsi_flags(__ 258 nfs_show_nfsi_flags(__entry->nfsi_flags), 220 __entry->mask, __entry 259 __entry->mask, __entry->permitted 221 ) 260 ) 222 ); 261 ); 223 262 224 DECLARE_EVENT_CLASS(nfs_update_size_class, !! 263 TRACE_DEFINE_ENUM(LOOKUP_FOLLOW); 225 TP_PROTO( !! 264 TRACE_DEFINE_ENUM(LOOKUP_DIRECTORY); 226 const struct inode *in !! 265 TRACE_DEFINE_ENUM(LOOKUP_AUTOMOUNT); 227 loff_t new_size !! 266 TRACE_DEFINE_ENUM(LOOKUP_PARENT); 228 ), !! 267 TRACE_DEFINE_ENUM(LOOKUP_REVAL); 229 !! 268 TRACE_DEFINE_ENUM(LOOKUP_RCU); 230 TP_ARGS(inode, new_size), !! 269 TRACE_DEFINE_ENUM(LOOKUP_OPEN); 231 !! 270 TRACE_DEFINE_ENUM(LOOKUP_CREATE); 232 TP_STRUCT__entry( !! 271 TRACE_DEFINE_ENUM(LOOKUP_EXCL); 233 __field(dev_t, dev) !! 272 TRACE_DEFINE_ENUM(LOOKUP_RENAME_TARGET); 234 __field(u32, fhandle) !! 273 TRACE_DEFINE_ENUM(LOOKUP_JUMPED); 235 __field(u64, fileid) !! 274 TRACE_DEFINE_ENUM(LOOKUP_ROOT); 236 __field(u64, version) !! 275 TRACE_DEFINE_ENUM(LOOKUP_EMPTY); 237 __field(loff_t, cur_si !! 276 TRACE_DEFINE_ENUM(LOOKUP_DOWN); 238 __field(loff_t, new_si !! 277 239 ), !! 278 #define show_lookup_flags(flags) \ 240 !! 279 __print_flags(flags, "|", \ 241 TP_fast_assign( !! 280 { LOOKUP_FOLLOW, "FOLLOW" }, \ 242 const struct nfs_inode !! 281 { LOOKUP_DIRECTORY, "DIRECTORY" }, \ 243 !! 282 { LOOKUP_AUTOMOUNT, "AUTOMOUNT" }, \ 244 __entry->dev = inode-> !! 283 { LOOKUP_PARENT, "PARENT" }, \ 245 __entry->fhandle = nfs !! 284 { LOOKUP_REVAL, "REVAL" }, \ 246 __entry->fileid = nfsi !! 285 { LOOKUP_RCU, "RCU" }, \ 247 __entry->version = ino !! 286 { LOOKUP_OPEN, "OPEN" }, \ 248 __entry->cur_size = i_ !! 287 { LOOKUP_CREATE, "CREATE" }, \ 249 __entry->new_size = ne !! 288 { LOOKUP_EXCL, "EXCL" }, \ 250 ), !! 289 { LOOKUP_RENAME_TARGET, "RENAME_TARGET" }, \ 251 !! 290 { LOOKUP_JUMPED, "JUMPED" }, \ 252 TP_printk( !! 291 { LOOKUP_ROOT, "ROOT" }, \ 253 "fileid=%02x:%02x:%llu !! 292 { LOOKUP_EMPTY, "EMPTY" }, \ 254 MAJOR(__entry->dev), M !! 293 { LOOKUP_DOWN, "DOWN" }) 255 (unsigned long long)__ << 256 __entry->fhandle, __en << 257 __entry->cur_size, __e << 258 ) << 259 ); << 260 << 261 #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \ << 262 DEFINE_EVENT(nfs_update_size_class, nf << 263 TP_PROTO( \ << 264 const struct i << 265 loff_t new_siz << 266 ), \ << 267 TP_ARGS(inode, new_siz << 268 << 269 DEFINE_NFS_UPDATE_SIZE_EVENT(truncate); << 270 DEFINE_NFS_UPDATE_SIZE_EVENT(wcc); << 271 DEFINE_NFS_UPDATE_SIZE_EVENT(update); << 272 DEFINE_NFS_UPDATE_SIZE_EVENT(grow); << 273 << 274 DECLARE_EVENT_CLASS(nfs_inode_range_event, << 275 TP_PROTO( << 276 const struct inode *in << 277 loff_t range_start, << 278 loff_t range_end << 279 ), << 280 << 281 TP_ARGS(inode, range_start, ra << 282 << 283 TP_STRUCT__entry( << 284 __field(dev_t, dev) << 285 __field(u32, fhandle) << 286 __field(u64, fileid) << 287 __field(u64, version) << 288 __field(loff_t, range_ << 289 __field(loff_t, range_ << 290 ), << 291 << 292 TP_fast_assign( << 293 const struct nfs_inode << 294 << 295 __entry->dev = inode-> << 296 __entry->fhandle = nfs << 297 __entry->fileid = nfsi << 298 __entry->version = ino << 299 __entry->range_start = << 300 __entry->range_end = r << 301 ), << 302 << 303 TP_printk( << 304 "fileid=%02x:%02x:%llu << 305 "range=[%lld, %lld]", << 306 MAJOR(__entry->dev), M << 307 (unsigned long long)__ << 308 __entry->fhandle, __en << 309 __entry->range_start, << 310 ) << 311 ); << 312 << 313 #define DEFINE_NFS_INODE_RANGE_EVENT(name) \ << 314 DEFINE_EVENT(nfs_inode_range_event, na << 315 TP_PROTO( \ << 316 const struct i << 317 loff_t range_s << 318 loff_t range_e << 319 ), \ << 320 TP_ARGS(inode, range_s << 321 << 322 DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_inval << 323 << 324 DECLARE_EVENT_CLASS(nfs_readdir_event, << 325 TP_PROTO( << 326 const struct file *fil << 327 const __be32 *verifier << 328 u64 cookie, << 329 pgoff_t page_index, << 330 unsigned int dtsize << 331 ), << 332 << 333 TP_ARGS(file, verifier, cookie << 334 << 335 TP_STRUCT__entry( << 336 __field(dev_t, dev) << 337 __field(u32, fhandle) << 338 __field(u64, fileid) << 339 __field(u64, version) << 340 __array(char, verifier << 341 __field(u64, cookie) << 342 __field(pgoff_t, index << 343 __field(unsigned int, << 344 ), << 345 << 346 TP_fast_assign( << 347 const struct inode *di << 348 const struct nfs_inode << 349 << 350 __entry->dev = dir->i_ << 351 __entry->fileid = nfsi << 352 __entry->fhandle = nfs << 353 __entry->version = ino << 354 if (cookie != 0) << 355 memcpy(__entry << 356 NFS4_VE << 357 else << 358 memset(__entry << 359 NFS4_VE << 360 __entry->cookie = cook << 361 __entry->index = page_ << 362 __entry->dtsize = dtsi << 363 ), << 364 << 365 TP_printk( << 366 "fileid=%02x:%02x:%llu << 367 "cookie=%s:0x%llx cach << 368 MAJOR(__entry->dev), M << 369 (unsigned long long)__ << 370 __entry->version, show << 371 (unsigned long long)__ << 372 __entry->dtsize << 373 ) << 374 ); << 375 << 376 #define DEFINE_NFS_READDIR_EVENT(name) \ << 377 DEFINE_EVENT(nfs_readdir_event, name, << 378 TP_PROTO( \ << 379 const struct f << 380 const __be32 * << 381 u64 cookie, \ << 382 pgoff_t page_i << 383 unsigned int d << 384 ), \ << 385 TP_ARGS(file, verifier << 386 << 387 DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fil << 388 DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached) << 389 294 390 DECLARE_EVENT_CLASS(nfs_lookup_event, 295 DECLARE_EVENT_CLASS(nfs_lookup_event, 391 TP_PROTO( 296 TP_PROTO( 392 const struct inode *di 297 const struct inode *dir, 393 const struct dentry *d 298 const struct dentry *dentry, 394 unsigned int flags 299 unsigned int flags 395 ), 300 ), 396 301 397 TP_ARGS(dir, dentry, flags), 302 TP_ARGS(dir, dentry, flags), 398 303 399 TP_STRUCT__entry( 304 TP_STRUCT__entry( 400 __field(unsigned long, 305 __field(unsigned long, flags) 401 __field(dev_t, dev) 306 __field(dev_t, dev) 402 __field(u64, dir) 307 __field(u64, dir) 403 __field(u64, fileid) << 404 __string(name, dentry- 308 __string(name, dentry->d_name.name) 405 ), 309 ), 406 310 407 TP_fast_assign( 311 TP_fast_assign( 408 __entry->dev = dir->i_ 312 __entry->dev = dir->i_sb->s_dev; 409 __entry->dir = NFS_FIL 313 __entry->dir = NFS_FILEID(dir); 410 __entry->flags = flags 314 __entry->flags = flags; 411 __entry->fileid = d_is !! 315 __assign_str(name, dentry->d_name.name); 412 __assign_str(name); << 413 ), 316 ), 414 317 415 TP_printk( 318 TP_printk( 416 "flags=0x%lx (%s) name !! 319 "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 417 __entry->flags, 320 __entry->flags, 418 show_fs_lookup_flags(_ !! 321 show_lookup_flags(__entry->flags), 419 MAJOR(__entry->dev), M 322 MAJOR(__entry->dev), MINOR(__entry->dev), 420 (unsigned long long)__ 323 (unsigned long long)__entry->dir, 421 __get_str(name), !! 324 __get_str(name) 422 __entry->fileid << 423 ) 325 ) 424 ); 326 ); 425 327 426 #define DEFINE_NFS_LOOKUP_EVENT(name) \ 328 #define DEFINE_NFS_LOOKUP_EVENT(name) \ 427 DEFINE_EVENT(nfs_lookup_event, name, \ 329 DEFINE_EVENT(nfs_lookup_event, name, \ 428 TP_PROTO( \ 330 TP_PROTO( \ 429 const struct i 331 const struct inode *dir, \ 430 const struct d 332 const struct dentry *dentry, \ 431 unsigned int f 333 unsigned int flags \ 432 ), \ 334 ), \ 433 TP_ARGS(dir, dentry, f 335 TP_ARGS(dir, dentry, flags)) 434 336 435 DECLARE_EVENT_CLASS(nfs_lookup_event_done, 337 DECLARE_EVENT_CLASS(nfs_lookup_event_done, 436 TP_PROTO( 338 TP_PROTO( 437 const struct inode *di 339 const struct inode *dir, 438 const struct dentry *d 340 const struct dentry *dentry, 439 unsigned int flags, 341 unsigned int flags, 440 int error 342 int error 441 ), 343 ), 442 344 443 TP_ARGS(dir, dentry, flags, er 345 TP_ARGS(dir, dentry, flags, error), 444 346 445 TP_STRUCT__entry( 347 TP_STRUCT__entry( 446 __field(unsigned long, 348 __field(unsigned long, error) 447 __field(unsigned long, 349 __field(unsigned long, flags) 448 __field(dev_t, dev) 350 __field(dev_t, dev) 449 __field(u64, dir) 351 __field(u64, dir) 450 __field(u64, fileid) << 451 __string(name, dentry- 352 __string(name, dentry->d_name.name) 452 ), 353 ), 453 354 454 TP_fast_assign( 355 TP_fast_assign( 455 __entry->dev = dir->i_ 356 __entry->dev = dir->i_sb->s_dev; 456 __entry->dir = NFS_FIL 357 __entry->dir = NFS_FILEID(dir); 457 __entry->error = error 358 __entry->error = error < 0 ? -error : 0; 458 __entry->flags = flags 359 __entry->flags = flags; 459 __entry->fileid = d_is !! 360 __assign_str(name, dentry->d_name.name); 460 __assign_str(name); << 461 ), 361 ), 462 362 463 TP_printk( 363 TP_printk( 464 "error=%ld (%s) flags= !! 364 "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 465 -__entry->error, show_ !! 365 -__entry->error, nfs_show_status(__entry->error), 466 __entry->flags, 366 __entry->flags, 467 show_fs_lookup_flags(_ !! 367 show_lookup_flags(__entry->flags), 468 MAJOR(__entry->dev), M 368 MAJOR(__entry->dev), MINOR(__entry->dev), 469 (unsigned long long)__ 369 (unsigned long long)__entry->dir, 470 __get_str(name), !! 370 __get_str(name) 471 __entry->fileid << 472 ) 371 ) 473 ); 372 ); 474 373 475 #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 374 #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \ 476 DEFINE_EVENT(nfs_lookup_event_done, na 375 DEFINE_EVENT(nfs_lookup_event_done, name, \ 477 TP_PROTO( \ 376 TP_PROTO( \ 478 const struct i 377 const struct inode *dir, \ 479 const struct d 378 const struct dentry *dentry, \ 480 unsigned int f 379 unsigned int flags, \ 481 int error \ 380 int error \ 482 ), \ 381 ), \ 483 TP_ARGS(dir, dentry, f 382 TP_ARGS(dir, dentry, flags, error)) 484 383 485 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 384 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter); 486 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 385 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit); 487 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_ 386 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter); 488 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revali 387 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit); 489 DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup); !! 388 490 DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_rev !! 389 TRACE_DEFINE_ENUM(O_WRONLY); 491 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_looku !! 390 TRACE_DEFINE_ENUM(O_RDWR); >> 391 TRACE_DEFINE_ENUM(O_CREAT); >> 392 TRACE_DEFINE_ENUM(O_EXCL); >> 393 TRACE_DEFINE_ENUM(O_NOCTTY); >> 394 TRACE_DEFINE_ENUM(O_TRUNC); >> 395 TRACE_DEFINE_ENUM(O_APPEND); >> 396 TRACE_DEFINE_ENUM(O_NONBLOCK); >> 397 TRACE_DEFINE_ENUM(O_DSYNC); >> 398 TRACE_DEFINE_ENUM(O_DIRECT); >> 399 TRACE_DEFINE_ENUM(O_LARGEFILE); >> 400 TRACE_DEFINE_ENUM(O_DIRECTORY); >> 401 TRACE_DEFINE_ENUM(O_NOFOLLOW); >> 402 TRACE_DEFINE_ENUM(O_NOATIME); >> 403 TRACE_DEFINE_ENUM(O_CLOEXEC); >> 404 >> 405 #define show_open_flags(flags) \ >> 406 __print_flags(flags, "|", \ >> 407 { O_WRONLY, "O_WRONLY" }, \ >> 408 { O_RDWR, "O_RDWR" }, \ >> 409 { O_CREAT, "O_CREAT" }, \ >> 410 { O_EXCL, "O_EXCL" }, \ >> 411 { O_NOCTTY, "O_NOCTTY" }, \ >> 412 { O_TRUNC, "O_TRUNC" }, \ >> 413 { O_APPEND, "O_APPEND" }, \ >> 414 { O_NONBLOCK, "O_NONBLOCK" }, \ >> 415 { O_DSYNC, "O_DSYNC" }, \ >> 416 { O_DIRECT, "O_DIRECT" }, \ >> 417 { O_LARGEFILE, "O_LARGEFILE" }, \ >> 418 { O_DIRECTORY, "O_DIRECTORY" }, \ >> 419 { O_NOFOLLOW, "O_NOFOLLOW" }, \ >> 420 { O_NOATIME, "O_NOATIME" }, \ >> 421 { O_CLOEXEC, "O_CLOEXEC" }) >> 422 >> 423 TRACE_DEFINE_ENUM(FMODE_READ); >> 424 TRACE_DEFINE_ENUM(FMODE_WRITE); >> 425 TRACE_DEFINE_ENUM(FMODE_EXEC); >> 426 >> 427 #define show_fmode_flags(mode) \ >> 428 __print_flags(mode, "|", \ >> 429 { ((__force unsigned long)FMODE_READ), "READ" }, \ >> 430 { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \ >> 431 { ((__force unsigned long)FMODE_EXEC), "EXEC" }) 492 432 493 TRACE_EVENT(nfs_atomic_open_enter, 433 TRACE_EVENT(nfs_atomic_open_enter, 494 TP_PROTO( 434 TP_PROTO( 495 const struct inode *di 435 const struct inode *dir, 496 const struct nfs_open_ 436 const struct nfs_open_context *ctx, 497 unsigned int flags 437 unsigned int flags 498 ), 438 ), 499 439 500 TP_ARGS(dir, ctx, flags), 440 TP_ARGS(dir, ctx, flags), 501 441 502 TP_STRUCT__entry( 442 TP_STRUCT__entry( 503 __field(unsigned long, 443 __field(unsigned long, flags) 504 __field(unsigned long, !! 444 __field(unsigned int, fmode) 505 __field(dev_t, dev) 445 __field(dev_t, dev) 506 __field(u64, dir) 446 __field(u64, dir) 507 __string(name, ctx->de 447 __string(name, ctx->dentry->d_name.name) 508 ), 448 ), 509 449 510 TP_fast_assign( 450 TP_fast_assign( 511 __entry->dev = dir->i_ 451 __entry->dev = dir->i_sb->s_dev; 512 __entry->dir = NFS_FIL 452 __entry->dir = NFS_FILEID(dir); 513 __entry->flags = flags 453 __entry->flags = flags; 514 __entry->fmode = (__fo !! 454 __entry->fmode = (__force unsigned int)ctx->mode; 515 __assign_str(name); !! 455 __assign_str(name, ctx->dentry->d_name.name); 516 ), 456 ), 517 457 518 TP_printk( 458 TP_printk( 519 "flags=0x%lx (%s) fmod 459 "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s", 520 __entry->flags, 460 __entry->flags, 521 show_fs_fcntl_open_fla !! 461 show_open_flags(__entry->flags), 522 show_fs_fmode_flags(__ !! 462 show_fmode_flags(__entry->fmode), 523 MAJOR(__entry->dev), M 463 MAJOR(__entry->dev), MINOR(__entry->dev), 524 (unsigned long long)__ 464 (unsigned long long)__entry->dir, 525 __get_str(name) 465 __get_str(name) 526 ) 466 ) 527 ); 467 ); 528 468 529 TRACE_EVENT(nfs_atomic_open_exit, 469 TRACE_EVENT(nfs_atomic_open_exit, 530 TP_PROTO( 470 TP_PROTO( 531 const struct inode *di 471 const struct inode *dir, 532 const struct nfs_open_ 472 const struct nfs_open_context *ctx, 533 unsigned int flags, 473 unsigned int flags, 534 int error 474 int error 535 ), 475 ), 536 476 537 TP_ARGS(dir, ctx, flags, error 477 TP_ARGS(dir, ctx, flags, error), 538 478 539 TP_STRUCT__entry( 479 TP_STRUCT__entry( 540 __field(unsigned long, 480 __field(unsigned long, error) 541 __field(unsigned long, 481 __field(unsigned long, flags) 542 __field(unsigned long, !! 482 __field(unsigned int, fmode) 543 __field(dev_t, dev) 483 __field(dev_t, dev) 544 __field(u64, dir) 484 __field(u64, dir) 545 __string(name, ctx->de 485 __string(name, ctx->dentry->d_name.name) 546 ), 486 ), 547 487 548 TP_fast_assign( 488 TP_fast_assign( 549 __entry->error = -erro 489 __entry->error = -error; 550 __entry->dev = dir->i_ 490 __entry->dev = dir->i_sb->s_dev; 551 __entry->dir = NFS_FIL 491 __entry->dir = NFS_FILEID(dir); 552 __entry->flags = flags 492 __entry->flags = flags; 553 __entry->fmode = (__fo !! 493 __entry->fmode = (__force unsigned int)ctx->mode; 554 __assign_str(name); !! 494 __assign_str(name, ctx->dentry->d_name.name); 555 ), 495 ), 556 496 557 TP_printk( 497 TP_printk( 558 "error=%ld (%s) flags= 498 "error=%ld (%s) flags=0x%lx (%s) fmode=%s " 559 "name=%02x:%02x:%llu/% 499 "name=%02x:%02x:%llu/%s", 560 -__entry->error, show_ !! 500 -__entry->error, nfs_show_status(__entry->error), 561 __entry->flags, 501 __entry->flags, 562 show_fs_fcntl_open_fla !! 502 show_open_flags(__entry->flags), 563 show_fs_fmode_flags(__ !! 503 show_fmode_flags(__entry->fmode), 564 MAJOR(__entry->dev), M 504 MAJOR(__entry->dev), MINOR(__entry->dev), 565 (unsigned long long)__ 505 (unsigned long long)__entry->dir, 566 __get_str(name) 506 __get_str(name) 567 ) 507 ) 568 ); 508 ); 569 509 570 TRACE_EVENT(nfs_create_enter, 510 TRACE_EVENT(nfs_create_enter, 571 TP_PROTO( 511 TP_PROTO( 572 const struct inode *di 512 const struct inode *dir, 573 const struct dentry *d 513 const struct dentry *dentry, 574 unsigned int flags 514 unsigned int flags 575 ), 515 ), 576 516 577 TP_ARGS(dir, dentry, flags), 517 TP_ARGS(dir, dentry, flags), 578 518 579 TP_STRUCT__entry( 519 TP_STRUCT__entry( 580 __field(unsigned long, 520 __field(unsigned long, flags) 581 __field(dev_t, dev) 521 __field(dev_t, dev) 582 __field(u64, dir) 522 __field(u64, dir) 583 __string(name, dentry- 523 __string(name, dentry->d_name.name) 584 ), 524 ), 585 525 586 TP_fast_assign( 526 TP_fast_assign( 587 __entry->dev = dir->i_ 527 __entry->dev = dir->i_sb->s_dev; 588 __entry->dir = NFS_FIL 528 __entry->dir = NFS_FILEID(dir); 589 __entry->flags = flags 529 __entry->flags = flags; 590 __assign_str(name); !! 530 __assign_str(name, dentry->d_name.name); 591 ), 531 ), 592 532 593 TP_printk( 533 TP_printk( 594 "flags=0x%lx (%s) name 534 "flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 595 __entry->flags, 535 __entry->flags, 596 show_fs_fcntl_open_fla !! 536 show_open_flags(__entry->flags), 597 MAJOR(__entry->dev), M 537 MAJOR(__entry->dev), MINOR(__entry->dev), 598 (unsigned long long)__ 538 (unsigned long long)__entry->dir, 599 __get_str(name) 539 __get_str(name) 600 ) 540 ) 601 ); 541 ); 602 542 603 TRACE_EVENT(nfs_create_exit, 543 TRACE_EVENT(nfs_create_exit, 604 TP_PROTO( 544 TP_PROTO( 605 const struct inode *di 545 const struct inode *dir, 606 const struct dentry *d 546 const struct dentry *dentry, 607 unsigned int flags, 547 unsigned int flags, 608 int error 548 int error 609 ), 549 ), 610 550 611 TP_ARGS(dir, dentry, flags, er 551 TP_ARGS(dir, dentry, flags, error), 612 552 613 TP_STRUCT__entry( 553 TP_STRUCT__entry( 614 __field(unsigned long, 554 __field(unsigned long, error) 615 __field(unsigned long, 555 __field(unsigned long, flags) 616 __field(dev_t, dev) 556 __field(dev_t, dev) 617 __field(u64, dir) 557 __field(u64, dir) 618 __string(name, dentry- 558 __string(name, dentry->d_name.name) 619 ), 559 ), 620 560 621 TP_fast_assign( 561 TP_fast_assign( 622 __entry->error = -erro 562 __entry->error = -error; 623 __entry->dev = dir->i_ 563 __entry->dev = dir->i_sb->s_dev; 624 __entry->dir = NFS_FIL 564 __entry->dir = NFS_FILEID(dir); 625 __entry->flags = flags 565 __entry->flags = flags; 626 __assign_str(name); !! 566 __assign_str(name, dentry->d_name.name); 627 ), 567 ), 628 568 629 TP_printk( 569 TP_printk( 630 "error=%ld (%s) flags= 570 "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s", 631 -__entry->error, show_ !! 571 -__entry->error, nfs_show_status(__entry->error), 632 __entry->flags, 572 __entry->flags, 633 show_fs_fcntl_open_fla !! 573 show_open_flags(__entry->flags), 634 MAJOR(__entry->dev), M 574 MAJOR(__entry->dev), MINOR(__entry->dev), 635 (unsigned long long)__ 575 (unsigned long long)__entry->dir, 636 __get_str(name) 576 __get_str(name) 637 ) 577 ) 638 ); 578 ); 639 579 640 DECLARE_EVENT_CLASS(nfs_directory_event, 580 DECLARE_EVENT_CLASS(nfs_directory_event, 641 TP_PROTO( 581 TP_PROTO( 642 const struct inode *di 582 const struct inode *dir, 643 const struct dentry *d 583 const struct dentry *dentry 644 ), 584 ), 645 585 646 TP_ARGS(dir, dentry), 586 TP_ARGS(dir, dentry), 647 587 648 TP_STRUCT__entry( 588 TP_STRUCT__entry( 649 __field(dev_t, dev) 589 __field(dev_t, dev) 650 __field(u64, dir) 590 __field(u64, dir) 651 __string(name, dentry- 591 __string(name, dentry->d_name.name) 652 ), 592 ), 653 593 654 TP_fast_assign( 594 TP_fast_assign( 655 __entry->dev = dir->i_ 595 __entry->dev = dir->i_sb->s_dev; 656 __entry->dir = NFS_FIL 596 __entry->dir = NFS_FILEID(dir); 657 __assign_str(name); !! 597 __assign_str(name, dentry->d_name.name); 658 ), 598 ), 659 599 660 TP_printk( 600 TP_printk( 661 "name=%02x:%02x:%llu/% 601 "name=%02x:%02x:%llu/%s", 662 MAJOR(__entry->dev), M 602 MAJOR(__entry->dev), MINOR(__entry->dev), 663 (unsigned long long)__ 603 (unsigned long long)__entry->dir, 664 __get_str(name) 604 __get_str(name) 665 ) 605 ) 666 ); 606 ); 667 607 668 #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 608 #define DEFINE_NFS_DIRECTORY_EVENT(name) \ 669 DEFINE_EVENT(nfs_directory_event, name 609 DEFINE_EVENT(nfs_directory_event, name, \ 670 TP_PROTO( \ 610 TP_PROTO( \ 671 const struct i 611 const struct inode *dir, \ 672 const struct d 612 const struct dentry *dentry \ 673 ), \ 613 ), \ 674 TP_ARGS(dir, dentry)) 614 TP_ARGS(dir, dentry)) 675 615 676 DECLARE_EVENT_CLASS(nfs_directory_event_done, 616 DECLARE_EVENT_CLASS(nfs_directory_event_done, 677 TP_PROTO( 617 TP_PROTO( 678 const struct inode *di 618 const struct inode *dir, 679 const struct dentry *d 619 const struct dentry *dentry, 680 int error 620 int error 681 ), 621 ), 682 622 683 TP_ARGS(dir, dentry, error), 623 TP_ARGS(dir, dentry, error), 684 624 685 TP_STRUCT__entry( 625 TP_STRUCT__entry( 686 __field(unsigned long, 626 __field(unsigned long, error) 687 __field(dev_t, dev) 627 __field(dev_t, dev) 688 __field(u64, dir) 628 __field(u64, dir) 689 __string(name, dentry- 629 __string(name, dentry->d_name.name) 690 ), 630 ), 691 631 692 TP_fast_assign( 632 TP_fast_assign( 693 __entry->dev = dir->i_ 633 __entry->dev = dir->i_sb->s_dev; 694 __entry->dir = NFS_FIL 634 __entry->dir = NFS_FILEID(dir); 695 __entry->error = error 635 __entry->error = error < 0 ? -error : 0; 696 __assign_str(name); !! 636 __assign_str(name, dentry->d_name.name); 697 ), 637 ), 698 638 699 TP_printk( 639 TP_printk( 700 "error=%ld (%s) name=% 640 "error=%ld (%s) name=%02x:%02x:%llu/%s", 701 -__entry->error, show_ !! 641 -__entry->error, nfs_show_status(__entry->error), 702 MAJOR(__entry->dev), M 642 MAJOR(__entry->dev), MINOR(__entry->dev), 703 (unsigned long long)__ 643 (unsigned long long)__entry->dir, 704 __get_str(name) 644 __get_str(name) 705 ) 645 ) 706 ); 646 ); 707 647 708 #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) 648 #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \ 709 DEFINE_EVENT(nfs_directory_event_done, 649 DEFINE_EVENT(nfs_directory_event_done, name, \ 710 TP_PROTO( \ 650 TP_PROTO( \ 711 const struct i 651 const struct inode *dir, \ 712 const struct d 652 const struct dentry *dentry, \ 713 int error \ 653 int error \ 714 ), \ 654 ), \ 715 TP_ARGS(dir, dentry, e 655 TP_ARGS(dir, dentry, error)) 716 656 717 DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 657 DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter); 718 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit 658 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit); 719 DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 659 DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter); 720 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit 660 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit); 721 DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 661 DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter); 722 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit 662 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit); 723 DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 663 DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter); 724 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exi 664 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit); 725 DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 665 DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter); 726 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exi 666 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit); 727 DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 667 DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter); 728 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_ex 668 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit); 729 669 730 TRACE_EVENT(nfs_link_enter, 670 TRACE_EVENT(nfs_link_enter, 731 TP_PROTO( 671 TP_PROTO( 732 const struct inode *in 672 const struct inode *inode, 733 const struct inode *di 673 const struct inode *dir, 734 const struct dentry *d 674 const struct dentry *dentry 735 ), 675 ), 736 676 737 TP_ARGS(inode, dir, dentry), 677 TP_ARGS(inode, dir, dentry), 738 678 739 TP_STRUCT__entry( 679 TP_STRUCT__entry( 740 __field(dev_t, dev) 680 __field(dev_t, dev) 741 __field(u64, fileid) 681 __field(u64, fileid) 742 __field(u64, dir) 682 __field(u64, dir) 743 __string(name, dentry- 683 __string(name, dentry->d_name.name) 744 ), 684 ), 745 685 746 TP_fast_assign( 686 TP_fast_assign( 747 __entry->dev = inode-> 687 __entry->dev = inode->i_sb->s_dev; 748 __entry->fileid = NFS_ 688 __entry->fileid = NFS_FILEID(inode); 749 __entry->dir = NFS_FIL 689 __entry->dir = NFS_FILEID(dir); 750 __assign_str(name); !! 690 __assign_str(name, dentry->d_name.name); 751 ), 691 ), 752 692 753 TP_printk( 693 TP_printk( 754 "fileid=%02x:%02x:%llu 694 "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 755 MAJOR(__entry->dev), M 695 MAJOR(__entry->dev), MINOR(__entry->dev), 756 __entry->fileid, 696 __entry->fileid, 757 MAJOR(__entry->dev), M 697 MAJOR(__entry->dev), MINOR(__entry->dev), 758 (unsigned long long)__ 698 (unsigned long long)__entry->dir, 759 __get_str(name) 699 __get_str(name) 760 ) 700 ) 761 ); 701 ); 762 702 763 TRACE_EVENT(nfs_link_exit, 703 TRACE_EVENT(nfs_link_exit, 764 TP_PROTO( 704 TP_PROTO( 765 const struct inode *in 705 const struct inode *inode, 766 const struct inode *di 706 const struct inode *dir, 767 const struct dentry *d 707 const struct dentry *dentry, 768 int error 708 int error 769 ), 709 ), 770 710 771 TP_ARGS(inode, dir, dentry, er 711 TP_ARGS(inode, dir, dentry, error), 772 712 773 TP_STRUCT__entry( 713 TP_STRUCT__entry( 774 __field(unsigned long, 714 __field(unsigned long, error) 775 __field(dev_t, dev) 715 __field(dev_t, dev) 776 __field(u64, fileid) 716 __field(u64, fileid) 777 __field(u64, dir) 717 __field(u64, dir) 778 __string(name, dentry- 718 __string(name, dentry->d_name.name) 779 ), 719 ), 780 720 781 TP_fast_assign( 721 TP_fast_assign( 782 __entry->dev = inode-> 722 __entry->dev = inode->i_sb->s_dev; 783 __entry->fileid = NFS_ 723 __entry->fileid = NFS_FILEID(inode); 784 __entry->dir = NFS_FIL 724 __entry->dir = NFS_FILEID(dir); 785 __entry->error = error 725 __entry->error = error < 0 ? -error : 0; 786 __assign_str(name); !! 726 __assign_str(name, dentry->d_name.name); 787 ), 727 ), 788 728 789 TP_printk( 729 TP_printk( 790 "error=%ld (%s) fileid 730 "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s", 791 -__entry->error, show_ !! 731 -__entry->error, nfs_show_status(__entry->error), 792 MAJOR(__entry->dev), M 732 MAJOR(__entry->dev), MINOR(__entry->dev), 793 __entry->fileid, 733 __entry->fileid, 794 MAJOR(__entry->dev), M 734 MAJOR(__entry->dev), MINOR(__entry->dev), 795 (unsigned long long)__ 735 (unsigned long long)__entry->dir, 796 __get_str(name) 736 __get_str(name) 797 ) 737 ) 798 ); 738 ); 799 739 800 DECLARE_EVENT_CLASS(nfs_rename_event, 740 DECLARE_EVENT_CLASS(nfs_rename_event, 801 TP_PROTO( 741 TP_PROTO( 802 const struct inode *ol 742 const struct inode *old_dir, 803 const struct dentry *o 743 const struct dentry *old_dentry, 804 const struct inode *ne 744 const struct inode *new_dir, 805 const struct dentry *n 745 const struct dentry *new_dentry 806 ), 746 ), 807 747 808 TP_ARGS(old_dir, old_dentry, n 748 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry), 809 749 810 TP_STRUCT__entry( 750 TP_STRUCT__entry( 811 __field(dev_t, dev) 751 __field(dev_t, dev) 812 __field(u64, old_dir) 752 __field(u64, old_dir) 813 __field(u64, new_dir) 753 __field(u64, new_dir) 814 __string(old_name, old 754 __string(old_name, old_dentry->d_name.name) 815 __string(new_name, new 755 __string(new_name, new_dentry->d_name.name) 816 ), 756 ), 817 757 818 TP_fast_assign( 758 TP_fast_assign( 819 __entry->dev = old_dir 759 __entry->dev = old_dir->i_sb->s_dev; 820 __entry->old_dir = NFS 760 __entry->old_dir = NFS_FILEID(old_dir); 821 __entry->new_dir = NFS 761 __entry->new_dir = NFS_FILEID(new_dir); 822 __assign_str(old_name) !! 762 __assign_str(old_name, old_dentry->d_name.name); 823 __assign_str(new_name) !! 763 __assign_str(new_name, new_dentry->d_name.name); 824 ), 764 ), 825 765 826 TP_printk( 766 TP_printk( 827 "old_name=%02x:%02x:%l 767 "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s", 828 MAJOR(__entry->dev), M 768 MAJOR(__entry->dev), MINOR(__entry->dev), 829 (unsigned long long)__ 769 (unsigned long long)__entry->old_dir, 830 __get_str(old_name), 770 __get_str(old_name), 831 MAJOR(__entry->dev), M 771 MAJOR(__entry->dev), MINOR(__entry->dev), 832 (unsigned long long)__ 772 (unsigned long long)__entry->new_dir, 833 __get_str(new_name) 773 __get_str(new_name) 834 ) 774 ) 835 ); 775 ); 836 #define DEFINE_NFS_RENAME_EVENT(name) \ 776 #define DEFINE_NFS_RENAME_EVENT(name) \ 837 DEFINE_EVENT(nfs_rename_event, name, \ 777 DEFINE_EVENT(nfs_rename_event, name, \ 838 TP_PROTO( \ 778 TP_PROTO( \ 839 const struct i 779 const struct inode *old_dir, \ 840 const struct d 780 const struct dentry *old_dentry, \ 841 const struct i 781 const struct inode *new_dir, \ 842 const struct d 782 const struct dentry *new_dentry \ 843 ), \ 783 ), \ 844 TP_ARGS(old_dir, old_d 784 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry)) 845 785 846 DECLARE_EVENT_CLASS(nfs_rename_event_done, 786 DECLARE_EVENT_CLASS(nfs_rename_event_done, 847 TP_PROTO( 787 TP_PROTO( 848 const struct inode *ol 788 const struct inode *old_dir, 849 const struct dentry *o 789 const struct dentry *old_dentry, 850 const struct inode *ne 790 const struct inode *new_dir, 851 const struct dentry *n 791 const struct dentry *new_dentry, 852 int error 792 int error 853 ), 793 ), 854 794 855 TP_ARGS(old_dir, old_dentry, n 795 TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error), 856 796 857 TP_STRUCT__entry( 797 TP_STRUCT__entry( 858 __field(dev_t, dev) 798 __field(dev_t, dev) 859 __field(unsigned long, 799 __field(unsigned long, error) 860 __field(u64, old_dir) 800 __field(u64, old_dir) 861 __string(old_name, old 801 __string(old_name, old_dentry->d_name.name) 862 __field(u64, new_dir) 802 __field(u64, new_dir) 863 __string(new_name, new 803 __string(new_name, new_dentry->d_name.name) 864 ), 804 ), 865 805 866 TP_fast_assign( 806 TP_fast_assign( 867 __entry->dev = old_dir 807 __entry->dev = old_dir->i_sb->s_dev; 868 __entry->error = -erro 808 __entry->error = -error; 869 __entry->old_dir = NFS 809 __entry->old_dir = NFS_FILEID(old_dir); 870 __entry->new_dir = NFS 810 __entry->new_dir = NFS_FILEID(new_dir); 871 __assign_str(old_name) !! 811 __assign_str(old_name, old_dentry->d_name.name); 872 __assign_str(new_name) !! 812 __assign_str(new_name, new_dentry->d_name.name); 873 ), 813 ), 874 814 875 TP_printk( 815 TP_printk( 876 "error=%ld (%s) old_na 816 "error=%ld (%s) old_name=%02x:%02x:%llu/%s " 877 "new_name=%02x:%02x:%l 817 "new_name=%02x:%02x:%llu/%s", 878 -__entry->error, show_ !! 818 -__entry->error, nfs_show_status(__entry->error), 879 MAJOR(__entry->dev), M 819 MAJOR(__entry->dev), MINOR(__entry->dev), 880 (unsigned long long)__ 820 (unsigned long long)__entry->old_dir, 881 __get_str(old_name), 821 __get_str(old_name), 882 MAJOR(__entry->dev), M 822 MAJOR(__entry->dev), MINOR(__entry->dev), 883 (unsigned long long)__ 823 (unsigned long long)__entry->new_dir, 884 __get_str(new_name) 824 __get_str(new_name) 885 ) 825 ) 886 ); 826 ); 887 #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 827 #define DEFINE_NFS_RENAME_EVENT_DONE(name) \ 888 DEFINE_EVENT(nfs_rename_event_done, na 828 DEFINE_EVENT(nfs_rename_event_done, name, \ 889 TP_PROTO( \ 829 TP_PROTO( \ 890 const struct i 830 const struct inode *old_dir, \ 891 const struct d 831 const struct dentry *old_dentry, \ 892 const struct i 832 const struct inode *new_dir, \ 893 const struct d 833 const struct dentry *new_dentry, \ 894 int error \ 834 int error \ 895 ), \ 835 ), \ 896 TP_ARGS(old_dir, old_d 836 TP_ARGS(old_dir, old_dentry, new_dir, \ 897 new_dentry, er 837 new_dentry, error)) 898 838 899 DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 839 DEFINE_NFS_RENAME_EVENT(nfs_rename_enter); 900 DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 840 DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit); 901 841 902 DEFINE_NFS_RENAME_EVENT_DONE(nfs_async_rename_ !! 842 DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename); 903 843 904 TRACE_EVENT(nfs_sillyrename_unlink, 844 TRACE_EVENT(nfs_sillyrename_unlink, 905 TP_PROTO( 845 TP_PROTO( 906 const struct nfs_unlin 846 const struct nfs_unlinkdata *data, 907 int error 847 int error 908 ), 848 ), 909 849 910 TP_ARGS(data, error), 850 TP_ARGS(data, error), 911 851 912 TP_STRUCT__entry( 852 TP_STRUCT__entry( 913 __field(dev_t, dev) 853 __field(dev_t, dev) 914 __field(unsigned long, 854 __field(unsigned long, error) 915 __field(u64, dir) 855 __field(u64, dir) 916 __dynamic_array(char, 856 __dynamic_array(char, name, data->args.name.len + 1) 917 ), 857 ), 918 858 919 TP_fast_assign( 859 TP_fast_assign( 920 struct inode *dir = d_ 860 struct inode *dir = d_inode(data->dentry->d_parent); 921 size_t len = data->arg 861 size_t len = data->args.name.len; 922 __entry->dev = dir->i_ 862 __entry->dev = dir->i_sb->s_dev; 923 __entry->dir = NFS_FIL 863 __entry->dir = NFS_FILEID(dir); 924 __entry->error = -erro 864 __entry->error = -error; 925 memcpy(__get_str(name) 865 memcpy(__get_str(name), 926 data->args.nam 866 data->args.name.name, len); 927 __get_str(name)[len] = 867 __get_str(name)[len] = 0; 928 ), 868 ), 929 869 930 TP_printk( 870 TP_printk( 931 "error=%ld (%s) name=% 871 "error=%ld (%s) name=%02x:%02x:%llu/%s", 932 -__entry->error, show_ !! 872 -__entry->error, nfs_show_status(__entry->error), 933 MAJOR(__entry->dev), M 873 MAJOR(__entry->dev), MINOR(__entry->dev), 934 (unsigned long long)__ 874 (unsigned long long)__entry->dir, 935 __get_str(name) 875 __get_str(name) 936 ) 876 ) 937 ); 877 ); 938 878 939 DECLARE_EVENT_CLASS(nfs_folio_event, << 940 TP_PROTO( << 941 const struct inode *in << 942 loff_t offset, << 943 size_t count << 944 ), << 945 << 946 TP_ARGS(inode, offset, count), << 947 << 948 TP_STRUCT__entry( << 949 __field(dev_t, dev) << 950 __field(u32, fhandle) << 951 __field(u64, fileid) << 952 __field(u64, version) << 953 __field(loff_t, offset << 954 __field(size_t, count) << 955 ), << 956 << 957 TP_fast_assign( << 958 const struct nfs_inode << 959 << 960 __entry->dev = inode-> << 961 __entry->fileid = nfsi << 962 __entry->fhandle = nfs << 963 __entry->version = ino << 964 __entry->offset = offs << 965 __entry->count = count << 966 ), << 967 << 968 TP_printk( << 969 "fileid=%02x:%02x:%llu << 970 "offset=%lld count=%zu << 971 MAJOR(__entry->dev), M << 972 (unsigned long long)__ << 973 __entry->fhandle, __en << 974 __entry->offset, __ent << 975 ) << 976 ); << 977 << 978 #define DEFINE_NFS_FOLIO_EVENT(name) \ << 979 DEFINE_EVENT(nfs_folio_event, name, \ << 980 TP_PROTO( \ << 981 const struct i << 982 loff_t offset, << 983 size_t count \ << 984 ), \ << 985 TP_ARGS(inode, offset, << 986 << 987 DECLARE_EVENT_CLASS(nfs_folio_event_done, << 988 TP_PROTO( << 989 const struct inode *in << 990 loff_t offset, << 991 size_t count, << 992 int ret << 993 ), << 994 << 995 TP_ARGS(inode, offset, count, << 996 << 997 TP_STRUCT__entry( << 998 __field(dev_t, dev) << 999 __field(u32, fhandle) << 1000 __field(int, ret) << 1001 __field(u64, fileid) << 1002 __field(u64, version) << 1003 __field(loff_t, offse << 1004 __field(size_t, count << 1005 ), << 1006 << 1007 TP_fast_assign( << 1008 const struct nfs_inod << 1009 << 1010 __entry->dev = inode- << 1011 __entry->fileid = nfs << 1012 __entry->fhandle = nf << 1013 __entry->version = in << 1014 __entry->offset = off << 1015 __entry->count = coun << 1016 __entry->ret = ret; << 1017 ), << 1018 << 1019 TP_printk( << 1020 "fileid=%02x:%02x:%ll << 1021 "offset=%lld count=%z << 1022 MAJOR(__entry->dev), << 1023 (unsigned long long)_ << 1024 __entry->fhandle, __e << 1025 __entry->offset, __en << 1026 ) << 1027 ); << 1028 << 1029 #define DEFINE_NFS_FOLIO_EVENT_DONE(name) \ << 1030 DEFINE_EVENT(nfs_folio_event_done, na << 1031 TP_PROTO( \ << 1032 const struct << 1033 loff_t offset << 1034 size_t count, << 1035 int ret \ << 1036 ), \ << 1037 TP_ARGS(inode, offset << 1038 << 1039 DEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage); << 1040 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_ << 1041 << 1042 DEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio); << 1043 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_fol << 1044 << 1045 DEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio); << 1046 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio << 1047 << 1048 TRACE_EVENT(nfs_aop_readahead, << 1049 TP_PROTO( << 1050 const struct inode *i << 1051 loff_t pos, << 1052 unsigned int nr_pages << 1053 ), << 1054 << 1055 TP_ARGS(inode, pos, nr_pages) << 1056 << 1057 TP_STRUCT__entry( << 1058 __field(dev_t, dev) << 1059 __field(u32, fhandle) << 1060 __field(u64, fileid) << 1061 __field(u64, version) << 1062 __field(loff_t, offse << 1063 __field(unsigned int, << 1064 ), << 1065 << 1066 TP_fast_assign( << 1067 const struct nfs_inod << 1068 << 1069 __entry->dev = inode- << 1070 __entry->fileid = nfs << 1071 __entry->fhandle = nf << 1072 __entry->version = in << 1073 __entry->offset = pos << 1074 __entry->nr_pages = n << 1075 ), << 1076 << 1077 TP_printk( << 1078 "fileid=%02x:%02x:%ll << 1079 MAJOR(__entry->dev), << 1080 (unsigned long long)_ << 1081 __entry->fhandle, __e << 1082 __entry->offset, __en << 1083 ) << 1084 ); << 1085 << 1086 TRACE_EVENT(nfs_aop_readahead_done, << 1087 TP_PROTO( << 1088 const struct inode *i << 1089 unsigned int nr_pages << 1090 int ret << 1091 ), << 1092 << 1093 TP_ARGS(inode, nr_pages, ret) << 1094 << 1095 TP_STRUCT__entry( << 1096 __field(dev_t, dev) << 1097 __field(u32, fhandle) << 1098 __field(int, ret) << 1099 __field(u64, fileid) << 1100 __field(u64, version) << 1101 __field(loff_t, offse << 1102 __field(unsigned int, << 1103 ), << 1104 << 1105 TP_fast_assign( << 1106 const struct nfs_inod << 1107 << 1108 __entry->dev = inode- << 1109 __entry->fileid = nfs << 1110 __entry->fhandle = nf << 1111 __entry->version = in << 1112 __entry->nr_pages = n << 1113 __entry->ret = ret; << 1114 ), << 1115 << 1116 TP_printk( << 1117 "fileid=%02x:%02x:%ll << 1118 MAJOR(__entry->dev), << 1119 (unsigned long long)_ << 1120 __entry->fhandle, __e << 1121 __entry->nr_pages, __ << 1122 ) << 1123 ); << 1124 << 1125 TRACE_EVENT(nfs_initiate_read, 879 TRACE_EVENT(nfs_initiate_read, 1126 TP_PROTO( 880 TP_PROTO( 1127 const struct nfs_pgio 881 const struct nfs_pgio_header *hdr 1128 ), 882 ), 1129 883 1130 TP_ARGS(hdr), 884 TP_ARGS(hdr), 1131 885 1132 TP_STRUCT__entry( 886 TP_STRUCT__entry( 1133 __field(dev_t, dev) 887 __field(dev_t, dev) 1134 __field(u32, fhandle) 888 __field(u32, fhandle) 1135 __field(u64, fileid) 889 __field(u64, fileid) 1136 __field(loff_t, offse 890 __field(loff_t, offset) 1137 __field(u32, count) 891 __field(u32, count) 1138 ), 892 ), 1139 893 1140 TP_fast_assign( 894 TP_fast_assign( 1141 const struct inode *i 895 const struct inode *inode = hdr->inode; 1142 const struct nfs_inod 896 const struct nfs_inode *nfsi = NFS_I(inode); 1143 const struct nfs_fh * 897 const struct nfs_fh *fh = hdr->args.fh ? 1144 898 hdr->args.fh : &nfsi->fh; 1145 899 1146 __entry->offset = hdr 900 __entry->offset = hdr->args.offset; 1147 __entry->count = hdr- 901 __entry->count = hdr->args.count; 1148 __entry->dev = inode- 902 __entry->dev = inode->i_sb->s_dev; 1149 __entry->fileid = nfs 903 __entry->fileid = nfsi->fileid; 1150 __entry->fhandle = nf 904 __entry->fhandle = nfs_fhandle_hash(fh); 1151 ), 905 ), 1152 906 1153 TP_printk( 907 TP_printk( 1154 "fileid=%02x:%02x:%ll 908 "fileid=%02x:%02x:%llu fhandle=0x%08x " 1155 "offset=%lld count=%u 909 "offset=%lld count=%u", 1156 MAJOR(__entry->dev), 910 MAJOR(__entry->dev), MINOR(__entry->dev), 1157 (unsigned long long)_ 911 (unsigned long long)__entry->fileid, 1158 __entry->fhandle, 912 __entry->fhandle, 1159 (long long)__entry->o 913 (long long)__entry->offset, __entry->count 1160 ) 914 ) 1161 ); 915 ); 1162 916 1163 TRACE_EVENT(nfs_readpage_done, 917 TRACE_EVENT(nfs_readpage_done, 1164 TP_PROTO( 918 TP_PROTO( 1165 const struct rpc_task 919 const struct rpc_task *task, 1166 const struct nfs_pgio 920 const struct nfs_pgio_header *hdr 1167 ), 921 ), 1168 922 1169 TP_ARGS(task, hdr), 923 TP_ARGS(task, hdr), 1170 924 1171 TP_STRUCT__entry( 925 TP_STRUCT__entry( 1172 __field(dev_t, dev) 926 __field(dev_t, dev) 1173 __field(u32, fhandle) 927 __field(u32, fhandle) 1174 __field(u64, fileid) 928 __field(u64, fileid) 1175 __field(loff_t, offse 929 __field(loff_t, offset) 1176 __field(u32, arg_coun 930 __field(u32, arg_count) 1177 __field(u32, res_coun 931 __field(u32, res_count) 1178 __field(bool, eof) 932 __field(bool, eof) 1179 __field(int, error) !! 933 __field(int, status) 1180 ), 934 ), 1181 935 1182 TP_fast_assign( 936 TP_fast_assign( 1183 const struct inode *i 937 const struct inode *inode = hdr->inode; 1184 const struct nfs_inod 938 const struct nfs_inode *nfsi = NFS_I(inode); 1185 const struct nfs_fh * 939 const struct nfs_fh *fh = hdr->args.fh ? 1186 940 hdr->args.fh : &nfsi->fh; 1187 941 1188 __entry->error = task !! 942 __entry->status = task->tk_status; 1189 __entry->offset = hdr 943 __entry->offset = hdr->args.offset; 1190 __entry->arg_count = 944 __entry->arg_count = hdr->args.count; 1191 __entry->res_count = 945 __entry->res_count = hdr->res.count; 1192 __entry->eof = hdr->r 946 __entry->eof = hdr->res.eof; 1193 __entry->dev = inode- 947 __entry->dev = inode->i_sb->s_dev; 1194 __entry->fileid = nfs 948 __entry->fileid = nfsi->fileid; 1195 __entry->fhandle = nf 949 __entry->fhandle = nfs_fhandle_hash(fh); 1196 ), 950 ), 1197 951 1198 TP_printk( 952 TP_printk( 1199 "error=%d fileid=%02x !! 953 "fileid=%02x:%02x:%llu fhandle=0x%08x " 1200 "offset=%lld count=%u !! 954 "offset=%lld count=%u res=%u status=%d%s", 1201 MAJOR(__entry->dev), << 1202 (unsigned long long)_ << 1203 __entry->fhandle, << 1204 (long long)__entry->o << 1205 __entry->res_count, _ << 1206 ) << 1207 ); << 1208 << 1209 TRACE_EVENT(nfs_readpage_short, << 1210 TP_PROTO( << 1211 const struct rpc_task << 1212 const struct nfs_pgio << 1213 ), << 1214 << 1215 TP_ARGS(task, hdr), << 1216 << 1217 TP_STRUCT__entry( << 1218 __field(dev_t, dev) << 1219 __field(u32, fhandle) << 1220 __field(u64, fileid) << 1221 __field(loff_t, offse << 1222 __field(u32, arg_coun << 1223 __field(u32, res_coun << 1224 __field(bool, eof) << 1225 __field(int, error) << 1226 ), << 1227 << 1228 TP_fast_assign( << 1229 const struct inode *i << 1230 const struct nfs_inod << 1231 const struct nfs_fh * << 1232 << 1233 << 1234 __entry->error = task << 1235 __entry->offset = hdr << 1236 __entry->arg_count = << 1237 __entry->res_count = << 1238 __entry->eof = hdr->r << 1239 __entry->dev = inode- << 1240 __entry->fileid = nfs << 1241 __entry->fhandle = nf << 1242 ), << 1243 << 1244 TP_printk( << 1245 "error=%d fileid=%02x << 1246 "offset=%lld count=%u << 1247 MAJOR(__entry->dev), 955 MAJOR(__entry->dev), MINOR(__entry->dev), 1248 (unsigned long long)_ 956 (unsigned long long)__entry->fileid, 1249 __entry->fhandle, 957 __entry->fhandle, 1250 (long long)__entry->o 958 (long long)__entry->offset, __entry->arg_count, 1251 __entry->res_count, _ !! 959 __entry->res_count, __entry->status, >> 960 __entry->eof ? " eof" : "" 1252 ) 961 ) 1253 ); 962 ); 1254 963 >> 964 TRACE_DEFINE_ENUM(NFS_UNSTABLE); >> 965 TRACE_DEFINE_ENUM(NFS_DATA_SYNC); >> 966 TRACE_DEFINE_ENUM(NFS_FILE_SYNC); 1255 967 1256 TRACE_EVENT(nfs_pgio_error, !! 968 #define nfs_show_stable(stable) \ 1257 TP_PROTO( !! 969 __print_symbolic(stable, \ 1258 const struct nfs_pgio_header !! 970 { NFS_UNSTABLE, "UNSTABLE" }, \ 1259 int error, !! 971 { NFS_DATA_SYNC, "DATA_SYNC" }, \ 1260 loff_t pos !! 972 { NFS_FILE_SYNC, "FILE_SYNC" }) 1261 ), << 1262 << 1263 TP_ARGS(hdr, error, pos), << 1264 << 1265 TP_STRUCT__entry( << 1266 __field(dev_t, dev) << 1267 __field(u32, fhandle) << 1268 __field(u64, fileid) << 1269 __field(loff_t, offset) << 1270 __field(u32, arg_count) << 1271 __field(u32, res_count) << 1272 __field(loff_t, pos) << 1273 __field(int, error) << 1274 ), << 1275 << 1276 TP_fast_assign( << 1277 const struct inode *inode = h << 1278 const struct nfs_inode *nfsi << 1279 const struct nfs_fh *fh = hdr << 1280 hdr << 1281 << 1282 __entry->error = error; << 1283 __entry->offset = hdr->args.o << 1284 __entry->arg_count = hdr->arg << 1285 __entry->res_count = hdr->res << 1286 __entry->dev = inode->i_sb->s << 1287 __entry->fileid = nfsi->filei << 1288 __entry->fhandle = nfs_fhandl << 1289 ), << 1290 << 1291 TP_printk("error=%d fileid=%02x:%02x: << 1292 "offset=%lld count=%u res=% << 1293 MAJOR(__entry->dev), MINOR(__ << 1294 (unsigned long long)__entry-> << 1295 (long long)__entry->offset, _ << 1296 __entry->pos << 1297 ) << 1298 ); << 1299 973 1300 TRACE_EVENT(nfs_initiate_write, 974 TRACE_EVENT(nfs_initiate_write, 1301 TP_PROTO( 975 TP_PROTO( 1302 const struct nfs_pgio 976 const struct nfs_pgio_header *hdr 1303 ), 977 ), 1304 978 1305 TP_ARGS(hdr), 979 TP_ARGS(hdr), 1306 980 1307 TP_STRUCT__entry( 981 TP_STRUCT__entry( 1308 __field(dev_t, dev) 982 __field(dev_t, dev) 1309 __field(u32, fhandle) 983 __field(u32, fhandle) 1310 __field(u64, fileid) 984 __field(u64, fileid) 1311 __field(loff_t, offse 985 __field(loff_t, offset) 1312 __field(u32, count) 986 __field(u32, count) 1313 __field(unsigned long !! 987 __field(enum nfs3_stable_how, stable) 1314 ), 988 ), 1315 989 1316 TP_fast_assign( 990 TP_fast_assign( 1317 const struct inode *i 991 const struct inode *inode = hdr->inode; 1318 const struct nfs_inod 992 const struct nfs_inode *nfsi = NFS_I(inode); 1319 const struct nfs_fh * 993 const struct nfs_fh *fh = hdr->args.fh ? 1320 994 hdr->args.fh : &nfsi->fh; 1321 995 1322 __entry->offset = hdr 996 __entry->offset = hdr->args.offset; 1323 __entry->count = hdr- 997 __entry->count = hdr->args.count; 1324 __entry->stable = hdr 998 __entry->stable = hdr->args.stable; 1325 __entry->dev = inode- 999 __entry->dev = inode->i_sb->s_dev; 1326 __entry->fileid = nfs 1000 __entry->fileid = nfsi->fileid; 1327 __entry->fhandle = nf 1001 __entry->fhandle = nfs_fhandle_hash(fh); 1328 ), 1002 ), 1329 1003 1330 TP_printk( 1004 TP_printk( 1331 "fileid=%02x:%02x:%ll 1005 "fileid=%02x:%02x:%llu fhandle=0x%08x " 1332 "offset=%lld count=%u 1006 "offset=%lld count=%u stable=%s", 1333 MAJOR(__entry->dev), 1007 MAJOR(__entry->dev), MINOR(__entry->dev), 1334 (unsigned long long)_ 1008 (unsigned long long)__entry->fileid, 1335 __entry->fhandle, 1009 __entry->fhandle, 1336 (long long)__entry->o 1010 (long long)__entry->offset, __entry->count, 1337 show_nfs_stable_how(_ !! 1011 nfs_show_stable(__entry->stable) 1338 ) 1012 ) 1339 ); 1013 ); 1340 1014 1341 TRACE_EVENT(nfs_writeback_done, 1015 TRACE_EVENT(nfs_writeback_done, 1342 TP_PROTO( 1016 TP_PROTO( 1343 const struct rpc_task 1017 const struct rpc_task *task, 1344 const struct nfs_pgio 1018 const struct nfs_pgio_header *hdr 1345 ), 1019 ), 1346 1020 1347 TP_ARGS(task, hdr), 1021 TP_ARGS(task, hdr), 1348 1022 1349 TP_STRUCT__entry( 1023 TP_STRUCT__entry( 1350 __field(dev_t, dev) 1024 __field(dev_t, dev) 1351 __field(u32, fhandle) 1025 __field(u32, fhandle) 1352 __field(u64, fileid) 1026 __field(u64, fileid) 1353 __field(loff_t, offse 1027 __field(loff_t, offset) 1354 __field(u32, arg_coun 1028 __field(u32, arg_count) 1355 __field(u32, res_coun 1029 __field(u32, res_count) 1356 __field(int, error) !! 1030 __field(int, status) 1357 __field(unsigned long !! 1031 __field(enum nfs3_stable_how, stable) 1358 __array(char, verifie 1032 __array(char, verifier, NFS4_VERIFIER_SIZE) 1359 ), 1033 ), 1360 1034 1361 TP_fast_assign( 1035 TP_fast_assign( 1362 const struct inode *i 1036 const struct inode *inode = hdr->inode; 1363 const struct nfs_inod 1037 const struct nfs_inode *nfsi = NFS_I(inode); 1364 const struct nfs_fh * 1038 const struct nfs_fh *fh = hdr->args.fh ? 1365 1039 hdr->args.fh : &nfsi->fh; 1366 const struct nfs_writ 1040 const struct nfs_writeverf *verf = hdr->res.verf; 1367 1041 1368 __entry->error = task !! 1042 __entry->status = task->tk_status; 1369 __entry->offset = hdr 1043 __entry->offset = hdr->args.offset; 1370 __entry->arg_count = 1044 __entry->arg_count = hdr->args.count; 1371 __entry->res_count = 1045 __entry->res_count = hdr->res.count; 1372 __entry->stable = ver 1046 __entry->stable = verf->committed; 1373 memcpy(__entry->verif 1047 memcpy(__entry->verifier, 1374 &verf->verifi 1048 &verf->verifier, 1375 NFS4_VERIFIER 1049 NFS4_VERIFIER_SIZE); 1376 __entry->dev = inode- 1050 __entry->dev = inode->i_sb->s_dev; 1377 __entry->fileid = nfs 1051 __entry->fileid = nfsi->fileid; 1378 __entry->fhandle = nf 1052 __entry->fhandle = nfs_fhandle_hash(fh); 1379 ), 1053 ), 1380 1054 1381 TP_printk( 1055 TP_printk( 1382 "error=%d fileid=%02x !! 1056 "fileid=%02x:%02x:%llu fhandle=0x%08x " 1383 "offset=%lld count=%u !! 1057 "offset=%lld count=%u res=%u status=%d stable=%s " 1384 "verifier=%s", __entr !! 1058 "verifier=%s", 1385 MAJOR(__entry->dev), 1059 MAJOR(__entry->dev), MINOR(__entry->dev), 1386 (unsigned long long)_ 1060 (unsigned long long)__entry->fileid, 1387 __entry->fhandle, 1061 __entry->fhandle, 1388 (long long)__entry->o 1062 (long long)__entry->offset, __entry->arg_count, 1389 __entry->res_count, !! 1063 __entry->res_count, __entry->status, 1390 show_nfs_stable_how(_ !! 1064 nfs_show_stable(__entry->stable), 1391 show_nfs4_verifier(__ !! 1065 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 1392 ) 1066 ) 1393 ); 1067 ); 1394 1068 1395 DECLARE_EVENT_CLASS(nfs_page_error_class, 1069 DECLARE_EVENT_CLASS(nfs_page_error_class, 1396 TP_PROTO( 1070 TP_PROTO( 1397 const struct inode *i << 1398 const struct nfs_page 1071 const struct nfs_page *req, 1399 int error 1072 int error 1400 ), 1073 ), 1401 1074 1402 TP_ARGS(inode, req, error), !! 1075 TP_ARGS(req, error), 1403 1076 1404 TP_STRUCT__entry( 1077 TP_STRUCT__entry( 1405 __field(dev_t, dev) !! 1078 __field(const void *, req) 1406 __field(u32, fhandle) !! 1079 __field(pgoff_t, index) 1407 __field(u64, fileid) !! 1080 __field(unsigned int, offset) 1408 __field(loff_t, offse !! 1081 __field(unsigned int, pgbase) 1409 __field(unsigned int, !! 1082 __field(unsigned int, bytes) 1410 __field(int, error) 1083 __field(int, error) 1411 ), 1084 ), 1412 1085 1413 TP_fast_assign( 1086 TP_fast_assign( 1414 const struct nfs_inod !! 1087 __entry->req = req; 1415 __entry->dev = inode- !! 1088 __entry->index = req->wb_index; 1416 __entry->fileid = nfs !! 1089 __entry->offset = req->wb_offset; 1417 __entry->fhandle = nf !! 1090 __entry->pgbase = req->wb_pgbase; 1418 __entry->offset = req !! 1091 __entry->bytes = req->wb_bytes; 1419 __entry->count = req- << 1420 __entry->error = erro 1092 __entry->error = error; 1421 ), 1093 ), 1422 1094 1423 TP_printk( 1095 TP_printk( 1424 "error=%d fileid=%02x !! 1096 "req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d", 1425 "offset=%lld count=%u !! 1097 __entry->req, __entry->index, __entry->offset, 1426 MAJOR(__entry->dev), !! 1098 __entry->pgbase, __entry->bytes, __entry->error 1427 (unsigned long long)_ << 1428 __entry->fhandle, __e << 1429 __entry->count << 1430 ) 1099 ) 1431 ); 1100 ); 1432 1101 1433 #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1102 #define DEFINE_NFS_PAGEERR_EVENT(name) \ 1434 DEFINE_EVENT(nfs_page_error_class, na 1103 DEFINE_EVENT(nfs_page_error_class, name, \ 1435 TP_PROTO( \ 1104 TP_PROTO( \ 1436 const struct << 1437 const struct 1105 const struct nfs_page *req, \ 1438 int error \ 1106 int error \ 1439 ), \ 1107 ), \ 1440 TP_ARGS(inode, req, e !! 1108 TP_ARGS(req, error)) 1441 1109 1442 DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1110 DEFINE_NFS_PAGEERR_EVENT(nfs_write_error); 1443 DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1111 DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error); 1444 DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1112 DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error); 1445 1113 1446 TRACE_EVENT(nfs_initiate_commit, 1114 TRACE_EVENT(nfs_initiate_commit, 1447 TP_PROTO( 1115 TP_PROTO( 1448 const struct nfs_comm 1116 const struct nfs_commit_data *data 1449 ), 1117 ), 1450 1118 1451 TP_ARGS(data), 1119 TP_ARGS(data), 1452 1120 1453 TP_STRUCT__entry( 1121 TP_STRUCT__entry( 1454 __field(dev_t, dev) 1122 __field(dev_t, dev) 1455 __field(u32, fhandle) 1123 __field(u32, fhandle) 1456 __field(u64, fileid) 1124 __field(u64, fileid) 1457 __field(loff_t, offse 1125 __field(loff_t, offset) 1458 __field(u32, count) 1126 __field(u32, count) 1459 ), 1127 ), 1460 1128 1461 TP_fast_assign( 1129 TP_fast_assign( 1462 const struct inode *i 1130 const struct inode *inode = data->inode; 1463 const struct nfs_inod 1131 const struct nfs_inode *nfsi = NFS_I(inode); 1464 const struct nfs_fh * 1132 const struct nfs_fh *fh = data->args.fh ? 1465 1133 data->args.fh : &nfsi->fh; 1466 1134 1467 __entry->offset = dat 1135 __entry->offset = data->args.offset; 1468 __entry->count = data 1136 __entry->count = data->args.count; 1469 __entry->dev = inode- 1137 __entry->dev = inode->i_sb->s_dev; 1470 __entry->fileid = nfs 1138 __entry->fileid = nfsi->fileid; 1471 __entry->fhandle = nf 1139 __entry->fhandle = nfs_fhandle_hash(fh); 1472 ), 1140 ), 1473 1141 1474 TP_printk( 1142 TP_printk( 1475 "fileid=%02x:%02x:%ll 1143 "fileid=%02x:%02x:%llu fhandle=0x%08x " 1476 "offset=%lld count=%u 1144 "offset=%lld count=%u", 1477 MAJOR(__entry->dev), 1145 MAJOR(__entry->dev), MINOR(__entry->dev), 1478 (unsigned long long)_ 1146 (unsigned long long)__entry->fileid, 1479 __entry->fhandle, 1147 __entry->fhandle, 1480 (long long)__entry->o 1148 (long long)__entry->offset, __entry->count 1481 ) 1149 ) 1482 ); 1150 ); 1483 1151 1484 TRACE_EVENT(nfs_commit_done, 1152 TRACE_EVENT(nfs_commit_done, 1485 TP_PROTO( 1153 TP_PROTO( 1486 const struct rpc_task 1154 const struct rpc_task *task, 1487 const struct nfs_comm 1155 const struct nfs_commit_data *data 1488 ), 1156 ), 1489 1157 1490 TP_ARGS(task, data), 1158 TP_ARGS(task, data), 1491 1159 1492 TP_STRUCT__entry( 1160 TP_STRUCT__entry( 1493 __field(dev_t, dev) 1161 __field(dev_t, dev) 1494 __field(u32, fhandle) 1162 __field(u32, fhandle) 1495 __field(u64, fileid) 1163 __field(u64, fileid) 1496 __field(loff_t, offse 1164 __field(loff_t, offset) 1497 __field(int, error) !! 1165 __field(int, status) 1498 __field(unsigned long !! 1166 __field(enum nfs3_stable_how, stable) 1499 __array(char, verifie 1167 __array(char, verifier, NFS4_VERIFIER_SIZE) 1500 ), 1168 ), 1501 1169 1502 TP_fast_assign( 1170 TP_fast_assign( 1503 const struct inode *i 1171 const struct inode *inode = data->inode; 1504 const struct nfs_inod 1172 const struct nfs_inode *nfsi = NFS_I(inode); 1505 const struct nfs_fh * 1173 const struct nfs_fh *fh = data->args.fh ? 1506 1174 data->args.fh : &nfsi->fh; 1507 const struct nfs_writ 1175 const struct nfs_writeverf *verf = data->res.verf; 1508 1176 1509 __entry->error = task !! 1177 __entry->status = task->tk_status; 1510 __entry->offset = dat 1178 __entry->offset = data->args.offset; 1511 __entry->stable = ver 1179 __entry->stable = verf->committed; 1512 memcpy(__entry->verif 1180 memcpy(__entry->verifier, 1513 &verf->verifi 1181 &verf->verifier, 1514 NFS4_VERIFIER 1182 NFS4_VERIFIER_SIZE); 1515 __entry->dev = inode- 1183 __entry->dev = inode->i_sb->s_dev; 1516 __entry->fileid = nfs 1184 __entry->fileid = nfsi->fileid; 1517 __entry->fhandle = nf 1185 __entry->fhandle = nfs_fhandle_hash(fh); 1518 ), 1186 ), 1519 1187 1520 TP_printk( 1188 TP_printk( 1521 "error=%d fileid=%02x !! 1189 "fileid=%02x:%02x:%llu fhandle=0x%08x " 1522 "offset=%lld stable=% !! 1190 "offset=%lld status=%d stable=%s verifier=%s", 1523 MAJOR(__entry->dev), 1191 MAJOR(__entry->dev), MINOR(__entry->dev), 1524 (unsigned long long)_ 1192 (unsigned long long)__entry->fileid, 1525 __entry->fhandle, 1193 __entry->fhandle, 1526 (long long)__entry->o !! 1194 (long long)__entry->offset, __entry->status, 1527 show_nfs_stable_how(_ !! 1195 nfs_show_stable(__entry->stable), 1528 show_nfs4_verifier(__ !! 1196 __print_hex_str(__entry->verifier, NFS4_VERIFIER_SIZE) 1529 ) 1197 ) 1530 ); 1198 ); 1531 1199 1532 #define nfs_show_direct_req_flags(v) \ << 1533 __print_flags(v, "|", \ << 1534 { NFS_ODIRECT_DO_COMM << 1535 { NFS_ODIRECT_RESCHED << 1536 { NFS_ODIRECT_SHOULD_ << 1537 { NFS_ODIRECT_DONE, " << 1538 << 1539 DECLARE_EVENT_CLASS(nfs_direct_req_class, << 1540 TP_PROTO( << 1541 const struct nfs_dire << 1542 ), << 1543 << 1544 TP_ARGS(dreq), << 1545 << 1546 TP_STRUCT__entry( << 1547 __field(dev_t, dev) << 1548 __field(u64, fileid) << 1549 __field(u32, fhandle) << 1550 __field(loff_t, offse << 1551 __field(ssize_t, coun << 1552 __field(ssize_t, erro << 1553 __field(int, flags) << 1554 ), << 1555 << 1556 TP_fast_assign( << 1557 const struct inode *i << 1558 const struct nfs_inod << 1559 const struct nfs_fh * << 1560 << 1561 __entry->dev = inode- << 1562 __entry->fileid = nfs << 1563 __entry->fhandle = nf << 1564 __entry->offset = dre << 1565 __entry->count = dreq << 1566 __entry->error = dreq << 1567 __entry->flags = dreq << 1568 ), << 1569 << 1570 TP_printk( << 1571 "error=%zd fileid=%02 << 1572 "offset=%lld count=%z << 1573 __entry->error, MAJOR << 1574 MINOR(__entry->dev), << 1575 (unsigned long long)_ << 1576 __entry->fhandle, __e << 1577 __entry->count, << 1578 nfs_show_direct_req_f << 1579 ) << 1580 ); << 1581 << 1582 #define DEFINE_NFS_DIRECT_REQ_EVENT(name) \ << 1583 DEFINE_EVENT(nfs_direct_req_class, na << 1584 TP_PROTO( \ << 1585 const struct << 1586 ), \ << 1587 TP_ARGS(dreq)) << 1588 << 1589 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_commit << 1590 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_resche << 1591 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_ << 1592 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_ << 1593 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_ << 1594 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_ << 1595 << 1596 TRACE_EVENT(nfs_fh_to_dentry, 1200 TRACE_EVENT(nfs_fh_to_dentry, 1597 TP_PROTO( 1201 TP_PROTO( 1598 const struct super_bl 1202 const struct super_block *sb, 1599 const struct nfs_fh * 1203 const struct nfs_fh *fh, 1600 u64 fileid, 1204 u64 fileid, 1601 int error 1205 int error 1602 ), 1206 ), 1603 1207 1604 TP_ARGS(sb, fh, fileid, error 1208 TP_ARGS(sb, fh, fileid, error), 1605 1209 1606 TP_STRUCT__entry( 1210 TP_STRUCT__entry( 1607 __field(int, error) 1211 __field(int, error) 1608 __field(dev_t, dev) 1212 __field(dev_t, dev) 1609 __field(u32, fhandle) 1213 __field(u32, fhandle) 1610 __field(u64, fileid) 1214 __field(u64, fileid) 1611 ), 1215 ), 1612 1216 1613 TP_fast_assign( 1217 TP_fast_assign( 1614 __entry->error = erro 1218 __entry->error = error; 1615 __entry->dev = sb->s_ 1219 __entry->dev = sb->s_dev; 1616 __entry->fileid = fil 1220 __entry->fileid = fileid; 1617 __entry->fhandle = nf 1221 __entry->fhandle = nfs_fhandle_hash(fh); 1618 ), 1222 ), 1619 1223 1620 TP_printk( 1224 TP_printk( 1621 "error=%d fileid=%02x 1225 "error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ", 1622 __entry->error, 1226 __entry->error, 1623 MAJOR(__entry->dev), 1227 MAJOR(__entry->dev), MINOR(__entry->dev), 1624 (unsigned long long)_ 1228 (unsigned long long)__entry->fileid, 1625 __entry->fhandle 1229 __entry->fhandle 1626 ) 1230 ) 1627 ); 1231 ); 1628 1232 1629 TRACE_EVENT(nfs_mount_assign, !! 1233 TRACE_DEFINE_ENUM(NFS_OK); 1630 TP_PROTO( !! 1234 TRACE_DEFINE_ENUM(NFSERR_PERM); 1631 const char *option, !! 1235 TRACE_DEFINE_ENUM(NFSERR_NOENT); 1632 const char *value !! 1236 TRACE_DEFINE_ENUM(NFSERR_IO); 1633 ), !! 1237 TRACE_DEFINE_ENUM(NFSERR_NXIO); 1634 !! 1238 TRACE_DEFINE_ENUM(ECHILD); 1635 TP_ARGS(option, value), !! 1239 TRACE_DEFINE_ENUM(NFSERR_EAGAIN); >> 1240 TRACE_DEFINE_ENUM(NFSERR_ACCES); >> 1241 TRACE_DEFINE_ENUM(NFSERR_EXIST); >> 1242 TRACE_DEFINE_ENUM(NFSERR_XDEV); >> 1243 TRACE_DEFINE_ENUM(NFSERR_NODEV); >> 1244 TRACE_DEFINE_ENUM(NFSERR_NOTDIR); >> 1245 TRACE_DEFINE_ENUM(NFSERR_ISDIR); >> 1246 TRACE_DEFINE_ENUM(NFSERR_INVAL); >> 1247 TRACE_DEFINE_ENUM(NFSERR_FBIG); >> 1248 TRACE_DEFINE_ENUM(NFSERR_NOSPC); >> 1249 TRACE_DEFINE_ENUM(NFSERR_ROFS); >> 1250 TRACE_DEFINE_ENUM(NFSERR_MLINK); >> 1251 TRACE_DEFINE_ENUM(NFSERR_OPNOTSUPP); >> 1252 TRACE_DEFINE_ENUM(NFSERR_NAMETOOLONG); >> 1253 TRACE_DEFINE_ENUM(NFSERR_NOTEMPTY); >> 1254 TRACE_DEFINE_ENUM(NFSERR_DQUOT); >> 1255 TRACE_DEFINE_ENUM(NFSERR_STALE); >> 1256 TRACE_DEFINE_ENUM(NFSERR_REMOTE); >> 1257 TRACE_DEFINE_ENUM(NFSERR_WFLUSH); >> 1258 TRACE_DEFINE_ENUM(NFSERR_BADHANDLE); >> 1259 TRACE_DEFINE_ENUM(NFSERR_NOT_SYNC); >> 1260 TRACE_DEFINE_ENUM(NFSERR_BAD_COOKIE); >> 1261 TRACE_DEFINE_ENUM(NFSERR_NOTSUPP); >> 1262 TRACE_DEFINE_ENUM(NFSERR_TOOSMALL); >> 1263 TRACE_DEFINE_ENUM(NFSERR_SERVERFAULT); >> 1264 TRACE_DEFINE_ENUM(NFSERR_BADTYPE); >> 1265 TRACE_DEFINE_ENUM(NFSERR_JUKEBOX); >> 1266 >> 1267 #define nfs_show_status(x) \ >> 1268 __print_symbolic(x, \ >> 1269 { NFS_OK, "OK" }, \ >> 1270 { NFSERR_PERM, "PERM" }, \ >> 1271 { NFSERR_NOENT, "NOENT" }, \ >> 1272 { NFSERR_IO, "IO" }, \ >> 1273 { NFSERR_NXIO, "NXIO" }, \ >> 1274 { ECHILD, "CHILD" }, \ >> 1275 { NFSERR_EAGAIN, "AGAIN" }, \ >> 1276 { NFSERR_ACCES, "ACCES" }, \ >> 1277 { NFSERR_EXIST, "EXIST" }, \ >> 1278 { NFSERR_XDEV, "XDEV" }, \ >> 1279 { NFSERR_NODEV, "NODEV" }, \ >> 1280 { NFSERR_NOTDIR, "NOTDIR" }, \ >> 1281 { NFSERR_ISDIR, "ISDIR" }, \ >> 1282 { NFSERR_INVAL, "INVAL" }, \ >> 1283 { NFSERR_FBIG, "FBIG" }, \ >> 1284 { NFSERR_NOSPC, "NOSPC" }, \ >> 1285 { NFSERR_ROFS, "ROFS" }, \ >> 1286 { NFSERR_MLINK, "MLINK" }, \ >> 1287 { NFSERR_OPNOTSUPP, "OPNOTSUPP" }, \ >> 1288 { NFSERR_NAMETOOLONG, "NAMETOOLONG" }, \ >> 1289 { NFSERR_NOTEMPTY, "NOTEMPTY" }, \ >> 1290 { NFSERR_DQUOT, "DQUOT" }, \ >> 1291 { NFSERR_STALE, "STALE" }, \ >> 1292 { NFSERR_REMOTE, "REMOTE" }, \ >> 1293 { NFSERR_WFLUSH, "WFLUSH" }, \ >> 1294 { NFSERR_BADHANDLE, "BADHANDLE" }, \ >> 1295 { NFSERR_NOT_SYNC, "NOTSYNC" }, \ >> 1296 { NFSERR_BAD_COOKIE, "BADCOOKIE" }, \ >> 1297 { NFSERR_NOTSUPP, "NOTSUPP" }, \ >> 1298 { NFSERR_TOOSMALL, "TOOSMALL" }, \ >> 1299 { NFSERR_SERVERFAULT, "REMOTEIO" }, \ >> 1300 { NFSERR_BADTYPE, "BADTYPE" }, \ >> 1301 { NFSERR_JUKEBOX, "JUKEBOX" }) 1636 1302 1637 TP_STRUCT__entry( !! 1303 TRACE_EVENT(nfs_xdr_status, 1638 __string(option, option) << 1639 __string(value, value) << 1640 ), << 1641 << 1642 TP_fast_assign( << 1643 __assign_str(option); << 1644 __assign_str(value); << 1645 ), << 1646 << 1647 TP_printk("option %s=%s", << 1648 __get_str(option), __get_str( << 1649 ) << 1650 ); << 1651 << 1652 TRACE_EVENT(nfs_mount_option, << 1653 TP_PROTO( << 1654 const struct fs_parameter *pa << 1655 ), << 1656 << 1657 TP_ARGS(param), << 1658 << 1659 TP_STRUCT__entry( << 1660 __string(option, param->key) << 1661 ), << 1662 << 1663 TP_fast_assign( << 1664 __assign_str(option); << 1665 ), << 1666 << 1667 TP_printk("option %s", __get_str(opti << 1668 ); << 1669 << 1670 TRACE_EVENT(nfs_mount_path, << 1671 TP_PROTO( << 1672 const char *path << 1673 ), << 1674 << 1675 TP_ARGS(path), << 1676 << 1677 TP_STRUCT__entry( << 1678 __string(path, path) << 1679 ), << 1680 << 1681 TP_fast_assign( << 1682 __assign_str(path); << 1683 ), << 1684 << 1685 TP_printk("path='%s'", __get_str(path << 1686 ); << 1687 << 1688 DECLARE_EVENT_CLASS(nfs_xdr_event, << 1689 TP_PROTO( 1304 TP_PROTO( 1690 const struct xdr_stre 1305 const struct xdr_stream *xdr, 1691 int error 1306 int error 1692 ), 1307 ), 1693 1308 1694 TP_ARGS(xdr, error), 1309 TP_ARGS(xdr, error), 1695 1310 1696 TP_STRUCT__entry( 1311 TP_STRUCT__entry( 1697 __field(unsigned int, 1312 __field(unsigned int, task_id) 1698 __field(unsigned int, 1313 __field(unsigned int, client_id) 1699 __field(u32, xid) 1314 __field(u32, xid) 1700 __field(int, version) << 1701 __field(unsigned long 1315 __field(unsigned long, error) 1702 __string(program, << 1703 xdr->rqst->r << 1704 __string(procedure, << 1705 xdr->rqst->r << 1706 ), 1316 ), 1707 1317 1708 TP_fast_assign( 1318 TP_fast_assign( 1709 const struct rpc_rqst 1319 const struct rpc_rqst *rqstp = xdr->rqst; 1710 const struct rpc_task 1320 const struct rpc_task *task = rqstp->rq_task; 1711 1321 1712 __entry->task_id = ta 1322 __entry->task_id = task->tk_pid; 1713 __entry->client_id = 1323 __entry->client_id = task->tk_client->cl_clid; 1714 __entry->xid = be32_t 1324 __entry->xid = be32_to_cpu(rqstp->rq_xid); 1715 __entry->version = ta << 1716 __entry->error = erro 1325 __entry->error = error; 1717 __assign_str(program) << 1718 __assign_str(procedur << 1719 ), 1326 ), 1720 1327 1721 TP_printk(SUNRPC_TRACE_TASK_S !! 1328 TP_printk( 1722 " xid=0x%08x %sv%d !! 1329 "task:%u@%d xid=0x%08x error=%ld (%s)", 1723 __entry->task_id, __e 1330 __entry->task_id, __entry->client_id, __entry->xid, 1724 __get_str(program), _ !! 1331 -__entry->error, nfs_show_status(__entry->error) 1725 __get_str(procedure), << 1726 show_nfs_status(__ent << 1727 ) 1332 ) 1728 ); 1333 ); 1729 #define DEFINE_NFS_XDR_EVENT(name) \ << 1730 DEFINE_EVENT(nfs_xdr_event, name, \ << 1731 TP_PROTO( \ << 1732 const struct << 1733 int error \ << 1734 ), \ << 1735 TP_ARGS(xdr, error)) << 1736 DEFINE_NFS_XDR_EVENT(nfs_xdr_status); << 1737 DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle); << 1738 1334 1739 #endif /* _TRACE_NFS_H */ 1335 #endif /* _TRACE_NFS_H */ 1740 1336 1741 #undef TRACE_INCLUDE_PATH 1337 #undef TRACE_INCLUDE_PATH 1742 #define TRACE_INCLUDE_PATH . 1338 #define TRACE_INCLUDE_PATH . 1743 #define TRACE_INCLUDE_FILE nfstrace 1339 #define TRACE_INCLUDE_FILE nfstrace 1744 /* This part must be outside protection */ 1340 /* This part must be outside protection */ 1745 #include <trace/define_trace.h> 1341 #include <trace/define_trace.h> 1746 1342
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.