1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* Network filesystem support module tracepoints
4 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
8 #define TRACE_SYSTEM netfs
10 #if !defined(_TRACE_NETFS_H) || defined(TRACE_HEADER_MULTI_READ)
11 #define _TRACE_NETFS_H
13 #include <linux/tracepoint.h>
16 * Define enums for tracing information.
18 #define netfs_read_traces \
19 EM(netfs_read_trace_dio_read, "DIO-READ ") \
20 EM(netfs_read_trace_expanded, "EXPANDED ") \
21 EM(netfs_read_trace_readahead, "READAHEAD") \
22 EM(netfs_read_trace_readpage, "READPAGE ") \
23 EM(netfs_read_trace_read_gaps, "READ-GAPS") \
24 EM(netfs_read_trace_prefetch_for_write, "PREFETCHW") \
25 E_(netfs_read_trace_write_begin, "WRITEBEGN")
27 #define netfs_write_traces \
28 EM(netfs_write_trace_copy_to_cache, "COPY2CACH") \
29 EM(netfs_write_trace_dio_write, "DIO-WRITE") \
30 EM(netfs_write_trace_unbuffered_write, "UNB-WRITE") \
31 EM(netfs_write_trace_writeback, "WRITEBACK") \
32 E_(netfs_write_trace_writethrough, "WRITETHRU")
34 #define netfs_rreq_origins \
35 EM(NETFS_READAHEAD, "RA") \
36 EM(NETFS_READPAGE, "RP") \
37 EM(NETFS_READ_GAPS, "RG") \
38 EM(NETFS_READ_FOR_WRITE, "RW") \
39 EM(NETFS_DIO_READ, "DR") \
40 EM(NETFS_WRITEBACK, "WB") \
41 EM(NETFS_WRITETHROUGH, "WT") \
42 EM(NETFS_UNBUFFERED_WRITE, "UW") \
43 EM(NETFS_DIO_WRITE, "DW") \
44 E_(NETFS_PGPRIV2_COPY_TO_CACHE, "2C")
46 #define netfs_rreq_traces \
47 EM(netfs_rreq_trace_assess, "ASSESS ") \
48 EM(netfs_rreq_trace_copy, "COPY ") \
49 EM(netfs_rreq_trace_collect, "COLLECT") \
50 EM(netfs_rreq_trace_done, "DONE ") \
51 EM(netfs_rreq_trace_free, "FREE ") \
52 EM(netfs_rreq_trace_redirty, "REDIRTY") \
53 EM(netfs_rreq_trace_resubmit, "RESUBMT") \
54 EM(netfs_rreq_trace_set_pause, "PAUSE ") \
55 EM(netfs_rreq_trace_unlock, "UNLOCK ") \
56 EM(netfs_rreq_trace_unlock_pgpriv2, "UNLCK-2") \
57 EM(netfs_rreq_trace_unmark, "UNMARK ") \
58 EM(netfs_rreq_trace_wait_ip, "WAIT-IP") \
59 EM(netfs_rreq_trace_wait_pause, "WT-PAUS") \
60 EM(netfs_rreq_trace_wake_ip, "WAKE-IP") \
61 EM(netfs_rreq_trace_unpause, "UNPAUSE") \
62 E_(netfs_rreq_trace_write_done, "WR-DONE")
64 #define netfs_sreq_sources \
65 EM(NETFS_SOURCE_UNKNOWN, "----") \
66 EM(NETFS_FILL_WITH_ZEROES, "ZERO") \
67 EM(NETFS_DOWNLOAD_FROM_SERVER, "DOWN") \
68 EM(NETFS_READ_FROM_CACHE, "READ") \
69 EM(NETFS_INVALID_READ, "INVL") \
70 EM(NETFS_UPLOAD_TO_SERVER, "UPLD") \
71 EM(NETFS_WRITE_TO_CACHE, "WRIT") \
72 E_(NETFS_INVALID_WRITE, "INVL")
74 #define netfs_sreq_traces \
75 EM(netfs_sreq_trace_add_donations, "+DON ") \
76 EM(netfs_sreq_trace_added, "ADD ") \
77 EM(netfs_sreq_trace_clear, "CLEAR") \
78 EM(netfs_sreq_trace_discard, "DSCRD") \
79 EM(netfs_sreq_trace_donate_to_prev, "DON-P") \
80 EM(netfs_sreq_trace_donate_to_next, "DON-N") \
81 EM(netfs_sreq_trace_download_instead, "RDOWN") \
82 EM(netfs_sreq_trace_fail, "FAIL ") \
83 EM(netfs_sreq_trace_free, "FREE ") \
84 EM(netfs_sreq_trace_hit_eof, "EOF ") \
85 EM(netfs_sreq_trace_io_progress, "IO ") \
86 EM(netfs_sreq_trace_limited, "LIMIT") \
87 EM(netfs_sreq_trace_prepare, "PREP ") \
88 EM(netfs_sreq_trace_prep_failed, "PRPFL") \
89 EM(netfs_sreq_trace_progress, "PRGRS") \
90 EM(netfs_sreq_trace_reprep_failed, "REPFL") \
91 EM(netfs_sreq_trace_retry, "RETRY") \
92 EM(netfs_sreq_trace_short, "SHORT") \
93 EM(netfs_sreq_trace_split, "SPLIT") \
94 EM(netfs_sreq_trace_submit, "SUBMT") \
95 EM(netfs_sreq_trace_terminated, "TERM ") \
96 EM(netfs_sreq_trace_write, "WRITE") \
97 EM(netfs_sreq_trace_write_skip, "SKIP ") \
98 E_(netfs_sreq_trace_write_term, "WTERM")
100 #define netfs_failures \
101 EM(netfs_fail_check_write_begin, "check-write-begin") \
102 EM(netfs_fail_copy_to_cache, "copy-to-cache") \
103 EM(netfs_fail_dio_read_short, "dio-read-short") \
104 EM(netfs_fail_dio_read_zero, "dio-read-zero") \
105 EM(netfs_fail_read, "read") \
106 EM(netfs_fail_short_read, "short-read") \
107 EM(netfs_fail_prepare_write, "prep-write") \
108 E_(netfs_fail_write, "write")
110 #define netfs_rreq_ref_traces \
111 EM(netfs_rreq_trace_get_for_outstanding,"GET OUTSTND") \
112 EM(netfs_rreq_trace_get_subreq, "GET SUBREQ ") \
113 EM(netfs_rreq_trace_get_work, "GET WORK ") \
114 EM(netfs_rreq_trace_put_complete, "PUT COMPLT ") \
115 EM(netfs_rreq_trace_put_discard, "PUT DISCARD") \
116 EM(netfs_rreq_trace_put_failed, "PUT FAILED ") \
117 EM(netfs_rreq_trace_put_no_submit, "PUT NO-SUBM") \
118 EM(netfs_rreq_trace_put_return, "PUT RETURN ") \
119 EM(netfs_rreq_trace_put_subreq, "PUT SUBREQ ") \
120 EM(netfs_rreq_trace_put_work, "PUT WORK ") \
121 EM(netfs_rreq_trace_put_work_complete, "PUT WORK CP") \
122 EM(netfs_rreq_trace_put_work_nq, "PUT WORK NQ") \
123 EM(netfs_rreq_trace_see_work, "SEE WORK ") \
124 E_(netfs_rreq_trace_new, "NEW ")
126 #define netfs_sreq_ref_traces \
127 EM(netfs_sreq_trace_get_copy_to_cache, "GET COPY2C ") \
128 EM(netfs_sreq_trace_get_resubmit, "GET RESUBMIT") \
129 EM(netfs_sreq_trace_get_submit, "GET SUBMIT") \
130 EM(netfs_sreq_trace_get_short_read, "GET SHORTRD") \
131 EM(netfs_sreq_trace_new, "NEW ") \
132 EM(netfs_sreq_trace_put_cancel, "PUT CANCEL ") \
133 EM(netfs_sreq_trace_put_clear, "PUT CLEAR ") \
134 EM(netfs_sreq_trace_put_consumed, "PUT CONSUME") \
135 EM(netfs_sreq_trace_put_done, "PUT DONE ") \
136 EM(netfs_sreq_trace_put_failed, "PUT FAILED ") \
137 EM(netfs_sreq_trace_put_merged, "PUT MERGED ") \
138 EM(netfs_sreq_trace_put_no_copy, "PUT NO COPY") \
139 EM(netfs_sreq_trace_put_oom, "PUT OOM ") \
140 EM(netfs_sreq_trace_put_wip, "PUT WIP ") \
141 EM(netfs_sreq_trace_put_work, "PUT WORK ") \
142 E_(netfs_sreq_trace_put_terminated, "PUT TERM ")
144 #define netfs_folio_traces \
145 EM(netfs_folio_is_uptodate, "mod-uptodate") \
146 EM(netfs_just_prefetch, "mod-prefetch") \
147 EM(netfs_whole_folio_modify, "mod-whole-f") \
148 EM(netfs_modify_and_clear, "mod-n-clear") \
149 EM(netfs_streaming_write, "mod-streamw") \
150 EM(netfs_streaming_write_cont, "mod-streamw+") \
151 EM(netfs_flush_content, "flush") \
152 EM(netfs_streaming_filled_page, "mod-streamw-f") \
153 EM(netfs_streaming_cont_filled_page, "mod-streamw-f+") \
154 EM(netfs_folio_trace_abandon, "abandon") \
155 EM(netfs_folio_trace_cancel_copy, "cancel-copy") \
156 EM(netfs_folio_trace_cancel_store, "cancel-store") \
157 EM(netfs_folio_trace_clear, "clear") \
158 EM(netfs_folio_trace_clear_cc, "clear-cc") \
159 EM(netfs_folio_trace_clear_g, "clear-g") \
160 EM(netfs_folio_trace_clear_s, "clear-s") \
161 EM(netfs_folio_trace_copy_to_cache, "mark-copy") \
162 EM(netfs_folio_trace_end_copy, "end-copy") \
163 EM(netfs_folio_trace_filled_gaps, "filled-gaps") \
164 EM(netfs_folio_trace_kill, "kill") \
165 EM(netfs_folio_trace_kill_cc, "kill-cc") \
166 EM(netfs_folio_trace_kill_g, "kill-g") \
167 EM(netfs_folio_trace_kill_s, "kill-s") \
168 EM(netfs_folio_trace_mkwrite, "mkwrite") \
169 EM(netfs_folio_trace_mkwrite_plus, "mkwrite+") \
170 EM(netfs_folio_trace_not_under_wback, "!wback") \
171 EM(netfs_folio_trace_put, "put") \
172 EM(netfs_folio_trace_read, "read") \
173 EM(netfs_folio_trace_read_done, "read-done") \
174 EM(netfs_folio_trace_read_gaps, "read-gaps") \
175 EM(netfs_folio_trace_read_unlock, "read-unlock") \
176 EM(netfs_folio_trace_redirtied, "redirtied") \
177 EM(netfs_folio_trace_store, "store") \
178 EM(netfs_folio_trace_store_copy, "store-copy") \
179 EM(netfs_folio_trace_store_plus, "store+") \
180 EM(netfs_folio_trace_wthru, "wthru") \
181 E_(netfs_folio_trace_wthru_plus, "wthru+")
183 #define netfs_collect_contig_traces \
184 EM(netfs_contig_trace_collect, "Collect") \
185 EM(netfs_contig_trace_jump, "-->JUMP-->") \
186 E_(netfs_contig_trace_unlock, "Unlock")
188 #define netfs_donate_traces \
189 EM(netfs_trace_donate_tail_to_prev, "tail-to-prev") \
190 EM(netfs_trace_donate_to_prev, "to-prev") \
191 EM(netfs_trace_donate_to_next, "to-next") \
192 E_(netfs_trace_donate_to_deferred_next, "defer-next")
194 #ifndef __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
195 #define __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
202 enum netfs_read_trace
{ netfs_read_traces
} __mode(byte
);
203 enum netfs_write_trace
{ netfs_write_traces
} __mode(byte
);
204 enum netfs_rreq_trace
{ netfs_rreq_traces
} __mode(byte
);
205 enum netfs_sreq_trace
{ netfs_sreq_traces
} __mode(byte
);
206 enum netfs_failure
{ netfs_failures
} __mode(byte
);
207 enum netfs_rreq_ref_trace
{ netfs_rreq_ref_traces
} __mode(byte
);
208 enum netfs_sreq_ref_trace
{ netfs_sreq_ref_traces
} __mode(byte
);
209 enum netfs_folio_trace
{ netfs_folio_traces
} __mode(byte
);
210 enum netfs_collect_contig_trace
{ netfs_collect_contig_traces
} __mode(byte
);
211 enum netfs_donate_trace
{ netfs_donate_traces
} __mode(byte
);
216 * Export enum symbols via userspace.
220 #define EM(a, b) TRACE_DEFINE_ENUM(a);
221 #define E_(a, b) TRACE_DEFINE_ENUM(a);
230 netfs_rreq_ref_traces
;
231 netfs_sreq_ref_traces
;
233 netfs_collect_contig_traces
;
237 * Now redefine the EM() and E_() macros to map the enums to the strings that
238 * will be printed in the output.
242 #define EM(a, b) { a, b },
243 #define E_(a, b) { a, b }
245 TRACE_EVENT(netfs_read
,
246 TP_PROTO(struct netfs_io_request
*rreq
,
247 loff_t start
, size_t len
,
248 enum netfs_read_trace what
),
250 TP_ARGS(rreq
, start
, len
, what
),
253 __field(unsigned int, rreq
)
254 __field(unsigned int, cookie
)
255 __field(loff_t
, i_size
)
256 __field(loff_t
, start
)
257 __field(size_t, len
)
258 __field(enum netfs_read_trace
, what
)
259 __field(unsigned int, netfs_inode
)
263 __entry
->rreq
= rreq
->debug_id
;
264 __entry
->cookie
= rreq
->cache_resources
.debug_id
;
265 __entry
->i_size
= rreq
->i_size
;
266 __entry
->start
= start
;
268 __entry
->what
= what
;
269 __entry
->netfs_inode
= rreq
->inode
->i_ino
;
272 TP_printk("R=%08x %s c=%08x ni=%x s=%llx l=%zx sz=%llx",
274 __print_symbolic(__entry
->what
, netfs_read_traces
),
276 __entry
->netfs_inode
,
277 __entry
->start
, __entry
->len
, __entry
->i_size
)
280 TRACE_EVENT(netfs_rreq
,
281 TP_PROTO(struct netfs_io_request
*rreq
,
282 enum netfs_rreq_trace what
),
287 __field(unsigned int, rreq
)
288 __field(unsigned int, flags
)
289 __field(enum netfs_io_origin
, origin
)
290 __field(enum netfs_rreq_trace
, what
)
294 __entry
->rreq
= rreq
->debug_id
;
295 __entry
->flags
= rreq
->flags
;
296 __entry
->origin
= rreq
->origin
;
297 __entry
->what
= what
;
300 TP_printk("R=%08x %s %s f=%02x",
302 __print_symbolic(__entry
->origin
, netfs_rreq_origins
),
303 __print_symbolic(__entry
->what
, netfs_rreq_traces
),
307 TRACE_EVENT(netfs_sreq
,
308 TP_PROTO(struct netfs_io_subrequest
*sreq
,
309 enum netfs_sreq_trace what
),
314 __field(unsigned int, rreq
)
315 __field(unsigned short, index
)
316 __field(short, error
)
317 __field(unsigned short, flags
)
318 __field(enum netfs_io_source
, source
)
319 __field(enum netfs_sreq_trace
, what
)
320 __field(size_t, len
)
321 __field(size_t, transferred
)
322 __field(loff_t
, start
)
326 __entry
->rreq
= sreq
->rreq
->debug_id
;
327 __entry
->index
= sreq
->debug_index
;
328 __entry
->error
= sreq
->error
;
329 __entry
->flags
= sreq
->flags
;
330 __entry
->source
= sreq
->source
;
331 __entry
->what
= what
;
332 __entry
->len
= sreq
->len
;
333 __entry
->transferred
= sreq
->transferred
;
334 __entry
->start
= sreq
->start
;
337 TP_printk("R=%08x[%x] %s %s f=%02x s=%llx %zx/%zx e=%d",
338 __entry
->rreq
, __entry
->index
,
339 __print_symbolic(__entry
->source
, netfs_sreq_sources
),
340 __print_symbolic(__entry
->what
, netfs_sreq_traces
),
342 __entry
->start
, __entry
->transferred
, __entry
->len
,
346 TRACE_EVENT(netfs_failure
,
347 TP_PROTO(struct netfs_io_request
*rreq
,
348 struct netfs_io_subrequest
*sreq
,
349 int error
, enum netfs_failure what
),
351 TP_ARGS(rreq
, sreq
, error
, what
),
354 __field(unsigned int, rreq
)
355 __field(short, index
)
356 __field(short, error
)
357 __field(unsigned short, flags
)
358 __field(enum netfs_io_source
, source
)
359 __field(enum netfs_failure
, what
)
360 __field(size_t, len
)
361 __field(size_t, transferred
)
362 __field(loff_t
, start
)
366 __entry
->rreq
= rreq
->debug_id
;
367 __entry
->index
= sreq
? sreq
->debug_index
: -1;
368 __entry
->error
= error
;
369 __entry
->flags
= sreq
? sreq
->flags
: 0;
370 __entry
->source
= sreq
? sreq
->source
: NETFS_INVALID_READ
;
371 __entry
->what
= what
;
372 __entry
->len
= sreq
? sreq
->len
: rreq
->len
;
373 __entry
->transferred
= sreq
? sreq
->transferred
: 0;
374 __entry
->start
= sreq
? sreq
->start
: 0;
377 TP_printk("R=%08x[%x] %s f=%02x s=%llx %zx/%zx %s e=%d",
378 __entry
->rreq
, __entry
->index
,
379 __print_symbolic(__entry
->source
, netfs_sreq_sources
),
381 __entry
->start
, __entry
->transferred
, __entry
->len
,
382 __print_symbolic(__entry
->what
, netfs_failures
),
386 TRACE_EVENT(netfs_rreq_ref
,
387 TP_PROTO(unsigned int rreq_debug_id
, int ref
,
388 enum netfs_rreq_ref_trace what
),
390 TP_ARGS(rreq_debug_id
, ref
, what
),
393 __field(unsigned int, rreq
)
395 __field(enum netfs_rreq_ref_trace
, what
)
399 __entry
->rreq
= rreq_debug_id
;
401 __entry
->what
= what
;
404 TP_printk("R=%08x %s r=%u",
406 __print_symbolic(__entry
->what
, netfs_rreq_ref_traces
),
410 TRACE_EVENT(netfs_sreq_ref
,
411 TP_PROTO(unsigned int rreq_debug_id
, unsigned int subreq_debug_index
,
412 int ref
, enum netfs_sreq_ref_trace what
),
414 TP_ARGS(rreq_debug_id
, subreq_debug_index
, ref
, what
),
417 __field(unsigned int, rreq
)
418 __field(unsigned int, subreq
)
420 __field(enum netfs_sreq_ref_trace
, what
)
424 __entry
->rreq
= rreq_debug_id
;
425 __entry
->subreq
= subreq_debug_index
;
427 __entry
->what
= what
;
430 TP_printk("R=%08x[%x] %s r=%u",
433 __print_symbolic(__entry
->what
, netfs_sreq_ref_traces
),
437 TRACE_EVENT(netfs_folio
,
438 TP_PROTO(struct folio
*folio
, enum netfs_folio_trace why
),
444 __field(pgoff_t
, index
)
445 __field(unsigned int, nr
)
446 __field(enum netfs_folio_trace
, why
)
450 struct address_space
*__m
= READ_ONCE(folio
->mapping
);
451 __entry
->ino
= __m
? __m
->host
->i_ino
: 0;
453 __entry
->index
= folio
->index
;
454 __entry
->nr
= folio_nr_pages(folio
);
457 TP_printk("i=%05lx ix=%05lx-%05lx %s",
458 __entry
->ino
, __entry
->index
, __entry
->index
+ __entry
->nr
- 1,
459 __print_symbolic(__entry
->why
, netfs_folio_traces
))
462 TRACE_EVENT(netfs_write_iter
,
463 TP_PROTO(const struct kiocb
*iocb
, const struct iov_iter
*from
),
468 __field(unsigned long long, start
)
469 __field(size_t, len
)
470 __field(unsigned int, flags
)
471 __field(unsigned int, ino
)
475 __entry
->start
= iocb
->ki_pos
;
476 __entry
->len
= iov_iter_count(from
);
477 __entry
->ino
= iocb
->ki_filp
->f_inode
->i_ino
;
478 __entry
->flags
= iocb
->ki_flags
;
481 TP_printk("WRITE-ITER i=%x s=%llx l=%zx f=%x",
482 __entry
->ino
, __entry
->start
, __entry
->len
, __entry
->flags
)
485 TRACE_EVENT(netfs_write
,
486 TP_PROTO(const struct netfs_io_request
*wreq
,
487 enum netfs_write_trace what
),
492 __field(unsigned int, wreq
)
493 __field(unsigned int, cookie
)
494 __field(unsigned int, ino
)
495 __field(enum netfs_write_trace
, what
)
496 __field(unsigned long long, start
)
497 __field(unsigned long long, len
)
501 struct netfs_inode
*__ctx
= netfs_inode(wreq
->inode
);
502 struct fscache_cookie
*__cookie
= netfs_i_cookie(__ctx
);
503 __entry
->wreq
= wreq
->debug_id
;
504 __entry
->cookie
= __cookie
? __cookie
->debug_id
: 0;
505 __entry
->ino
= wreq
->inode
->i_ino
;
506 __entry
->what
= what
;
507 __entry
->start
= wreq
->start
;
508 __entry
->len
= wreq
->len
;
511 TP_printk("R=%08x %s c=%08x i=%x by=%llx-%llx",
513 __print_symbolic(__entry
->what
, netfs_write_traces
),
516 __entry
->start
, __entry
->start
+ __entry
->len
- 1)
519 TRACE_EVENT(netfs_collect
,
520 TP_PROTO(const struct netfs_io_request
*wreq
),
525 __field(unsigned int, wreq
)
526 __field(unsigned int, len
)
527 __field(unsigned long long, transferred
)
528 __field(unsigned long long, start
)
532 __entry
->wreq
= wreq
->debug_id
;
533 __entry
->start
= wreq
->start
;
534 __entry
->len
= wreq
->len
;
535 __entry
->transferred
= wreq
->transferred
;
538 TP_printk("R=%08x s=%llx-%llx",
540 __entry
->start
+ __entry
->transferred
,
541 __entry
->start
+ __entry
->len
)
544 TRACE_EVENT(netfs_collect_sreq
,
545 TP_PROTO(const struct netfs_io_request
*wreq
,
546 const struct netfs_io_subrequest
*subreq
),
548 TP_ARGS(wreq
, subreq
),
551 __field(unsigned int, wreq
)
552 __field(unsigned int, subreq
)
553 __field(unsigned int, stream
)
554 __field(unsigned int, len
)
555 __field(unsigned int, transferred
)
556 __field(unsigned long long, start
)
560 __entry
->wreq
= wreq
->debug_id
;
561 __entry
->subreq
= subreq
->debug_index
;
562 __entry
->stream
= subreq
->stream_nr
;
563 __entry
->start
= subreq
->start
;
564 __entry
->len
= subreq
->len
;
565 __entry
->transferred
= subreq
->transferred
;
568 TP_printk("R=%08x[%u:%02x] s=%llx t=%x/%x",
569 __entry
->wreq
, __entry
->stream
, __entry
->subreq
,
570 __entry
->start
, __entry
->transferred
, __entry
->len
)
573 TRACE_EVENT(netfs_collect_folio
,
574 TP_PROTO(const struct netfs_io_request
*wreq
,
575 const struct folio
*folio
,
576 unsigned long long fend
,
577 unsigned long long collected_to
),
579 TP_ARGS(wreq
, folio
, fend
, collected_to
),
582 __field(unsigned int, wreq
)
583 __field(unsigned long, index
)
584 __field(unsigned long long, fend
)
585 __field(unsigned long long, cleaned_to
)
586 __field(unsigned long long, collected_to
)
590 __entry
->wreq
= wreq
->debug_id
;
591 __entry
->index
= folio
->index
;
592 __entry
->fend
= fend
;
593 __entry
->cleaned_to
= wreq
->cleaned_to
;
594 __entry
->collected_to
= collected_to
;
597 TP_printk("R=%08x ix=%05lx r=%llx-%llx t=%llx/%llx",
598 __entry
->wreq
, __entry
->index
,
599 (unsigned long long)__entry
->index
* PAGE_SIZE
, __entry
->fend
,
600 __entry
->cleaned_to
, __entry
->collected_to
)
603 TRACE_EVENT(netfs_collect_state
,
604 TP_PROTO(const struct netfs_io_request
*wreq
,
605 unsigned long long collected_to
,
608 TP_ARGS(wreq
, collected_to
, notes
),
611 __field(unsigned int, wreq
)
612 __field(unsigned int, notes
)
613 __field(unsigned long long, collected_to
)
614 __field(unsigned long long, cleaned_to
)
618 __entry
->wreq
= wreq
->debug_id
;
619 __entry
->notes
= notes
;
620 __entry
->collected_to
= collected_to
;
621 __entry
->cleaned_to
= wreq
->cleaned_to
;
624 TP_printk("R=%08x col=%llx cln=%llx n=%x",
625 __entry
->wreq
, __entry
->collected_to
,
630 TRACE_EVENT(netfs_collect_gap
,
631 TP_PROTO(const struct netfs_io_request
*wreq
,
632 const struct netfs_io_stream
*stream
,
633 unsigned long long jump_to
, char type
),
635 TP_ARGS(wreq
, stream
, jump_to
, type
),
638 __field(unsigned int, wreq
)
639 __field(unsigned char, stream
)
640 __field(unsigned char, type
)
641 __field(unsigned long long, from
)
642 __field(unsigned long long, to
)
646 __entry
->wreq
= wreq
->debug_id
;
647 __entry
->stream
= stream
->stream_nr
;
648 __entry
->from
= stream
->collected_to
;
649 __entry
->to
= jump_to
;
650 __entry
->type
= type
;
653 TP_printk("R=%08x[%x:] %llx->%llx %c",
654 __entry
->wreq
, __entry
->stream
,
655 __entry
->from
, __entry
->to
, __entry
->type
)
658 TRACE_EVENT(netfs_collect_stream
,
659 TP_PROTO(const struct netfs_io_request
*wreq
,
660 const struct netfs_io_stream
*stream
),
662 TP_ARGS(wreq
, stream
),
665 __field(unsigned int, wreq
)
666 __field(unsigned char, stream
)
667 __field(unsigned long long, collected_to
)
668 __field(unsigned long long, front
)
672 __entry
->wreq
= wreq
->debug_id
;
673 __entry
->stream
= stream
->stream_nr
;
674 __entry
->collected_to
= stream
->collected_to
;
675 __entry
->front
= stream
->front
? stream
->front
->start
: UINT_MAX
;
678 TP_printk("R=%08x[%x:] cto=%llx frn=%llx",
679 __entry
->wreq
, __entry
->stream
,
680 __entry
->collected_to
, __entry
->front
)
683 TRACE_EVENT(netfs_progress
,
684 TP_PROTO(const struct netfs_io_subrequest
*subreq
,
685 unsigned long long start
, size_t avail
, size_t part
),
687 TP_ARGS(subreq
, start
, avail
, part
),
690 __field(unsigned int, rreq
)
691 __field(unsigned int, subreq
)
692 __field(unsigned int, consumed
)
693 __field(unsigned int, transferred
)
694 __field(unsigned long long, f_start
)
695 __field(unsigned int, f_avail
)
696 __field(unsigned int, f_part
)
697 __field(unsigned char, slot
)
701 __entry
->rreq
= subreq
->rreq
->debug_id
;
702 __entry
->subreq
= subreq
->debug_index
;
703 __entry
->consumed
= subreq
->consumed
;
704 __entry
->transferred
= subreq
->transferred
;
705 __entry
->f_start
= start
;
706 __entry
->f_avail
= avail
;
707 __entry
->f_part
= part
;
708 __entry
->slot
= subreq
->curr_folioq_slot
;
711 TP_printk("R=%08x[%02x] s=%llx ct=%x/%x pa=%x/%x sl=%x",
712 __entry
->rreq
, __entry
->subreq
, __entry
->f_start
,
713 __entry
->consumed
, __entry
->transferred
,
714 __entry
->f_part
, __entry
->f_avail
, __entry
->slot
)
717 TRACE_EVENT(netfs_donate
,
718 TP_PROTO(const struct netfs_io_request
*rreq
,
719 const struct netfs_io_subrequest
*from
,
720 const struct netfs_io_subrequest
*to
,
722 enum netfs_donate_trace trace
),
724 TP_ARGS(rreq
, from
, to
, amount
, trace
),
727 __field(unsigned int, rreq
)
728 __field(unsigned int, from
)
729 __field(unsigned int, to
)
730 __field(unsigned int, amount
)
731 __field(enum netfs_donate_trace
, trace
)
735 __entry
->rreq
= rreq
->debug_id
;
736 __entry
->from
= from
->debug_index
;
737 __entry
->to
= to
? to
->debug_index
: -1;
738 __entry
->amount
= amount
;
739 __entry
->trace
= trace
;
742 TP_printk("R=%08x[%02x] -> [%02x] %s am=%x",
743 __entry
->rreq
, __entry
->from
, __entry
->to
,
744 __print_symbolic(__entry
->trace
, netfs_donate_traces
),
750 #endif /* _TRACE_NETFS_H */
752 /* This part must be outside protection */
753 #include <trace/define_trace.h>