2 #define TRACE_SYSTEM writeback
4 #if !defined(_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_WRITEBACK_H
7 #include <linux/backing-dev.h>
8 #include <linux/device.h>
9 #include <linux/writeback.h>
11 struct wb_writeback_work
;
13 DECLARE_EVENT_CLASS(writeback_work_class
,
14 TP_PROTO(struct backing_dev_info
*bdi
, struct wb_writeback_work
*work
),
17 __array(char, name
, 32)
18 __field(long, nr_pages
)
19 __field(dev_t
, sb_dev
)
20 __field(int, sync_mode
)
21 __field(int, for_kupdate
)
22 __field(int, range_cyclic
)
23 __field(int, for_background
)
26 strncpy(__entry
->name
, dev_name(bdi
->dev
), 32);
27 __entry
->nr_pages
= work
->nr_pages
;
28 __entry
->sb_dev
= work
->sb
? work
->sb
->s_dev
: 0;
29 __entry
->sync_mode
= work
->sync_mode
;
30 __entry
->for_kupdate
= work
->for_kupdate
;
31 __entry
->range_cyclic
= work
->range_cyclic
;
32 __entry
->for_background
= work
->for_background
;
34 TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d "
35 "kupdate=%d range_cyclic=%d background=%d",
37 MAJOR(__entry
->sb_dev
), MINOR(__entry
->sb_dev
),
41 __entry
->range_cyclic
,
42 __entry
->for_background
45 #define DEFINE_WRITEBACK_WORK_EVENT(name) \
46 DEFINE_EVENT(writeback_work_class, name, \
47 TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), \
49 DEFINE_WRITEBACK_WORK_EVENT(writeback_nothread
);
50 DEFINE_WRITEBACK_WORK_EVENT(writeback_queue
);
51 DEFINE_WRITEBACK_WORK_EVENT(writeback_exec
);
53 TRACE_EVENT(writeback_pages_written
,
54 TP_PROTO(long pages_written
),
55 TP_ARGS(pages_written
),
60 __entry
->pages
= pages_written
;
62 TP_printk("%ld", __entry
->pages
)
65 DECLARE_EVENT_CLASS(writeback_class
,
66 TP_PROTO(struct backing_dev_info
*bdi
),
69 __array(char, name
, 32)
72 strncpy(__entry
->name
, dev_name(bdi
->dev
), 32);
78 #define DEFINE_WRITEBACK_EVENT(name) \
79 DEFINE_EVENT(writeback_class, name, \
80 TP_PROTO(struct backing_dev_info *bdi), \
83 DEFINE_WRITEBACK_EVENT(writeback_nowork
);
84 DEFINE_WRITEBACK_EVENT(writeback_wake_background
);
85 DEFINE_WRITEBACK_EVENT(writeback_wake_thread
);
86 DEFINE_WRITEBACK_EVENT(writeback_wake_forker_thread
);
87 DEFINE_WRITEBACK_EVENT(writeback_bdi_register
);
88 DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister
);
89 DEFINE_WRITEBACK_EVENT(writeback_thread_start
);
90 DEFINE_WRITEBACK_EVENT(writeback_thread_stop
);
92 DECLARE_EVENT_CLASS(wbc_class
,
93 TP_PROTO(struct writeback_control
*wbc
, struct backing_dev_info
*bdi
),
96 __array(char, name
, 32)
97 __field(long, nr_to_write
)
98 __field(long, pages_skipped
)
99 __field(int, sync_mode
)
100 __field(int, for_kupdate
)
101 __field(int, for_background
)
102 __field(int, for_reclaim
)
103 __field(int, range_cyclic
)
104 __field(int, more_io
)
105 __field(unsigned long, older_than_this
)
106 __field(long, range_start
)
107 __field(long, range_end
)
111 strncpy(__entry
->name
, dev_name(bdi
->dev
), 32);
112 __entry
->nr_to_write
= wbc
->nr_to_write
;
113 __entry
->pages_skipped
= wbc
->pages_skipped
;
114 __entry
->sync_mode
= wbc
->sync_mode
;
115 __entry
->for_kupdate
= wbc
->for_kupdate
;
116 __entry
->for_background
= wbc
->for_background
;
117 __entry
->for_reclaim
= wbc
->for_reclaim
;
118 __entry
->range_cyclic
= wbc
->range_cyclic
;
119 __entry
->more_io
= wbc
->more_io
;
120 __entry
->older_than_this
= wbc
->older_than_this
?
121 *wbc
->older_than_this
: 0;
122 __entry
->range_start
= (long)wbc
->range_start
;
123 __entry
->range_end
= (long)wbc
->range_end
;
126 TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d "
127 "bgrd=%d reclm=%d cyclic=%d more=%d older=0x%lx "
128 "start=0x%lx end=0x%lx",
130 __entry
->nr_to_write
,
131 __entry
->pages_skipped
,
133 __entry
->for_kupdate
,
134 __entry
->for_background
,
135 __entry
->for_reclaim
,
136 __entry
->range_cyclic
,
138 __entry
->older_than_this
,
139 __entry
->range_start
,
143 #define DEFINE_WBC_EVENT(name) \
144 DEFINE_EVENT(wbc_class, name, \
145 TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \
147 DEFINE_WBC_EVENT(wbc_writeback_start
);
148 DEFINE_WBC_EVENT(wbc_writeback_written
);
149 DEFINE_WBC_EVENT(wbc_writeback_wait
);
150 DEFINE_WBC_EVENT(wbc_balance_dirty_start
);
151 DEFINE_WBC_EVENT(wbc_balance_dirty_written
);
152 DEFINE_WBC_EVENT(wbc_balance_dirty_wait
);
153 DEFINE_WBC_EVENT(wbc_writepage
);
155 DECLARE_EVENT_CLASS(writeback_congest_waited_template
,
157 TP_PROTO(unsigned int usec_timeout
, unsigned int usec_delayed
),
159 TP_ARGS(usec_timeout
, usec_delayed
),
162 __field( unsigned int, usec_timeout
)
163 __field( unsigned int, usec_delayed
)
167 __entry
->usec_timeout
= usec_timeout
;
168 __entry
->usec_delayed
= usec_delayed
;
171 TP_printk("usec_timeout=%u usec_delayed=%u",
172 __entry
->usec_timeout
,
173 __entry
->usec_delayed
)
176 DEFINE_EVENT(writeback_congest_waited_template
, writeback_congestion_wait
,
178 TP_PROTO(unsigned int usec_timeout
, unsigned int usec_delayed
),
180 TP_ARGS(usec_timeout
, usec_delayed
)
183 DEFINE_EVENT(writeback_congest_waited_template
, writeback_wait_iff_congested
,
185 TP_PROTO(unsigned int usec_timeout
, unsigned int usec_delayed
),
187 TP_ARGS(usec_timeout
, usec_delayed
)
190 #endif /* _TRACE_WRITEBACK_H */
192 /* This part must be outside protection */
193 #include <trace/define_trace.h>