Fix: compaction mm_compaction_isolate_template update for Linux 4.0+
[lttng-modules.git] / instrumentation / events / lttng-module / writeback.h
CommitLineData
b87700e3
AG
1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM writeback
3
3bc29f0a
MD
4#if !defined(LTTNG_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ)
5#define LTTNG_TRACE_WRITEBACK_H
b87700e3 6
3bc29f0a 7#include "../../../probes/lttng-tracepoint-event.h"
aa634cd1 8#include <linux/tracepoint.h>
b87700e3
AG
9#include <linux/backing-dev.h>
10#include <linux/writeback.h>
11#include <linux/version.h>
12
13#ifndef _TRACE_WRITEBACK_DEF_
14#define _TRACE_WRITEBACK_DEF_
b87700e3
AG
15static inline struct backing_dev_info *inode_to_bdi(struct inode *inode)
16{
17 struct super_block *sb = inode->i_sb;
18
19 if (strcmp(sb->s_type->name, "bdev") == 0)
20 return inode->i_mapping->backing_dev_info;
21
22 return sb->s_bdi;
23}
24#endif
25
26#define show_inode_state(state) \
27 __print_flags(state, "|", \
28 {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \
29 {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \
30 {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \
31 {I_NEW, "I_NEW"}, \
32 {I_WILL_FREE, "I_WILL_FREE"}, \
33 {I_FREEING, "I_FREEING"}, \
34 {I_CLEAR, "I_CLEAR"}, \
35 {I_SYNC, "I_SYNC"}, \
36 {I_REFERENCED, "I_REFERENCED"} \
37 )
38
39#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
40#define WB_WORK_REASON \
41 {WB_REASON_BACKGROUND, "background"}, \
42 {WB_REASON_TRY_TO_FREE_PAGES, "try_to_free_pages"}, \
43 {WB_REASON_SYNC, "sync"}, \
44 {WB_REASON_PERIODIC, "periodic"}, \
45 {WB_REASON_LAPTOP_TIMER, "laptop_timer"}, \
46 {WB_REASON_FREE_MORE_MEM, "free_more_memory"}, \
47 {WB_REASON_FS_FREE_SPACE, "fs_free_space"}, \
48 {WB_REASON_FORKER_THREAD, "forker_thread"}
49#endif
50
aa634cd1
JD
51#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0))
52LTTNG_TRACEPOINT_EVENT(writeback_dirty_page,
53 TP_PROTO(struct page *page, struct address_space *mapping),
54 TP_ARGS(page, mapping),
55 TP_STRUCT__entry (
56 __array_text(char, name, 32)
57 __field(unsigned long, ino)
58 __field(pgoff_t, index)
59 ),
60 TP_fast_assign(
61 tp_memcpy(name,
62 mapping ? dev_name(mapping->backing_dev_info->dev) : "(unknown)", 32)
63 tp_assign(ino, mapping ? mapping->host->i_ino : 0)
64 tp_assign(index, page->index)
65 ),
66 TP_printk("bdi %s: ino=%lu index=%lu",
67 __entry->name,
68 __entry->ino,
69 __entry->index
70 )
71)
72
73LTTNG_TRACEPOINT_EVENT_CLASS(writeback_dirty_inode_template,
74 TP_PROTO(struct inode *inode, int flags),
75 TP_ARGS(inode, flags),
76 TP_STRUCT__entry (
77 __array_text(char, name, 32)
78 __field(unsigned long, ino)
79 __field(unsigned long, flags)
80 ),
81 TP_fast_assign(
82 /* may be called for files on pseudo FSes w/ unregistered bdi */
83 tp_memcpy(name,
84 inode->i_mapping->backing_dev_info->dev ?
85 dev_name(inode->i_mapping->backing_dev_info->dev) : "(unknown)", 32)
86 tp_assign(ino, inode->i_ino)
87 tp_assign(flags, flags)
88 ),
89 TP_printk("bdi %s: ino=%lu flags=%s",
90 __entry->name,
91 __entry->ino,
92 show_inode_state(__entry->flags)
93 )
94)
95#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(name) \
96LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_dirty_inode_template, name, \
97 TP_PROTO(struct inode *inode, int flags), \
98 TP_ARGS(inode, flags))
99LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode_start)
100LTTNG_TRACEPOINT_EVENT_WRITEBACK_DIRTY_INODE_TEMPLATE(writeback_dirty_inode)
101
102LTTNG_TRACEPOINT_EVENT_CLASS(writeback_write_inode_template,
103 TP_PROTO(struct inode *inode, struct writeback_control *wbc),
104 TP_ARGS(inode, wbc),
105 TP_STRUCT__entry (
106 __array_text(char, name, 32)
107 __field(unsigned long, ino)
108 __field(int, sync_mode)
109 ),
110 TP_fast_assign(
111 tp_memcpy(name,
112 dev_name(inode->i_mapping->backing_dev_info->dev), 32)
113 tp_assign(ino, inode->i_ino)
114 tp_assign(sync_mode, wbc->sync_mode)
115 ),
116 TP_printk("bdi %s: ino=%lu sync_mode=%d",
117 __entry->name,
118 __entry->ino,
119 __entry->sync_mode
120 )
121)
122
123#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(name) \
124LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_write_inode_template, name, \
125 TP_PROTO(struct inode *inode, struct writeback_control *wbc), \
126 TP_ARGS(inode, wbc))
127LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode_start)
128LTTNG_TRACEPOINT_EVENT_WRITEBACK_WRITE_INODE(writeback_write_inode)
129#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) */
130
3bc29f0a 131LTTNG_TRACEPOINT_EVENT_CLASS(writeback_work_class,
b87700e3
AG
132 TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work),
133 TP_ARGS(bdi, work),
134 TP_STRUCT__entry(
b4cf87e5 135 __array_text(char, name, 32)
b87700e3
AG
136 ),
137 TP_fast_assign(
138 tp_memcpy(name, dev_name(bdi->dev ? bdi->dev :
139 default_backing_dev_info.dev), 32)
b87700e3 140 ),
88dc2c97
MD
141 TP_printk("bdi %s",
142 __entry->name
b87700e3 143 )
b87700e3 144)
3bc29f0a
MD
145#define LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(name) \
146LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_work_class, name, \
b87700e3
AG
147 TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), \
148 TP_ARGS(bdi, work))
3bc29f0a
MD
149LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_nothread)
150LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_queue)
151LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_exec)
b87700e3 152#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
3bc29f0a
MD
153LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_start)
154LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_written)
155LTTNG_TRACEPOINT_EVENT_WRITEBACK_WORK_INSTANCE(writeback_wait)
b87700e3
AG
156#endif
157
3bc29f0a 158LTTNG_TRACEPOINT_EVENT(writeback_pages_written,
b87700e3
AG
159 TP_PROTO(long pages_written),
160 TP_ARGS(pages_written),
161 TP_STRUCT__entry(
162 __field(long, pages)
163 ),
164 TP_fast_assign(
165 tp_assign(pages, pages_written)
166 ),
167 TP_printk("%ld", __entry->pages)
168)
169
3bc29f0a 170LTTNG_TRACEPOINT_EVENT_CLASS(writeback_class,
b87700e3
AG
171 TP_PROTO(struct backing_dev_info *bdi),
172 TP_ARGS(bdi),
173 TP_STRUCT__entry(
b4cf87e5 174 __array_text(char, name, 32)
b87700e3
AG
175 ),
176 TP_fast_assign(
177 tp_memcpy(name, dev_name(bdi->dev), 32)
178 ),
179 TP_printk("bdi %s",
180 __entry->name
181 )
182)
59fecd6c 183#undef DEFINE_WRITEBACK_EVENT
b87700e3 184#define DEFINE_WRITEBACK_EVENT(name) \
3bc29f0a 185LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_class, name, \
b87700e3
AG
186 TP_PROTO(struct backing_dev_info *bdi), \
187 TP_ARGS(bdi))
188
9cf29d3e 189#define DEFINE_WRITEBACK_EVENT_MAP(name, map) \
3bc29f0a 190LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(writeback_class, name, map, \
9cf29d3e
MD
191 TP_PROTO(struct backing_dev_info *bdi), \
192 TP_ARGS(bdi))
193
b87700e3
AG
194DEFINE_WRITEBACK_EVENT(writeback_nowork)
195#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
196DEFINE_WRITEBACK_EVENT(writeback_wake_background)
197#endif
198DEFINE_WRITEBACK_EVENT(writeback_wake_thread)
199DEFINE_WRITEBACK_EVENT(writeback_wake_forker_thread)
200DEFINE_WRITEBACK_EVENT(writeback_bdi_register)
201DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister)
202DEFINE_WRITEBACK_EVENT(writeback_thread_start)
203DEFINE_WRITEBACK_EVENT(writeback_thread_stop)
204#if (LTTNG_KERNEL_RANGE(3,1,0, 3,2,0))
9cf29d3e
MD
205DEFINE_WRITEBACK_EVENT_MAP(balance_dirty_start, writeback_balance_dirty_start)
206DEFINE_WRITEBACK_EVENT_MAP(balance_dirty_wait, writeback_balance_dirty_wait)
207
3bc29f0a 208LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_written,
b87700e3 209
9cf29d3e 210 writeback_balance_dirty_written,
b87700e3
AG
211
212 TP_PROTO(struct backing_dev_info *bdi, int written),
213
214 TP_ARGS(bdi, written),
215
216 TP_STRUCT__entry(
217 __array(char, name, 32)
218 __field(int, written)
219 ),
220
221 TP_fast_assign(
222 tp_memcpy(name, dev_name(bdi->dev), 32)
223 tp_assign(written, written)
224 ),
225
226 TP_printk("bdi %s written %d",
227 __entry->name,
228 __entry->written
229 )
230)
231#endif
232
3bc29f0a 233LTTNG_TRACEPOINT_EVENT_CLASS(writeback_wbc_class,
b87700e3
AG
234 TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi),
235 TP_ARGS(wbc, bdi),
236 TP_STRUCT__entry(
b4cf87e5 237 __array_text(char, name, 32)
b87700e3
AG
238 __field(long, nr_to_write)
239 __field(long, pages_skipped)
240 __field(int, sync_mode)
241 __field(int, for_kupdate)
242 __field(int, for_background)
243 __field(int, for_reclaim)
244 __field(int, range_cyclic)
245#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
246 __field(int, more_io)
247 __field(unsigned long, older_than_this)
248#endif
249 __field(long, range_start)
250 __field(long, range_end)
251 ),
252
253 TP_fast_assign(
254 tp_memcpy(name, dev_name(bdi->dev), 32)
255 tp_assign(nr_to_write, wbc->nr_to_write)
256 tp_assign(pages_skipped, wbc->pages_skipped)
257 tp_assign(sync_mode, wbc->sync_mode)
258 tp_assign(for_kupdate, wbc->for_kupdate)
259 tp_assign(for_background, wbc->for_background)
260 tp_assign(for_reclaim, wbc->for_reclaim)
261 tp_assign(range_cyclic, wbc->range_cyclic)
262#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
263 tp_assign(more_io, wbc->more_io)
264 tp_assign(older_than_this, wbc->older_than_this ?
265 *wbc->older_than_this : 0)
266#endif
267 tp_assign(range_start, (long)wbc->range_start)
268 tp_assign(range_end, (long)wbc->range_end)
269 ),
270
271 TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d "
272#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
273 "bgrd=%d reclm=%d cyclic=%d more=%d older=0x%lx "
274#else
275 "bgrd=%d reclm=%d cyclic=%d "
276#endif
277 "start=0x%lx end=0x%lx",
278 __entry->name,
279 __entry->nr_to_write,
280 __entry->pages_skipped,
281 __entry->sync_mode,
282 __entry->for_kupdate,
283 __entry->for_background,
284 __entry->for_reclaim,
285 __entry->range_cyclic,
286#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
287 __entry->more_io,
288 __entry->older_than_this,
289#endif
290 __entry->range_start,
291 __entry->range_end)
292)
293
9cf29d3e 294#undef DEFINE_WBC_EVENT
3bc29f0a
MD
295#define LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(name, map) \
296LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(writeback_wbc_class, name, map, \
b87700e3
AG
297 TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \
298 TP_ARGS(wbc, bdi))
299#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
3bc29f0a
MD
300LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writeback_start, writeback_wbc_writeback_start)
301LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writeback_written, writeback_wbc_writeback_written)
302LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writeback_wait, writeback_wbc_writeback_wait)
303LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_start, writeback_wbc_balance_dirty_start)
304LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_written, writeback_wbc_balance_dirty_written)
305LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_balance_dirty_wait, writeback_wbc_balance_dirty_wait)
b87700e3 306#endif
3bc29f0a 307LTTNG_TRACEPOINT_EVENT_WBC_INSTANCE(wbc_writepage, writeback_wbc_writepage)
b87700e3
AG
308
309#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
3bc29f0a 310LTTNG_TRACEPOINT_EVENT(writeback_queue_io,
b87700e3
AG
311 TP_PROTO(struct bdi_writeback *wb,
312#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
313 struct wb_writeback_work *work,
314#else
315 unsigned long *older_than_this,
316#endif
317 int moved),
318#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
319 TP_ARGS(wb, work, moved),
320#else
321 TP_ARGS(wb, older_than_this, moved),
322#endif
323 TP_STRUCT__entry(
324 __array(char, name, 32)
88dc2c97
MD
325#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
326#else
b87700e3
AG
327 __field(unsigned long, older)
328 __field(long, age)
b87700e3 329#endif
88dc2c97 330 __field(int, moved)
b87700e3
AG
331 ),
332 TP_fast_assign(
333 tp_memcpy(name, dev_name(wb->bdi->dev), 32)
334#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
b87700e3
AG
335#else
336 tp_assign(older, older_than_this ? *older_than_this : 0)
337 tp_assign(age, older_than_this ?
338 (jiffies - *older_than_this) * 1000 / HZ : -1)
339#endif
340 tp_assign(moved, moved)
b87700e3
AG
341 ),
342#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
88dc2c97 343 TP_printk("bdi %s: enqueue=%d",
b87700e3 344 __entry->name,
b87700e3 345 __entry->moved,
b87700e3
AG
346 )
347#else
348 TP_printk("bdi %s: older=%lu age=%ld enqueue=%d",
349 __entry->name,
350 __entry->older, /* older_than_this in jiffies */
351 __entry->age, /* older_than_this in relative milliseconds */
352 __entry->moved
353 )
354#endif
355)
356
3bc29f0a 357LTTNG_TRACEPOINT_EVENT_MAP(global_dirty_state,
9cf29d3e
MD
358
359 writeback_global_dirty_state,
b87700e3
AG
360
361 TP_PROTO(unsigned long background_thresh,
362 unsigned long dirty_thresh
363 ),
364
365 TP_ARGS(background_thresh,
366 dirty_thresh
367 ),
368
369 TP_STRUCT__entry(
370 __field(unsigned long, nr_dirty)
371 __field(unsigned long, nr_writeback)
372 __field(unsigned long, nr_unstable)
373 __field(unsigned long, background_thresh)
374 __field(unsigned long, dirty_thresh)
375 __field(unsigned long, dirty_limit)
376 __field(unsigned long, nr_dirtied)
377 __field(unsigned long, nr_written)
378 ),
379
380 TP_fast_assign(
381 tp_assign(nr_dirty, global_page_state(NR_FILE_DIRTY))
382 tp_assign(nr_writeback, global_page_state(NR_WRITEBACK))
383 tp_assign(nr_unstable, global_page_state(NR_UNSTABLE_NFS))
384 tp_assign(nr_dirtied, global_page_state(NR_DIRTIED))
385 tp_assign(nr_written, global_page_state(NR_WRITTEN))
386 tp_assign(background_thresh, background_thresh)
387 tp_assign(dirty_thresh, dirty_thresh)
388 tp_assign(dirty_limit, global_dirty_limit)
389 ),
390
391 TP_printk("dirty=%lu writeback=%lu unstable=%lu "
392 "bg_thresh=%lu thresh=%lu limit=%lu "
393 "dirtied=%lu written=%lu",
394 __entry->nr_dirty,
395 __entry->nr_writeback,
396 __entry->nr_unstable,
397 __entry->background_thresh,
398 __entry->dirty_thresh,
399 __entry->dirty_limit,
400 __entry->nr_dirtied,
401 __entry->nr_written
402 )
403)
404#endif
405
406#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
407
408#define KBps(x) ((x) << (PAGE_SHIFT - 10))
409
3bc29f0a 410LTTNG_TRACEPOINT_EVENT_MAP(bdi_dirty_ratelimit,
9cf29d3e
MD
411
412 writeback_bdi_dirty_ratelimit,
b87700e3
AG
413
414 TP_PROTO(struct backing_dev_info *bdi,
415 unsigned long dirty_rate,
416 unsigned long task_ratelimit),
417
418 TP_ARGS(bdi, dirty_rate, task_ratelimit),
419
420 TP_STRUCT__entry(
421 __array(char, bdi, 32)
422 __field(unsigned long, write_bw)
423 __field(unsigned long, avg_write_bw)
424 __field(unsigned long, dirty_rate)
425 __field(unsigned long, dirty_ratelimit)
426 __field(unsigned long, task_ratelimit)
427 __field(unsigned long, balanced_dirty_ratelimit)
428 ),
429
430 TP_fast_assign(
431 tp_memcpy(bdi, dev_name(bdi->dev), 32)
432 tp_assign(write_bw, KBps(bdi->write_bandwidth))
433 tp_assign(avg_write_bw, KBps(bdi->avg_write_bandwidth))
434 tp_assign(dirty_rate, KBps(dirty_rate))
435 tp_assign(dirty_ratelimit, KBps(bdi->dirty_ratelimit))
436 tp_assign(task_ratelimit, KBps(task_ratelimit))
437 tp_assign(balanced_dirty_ratelimit,
438 KBps(bdi->balanced_dirty_ratelimit))
439 ),
440
441 TP_printk("bdi %s: "
442 "write_bw=%lu awrite_bw=%lu dirty_rate=%lu "
443 "dirty_ratelimit=%lu task_ratelimit=%lu "
444 "balanced_dirty_ratelimit=%lu",
445 __entry->bdi,
446 __entry->write_bw, /* write bandwidth */
447 __entry->avg_write_bw, /* avg write bandwidth */
448 __entry->dirty_rate, /* bdi dirty rate */
449 __entry->dirty_ratelimit, /* base ratelimit */
450 __entry->task_ratelimit, /* ratelimit with position control */
451 __entry->balanced_dirty_ratelimit /* the balanced ratelimit */
452 )
453)
454
3bc29f0a 455LTTNG_TRACEPOINT_EVENT_MAP(balance_dirty_pages,
9cf29d3e
MD
456
457 writeback_balance_dirty_pages,
b87700e3
AG
458
459 TP_PROTO(struct backing_dev_info *bdi,
460 unsigned long thresh,
461 unsigned long bg_thresh,
462 unsigned long dirty,
463 unsigned long bdi_thresh,
464 unsigned long bdi_dirty,
465 unsigned long dirty_ratelimit,
466 unsigned long task_ratelimit,
467 unsigned long dirtied,
468#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
469 unsigned long period,
470#endif
471 long pause,
472 unsigned long start_time),
473
474 TP_ARGS(bdi, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty,
475 dirty_ratelimit, task_ratelimit,
476#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
477 dirtied, period, pause, start_time),
478#else
479 dirtied, pause, start_time),
480#endif
481 TP_STRUCT__entry(
482 __array( char, bdi, 32)
483 __field(unsigned long, limit)
484 __field(unsigned long, setpoint)
485 __field(unsigned long, dirty)
486 __field(unsigned long, bdi_setpoint)
487 __field(unsigned long, bdi_dirty)
488 __field(unsigned long, dirty_ratelimit)
489 __field(unsigned long, task_ratelimit)
490 __field(unsigned int, dirtied)
491 __field(unsigned int, dirtied_pause)
492 __field(unsigned long, paused)
493 __field( long, pause)
494#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
495 __field(unsigned long, period)
496 __field( long, think)
497#endif
498 ),
499
500 TP_fast_assign(
501 tp_memcpy(bdi, dev_name(bdi->dev), 32)
502 tp_assign(limit, global_dirty_limit)
503 tp_assign(setpoint,
504 (global_dirty_limit + (thresh + bg_thresh) / 2) / 2)
505 tp_assign(dirty, dirty)
506 tp_assign(bdi_setpoint,
507 ((global_dirty_limit + (thresh + bg_thresh) / 2) / 2) *
508 bdi_thresh / (thresh + 1))
509 tp_assign(bdi_dirty, bdi_dirty)
510 tp_assign(dirty_ratelimit, KBps(dirty_ratelimit))
511 tp_assign(task_ratelimit, KBps(task_ratelimit))
512 tp_assign(dirtied, dirtied)
513 tp_assign(dirtied_pause, current->nr_dirtied_pause)
514#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
515 tp_assign(think, current->dirty_paused_when == 0 ? 0 :
516 (long)(jiffies - current->dirty_paused_when) * 1000/HZ)
517 tp_assign(period, period * 1000 / HZ)
518#endif
519 tp_assign(pause, pause * 1000 / HZ)
520 tp_assign(paused, (jiffies - start_time) * 1000 / HZ)
521 ),
522
523
524#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
525 TP_printk("bdi %s: "
526 "limit=%lu setpoint=%lu dirty=%lu "
527 "bdi_setpoint=%lu bdi_dirty=%lu "
528 "dirty_ratelimit=%lu task_ratelimit=%lu "
529 "dirtied=%u dirtied_pause=%u "
530 "paused=%lu pause=%ld period=%lu think=%ld",
531 __entry->bdi,
532 __entry->limit,
533 __entry->setpoint,
534 __entry->dirty,
535 __entry->bdi_setpoint,
536 __entry->bdi_dirty,
537 __entry->dirty_ratelimit,
538 __entry->task_ratelimit,
539 __entry->dirtied,
540 __entry->dirtied_pause,
541 __entry->paused, /* ms */
542 __entry->pause, /* ms */
543 __entry->period, /* ms */
544 __entry->think /* ms */
545 )
546#else
547 TP_printk("bdi %s: "
548 "limit=%lu setpoint=%lu dirty=%lu "
549 "bdi_setpoint=%lu bdi_dirty=%lu "
550 "dirty_ratelimit=%lu task_ratelimit=%lu "
551 "dirtied=%u dirtied_pause=%u "
552 "paused=%lu pause=%ld",
553 __entry->bdi,
554 __entry->limit,
555 __entry->setpoint,
556 __entry->dirty,
557 __entry->bdi_setpoint,
558 __entry->bdi_dirty,
559 __entry->dirty_ratelimit,
560 __entry->task_ratelimit,
561 __entry->dirtied,
562 __entry->dirtied_pause,
563 __entry->paused, /* ms */
564 __entry->pause /* ms */
565 )
566#endif
567)
568#endif
569
570#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0))
3bc29f0a 571LTTNG_TRACEPOINT_EVENT(writeback_sb_inodes_requeue,
b87700e3
AG
572
573 TP_PROTO(struct inode *inode),
574 TP_ARGS(inode),
575
576 TP_STRUCT__entry(
b4cf87e5 577 __array_text(char, name, 32)
b87700e3
AG
578 __field(unsigned long, ino)
579 __field(unsigned long, state)
580 __field(unsigned long, dirtied_when)
581 ),
582
583 TP_fast_assign(
584 tp_memcpy(name, dev_name(inode_to_bdi(inode)->dev), 32)
585 tp_assign(ino, inode->i_ino)
586 tp_assign(state, inode->i_state)
587 tp_assign(dirtied_when, inode->dirtied_when)
588 ),
589
590 TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu",
591 __entry->name,
592 __entry->ino,
593 show_inode_state(__entry->state),
594 __entry->dirtied_when,
595 (jiffies - __entry->dirtied_when) / HZ
596 )
597)
598#endif
599
600#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
3bc29f0a 601LTTNG_TRACEPOINT_EVENT_CLASS(writeback_congest_waited_template,
b87700e3
AG
602
603 TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
604
605 TP_ARGS(usec_timeout, usec_delayed),
606
607 TP_STRUCT__entry(
608 __field( unsigned int, usec_timeout )
609 __field( unsigned int, usec_delayed )
610 ),
611
612 TP_fast_assign(
613 tp_assign(usec_timeout, usec_timeout)
614 tp_assign(usec_delayed, usec_delayed)
615 ),
616
617 TP_printk("usec_timeout=%u usec_delayed=%u",
618 __entry->usec_timeout,
619 __entry->usec_delayed)
620)
621
3bc29f0a 622LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_congest_waited_template, writeback_congestion_wait,
b87700e3
AG
623
624 TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
625
626 TP_ARGS(usec_timeout, usec_delayed)
627)
628
3bc29f0a 629LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_congest_waited_template, writeback_wait_iff_congested,
b87700e3
AG
630
631 TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
632
633 TP_ARGS(usec_timeout, usec_delayed)
634)
635#endif
636
637#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
3bc29f0a 638LTTNG_TRACEPOINT_EVENT_CLASS(writeback_single_inode_template,
b87700e3
AG
639
640 TP_PROTO(struct inode *inode,
641 struct writeback_control *wbc,
642 unsigned long nr_to_write
643 ),
644
645 TP_ARGS(inode, wbc, nr_to_write),
646
647 TP_STRUCT__entry(
b4cf87e5 648 __array_text(char, name, 32)
b87700e3
AG
649 __field(unsigned long, ino)
650 __field(unsigned long, state)
651 __field(unsigned long, dirtied_when)
652 __field(unsigned long, writeback_index)
653 __field(long, nr_to_write)
654 __field(unsigned long, wrote)
655 ),
656
657 TP_fast_assign(
658 tp_memcpy(name, dev_name(inode_to_bdi(inode)->dev), 32)
659 tp_assign(ino, inode->i_ino)
660 tp_assign(state, inode->i_state)
661 tp_assign(dirtied_when, inode->dirtied_when)
662 tp_assign(writeback_index, inode->i_mapping->writeback_index)
663 tp_assign(nr_to_write, nr_to_write)
664 tp_assign(wrote, nr_to_write - wbc->nr_to_write)
665 ),
666
667 TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu "
668 "index=%lu to_write=%ld wrote=%lu",
669 __entry->name,
670 __entry->ino,
671 show_inode_state(__entry->state),
672 __entry->dirtied_when,
673 (jiffies - __entry->dirtied_when) / HZ,
674 __entry->writeback_index,
675 __entry->nr_to_write,
676 __entry->wrote
677 )
678)
679
680#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0))
3bc29f0a 681LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_single_inode_template, writeback_single_inode_requeue,
b87700e3
AG
682 TP_PROTO(struct inode *inode,
683 struct writeback_control *wbc,
684 unsigned long nr_to_write),
685 TP_ARGS(inode, wbc, nr_to_write)
686)
687#endif
688
3bc29f0a 689LTTNG_TRACEPOINT_EVENT_INSTANCE(writeback_single_inode_template, writeback_single_inode,
b87700e3
AG
690 TP_PROTO(struct inode *inode,
691 struct writeback_control *wbc,
692 unsigned long nr_to_write),
693 TP_ARGS(inode, wbc, nr_to_write)
694)
695#endif
696
3bc29f0a 697#endif /* LTTNG_TRACE_WRITEBACK_H */
b87700e3
AG
698
699/* This part must be outside protection */
700#include "../../../probes/define_trace.h"
This page took 0.052729 seconds and 4 git commands to generate.