Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */
2 : : /*
3 : : * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com>
4 : : */
5 : : #undef TRACE_SYSTEM
6 : : #define TRACE_SYSTEM nfs
7 : :
8 : : #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ)
9 : : #define _TRACE_NFS_H
10 : :
11 : : #include <linux/tracepoint.h>
12 : : #include <linux/iversion.h>
13 : :
14 : : TRACE_DEFINE_ENUM(DT_UNKNOWN);
15 : : TRACE_DEFINE_ENUM(DT_FIFO);
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);
48 : :
49 : : #define nfs_show_cache_validity(v) \
50 : : __print_flags(v, "|", \
51 : : { NFS_INO_INVALID_DATA, "INVALID_DATA" }, \
52 : : { NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \
53 : : { NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \
54 : : { NFS_INO_INVALID_ACL, "INVALID_ACL" }, \
55 : : { NFS_INO_REVAL_PAGECACHE, "REVAL_PAGECACHE" }, \
56 : : { NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \
57 : : { NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \
58 : : { NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \
59 : : { NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \
60 : : { NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \
61 : : { NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \
62 : : { NFS_INO_INVALID_OTHER, "INVALID_OTHER" })
63 : :
64 : : TRACE_DEFINE_ENUM(NFS_INO_ADVISE_RDPLUS);
65 : : TRACE_DEFINE_ENUM(NFS_INO_STALE);
66 : : TRACE_DEFINE_ENUM(NFS_INO_ACL_LRU_SET);
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);
74 : :
75 : : #define nfs_show_nfsi_flags(v) \
76 : : __print_flags(v, "|", \
77 : : { BIT(NFS_INO_ADVISE_RDPLUS), "ADVISE_RDPLUS" }, \
78 : : { BIT(NFS_INO_STALE), "STALE" }, \
79 : : { BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \
80 : : { BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \
81 : : { BIT(NFS_INO_FSCACHE), "FSCACHE" }, \
82 : : { BIT(NFS_INO_FSCACHE_LOCK), "FSCACHE_LOCK" }, \
83 : : { BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \
84 : : { BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \
85 : : { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
86 : : { BIT(NFS_INO_ODIRECT), "ODIRECT" })
87 : :
88 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_inode_event,
# # # # #
# + - + -
+ - # # ]
89 : : TP_PROTO(
90 : : const struct inode *inode
91 : : ),
92 : :
93 : : TP_ARGS(inode),
94 : :
95 : : TP_STRUCT__entry(
96 : : __field(dev_t, dev)
97 : : __field(u32, fhandle)
98 : : __field(u64, fileid)
99 : : __field(u64, version)
100 : : ),
101 : :
102 : : TP_fast_assign(
103 : : const struct nfs_inode *nfsi = NFS_I(inode);
104 : : __entry->dev = inode->i_sb->s_dev;
105 : : __entry->fileid = nfsi->fileid;
106 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
107 : : __entry->version = inode_peek_iversion_raw(inode);
108 : : ),
109 : :
110 : : TP_printk(
111 : : "fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ",
112 : : MAJOR(__entry->dev), MINOR(__entry->dev),
113 : : (unsigned long long)__entry->fileid,
114 : : __entry->fhandle,
115 : : (unsigned long long)__entry->version
116 : : )
117 : : );
118 : :
119 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_inode_event_done,
# # # # #
# # # # #
+ - + - +
- + - + -
+ - + - +
- # # ]
120 : : TP_PROTO(
121 : : const struct inode *inode,
122 : : int error
123 : : ),
124 : :
125 : : TP_ARGS(inode, error),
126 : :
127 : : TP_STRUCT__entry(
128 : : __field(unsigned long, error)
129 : : __field(dev_t, dev)
130 : : __field(u32, fhandle)
131 : : __field(unsigned char, type)
132 : : __field(u64, fileid)
133 : : __field(u64, version)
134 : : __field(loff_t, size)
135 : : __field(unsigned long, nfsi_flags)
136 : : __field(unsigned long, cache_validity)
137 : : ),
138 : :
139 : : TP_fast_assign(
140 : : const struct nfs_inode *nfsi = NFS_I(inode);
141 : : __entry->error = error < 0 ? -error : 0;
142 : : __entry->dev = inode->i_sb->s_dev;
143 : : __entry->fileid = nfsi->fileid;
144 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
145 : : __entry->type = nfs_umode_to_dtype(inode->i_mode);
146 : : __entry->version = inode_peek_iversion_raw(inode);
147 : : __entry->size = i_size_read(inode);
148 : : __entry->nfsi_flags = nfsi->flags;
149 : : __entry->cache_validity = nfsi->cache_validity;
150 : : ),
151 : :
152 : : TP_printk(
153 : : "error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
154 : : "type=%u (%s) version=%llu size=%lld "
155 : : "cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)",
156 : : -__entry->error, nfs_show_status(__entry->error),
157 : : MAJOR(__entry->dev), MINOR(__entry->dev),
158 : : (unsigned long long)__entry->fileid,
159 : : __entry->fhandle,
160 : : __entry->type,
161 : : nfs_show_file_type(__entry->type),
162 : : (unsigned long long)__entry->version,
163 : : (long long)__entry->size,
164 : : __entry->cache_validity,
165 : : nfs_show_cache_validity(__entry->cache_validity),
166 : : __entry->nfsi_flags,
167 : : nfs_show_nfsi_flags(__entry->nfsi_flags)
168 : : )
169 : : );
170 : :
171 : : #define DEFINE_NFS_INODE_EVENT(name) \
172 : : DEFINE_EVENT(nfs_inode_event, name, \
173 : : TP_PROTO( \
174 : : const struct inode *inode \
175 : : ), \
176 : : TP_ARGS(inode))
177 : : #define DEFINE_NFS_INODE_EVENT_DONE(name) \
178 : : DEFINE_EVENT(nfs_inode_event_done, name, \
179 : : TP_PROTO( \
180 : : const struct inode *inode, \
181 : : int error \
182 : : ), \
183 : : TP_ARGS(inode, error))
184 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
# # # # ]
185 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
# # # # ]
186 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
# # # # ]
187 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
# # # # ]
188 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
# # # # ]
189 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
# # # # ]
190 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
# # # # ]
191 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
# # # # ]
192 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
# # # # ]
193 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
# # # # ]
194 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter);
# # # # ]
195 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit);
# # # # ]
196 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
# # # # ]
197 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
# # # # ]
198 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
# # # # ]
199 [ # # # # ]: 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
200 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT(nfs_access_enter);
# # # # ]
201 [ # # # # : 0 : DEFINE_NFS_INODE_EVENT_DONE(nfs_access_exit);
# # # # ]
202 : :
203 : : TRACE_DEFINE_ENUM(LOOKUP_FOLLOW);
204 : : TRACE_DEFINE_ENUM(LOOKUP_DIRECTORY);
205 : : TRACE_DEFINE_ENUM(LOOKUP_AUTOMOUNT);
206 : : TRACE_DEFINE_ENUM(LOOKUP_PARENT);
207 : : TRACE_DEFINE_ENUM(LOOKUP_REVAL);
208 : : TRACE_DEFINE_ENUM(LOOKUP_RCU);
209 : : TRACE_DEFINE_ENUM(LOOKUP_NO_REVAL);
210 : : TRACE_DEFINE_ENUM(LOOKUP_OPEN);
211 : : TRACE_DEFINE_ENUM(LOOKUP_CREATE);
212 : : TRACE_DEFINE_ENUM(LOOKUP_EXCL);
213 : : TRACE_DEFINE_ENUM(LOOKUP_RENAME_TARGET);
214 : : TRACE_DEFINE_ENUM(LOOKUP_JUMPED);
215 : : TRACE_DEFINE_ENUM(LOOKUP_ROOT);
216 : : TRACE_DEFINE_ENUM(LOOKUP_EMPTY);
217 : : TRACE_DEFINE_ENUM(LOOKUP_DOWN);
218 : :
219 : : #define show_lookup_flags(flags) \
220 : : __print_flags(flags, "|", \
221 : : { LOOKUP_FOLLOW, "FOLLOW" }, \
222 : : { LOOKUP_DIRECTORY, "DIRECTORY" }, \
223 : : { LOOKUP_AUTOMOUNT, "AUTOMOUNT" }, \
224 : : { LOOKUP_PARENT, "PARENT" }, \
225 : : { LOOKUP_REVAL, "REVAL" }, \
226 : : { LOOKUP_RCU, "RCU" }, \
227 : : { LOOKUP_NO_REVAL, "NO_REVAL" }, \
228 : : { LOOKUP_OPEN, "OPEN" }, \
229 : : { LOOKUP_CREATE, "CREATE" }, \
230 : : { LOOKUP_EXCL, "EXCL" }, \
231 : : { LOOKUP_RENAME_TARGET, "RENAME_TARGET" }, \
232 : : { LOOKUP_JUMPED, "JUMPED" }, \
233 : : { LOOKUP_ROOT, "ROOT" }, \
234 : : { LOOKUP_EMPTY, "EMPTY" }, \
235 : : { LOOKUP_DOWN, "DOWN" })
236 : :
237 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_lookup_event,
# # # # #
# # # # #
# # # # +
- + - + -
# # ]
238 : : TP_PROTO(
239 : : const struct inode *dir,
240 : : const struct dentry *dentry,
241 : : unsigned int flags
242 : : ),
243 : :
244 : : TP_ARGS(dir, dentry, flags),
245 : :
246 : : TP_STRUCT__entry(
247 : : __field(unsigned long, flags)
248 : : __field(dev_t, dev)
249 : : __field(u64, dir)
250 : : __string(name, dentry->d_name.name)
251 : : ),
252 : :
253 : : TP_fast_assign(
254 : : __entry->dev = dir->i_sb->s_dev;
255 : : __entry->dir = NFS_FILEID(dir);
256 : : __entry->flags = flags;
257 : : __assign_str(name, dentry->d_name.name);
258 : : ),
259 : :
260 : : TP_printk(
261 : : "flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
262 : : __entry->flags,
263 : : show_lookup_flags(__entry->flags),
264 : : MAJOR(__entry->dev), MINOR(__entry->dev),
265 : : (unsigned long long)__entry->dir,
266 : : __get_str(name)
267 : : )
268 : : );
269 : :
270 : : #define DEFINE_NFS_LOOKUP_EVENT(name) \
271 : : DEFINE_EVENT(nfs_lookup_event, name, \
272 : : TP_PROTO( \
273 : : const struct inode *dir, \
274 : : const struct dentry *dentry, \
275 : : unsigned int flags \
276 : : ), \
277 : : TP_ARGS(dir, dentry, flags))
278 : :
279 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_lookup_event_done,
# # # # #
# # # # #
# # # # #
# # # + -
+ - + - +
- # # ]
280 : : TP_PROTO(
281 : : const struct inode *dir,
282 : : const struct dentry *dentry,
283 : : unsigned int flags,
284 : : int error
285 : : ),
286 : :
287 : : TP_ARGS(dir, dentry, flags, error),
288 : :
289 : : TP_STRUCT__entry(
290 : : __field(unsigned long, error)
291 : : __field(unsigned long, flags)
292 : : __field(dev_t, dev)
293 : : __field(u64, dir)
294 : : __string(name, dentry->d_name.name)
295 : : ),
296 : :
297 : : TP_fast_assign(
298 : : __entry->dev = dir->i_sb->s_dev;
299 : : __entry->dir = NFS_FILEID(dir);
300 : : __entry->error = error < 0 ? -error : 0;
301 : : __entry->flags = flags;
302 : : __assign_str(name, dentry->d_name.name);
303 : : ),
304 : :
305 : : TP_printk(
306 : : "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
307 : : -__entry->error, nfs_show_status(__entry->error),
308 : : __entry->flags,
309 : : show_lookup_flags(__entry->flags),
310 : : MAJOR(__entry->dev), MINOR(__entry->dev),
311 : : (unsigned long long)__entry->dir,
312 : : __get_str(name)
313 : : )
314 : : );
315 : :
316 : : #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \
317 : : DEFINE_EVENT(nfs_lookup_event_done, name, \
318 : : TP_PROTO( \
319 : : const struct inode *dir, \
320 : : const struct dentry *dentry, \
321 : : unsigned int flags, \
322 : : int error \
323 : : ), \
324 : : TP_ARGS(dir, dentry, flags, error))
325 : :
326 [ # # # # : 0 : DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
# # # # ]
327 [ # # # # : 0 : DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
# # # # ]
328 [ # # # # : 0 : DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
# # # # ]
329 [ # # # # : 0 : DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit);
# # # # ]
330 : :
331 : : TRACE_DEFINE_ENUM(O_WRONLY);
332 : : TRACE_DEFINE_ENUM(O_RDWR);
333 : : TRACE_DEFINE_ENUM(O_CREAT);
334 : : TRACE_DEFINE_ENUM(O_EXCL);
335 : : TRACE_DEFINE_ENUM(O_NOCTTY);
336 : : TRACE_DEFINE_ENUM(O_TRUNC);
337 : : TRACE_DEFINE_ENUM(O_APPEND);
338 : : TRACE_DEFINE_ENUM(O_NONBLOCK);
339 : : TRACE_DEFINE_ENUM(O_DSYNC);
340 : : TRACE_DEFINE_ENUM(O_DIRECT);
341 : : TRACE_DEFINE_ENUM(O_LARGEFILE);
342 : : TRACE_DEFINE_ENUM(O_DIRECTORY);
343 : : TRACE_DEFINE_ENUM(O_NOFOLLOW);
344 : : TRACE_DEFINE_ENUM(O_NOATIME);
345 : : TRACE_DEFINE_ENUM(O_CLOEXEC);
346 : :
347 : : #define show_open_flags(flags) \
348 : : __print_flags(flags, "|", \
349 : : { O_WRONLY, "O_WRONLY" }, \
350 : : { O_RDWR, "O_RDWR" }, \
351 : : { O_CREAT, "O_CREAT" }, \
352 : : { O_EXCL, "O_EXCL" }, \
353 : : { O_NOCTTY, "O_NOCTTY" }, \
354 : : { O_TRUNC, "O_TRUNC" }, \
355 : : { O_APPEND, "O_APPEND" }, \
356 : : { O_NONBLOCK, "O_NONBLOCK" }, \
357 : : { O_DSYNC, "O_DSYNC" }, \
358 : : { O_DIRECT, "O_DIRECT" }, \
359 : : { O_LARGEFILE, "O_LARGEFILE" }, \
360 : : { O_DIRECTORY, "O_DIRECTORY" }, \
361 : : { O_NOFOLLOW, "O_NOFOLLOW" }, \
362 : : { O_NOATIME, "O_NOATIME" }, \
363 : : { O_CLOEXEC, "O_CLOEXEC" })
364 : :
365 : : TRACE_DEFINE_ENUM(FMODE_READ);
366 : : TRACE_DEFINE_ENUM(FMODE_WRITE);
367 : : TRACE_DEFINE_ENUM(FMODE_EXEC);
368 : :
369 : : #define show_fmode_flags(mode) \
370 : : __print_flags(mode, "|", \
371 : : { ((__force unsigned long)FMODE_READ), "READ" }, \
372 : : { ((__force unsigned long)FMODE_WRITE), "WRITE" }, \
373 : : { ((__force unsigned long)FMODE_EXEC), "EXEC" })
374 : :
375 [ # # # # : 404 : TRACE_EVENT(nfs_atomic_open_enter,
# # # # #
# # # # #
# # # # +
- + - + -
+ - # # ]
376 : : TP_PROTO(
377 : : const struct inode *dir,
378 : : const struct nfs_open_context *ctx,
379 : : unsigned int flags
380 : : ),
381 : :
382 : : TP_ARGS(dir, ctx, flags),
383 : :
384 : : TP_STRUCT__entry(
385 : : __field(unsigned long, flags)
386 : : __field(unsigned int, fmode)
387 : : __field(dev_t, dev)
388 : : __field(u64, dir)
389 : : __string(name, ctx->dentry->d_name.name)
390 : : ),
391 : :
392 : : TP_fast_assign(
393 : : __entry->dev = dir->i_sb->s_dev;
394 : : __entry->dir = NFS_FILEID(dir);
395 : : __entry->flags = flags;
396 : : __entry->fmode = (__force unsigned int)ctx->mode;
397 : : __assign_str(name, ctx->dentry->d_name.name);
398 : : ),
399 : :
400 : : TP_printk(
401 : : "flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s",
402 : : __entry->flags,
403 : : show_open_flags(__entry->flags),
404 : : show_fmode_flags(__entry->fmode),
405 : : MAJOR(__entry->dev), MINOR(__entry->dev),
406 : : (unsigned long long)__entry->dir,
407 : : __get_str(name)
408 : : )
409 : : );
410 : :
411 [ # # # # : 404 : TRACE_EVENT(nfs_atomic_open_exit,
# # # # #
# # # # #
# # # # +
- + - + -
+ - + - #
# ]
412 : : TP_PROTO(
413 : : const struct inode *dir,
414 : : const struct nfs_open_context *ctx,
415 : : unsigned int flags,
416 : : int error
417 : : ),
418 : :
419 : : TP_ARGS(dir, ctx, flags, error),
420 : :
421 : : TP_STRUCT__entry(
422 : : __field(unsigned long, error)
423 : : __field(unsigned long, flags)
424 : : __field(unsigned int, fmode)
425 : : __field(dev_t, dev)
426 : : __field(u64, dir)
427 : : __string(name, ctx->dentry->d_name.name)
428 : : ),
429 : :
430 : : TP_fast_assign(
431 : : __entry->error = -error;
432 : : __entry->dev = dir->i_sb->s_dev;
433 : : __entry->dir = NFS_FILEID(dir);
434 : : __entry->flags = flags;
435 : : __entry->fmode = (__force unsigned int)ctx->mode;
436 : : __assign_str(name, ctx->dentry->d_name.name);
437 : : ),
438 : :
439 : : TP_printk(
440 : : "error=%ld (%s) flags=0x%lx (%s) fmode=%s "
441 : : "name=%02x:%02x:%llu/%s",
442 : : -__entry->error, nfs_show_status(__entry->error),
443 : : __entry->flags,
444 : : show_open_flags(__entry->flags),
445 : : show_fmode_flags(__entry->fmode),
446 : : MAJOR(__entry->dev), MINOR(__entry->dev),
447 : : (unsigned long long)__entry->dir,
448 : : __get_str(name)
449 : : )
450 : : );
451 : :
452 [ # # # # : 404 : TRACE_EVENT(nfs_create_enter,
# # # # #
# # # # #
# # # # +
- + - + -
# # ]
453 : : TP_PROTO(
454 : : const struct inode *dir,
455 : : const struct dentry *dentry,
456 : : unsigned int flags
457 : : ),
458 : :
459 : : TP_ARGS(dir, dentry, flags),
460 : :
461 : : TP_STRUCT__entry(
462 : : __field(unsigned long, flags)
463 : : __field(dev_t, dev)
464 : : __field(u64, dir)
465 : : __string(name, dentry->d_name.name)
466 : : ),
467 : :
468 : : TP_fast_assign(
469 : : __entry->dev = dir->i_sb->s_dev;
470 : : __entry->dir = NFS_FILEID(dir);
471 : : __entry->flags = flags;
472 : : __assign_str(name, dentry->d_name.name);
473 : : ),
474 : :
475 : : TP_printk(
476 : : "flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
477 : : __entry->flags,
478 : : show_open_flags(__entry->flags),
479 : : MAJOR(__entry->dev), MINOR(__entry->dev),
480 : : (unsigned long long)__entry->dir,
481 : : __get_str(name)
482 : : )
483 : : );
484 : :
485 [ # # # # : 404 : TRACE_EVENT(nfs_create_exit,
# # # # #
# # # # #
# # # # +
- + - + -
+ - # # ]
486 : : TP_PROTO(
487 : : const struct inode *dir,
488 : : const struct dentry *dentry,
489 : : unsigned int flags,
490 : : int error
491 : : ),
492 : :
493 : : TP_ARGS(dir, dentry, flags, error),
494 : :
495 : : TP_STRUCT__entry(
496 : : __field(unsigned long, error)
497 : : __field(unsigned long, flags)
498 : : __field(dev_t, dev)
499 : : __field(u64, dir)
500 : : __string(name, dentry->d_name.name)
501 : : ),
502 : :
503 : : TP_fast_assign(
504 : : __entry->error = -error;
505 : : __entry->dev = dir->i_sb->s_dev;
506 : : __entry->dir = NFS_FILEID(dir);
507 : : __entry->flags = flags;
508 : : __assign_str(name, dentry->d_name.name);
509 : : ),
510 : :
511 : : TP_printk(
512 : : "error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
513 : : -__entry->error, nfs_show_status(__entry->error),
514 : : __entry->flags,
515 : : show_open_flags(__entry->flags),
516 : : MAJOR(__entry->dev), MINOR(__entry->dev),
517 : : (unsigned long long)__entry->dir,
518 : : __get_str(name)
519 : : )
520 : : );
521 : :
522 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_directory_event,
# # # # #
# # # # #
# # # # +
- + - #
# ]
523 : : TP_PROTO(
524 : : const struct inode *dir,
525 : : const struct dentry *dentry
526 : : ),
527 : :
528 : : TP_ARGS(dir, dentry),
529 : :
530 : : TP_STRUCT__entry(
531 : : __field(dev_t, dev)
532 : : __field(u64, dir)
533 : : __string(name, dentry->d_name.name)
534 : : ),
535 : :
536 : : TP_fast_assign(
537 : : __entry->dev = dir->i_sb->s_dev;
538 : : __entry->dir = NFS_FILEID(dir);
539 : : __assign_str(name, dentry->d_name.name);
540 : : ),
541 : :
542 : : TP_printk(
543 : : "name=%02x:%02x:%llu/%s",
544 : : MAJOR(__entry->dev), MINOR(__entry->dev),
545 : : (unsigned long long)__entry->dir,
546 : : __get_str(name)
547 : : )
548 : : );
549 : :
550 : : #define DEFINE_NFS_DIRECTORY_EVENT(name) \
551 : : DEFINE_EVENT(nfs_directory_event, name, \
552 : : TP_PROTO( \
553 : : const struct inode *dir, \
554 : : const struct dentry *dentry \
555 : : ), \
556 : : TP_ARGS(dir, dentry))
557 : :
558 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_directory_event_done,
# # # # #
# # # # #
# # # # #
# # # + -
+ - + - #
# ]
559 : : TP_PROTO(
560 : : const struct inode *dir,
561 : : const struct dentry *dentry,
562 : : int error
563 : : ),
564 : :
565 : : TP_ARGS(dir, dentry, error),
566 : :
567 : : TP_STRUCT__entry(
568 : : __field(unsigned long, error)
569 : : __field(dev_t, dev)
570 : : __field(u64, dir)
571 : : __string(name, dentry->d_name.name)
572 : : ),
573 : :
574 : : TP_fast_assign(
575 : : __entry->dev = dir->i_sb->s_dev;
576 : : __entry->dir = NFS_FILEID(dir);
577 : : __entry->error = error < 0 ? -error : 0;
578 : : __assign_str(name, dentry->d_name.name);
579 : : ),
580 : :
581 : : TP_printk(
582 : : "error=%ld (%s) name=%02x:%02x:%llu/%s",
583 : : -__entry->error, nfs_show_status(__entry->error),
584 : : MAJOR(__entry->dev), MINOR(__entry->dev),
585 : : (unsigned long long)__entry->dir,
586 : : __get_str(name)
587 : : )
588 : : );
589 : :
590 : : #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \
591 : : DEFINE_EVENT(nfs_directory_event_done, name, \
592 : : TP_PROTO( \
593 : : const struct inode *dir, \
594 : : const struct dentry *dentry, \
595 : : int error \
596 : : ), \
597 : : TP_ARGS(dir, dentry, error))
598 : :
599 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
# # # # ]
600 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
# # # # ]
601 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
# # # # ]
602 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
# # # # ]
603 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
# # # # ]
604 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
# # # # ]
605 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
# # # # ]
606 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
# # # # ]
607 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
# # # # ]
608 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
# # # # ]
609 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
# # # # ]
610 [ # # # # : 0 : DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
# # # # ]
611 : :
612 [ # # # # : 404 : TRACE_EVENT(nfs_link_enter,
# # # # #
# # # # #
# # # # +
- + - + -
# # ]
613 : : TP_PROTO(
614 : : const struct inode *inode,
615 : : const struct inode *dir,
616 : : const struct dentry *dentry
617 : : ),
618 : :
619 : : TP_ARGS(inode, dir, dentry),
620 : :
621 : : TP_STRUCT__entry(
622 : : __field(dev_t, dev)
623 : : __field(u64, fileid)
624 : : __field(u64, dir)
625 : : __string(name, dentry->d_name.name)
626 : : ),
627 : :
628 : : TP_fast_assign(
629 : : __entry->dev = inode->i_sb->s_dev;
630 : : __entry->fileid = NFS_FILEID(inode);
631 : : __entry->dir = NFS_FILEID(dir);
632 : : __assign_str(name, dentry->d_name.name);
633 : : ),
634 : :
635 : : TP_printk(
636 : : "fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
637 : : MAJOR(__entry->dev), MINOR(__entry->dev),
638 : : __entry->fileid,
639 : : MAJOR(__entry->dev), MINOR(__entry->dev),
640 : : (unsigned long long)__entry->dir,
641 : : __get_str(name)
642 : : )
643 : : );
644 : :
645 [ # # # # : 404 : TRACE_EVENT(nfs_link_exit,
# # # # #
# # # # #
# # # # #
# # # + -
+ - + - +
- # # ]
646 : : TP_PROTO(
647 : : const struct inode *inode,
648 : : const struct inode *dir,
649 : : const struct dentry *dentry,
650 : : int error
651 : : ),
652 : :
653 : : TP_ARGS(inode, dir, dentry, error),
654 : :
655 : : TP_STRUCT__entry(
656 : : __field(unsigned long, error)
657 : : __field(dev_t, dev)
658 : : __field(u64, fileid)
659 : : __field(u64, dir)
660 : : __string(name, dentry->d_name.name)
661 : : ),
662 : :
663 : : TP_fast_assign(
664 : : __entry->dev = inode->i_sb->s_dev;
665 : : __entry->fileid = NFS_FILEID(inode);
666 : : __entry->dir = NFS_FILEID(dir);
667 : : __entry->error = error < 0 ? -error : 0;
668 : : __assign_str(name, dentry->d_name.name);
669 : : ),
670 : :
671 : : TP_printk(
672 : : "error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
673 : : -__entry->error, nfs_show_status(__entry->error),
674 : : MAJOR(__entry->dev), MINOR(__entry->dev),
675 : : __entry->fileid,
676 : : MAJOR(__entry->dev), MINOR(__entry->dev),
677 : : (unsigned long long)__entry->dir,
678 : : __get_str(name)
679 : : )
680 : : );
681 : :
682 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_rename_event,
# # # # #
# # # # #
# # # # #
# # # + -
+ - + - #
# ]
683 : : TP_PROTO(
684 : : const struct inode *old_dir,
685 : : const struct dentry *old_dentry,
686 : : const struct inode *new_dir,
687 : : const struct dentry *new_dentry
688 : : ),
689 : :
690 : : TP_ARGS(old_dir, old_dentry, new_dir, new_dentry),
691 : :
692 : : TP_STRUCT__entry(
693 : : __field(dev_t, dev)
694 : : __field(u64, old_dir)
695 : : __field(u64, new_dir)
696 : : __string(old_name, old_dentry->d_name.name)
697 : : __string(new_name, new_dentry->d_name.name)
698 : : ),
699 : :
700 : : TP_fast_assign(
701 : : __entry->dev = old_dir->i_sb->s_dev;
702 : : __entry->old_dir = NFS_FILEID(old_dir);
703 : : __entry->new_dir = NFS_FILEID(new_dir);
704 : : __assign_str(old_name, old_dentry->d_name.name);
705 : : __assign_str(new_name, new_dentry->d_name.name);
706 : : ),
707 : :
708 : : TP_printk(
709 : : "old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s",
710 : : MAJOR(__entry->dev), MINOR(__entry->dev),
711 : : (unsigned long long)__entry->old_dir,
712 : : __get_str(old_name),
713 : : MAJOR(__entry->dev), MINOR(__entry->dev),
714 : : (unsigned long long)__entry->new_dir,
715 : : __get_str(new_name)
716 : : )
717 : : );
718 : : #define DEFINE_NFS_RENAME_EVENT(name) \
719 : : DEFINE_EVENT(nfs_rename_event, name, \
720 : : TP_PROTO( \
721 : : const struct inode *old_dir, \
722 : : const struct dentry *old_dentry, \
723 : : const struct inode *new_dir, \
724 : : const struct dentry *new_dentry \
725 : : ), \
726 : : TP_ARGS(old_dir, old_dentry, new_dir, new_dentry))
727 : :
728 [ # # # # : 404 : DECLARE_EVENT_CLASS(nfs_rename_event_done,
# # # # #
# # # # #
# # # # #
# # # + -
+ - + - +
- # # ]
729 : : TP_PROTO(
730 : : const struct inode *old_dir,
731 : : const struct dentry *old_dentry,
732 : : const struct inode *new_dir,
733 : : const struct dentry *new_dentry,
734 : : int error
735 : : ),
736 : :
737 : : TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error),
738 : :
739 : : TP_STRUCT__entry(
740 : : __field(dev_t, dev)
741 : : __field(unsigned long, error)
742 : : __field(u64, old_dir)
743 : : __string(old_name, old_dentry->d_name.name)
744 : : __field(u64, new_dir)
745 : : __string(new_name, new_dentry->d_name.name)
746 : : ),
747 : :
748 : : TP_fast_assign(
749 : : __entry->dev = old_dir->i_sb->s_dev;
750 : : __entry->error = -error;
751 : : __entry->old_dir = NFS_FILEID(old_dir);
752 : : __entry->new_dir = NFS_FILEID(new_dir);
753 : : __assign_str(old_name, old_dentry->d_name.name);
754 : : __assign_str(new_name, new_dentry->d_name.name);
755 : : ),
756 : :
757 : : TP_printk(
758 : : "error=%ld (%s) old_name=%02x:%02x:%llu/%s "
759 : : "new_name=%02x:%02x:%llu/%s",
760 : : -__entry->error, nfs_show_status(__entry->error),
761 : : MAJOR(__entry->dev), MINOR(__entry->dev),
762 : : (unsigned long long)__entry->old_dir,
763 : : __get_str(old_name),
764 : : MAJOR(__entry->dev), MINOR(__entry->dev),
765 : : (unsigned long long)__entry->new_dir,
766 : : __get_str(new_name)
767 : : )
768 : : );
769 : : #define DEFINE_NFS_RENAME_EVENT_DONE(name) \
770 : : DEFINE_EVENT(nfs_rename_event_done, name, \
771 : : TP_PROTO( \
772 : : const struct inode *old_dir, \
773 : : const struct dentry *old_dentry, \
774 : : const struct inode *new_dir, \
775 : : const struct dentry *new_dentry, \
776 : : int error \
777 : : ), \
778 : : TP_ARGS(old_dir, old_dentry, new_dir, \
779 : : new_dentry, error))
780 : :
781 [ # # # # : 0 : DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
# # # # ]
782 [ # # # # : 0 : DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
# # # # ]
783 : :
784 [ # # # # : 0 : DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename);
# # # # ]
785 : :
786 [ # # # # : 404 : TRACE_EVENT(nfs_sillyrename_unlink,
# # # # #
# + - + -
+ - # # ]
787 : : TP_PROTO(
788 : : const struct nfs_unlinkdata *data,
789 : : int error
790 : : ),
791 : :
792 : : TP_ARGS(data, error),
793 : :
794 : : TP_STRUCT__entry(
795 : : __field(dev_t, dev)
796 : : __field(unsigned long, error)
797 : : __field(u64, dir)
798 : : __dynamic_array(char, name, data->args.name.len + 1)
799 : : ),
800 : :
801 : : TP_fast_assign(
802 : : struct inode *dir = d_inode(data->dentry->d_parent);
803 : : size_t len = data->args.name.len;
804 : : __entry->dev = dir->i_sb->s_dev;
805 : : __entry->dir = NFS_FILEID(dir);
806 : : __entry->error = -error;
807 : : memcpy(__get_str(name),
808 : : data->args.name.name, len);
809 : : __get_str(name)[len] = 0;
810 : : ),
811 : :
812 : : TP_printk(
813 : : "error=%ld (%s) name=%02x:%02x:%llu/%s",
814 : : -__entry->error, nfs_show_status(__entry->error),
815 : : MAJOR(__entry->dev), MINOR(__entry->dev),
816 : : (unsigned long long)__entry->dir,
817 : : __get_str(name)
818 : : )
819 : : );
820 : :
821 [ # # # # : 404 : TRACE_EVENT(nfs_initiate_read,
# # # # #
# + - + -
+ - + - #
# ]
822 : : TP_PROTO(
823 : : const struct inode *inode,
824 : : loff_t offset, unsigned long count
825 : : ),
826 : :
827 : : TP_ARGS(inode, offset, count),
828 : :
829 : : TP_STRUCT__entry(
830 : : __field(loff_t, offset)
831 : : __field(unsigned long, count)
832 : : __field(dev_t, dev)
833 : : __field(u32, fhandle)
834 : : __field(u64, fileid)
835 : : ),
836 : :
837 : : TP_fast_assign(
838 : : const struct nfs_inode *nfsi = NFS_I(inode);
839 : :
840 : : __entry->offset = offset;
841 : : __entry->count = count;
842 : : __entry->dev = inode->i_sb->s_dev;
843 : : __entry->fileid = nfsi->fileid;
844 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
845 : : ),
846 : :
847 : : TP_printk(
848 : : "fileid=%02x:%02x:%llu fhandle=0x%08x "
849 : : "offset=%lld count=%lu",
850 : : MAJOR(__entry->dev), MINOR(__entry->dev),
851 : : (unsigned long long)__entry->fileid,
852 : : __entry->fhandle,
853 : : __entry->offset, __entry->count
854 : : )
855 : : );
856 : :
857 [ # # # # : 404 : TRACE_EVENT(nfs_readpage_done,
# # # # #
# + - + -
+ - + - +
- # # #
# ]
858 : : TP_PROTO(
859 : : const struct inode *inode,
860 : : int status, loff_t offset, bool eof
861 : : ),
862 : :
863 : : TP_ARGS(inode, status, offset, eof),
864 : :
865 : : TP_STRUCT__entry(
866 : : __field(int, status)
867 : : __field(loff_t, offset)
868 : : __field(bool, eof)
869 : : __field(dev_t, dev)
870 : : __field(u32, fhandle)
871 : : __field(u64, fileid)
872 : : ),
873 : :
874 : : TP_fast_assign(
875 : : const struct nfs_inode *nfsi = NFS_I(inode);
876 : :
877 : : __entry->status = status;
878 : : __entry->offset = offset;
879 : : __entry->eof = eof;
880 : : __entry->dev = inode->i_sb->s_dev;
881 : : __entry->fileid = nfsi->fileid;
882 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
883 : : ),
884 : :
885 : : TP_printk(
886 : : "fileid=%02x:%02x:%llu fhandle=0x%08x "
887 : : "offset=%lld status=%d%s",
888 : : MAJOR(__entry->dev), MINOR(__entry->dev),
889 : : (unsigned long long)__entry->fileid,
890 : : __entry->fhandle,
891 : : __entry->offset, __entry->status,
892 : : __entry->eof ? " eof" : ""
893 : : )
894 : : );
895 : :
896 : : TRACE_DEFINE_ENUM(NFS_UNSTABLE);
897 : : TRACE_DEFINE_ENUM(NFS_DATA_SYNC);
898 : : TRACE_DEFINE_ENUM(NFS_FILE_SYNC);
899 : :
900 : : #define nfs_show_stable(stable) \
901 : : __print_symbolic(stable, \
902 : : { NFS_UNSTABLE, "UNSTABLE" }, \
903 : : { NFS_DATA_SYNC, "DATA_SYNC" }, \
904 : : { NFS_FILE_SYNC, "FILE_SYNC" })
905 : :
906 [ # # # # : 404 : TRACE_EVENT(nfs_initiate_write,
# # # # #
# + - + -
+ - + - +
- # # ]
907 : : TP_PROTO(
908 : : const struct inode *inode,
909 : : loff_t offset, unsigned long count,
910 : : enum nfs3_stable_how stable
911 : : ),
912 : :
913 : : TP_ARGS(inode, offset, count, stable),
914 : :
915 : : TP_STRUCT__entry(
916 : : __field(loff_t, offset)
917 : : __field(unsigned long, count)
918 : : __field(enum nfs3_stable_how, stable)
919 : : __field(dev_t, dev)
920 : : __field(u32, fhandle)
921 : : __field(u64, fileid)
922 : : ),
923 : :
924 : : TP_fast_assign(
925 : : const struct nfs_inode *nfsi = NFS_I(inode);
926 : :
927 : : __entry->offset = offset;
928 : : __entry->count = count;
929 : : __entry->stable = stable;
930 : : __entry->dev = inode->i_sb->s_dev;
931 : : __entry->fileid = nfsi->fileid;
932 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
933 : : ),
934 : :
935 : : TP_printk(
936 : : "fileid=%02x:%02x:%llu fhandle=0x%08x "
937 : : "offset=%lld count=%lu stable=%s",
938 : : MAJOR(__entry->dev), MINOR(__entry->dev),
939 : : (unsigned long long)__entry->fileid,
940 : : __entry->fhandle,
941 : : __entry->offset, __entry->count,
942 : : nfs_show_stable(__entry->stable)
943 : : )
944 : : );
945 : :
946 [ # # # # : 404 : TRACE_EVENT(nfs_writeback_done,
# # # # #
# + - + -
+ - + - +
- + - #
# ]
947 : : TP_PROTO(
948 : : const struct inode *inode,
949 : : int status,
950 : : loff_t offset,
951 : : struct nfs_writeverf *writeverf
952 : : ),
953 : :
954 : : TP_ARGS(inode, status, offset, writeverf),
955 : :
956 : : TP_STRUCT__entry(
957 : : __field(int, status)
958 : : __field(loff_t, offset)
959 : : __field(enum nfs3_stable_how, stable)
960 : : __field(unsigned long long, verifier)
961 : : __field(dev_t, dev)
962 : : __field(u32, fhandle)
963 : : __field(u64, fileid)
964 : : ),
965 : :
966 : : TP_fast_assign(
967 : : const struct nfs_inode *nfsi = NFS_I(inode);
968 : :
969 : : __entry->status = status;
970 : : __entry->offset = offset;
971 : : __entry->stable = writeverf->committed;
972 : : memcpy(&__entry->verifier, &writeverf->verifier,
973 : : sizeof(__entry->verifier));
974 : : __entry->dev = inode->i_sb->s_dev;
975 : : __entry->fileid = nfsi->fileid;
976 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
977 : : ),
978 : :
979 : : TP_printk(
980 : : "fileid=%02x:%02x:%llu fhandle=0x%08x "
981 : : "offset=%lld status=%d stable=%s "
982 : : "verifier 0x%016llx",
983 : : MAJOR(__entry->dev), MINOR(__entry->dev),
984 : : (unsigned long long)__entry->fileid,
985 : : __entry->fhandle,
986 : : __entry->offset, __entry->status,
987 : : nfs_show_stable(__entry->stable),
988 : : __entry->verifier
989 : : )
990 : : );
991 : :
992 [ # # # # : 404 : TRACE_EVENT(nfs_initiate_commit,
# # # # #
# + - + -
+ - + - #
# ]
993 : : TP_PROTO(
994 : : const struct nfs_commit_data *data
995 : : ),
996 : :
997 : : TP_ARGS(data),
998 : :
999 : : TP_STRUCT__entry(
1000 : : __field(loff_t, offset)
1001 : : __field(unsigned long, count)
1002 : : __field(dev_t, dev)
1003 : : __field(u32, fhandle)
1004 : : __field(u64, fileid)
1005 : : ),
1006 : :
1007 : : TP_fast_assign(
1008 : : const struct inode *inode = data->inode;
1009 : : const struct nfs_inode *nfsi = NFS_I(inode);
1010 : :
1011 : : __entry->offset = data->args.offset;
1012 : : __entry->count = data->args.count;
1013 : : __entry->dev = inode->i_sb->s_dev;
1014 : : __entry->fileid = nfsi->fileid;
1015 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1016 : : ),
1017 : :
1018 : : TP_printk(
1019 : : "fileid=%02x:%02x:%llu fhandle=0x%08x "
1020 : : "offset=%lld count=%lu",
1021 : : MAJOR(__entry->dev), MINOR(__entry->dev),
1022 : : (unsigned long long)__entry->fileid,
1023 : : __entry->fhandle,
1024 : : __entry->offset, __entry->count
1025 : : )
1026 : : );
1027 : :
1028 [ # # # # : 404 : TRACE_EVENT(nfs_commit_done,
# # # # #
# + - + -
+ - + - +
- # # ]
1029 : : TP_PROTO(
1030 : : const struct nfs_commit_data *data
1031 : : ),
1032 : :
1033 : : TP_ARGS(data),
1034 : :
1035 : : TP_STRUCT__entry(
1036 : : __field(int, status)
1037 : : __field(loff_t, offset)
1038 : : __field(unsigned long long, verifier)
1039 : : __field(dev_t, dev)
1040 : : __field(u32, fhandle)
1041 : : __field(u64, fileid)
1042 : : ),
1043 : :
1044 : : TP_fast_assign(
1045 : : const struct inode *inode = data->inode;
1046 : : const struct nfs_inode *nfsi = NFS_I(inode);
1047 : :
1048 : : __entry->status = data->res.op_status;
1049 : : __entry->offset = data->args.offset;
1050 : : memcpy(&__entry->verifier, &data->verf.verifier,
1051 : : sizeof(__entry->verifier));
1052 : : __entry->dev = inode->i_sb->s_dev;
1053 : : __entry->fileid = nfsi->fileid;
1054 : : __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1055 : : ),
1056 : :
1057 : : TP_printk(
1058 : : "fileid=%02x:%02x:%llu fhandle=0x%08x "
1059 : : "offset=%lld status=%d verifier 0x%016llx",
1060 : : MAJOR(__entry->dev), MINOR(__entry->dev),
1061 : : (unsigned long long)__entry->fileid,
1062 : : __entry->fhandle,
1063 : : __entry->offset, __entry->status,
1064 : : __entry->verifier
1065 : : )
1066 : : );
1067 : :
1068 : : TRACE_DEFINE_ENUM(NFS_OK);
1069 : : TRACE_DEFINE_ENUM(NFSERR_PERM);
1070 : : TRACE_DEFINE_ENUM(NFSERR_NOENT);
1071 : : TRACE_DEFINE_ENUM(NFSERR_IO);
1072 : : TRACE_DEFINE_ENUM(NFSERR_NXIO);
1073 : : TRACE_DEFINE_ENUM(ECHILD);
1074 : : TRACE_DEFINE_ENUM(NFSERR_EAGAIN);
1075 : : TRACE_DEFINE_ENUM(NFSERR_ACCES);
1076 : : TRACE_DEFINE_ENUM(NFSERR_EXIST);
1077 : : TRACE_DEFINE_ENUM(NFSERR_XDEV);
1078 : : TRACE_DEFINE_ENUM(NFSERR_NODEV);
1079 : : TRACE_DEFINE_ENUM(NFSERR_NOTDIR);
1080 : : TRACE_DEFINE_ENUM(NFSERR_ISDIR);
1081 : : TRACE_DEFINE_ENUM(NFSERR_INVAL);
1082 : : TRACE_DEFINE_ENUM(NFSERR_FBIG);
1083 : : TRACE_DEFINE_ENUM(NFSERR_NOSPC);
1084 : : TRACE_DEFINE_ENUM(NFSERR_ROFS);
1085 : : TRACE_DEFINE_ENUM(NFSERR_MLINK);
1086 : : TRACE_DEFINE_ENUM(NFSERR_OPNOTSUPP);
1087 : : TRACE_DEFINE_ENUM(NFSERR_NAMETOOLONG);
1088 : : TRACE_DEFINE_ENUM(NFSERR_NOTEMPTY);
1089 : : TRACE_DEFINE_ENUM(NFSERR_DQUOT);
1090 : : TRACE_DEFINE_ENUM(NFSERR_STALE);
1091 : : TRACE_DEFINE_ENUM(NFSERR_REMOTE);
1092 : : TRACE_DEFINE_ENUM(NFSERR_WFLUSH);
1093 : : TRACE_DEFINE_ENUM(NFSERR_BADHANDLE);
1094 : : TRACE_DEFINE_ENUM(NFSERR_NOT_SYNC);
1095 : : TRACE_DEFINE_ENUM(NFSERR_BAD_COOKIE);
1096 : : TRACE_DEFINE_ENUM(NFSERR_NOTSUPP);
1097 : : TRACE_DEFINE_ENUM(NFSERR_TOOSMALL);
1098 : : TRACE_DEFINE_ENUM(NFSERR_SERVERFAULT);
1099 : : TRACE_DEFINE_ENUM(NFSERR_BADTYPE);
1100 : : TRACE_DEFINE_ENUM(NFSERR_JUKEBOX);
1101 : :
1102 : : #define nfs_show_status(x) \
1103 : : __print_symbolic(x, \
1104 : : { NFS_OK, "OK" }, \
1105 : : { NFSERR_PERM, "PERM" }, \
1106 : : { NFSERR_NOENT, "NOENT" }, \
1107 : : { NFSERR_IO, "IO" }, \
1108 : : { NFSERR_NXIO, "NXIO" }, \
1109 : : { ECHILD, "CHILD" }, \
1110 : : { NFSERR_EAGAIN, "AGAIN" }, \
1111 : : { NFSERR_ACCES, "ACCES" }, \
1112 : : { NFSERR_EXIST, "EXIST" }, \
1113 : : { NFSERR_XDEV, "XDEV" }, \
1114 : : { NFSERR_NODEV, "NODEV" }, \
1115 : : { NFSERR_NOTDIR, "NOTDIR" }, \
1116 : : { NFSERR_ISDIR, "ISDIR" }, \
1117 : : { NFSERR_INVAL, "INVAL" }, \
1118 : : { NFSERR_FBIG, "FBIG" }, \
1119 : : { NFSERR_NOSPC, "NOSPC" }, \
1120 : : { NFSERR_ROFS, "ROFS" }, \
1121 : : { NFSERR_MLINK, "MLINK" }, \
1122 : : { NFSERR_OPNOTSUPP, "OPNOTSUPP" }, \
1123 : : { NFSERR_NAMETOOLONG, "NAMETOOLONG" }, \
1124 : : { NFSERR_NOTEMPTY, "NOTEMPTY" }, \
1125 : : { NFSERR_DQUOT, "DQUOT" }, \
1126 : : { NFSERR_STALE, "STALE" }, \
1127 : : { NFSERR_REMOTE, "REMOTE" }, \
1128 : : { NFSERR_WFLUSH, "WFLUSH" }, \
1129 : : { NFSERR_BADHANDLE, "BADHANDLE" }, \
1130 : : { NFSERR_NOT_SYNC, "NOTSYNC" }, \
1131 : : { NFSERR_BAD_COOKIE, "BADCOOKIE" }, \
1132 : : { NFSERR_NOTSUPP, "NOTSUPP" }, \
1133 : : { NFSERR_TOOSMALL, "TOOSMALL" }, \
1134 : : { NFSERR_SERVERFAULT, "REMOTEIO" }, \
1135 : : { NFSERR_BADTYPE, "BADTYPE" }, \
1136 : : { NFSERR_JUKEBOX, "JUKEBOX" })
1137 : :
1138 [ # # # # : 404 : TRACE_EVENT(nfs_xdr_status,
# # # # #
# + - + -
+ - # # ]
1139 : : TP_PROTO(
1140 : : const struct xdr_stream *xdr,
1141 : : int error
1142 : : ),
1143 : :
1144 : : TP_ARGS(xdr, error),
1145 : :
1146 : : TP_STRUCT__entry(
1147 : : __field(unsigned int, task_id)
1148 : : __field(unsigned int, client_id)
1149 : : __field(u32, xid)
1150 : : __field(unsigned long, error)
1151 : : ),
1152 : :
1153 : : TP_fast_assign(
1154 : : const struct rpc_rqst *rqstp = xdr->rqst;
1155 : : const struct rpc_task *task = rqstp->rq_task;
1156 : :
1157 : : __entry->task_id = task->tk_pid;
1158 : : __entry->client_id = task->tk_client->cl_clid;
1159 : : __entry->xid = be32_to_cpu(rqstp->rq_xid);
1160 : : __entry->error = error;
1161 : : ),
1162 : :
1163 : : TP_printk(
1164 : : "task:%u@%d xid=0x%08x error=%ld (%s)",
1165 : : __entry->task_id, __entry->client_id, __entry->xid,
1166 : : -__entry->error, nfs_show_status(__entry->error)
1167 : : )
1168 : : );
1169 : :
1170 : : #endif /* _TRACE_NFS_H */
1171 : :
1172 : : #undef TRACE_INCLUDE_PATH
1173 : : #define TRACE_INCLUDE_PATH .
1174 : : #define TRACE_INCLUDE_FILE nfstrace
1175 : : /* This part must be outside protection */
1176 : : #include <trace/define_trace.h>
|