Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/* Network filesystem support module tracepoints
3 *
4 * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
6 */
7#undef TRACE_SYSTEM
8#define TRACE_SYSTEM netfs
9
10#if !defined(_TRACE_NETFS_H) || defined(TRACE_HEADER_MULTI_READ)
11#define _TRACE_NETFS_H
12
13#include <linux/tracepoint.h>
14
15/*
16 * Define enums for tracing information.
17 */
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_prefetch_for_write, "PREFETCHW") \
24 E_(netfs_read_trace_write_begin, "WRITEBEGN")
25
26#define netfs_write_traces \
27 EM(netfs_write_trace_copy_to_cache, "COPY2CACH") \
28 EM(netfs_write_trace_dio_write, "DIO-WRITE") \
29 EM(netfs_write_trace_unbuffered_write, "UNB-WRITE") \
30 EM(netfs_write_trace_writeback, "WRITEBACK") \
31 E_(netfs_write_trace_writethrough, "WRITETHRU")
32
33#define netfs_rreq_origins \
34 EM(NETFS_READAHEAD, "RA") \
35 EM(NETFS_READPAGE, "RP") \
36 EM(NETFS_READ_FOR_WRITE, "RW") \
37 EM(NETFS_COPY_TO_CACHE, "CC") \
38 EM(NETFS_WRITEBACK, "WB") \
39 EM(NETFS_WRITETHROUGH, "WT") \
40 EM(NETFS_UNBUFFERED_WRITE, "UW") \
41 EM(NETFS_DIO_READ, "DR") \
42 E_(NETFS_DIO_WRITE, "DW")
43
44#define netfs_rreq_traces \
45 EM(netfs_rreq_trace_assess, "ASSESS ") \
46 EM(netfs_rreq_trace_copy, "COPY ") \
47 EM(netfs_rreq_trace_collect, "COLLECT") \
48 EM(netfs_rreq_trace_done, "DONE ") \
49 EM(netfs_rreq_trace_free, "FREE ") \
50 EM(netfs_rreq_trace_redirty, "REDIRTY") \
51 EM(netfs_rreq_trace_resubmit, "RESUBMT") \
52 EM(netfs_rreq_trace_set_pause, "PAUSE ") \
53 EM(netfs_rreq_trace_unlock, "UNLOCK ") \
54 EM(netfs_rreq_trace_unlock_pgpriv2, "UNLCK-2") \
55 EM(netfs_rreq_trace_unmark, "UNMARK ") \
56 EM(netfs_rreq_trace_wait_ip, "WAIT-IP") \
57 EM(netfs_rreq_trace_wait_pause, "WT-PAUS") \
58 EM(netfs_rreq_trace_wake_ip, "WAKE-IP") \
59 EM(netfs_rreq_trace_unpause, "UNPAUSE") \
60 E_(netfs_rreq_trace_write_done, "WR-DONE")
61
62#define netfs_sreq_sources \
63 EM(NETFS_FILL_WITH_ZEROES, "ZERO") \
64 EM(NETFS_DOWNLOAD_FROM_SERVER, "DOWN") \
65 EM(NETFS_READ_FROM_CACHE, "READ") \
66 EM(NETFS_INVALID_READ, "INVL") \
67 EM(NETFS_UPLOAD_TO_SERVER, "UPLD") \
68 EM(NETFS_WRITE_TO_CACHE, "WRIT") \
69 E_(NETFS_INVALID_WRITE, "INVL")
70
71#define netfs_sreq_traces \
72 EM(netfs_sreq_trace_discard, "DSCRD") \
73 EM(netfs_sreq_trace_download_instead, "RDOWN") \
74 EM(netfs_sreq_trace_fail, "FAIL ") \
75 EM(netfs_sreq_trace_free, "FREE ") \
76 EM(netfs_sreq_trace_limited, "LIMIT") \
77 EM(netfs_sreq_trace_prepare, "PREP ") \
78 EM(netfs_sreq_trace_prep_failed, "PRPFL") \
79 EM(netfs_sreq_trace_resubmit_short, "SHORT") \
80 EM(netfs_sreq_trace_retry, "RETRY") \
81 EM(netfs_sreq_trace_submit, "SUBMT") \
82 EM(netfs_sreq_trace_terminated, "TERM ") \
83 EM(netfs_sreq_trace_write, "WRITE") \
84 EM(netfs_sreq_trace_write_skip, "SKIP ") \
85 E_(netfs_sreq_trace_write_term, "WTERM")
86
87#define netfs_failures \
88 EM(netfs_fail_check_write_begin, "check-write-begin") \
89 EM(netfs_fail_copy_to_cache, "copy-to-cache") \
90 EM(netfs_fail_dio_read_short, "dio-read-short") \
91 EM(netfs_fail_dio_read_zero, "dio-read-zero") \
92 EM(netfs_fail_read, "read") \
93 EM(netfs_fail_short_read, "short-read") \
94 EM(netfs_fail_prepare_write, "prep-write") \
95 E_(netfs_fail_write, "write")
96
97#define netfs_rreq_ref_traces \
98 EM(netfs_rreq_trace_get_for_outstanding,"GET OUTSTND") \
99 EM(netfs_rreq_trace_get_subreq, "GET SUBREQ ") \
100 EM(netfs_rreq_trace_get_work, "GET WORK ") \
101 EM(netfs_rreq_trace_put_complete, "PUT COMPLT ") \
102 EM(netfs_rreq_trace_put_discard, "PUT DISCARD") \
103 EM(netfs_rreq_trace_put_failed, "PUT FAILED ") \
104 EM(netfs_rreq_trace_put_no_submit, "PUT NO-SUBM") \
105 EM(netfs_rreq_trace_put_return, "PUT RETURN ") \
106 EM(netfs_rreq_trace_put_subreq, "PUT SUBREQ ") \
107 EM(netfs_rreq_trace_put_work, "PUT WORK ") \
108 EM(netfs_rreq_trace_put_work_complete, "PUT WORK CP") \
109 EM(netfs_rreq_trace_put_work_nq, "PUT WORK NQ") \
110 EM(netfs_rreq_trace_see_work, "SEE WORK ") \
111 E_(netfs_rreq_trace_new, "NEW ")
112
113#define netfs_sreq_ref_traces \
114 EM(netfs_sreq_trace_get_copy_to_cache, "GET COPY2C ") \
115 EM(netfs_sreq_trace_get_resubmit, "GET RESUBMIT") \
116 EM(netfs_sreq_trace_get_submit, "GET SUBMIT") \
117 EM(netfs_sreq_trace_get_short_read, "GET SHORTRD") \
118 EM(netfs_sreq_trace_new, "NEW ") \
119 EM(netfs_sreq_trace_put_cancel, "PUT CANCEL ") \
120 EM(netfs_sreq_trace_put_clear, "PUT CLEAR ") \
121 EM(netfs_sreq_trace_put_discard, "PUT DISCARD") \
122 EM(netfs_sreq_trace_put_done, "PUT DONE ") \
123 EM(netfs_sreq_trace_put_failed, "PUT FAILED ") \
124 EM(netfs_sreq_trace_put_merged, "PUT MERGED ") \
125 EM(netfs_sreq_trace_put_no_copy, "PUT NO COPY") \
126 EM(netfs_sreq_trace_put_oom, "PUT OOM ") \
127 EM(netfs_sreq_trace_put_wip, "PUT WIP ") \
128 EM(netfs_sreq_trace_put_work, "PUT WORK ") \
129 E_(netfs_sreq_trace_put_terminated, "PUT TERM ")
130
131#define netfs_folio_traces \
132 /* The first few correspond to enum netfs_how_to_modify */ \
133 EM(netfs_folio_is_uptodate, "mod-uptodate") \
134 EM(netfs_just_prefetch, "mod-prefetch") \
135 EM(netfs_whole_folio_modify, "mod-whole-f") \
136 EM(netfs_modify_and_clear, "mod-n-clear") \
137 EM(netfs_streaming_write, "mod-streamw") \
138 EM(netfs_streaming_write_cont, "mod-streamw+") \
139 EM(netfs_flush_content, "flush") \
140 EM(netfs_streaming_filled_page, "mod-streamw-f") \
141 EM(netfs_streaming_cont_filled_page, "mod-streamw-f+") \
142 /* The rest are for writeback */ \
143 EM(netfs_folio_trace_cancel_copy, "cancel-copy") \
144 EM(netfs_folio_trace_clear, "clear") \
145 EM(netfs_folio_trace_clear_cc, "clear-cc") \
146 EM(netfs_folio_trace_clear_g, "clear-g") \
147 EM(netfs_folio_trace_clear_s, "clear-s") \
148 EM(netfs_folio_trace_copy_to_cache, "mark-copy") \
149 EM(netfs_folio_trace_end_copy, "end-copy") \
150 EM(netfs_folio_trace_filled_gaps, "filled-gaps") \
151 EM(netfs_folio_trace_kill, "kill") \
152 EM(netfs_folio_trace_kill_cc, "kill-cc") \
153 EM(netfs_folio_trace_kill_g, "kill-g") \
154 EM(netfs_folio_trace_kill_s, "kill-s") \
155 EM(netfs_folio_trace_mkwrite, "mkwrite") \
156 EM(netfs_folio_trace_mkwrite_plus, "mkwrite+") \
157 EM(netfs_folio_trace_not_under_wback, "!wback") \
158 EM(netfs_folio_trace_read_gaps, "read-gaps") \
159 EM(netfs_folio_trace_redirtied, "redirtied") \
160 EM(netfs_folio_trace_store, "store") \
161 EM(netfs_folio_trace_store_copy, "store-copy") \
162 EM(netfs_folio_trace_store_plus, "store+") \
163 EM(netfs_folio_trace_wthru, "wthru") \
164 E_(netfs_folio_trace_wthru_plus, "wthru+")
165
166#define netfs_collect_contig_traces \
167 EM(netfs_contig_trace_collect, "Collect") \
168 EM(netfs_contig_trace_jump, "-->JUMP-->") \
169 E_(netfs_contig_trace_unlock, "Unlock")
170
171#ifndef __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
172#define __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
173
174#undef EM
175#undef E_
176#define EM(a, b) a,
177#define E_(a, b) a
178
179enum netfs_read_trace { netfs_read_traces } __mode(byte);
180enum netfs_write_trace { netfs_write_traces } __mode(byte);
181enum netfs_rreq_trace { netfs_rreq_traces } __mode(byte);
182enum netfs_sreq_trace { netfs_sreq_traces } __mode(byte);
183enum netfs_failure { netfs_failures } __mode(byte);
184enum netfs_rreq_ref_trace { netfs_rreq_ref_traces } __mode(byte);
185enum netfs_sreq_ref_trace { netfs_sreq_ref_traces } __mode(byte);
186enum netfs_folio_trace { netfs_folio_traces } __mode(byte);
187enum netfs_collect_contig_trace { netfs_collect_contig_traces } __mode(byte);
188
189#endif
190
191/*
192 * Export enum symbols via userspace.
193 */
194#undef EM
195#undef E_
196#define EM(a, b) TRACE_DEFINE_ENUM(a);
197#define E_(a, b) TRACE_DEFINE_ENUM(a);
198
199netfs_read_traces;
200netfs_write_traces;
201netfs_rreq_origins;
202netfs_rreq_traces;
203netfs_sreq_sources;
204netfs_sreq_traces;
205netfs_failures;
206netfs_rreq_ref_traces;
207netfs_sreq_ref_traces;
208netfs_folio_traces;
209netfs_collect_contig_traces;
210
211/*
212 * Now redefine the EM() and E_() macros to map the enums to the strings that
213 * will be printed in the output.
214 */
215#undef EM
216#undef E_
217#define EM(a, b) { a, b },
218#define E_(a, b) { a, b }
219
220TRACE_EVENT(netfs_read,
221 TP_PROTO(struct netfs_io_request *rreq,
222 loff_t start, size_t len,
223 enum netfs_read_trace what),
224
225 TP_ARGS(rreq, start, len, what),
226
227 TP_STRUCT__entry(
228 __field(unsigned int, rreq )
229 __field(unsigned int, cookie )
230 __field(loff_t, start )
231 __field(size_t, len )
232 __field(enum netfs_read_trace, what )
233 __field(unsigned int, netfs_inode )
234 ),
235
236 TP_fast_assign(
237 __entry->rreq = rreq->debug_id;
238 __entry->cookie = rreq->cache_resources.debug_id;
239 __entry->start = start;
240 __entry->len = len;
241 __entry->what = what;
242 __entry->netfs_inode = rreq->inode->i_ino;
243 ),
244
245 TP_printk("R=%08x %s c=%08x ni=%x s=%llx %zx",
246 __entry->rreq,
247 __print_symbolic(__entry->what, netfs_read_traces),
248 __entry->cookie,
249 __entry->netfs_inode,
250 __entry->start, __entry->len)
251 );
252
253TRACE_EVENT(netfs_rreq,
254 TP_PROTO(struct netfs_io_request *rreq,
255 enum netfs_rreq_trace what),
256
257 TP_ARGS(rreq, what),
258
259 TP_STRUCT__entry(
260 __field(unsigned int, rreq )
261 __field(unsigned int, flags )
262 __field(enum netfs_io_origin, origin )
263 __field(enum netfs_rreq_trace, what )
264 ),
265
266 TP_fast_assign(
267 __entry->rreq = rreq->debug_id;
268 __entry->flags = rreq->flags;
269 __entry->origin = rreq->origin;
270 __entry->what = what;
271 ),
272
273 TP_printk("R=%08x %s %s f=%02x",
274 __entry->rreq,
275 __print_symbolic(__entry->origin, netfs_rreq_origins),
276 __print_symbolic(__entry->what, netfs_rreq_traces),
277 __entry->flags)
278 );
279
280TRACE_EVENT(netfs_sreq,
281 TP_PROTO(struct netfs_io_subrequest *sreq,
282 enum netfs_sreq_trace what),
283
284 TP_ARGS(sreq, what),
285
286 TP_STRUCT__entry(
287 __field(unsigned int, rreq )
288 __field(unsigned short, index )
289 __field(short, error )
290 __field(unsigned short, flags )
291 __field(enum netfs_io_source, source )
292 __field(enum netfs_sreq_trace, what )
293 __field(size_t, len )
294 __field(size_t, transferred )
295 __field(loff_t, start )
296 ),
297
298 TP_fast_assign(
299 __entry->rreq = sreq->rreq->debug_id;
300 __entry->index = sreq->debug_index;
301 __entry->error = sreq->error;
302 __entry->flags = sreq->flags;
303 __entry->source = sreq->source;
304 __entry->what = what;
305 __entry->len = sreq->len;
306 __entry->transferred = sreq->transferred;
307 __entry->start = sreq->start;
308 ),
309
310 TP_printk("R=%08x[%x] %s %s f=%02x s=%llx %zx/%zx e=%d",
311 __entry->rreq, __entry->index,
312 __print_symbolic(__entry->source, netfs_sreq_sources),
313 __print_symbolic(__entry->what, netfs_sreq_traces),
314 __entry->flags,
315 __entry->start, __entry->transferred, __entry->len,
316 __entry->error)
317 );
318
319TRACE_EVENT(netfs_failure,
320 TP_PROTO(struct netfs_io_request *rreq,
321 struct netfs_io_subrequest *sreq,
322 int error, enum netfs_failure what),
323
324 TP_ARGS(rreq, sreq, error, what),
325
326 TP_STRUCT__entry(
327 __field(unsigned int, rreq )
328 __field(short, index )
329 __field(short, error )
330 __field(unsigned short, flags )
331 __field(enum netfs_io_source, source )
332 __field(enum netfs_failure, what )
333 __field(size_t, len )
334 __field(size_t, transferred )
335 __field(loff_t, start )
336 ),
337
338 TP_fast_assign(
339 __entry->rreq = rreq->debug_id;
340 __entry->index = sreq ? sreq->debug_index : -1;
341 __entry->error = error;
342 __entry->flags = sreq ? sreq->flags : 0;
343 __entry->source = sreq ? sreq->source : NETFS_INVALID_READ;
344 __entry->what = what;
345 __entry->len = sreq ? sreq->len : rreq->len;
346 __entry->transferred = sreq ? sreq->transferred : 0;
347 __entry->start = sreq ? sreq->start : 0;
348 ),
349
350 TP_printk("R=%08x[%x] %s f=%02x s=%llx %zx/%zx %s e=%d",
351 __entry->rreq, __entry->index,
352 __print_symbolic(__entry->source, netfs_sreq_sources),
353 __entry->flags,
354 __entry->start, __entry->transferred, __entry->len,
355 __print_symbolic(__entry->what, netfs_failures),
356 __entry->error)
357 );
358
359TRACE_EVENT(netfs_rreq_ref,
360 TP_PROTO(unsigned int rreq_debug_id, int ref,
361 enum netfs_rreq_ref_trace what),
362
363 TP_ARGS(rreq_debug_id, ref, what),
364
365 TP_STRUCT__entry(
366 __field(unsigned int, rreq )
367 __field(int, ref )
368 __field(enum netfs_rreq_ref_trace, what )
369 ),
370
371 TP_fast_assign(
372 __entry->rreq = rreq_debug_id;
373 __entry->ref = ref;
374 __entry->what = what;
375 ),
376
377 TP_printk("R=%08x %s r=%u",
378 __entry->rreq,
379 __print_symbolic(__entry->what, netfs_rreq_ref_traces),
380 __entry->ref)
381 );
382
383TRACE_EVENT(netfs_sreq_ref,
384 TP_PROTO(unsigned int rreq_debug_id, unsigned int subreq_debug_index,
385 int ref, enum netfs_sreq_ref_trace what),
386
387 TP_ARGS(rreq_debug_id, subreq_debug_index, ref, what),
388
389 TP_STRUCT__entry(
390 __field(unsigned int, rreq )
391 __field(unsigned int, subreq )
392 __field(int, ref )
393 __field(enum netfs_sreq_ref_trace, what )
394 ),
395
396 TP_fast_assign(
397 __entry->rreq = rreq_debug_id;
398 __entry->subreq = subreq_debug_index;
399 __entry->ref = ref;
400 __entry->what = what;
401 ),
402
403 TP_printk("R=%08x[%x] %s r=%u",
404 __entry->rreq,
405 __entry->subreq,
406 __print_symbolic(__entry->what, netfs_sreq_ref_traces),
407 __entry->ref)
408 );
409
410TRACE_EVENT(netfs_folio,
411 TP_PROTO(struct folio *folio, enum netfs_folio_trace why),
412
413 TP_ARGS(folio, why),
414
415 TP_STRUCT__entry(
416 __field(ino_t, ino)
417 __field(pgoff_t, index)
418 __field(unsigned int, nr)
419 __field(enum netfs_folio_trace, why)
420 ),
421
422 TP_fast_assign(
423 __entry->ino = folio->mapping->host->i_ino;
424 __entry->why = why;
425 __entry->index = folio_index(folio);
426 __entry->nr = folio_nr_pages(folio);
427 ),
428
429 TP_printk("i=%05lx ix=%05lx-%05lx %s",
430 __entry->ino, __entry->index, __entry->index + __entry->nr - 1,
431 __print_symbolic(__entry->why, netfs_folio_traces))
432 );
433
434TRACE_EVENT(netfs_write_iter,
435 TP_PROTO(const struct kiocb *iocb, const struct iov_iter *from),
436
437 TP_ARGS(iocb, from),
438
439 TP_STRUCT__entry(
440 __field(unsigned long long, start )
441 __field(size_t, len )
442 __field(unsigned int, flags )
443 __field(unsigned int, ino )
444 ),
445
446 TP_fast_assign(
447 __entry->start = iocb->ki_pos;
448 __entry->len = iov_iter_count(from);
449 __entry->ino = iocb->ki_filp->f_inode->i_ino;
450 __entry->flags = iocb->ki_flags;
451 ),
452
453 TP_printk("WRITE-ITER i=%x s=%llx l=%zx f=%x",
454 __entry->ino, __entry->start, __entry->len, __entry->flags)
455 );
456
457TRACE_EVENT(netfs_write,
458 TP_PROTO(const struct netfs_io_request *wreq,
459 enum netfs_write_trace what),
460
461 TP_ARGS(wreq, what),
462
463 TP_STRUCT__entry(
464 __field(unsigned int, wreq )
465 __field(unsigned int, cookie )
466 __field(unsigned int, ino )
467 __field(enum netfs_write_trace, what )
468 __field(unsigned long long, start )
469 __field(unsigned long long, len )
470 ),
471
472 TP_fast_assign(
473 struct netfs_inode *__ctx = netfs_inode(wreq->inode);
474 struct fscache_cookie *__cookie = netfs_i_cookie(__ctx);
475 __entry->wreq = wreq->debug_id;
476 __entry->cookie = __cookie ? __cookie->debug_id : 0;
477 __entry->ino = wreq->inode->i_ino;
478 __entry->what = what;
479 __entry->start = wreq->start;
480 __entry->len = wreq->len;
481 ),
482
483 TP_printk("R=%08x %s c=%08x i=%x by=%llx-%llx",
484 __entry->wreq,
485 __print_symbolic(__entry->what, netfs_write_traces),
486 __entry->cookie,
487 __entry->ino,
488 __entry->start, __entry->start + __entry->len - 1)
489 );
490
491TRACE_EVENT(netfs_collect,
492 TP_PROTO(const struct netfs_io_request *wreq),
493
494 TP_ARGS(wreq),
495
496 TP_STRUCT__entry(
497 __field(unsigned int, wreq )
498 __field(unsigned int, len )
499 __field(unsigned long long, transferred )
500 __field(unsigned long long, start )
501 ),
502
503 TP_fast_assign(
504 __entry->wreq = wreq->debug_id;
505 __entry->start = wreq->start;
506 __entry->len = wreq->len;
507 __entry->transferred = wreq->transferred;
508 ),
509
510 TP_printk("R=%08x s=%llx-%llx",
511 __entry->wreq,
512 __entry->start + __entry->transferred,
513 __entry->start + __entry->len)
514 );
515
516TRACE_EVENT(netfs_collect_contig,
517 TP_PROTO(const struct netfs_io_request *wreq, unsigned long long to,
518 enum netfs_collect_contig_trace type),
519
520 TP_ARGS(wreq, to, type),
521
522 TP_STRUCT__entry(
523 __field(unsigned int, wreq)
524 __field(enum netfs_collect_contig_trace, type)
525 __field(unsigned long long, contiguity)
526 __field(unsigned long long, to)
527 ),
528
529 TP_fast_assign(
530 __entry->wreq = wreq->debug_id;
531 __entry->type = type;
532 __entry->contiguity = wreq->contiguity;
533 __entry->to = to;
534 ),
535
536 TP_printk("R=%08x %llx -> %llx %s",
537 __entry->wreq,
538 __entry->contiguity,
539 __entry->to,
540 __print_symbolic(__entry->type, netfs_collect_contig_traces))
541 );
542
543TRACE_EVENT(netfs_collect_sreq,
544 TP_PROTO(const struct netfs_io_request *wreq,
545 const struct netfs_io_subrequest *subreq),
546
547 TP_ARGS(wreq, subreq),
548
549 TP_STRUCT__entry(
550 __field(unsigned int, wreq )
551 __field(unsigned int, subreq )
552 __field(unsigned int, stream )
553 __field(unsigned int, len )
554 __field(unsigned int, transferred )
555 __field(unsigned long long, start )
556 ),
557
558 TP_fast_assign(
559 __entry->wreq = wreq->debug_id;
560 __entry->subreq = subreq->debug_index;
561 __entry->stream = subreq->stream_nr;
562 __entry->start = subreq->start;
563 __entry->len = subreq->len;
564 __entry->transferred = subreq->transferred;
565 ),
566
567 TP_printk("R=%08x[%u:%02x] s=%llx t=%x/%x",
568 __entry->wreq, __entry->stream, __entry->subreq,
569 __entry->start, __entry->transferred, __entry->len)
570 );
571
572TRACE_EVENT(netfs_collect_folio,
573 TP_PROTO(const struct netfs_io_request *wreq,
574 const struct folio *folio,
575 unsigned long long fend,
576 unsigned long long collected_to),
577
578 TP_ARGS(wreq, folio, fend, collected_to),
579
580 TP_STRUCT__entry(
581 __field(unsigned int, wreq )
582 __field(unsigned long, index )
583 __field(unsigned long long, fend )
584 __field(unsigned long long, cleaned_to )
585 __field(unsigned long long, collected_to )
586 ),
587
588 TP_fast_assign(
589 __entry->wreq = wreq->debug_id;
590 __entry->index = folio->index;
591 __entry->fend = fend;
592 __entry->cleaned_to = wreq->cleaned_to;
593 __entry->collected_to = collected_to;
594 ),
595
596 TP_printk("R=%08x ix=%05lx r=%llx-%llx t=%llx/%llx",
597 __entry->wreq, __entry->index,
598 (unsigned long long)__entry->index * PAGE_SIZE, __entry->fend,
599 __entry->cleaned_to, __entry->collected_to)
600 );
601
602TRACE_EVENT(netfs_collect_state,
603 TP_PROTO(const struct netfs_io_request *wreq,
604 unsigned long long collected_to,
605 unsigned int notes),
606
607 TP_ARGS(wreq, collected_to, notes),
608
609 TP_STRUCT__entry(
610 __field(unsigned int, wreq )
611 __field(unsigned int, notes )
612 __field(unsigned long long, collected_to )
613 __field(unsigned long long, cleaned_to )
614 __field(unsigned long long, contiguity )
615 ),
616
617 TP_fast_assign(
618 __entry->wreq = wreq->debug_id;
619 __entry->notes = notes;
620 __entry->collected_to = collected_to;
621 __entry->cleaned_to = wreq->cleaned_to;
622 __entry->contiguity = wreq->contiguity;
623 ),
624
625 TP_printk("R=%08x cto=%llx fto=%llx ctg=%llx n=%x",
626 __entry->wreq, __entry->collected_to,
627 __entry->cleaned_to, __entry->contiguity,
628 __entry->notes)
629 );
630
631TRACE_EVENT(netfs_collect_gap,
632 TP_PROTO(const struct netfs_io_request *wreq,
633 const struct netfs_io_stream *stream,
634 unsigned long long jump_to, char type),
635
636 TP_ARGS(wreq, stream, jump_to, type),
637
638 TP_STRUCT__entry(
639 __field(unsigned int, wreq)
640 __field(unsigned char, stream)
641 __field(unsigned char, type)
642 __field(unsigned long long, from)
643 __field(unsigned long long, to)
644 ),
645
646 TP_fast_assign(
647 __entry->wreq = wreq->debug_id;
648 __entry->stream = stream->stream_nr;
649 __entry->from = stream->collected_to;
650 __entry->to = jump_to;
651 __entry->type = type;
652 ),
653
654 TP_printk("R=%08x[%x:] %llx->%llx %c",
655 __entry->wreq, __entry->stream,
656 __entry->from, __entry->to, __entry->type)
657 );
658
659TRACE_EVENT(netfs_collect_stream,
660 TP_PROTO(const struct netfs_io_request *wreq,
661 const struct netfs_io_stream *stream),
662
663 TP_ARGS(wreq, stream),
664
665 TP_STRUCT__entry(
666 __field(unsigned int, wreq)
667 __field(unsigned char, stream)
668 __field(unsigned long long, collected_to)
669 __field(unsigned long long, front)
670 ),
671
672 TP_fast_assign(
673 __entry->wreq = wreq->debug_id;
674 __entry->stream = stream->stream_nr;
675 __entry->collected_to = stream->collected_to;
676 __entry->front = stream->front ? stream->front->start : UINT_MAX;
677 ),
678
679 TP_printk("R=%08x[%x:] cto=%llx frn=%llx",
680 __entry->wreq, __entry->stream,
681 __entry->collected_to, __entry->front)
682 );
683
684#undef EM
685#undef E_
686#endif /* _TRACE_NETFS_H */
687
688/* This part must be outside protection */
689#include <trace/define_trace.h>