hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
kernel/include/trace/events/writeback.h
....@@ -35,7 +35,6 @@
3535 EM( WB_REASON_SYNC, "sync") \
3636 EM( WB_REASON_PERIODIC, "periodic") \
3737 EM( WB_REASON_LAPTOP_TIMER, "laptop_timer") \
38
- EM( WB_REASON_FREE_MORE_MEM, "free_more_memory") \
3938 EM( WB_REASON_FS_FREE_SPACE, "fs_free_space") \
4039 EMe(WB_REASON_FORKER_THREAD, "forker_thread")
4140
....@@ -52,7 +51,7 @@
5251
5352 struct wb_writeback_work;
5453
55
-TRACE_EVENT(writeback_dirty_page,
54
+DECLARE_EVENT_CLASS(writeback_page_template,
5655
5756 TP_PROTO(struct page *page, struct address_space *mapping),
5857
....@@ -60,7 +59,7 @@
6059
6160 TP_STRUCT__entry (
6261 __array(char, name, 32)
63
- __field(unsigned long, ino)
62
+ __field(ino_t, ino)
6463 __field(pgoff_t, index)
6564 ),
6665
....@@ -68,15 +67,29 @@
6867 strscpy_pad(__entry->name,
6968 bdi_dev_name(mapping ? inode_to_bdi(mapping->host) :
7069 NULL), 32);
71
- __entry->ino = mapping ? mapping->host->i_ino : 0;
70
+ __entry->ino = (mapping && mapping->host) ? mapping->host->i_ino : 0;
7271 __entry->index = page->index;
7372 ),
7473
7574 TP_printk("bdi %s: ino=%lu index=%lu",
7675 __entry->name,
77
- __entry->ino,
76
+ (unsigned long)__entry->ino,
7877 __entry->index
7978 )
79
+);
80
+
81
+DEFINE_EVENT(writeback_page_template, writeback_dirty_page,
82
+
83
+ TP_PROTO(struct page *page, struct address_space *mapping),
84
+
85
+ TP_ARGS(page, mapping)
86
+);
87
+
88
+DEFINE_EVENT(writeback_page_template, wait_on_page_writeback,
89
+
90
+ TP_PROTO(struct page *page, struct address_space *mapping),
91
+
92
+ TP_ARGS(page, mapping)
8093 );
8194
8295 DECLARE_EVENT_CLASS(writeback_dirty_inode_template,
....@@ -87,7 +100,7 @@
87100
88101 TP_STRUCT__entry (
89102 __array(char, name, 32)
90
- __field(unsigned long, ino)
103
+ __field(ino_t, ino)
91104 __field(unsigned long, state)
92105 __field(unsigned long, flags)
93106 ),
....@@ -104,7 +117,7 @@
104117
105118 TP_printk("bdi %s: ino=%lu state=%s flags=%s",
106119 __entry->name,
107
- __entry->ino,
120
+ (unsigned long)__entry->ino,
108121 show_inode_state(__entry->state),
109122 show_inode_state(__entry->flags)
110123 )
....@@ -134,32 +147,158 @@
134147 #ifdef CREATE_TRACE_POINTS
135148 #ifdef CONFIG_CGROUP_WRITEBACK
136149
137
-static inline unsigned int __trace_wb_assign_cgroup(struct bdi_writeback *wb)
150
+static inline ino_t __trace_wb_assign_cgroup(struct bdi_writeback *wb)
138151 {
139
- return wb->memcg_css->cgroup->kn->id.ino;
152
+ return cgroup_ino(wb->memcg_css->cgroup);
140153 }
141154
142
-static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *wbc)
155
+static inline ino_t __trace_wbc_assign_cgroup(struct writeback_control *wbc)
143156 {
144157 if (wbc->wb)
145158 return __trace_wb_assign_cgroup(wbc->wb);
146159 else
147
- return -1U;
160
+ return 1;
148161 }
149162 #else /* CONFIG_CGROUP_WRITEBACK */
150163
151
-static inline unsigned int __trace_wb_assign_cgroup(struct bdi_writeback *wb)
164
+static inline ino_t __trace_wb_assign_cgroup(struct bdi_writeback *wb)
152165 {
153
- return -1U;
166
+ return 1;
154167 }
155168
156
-static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *wbc)
169
+static inline ino_t __trace_wbc_assign_cgroup(struct writeback_control *wbc)
157170 {
158
- return -1U;
171
+ return 1;
159172 }
160173
161174 #endif /* CONFIG_CGROUP_WRITEBACK */
162175 #endif /* CREATE_TRACE_POINTS */
176
+
177
+#ifdef CONFIG_CGROUP_WRITEBACK
178
+TRACE_EVENT(inode_foreign_history,
179
+
180
+ TP_PROTO(struct inode *inode, struct writeback_control *wbc,
181
+ unsigned int history),
182
+
183
+ TP_ARGS(inode, wbc, history),
184
+
185
+ TP_STRUCT__entry(
186
+ __array(char, name, 32)
187
+ __field(ino_t, ino)
188
+ __field(ino_t, cgroup_ino)
189
+ __field(unsigned int, history)
190
+ ),
191
+
192
+ TP_fast_assign(
193
+ strscpy_pad(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32);
194
+ __entry->ino = inode->i_ino;
195
+ __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
196
+ __entry->history = history;
197
+ ),
198
+
199
+ TP_printk("bdi %s: ino=%lu cgroup_ino=%lu history=0x%x",
200
+ __entry->name,
201
+ (unsigned long)__entry->ino,
202
+ (unsigned long)__entry->cgroup_ino,
203
+ __entry->history
204
+ )
205
+);
206
+
207
+TRACE_EVENT(inode_switch_wbs,
208
+
209
+ TP_PROTO(struct inode *inode, struct bdi_writeback *old_wb,
210
+ struct bdi_writeback *new_wb),
211
+
212
+ TP_ARGS(inode, old_wb, new_wb),
213
+
214
+ TP_STRUCT__entry(
215
+ __array(char, name, 32)
216
+ __field(ino_t, ino)
217
+ __field(ino_t, old_cgroup_ino)
218
+ __field(ino_t, new_cgroup_ino)
219
+ ),
220
+
221
+ TP_fast_assign(
222
+ strscpy_pad(__entry->name, bdi_dev_name(old_wb->bdi), 32);
223
+ __entry->ino = inode->i_ino;
224
+ __entry->old_cgroup_ino = __trace_wb_assign_cgroup(old_wb);
225
+ __entry->new_cgroup_ino = __trace_wb_assign_cgroup(new_wb);
226
+ ),
227
+
228
+ TP_printk("bdi %s: ino=%lu old_cgroup_ino=%lu new_cgroup_ino=%lu",
229
+ __entry->name,
230
+ (unsigned long)__entry->ino,
231
+ (unsigned long)__entry->old_cgroup_ino,
232
+ (unsigned long)__entry->new_cgroup_ino
233
+ )
234
+);
235
+
236
+TRACE_EVENT(track_foreign_dirty,
237
+
238
+ TP_PROTO(struct page *page, struct bdi_writeback *wb),
239
+
240
+ TP_ARGS(page, wb),
241
+
242
+ TP_STRUCT__entry(
243
+ __array(char, name, 32)
244
+ __field(u64, bdi_id)
245
+ __field(ino_t, ino)
246
+ __field(unsigned int, memcg_id)
247
+ __field(ino_t, cgroup_ino)
248
+ __field(ino_t, page_cgroup_ino)
249
+ ),
250
+
251
+ TP_fast_assign(
252
+ struct address_space *mapping = page_mapping(page);
253
+ struct inode *inode = mapping ? mapping->host : NULL;
254
+
255
+ strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
256
+ __entry->bdi_id = wb->bdi->id;
257
+ __entry->ino = inode ? inode->i_ino : 0;
258
+ __entry->memcg_id = wb->memcg_css->id;
259
+ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
260
+ __entry->page_cgroup_ino = cgroup_ino(page->mem_cgroup->css.cgroup);
261
+ ),
262
+
263
+ TP_printk("bdi %s[%llu]: ino=%lu memcg_id=%u cgroup_ino=%lu page_cgroup_ino=%lu",
264
+ __entry->name,
265
+ __entry->bdi_id,
266
+ (unsigned long)__entry->ino,
267
+ __entry->memcg_id,
268
+ (unsigned long)__entry->cgroup_ino,
269
+ (unsigned long)__entry->page_cgroup_ino
270
+ )
271
+);
272
+
273
+TRACE_EVENT(flush_foreign,
274
+
275
+ TP_PROTO(struct bdi_writeback *wb, unsigned int frn_bdi_id,
276
+ unsigned int frn_memcg_id),
277
+
278
+ TP_ARGS(wb, frn_bdi_id, frn_memcg_id),
279
+
280
+ TP_STRUCT__entry(
281
+ __array(char, name, 32)
282
+ __field(ino_t, cgroup_ino)
283
+ __field(unsigned int, frn_bdi_id)
284
+ __field(unsigned int, frn_memcg_id)
285
+ ),
286
+
287
+ TP_fast_assign(
288
+ strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
289
+ __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
290
+ __entry->frn_bdi_id = frn_bdi_id;
291
+ __entry->frn_memcg_id = frn_memcg_id;
292
+ ),
293
+
294
+ TP_printk("bdi %s: cgroup_ino=%lu frn_bdi_id=%u frn_memcg_id=%u",
295
+ __entry->name,
296
+ (unsigned long)__entry->cgroup_ino,
297
+ __entry->frn_bdi_id,
298
+ __entry->frn_memcg_id
299
+ )
300
+);
301
+#endif
163302
164303 DECLARE_EVENT_CLASS(writeback_write_inode_template,
165304
....@@ -169,9 +308,9 @@
169308
170309 TP_STRUCT__entry (
171310 __array(char, name, 32)
172
- __field(unsigned long, ino)
311
+ __field(ino_t, ino)
173312 __field(int, sync_mode)
174
- __field(unsigned int, cgroup_ino)
313
+ __field(ino_t, cgroup_ino)
175314 ),
176315
177316 TP_fast_assign(
....@@ -182,11 +321,11 @@
182321 __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
183322 ),
184323
185
- TP_printk("bdi %s: ino=%lu sync_mode=%d cgroup_ino=%u",
324
+ TP_printk("bdi %s: ino=%lu sync_mode=%d cgroup_ino=%lu",
186325 __entry->name,
187
- __entry->ino,
326
+ (unsigned long)__entry->ino,
188327 __entry->sync_mode,
189
- __entry->cgroup_ino
328
+ (unsigned long)__entry->cgroup_ino
190329 )
191330 );
192331
....@@ -216,7 +355,7 @@
216355 __field(int, range_cyclic)
217356 __field(int, for_background)
218357 __field(int, reason)
219
- __field(unsigned int, cgroup_ino)
358
+ __field(ino_t, cgroup_ino)
220359 ),
221360 TP_fast_assign(
222361 strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
....@@ -230,7 +369,7 @@
230369 __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
231370 ),
232371 TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d "
233
- "kupdate=%d range_cyclic=%d background=%d reason=%s cgroup_ino=%u",
372
+ "kupdate=%d range_cyclic=%d background=%d reason=%s cgroup_ino=%lu",
234373 __entry->name,
235374 MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev),
236375 __entry->nr_pages,
....@@ -239,7 +378,7 @@
239378 __entry->range_cyclic,
240379 __entry->for_background,
241380 __print_symbolic(__entry->reason, WB_WORK_REASON),
242
- __entry->cgroup_ino
381
+ (unsigned long)__entry->cgroup_ino
243382 )
244383 );
245384 #define DEFINE_WRITEBACK_WORK_EVENT(name) \
....@@ -269,15 +408,15 @@
269408 TP_ARGS(wb),
270409 TP_STRUCT__entry(
271410 __array(char, name, 32)
272
- __field(unsigned int, cgroup_ino)
411
+ __field(ino_t, cgroup_ino)
273412 ),
274413 TP_fast_assign(
275414 strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
276415 __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
277416 ),
278
- TP_printk("bdi %s: cgroup_ino=%u",
417
+ TP_printk("bdi %s: cgroup_ino=%lu",
279418 __entry->name,
280
- __entry->cgroup_ino
419
+ (unsigned long)__entry->cgroup_ino
281420 )
282421 );
283422 #define DEFINE_WRITEBACK_EVENT(name) \
....@@ -315,7 +454,7 @@
315454 __field(int, range_cyclic)
316455 __field(long, range_start)
317456 __field(long, range_end)
318
- __field(unsigned int, cgroup_ino)
457
+ __field(ino_t, cgroup_ino)
319458 ),
320459
321460 TP_fast_assign(
....@@ -334,7 +473,7 @@
334473
335474 TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d "
336475 "bgrd=%d reclm=%d cyclic=%d "
337
- "start=0x%lx end=0x%lx cgroup_ino=%u",
476
+ "start=0x%lx end=0x%lx cgroup_ino=%lu",
338477 __entry->name,
339478 __entry->nr_to_write,
340479 __entry->pages_skipped,
....@@ -345,7 +484,7 @@
345484 __entry->range_cyclic,
346485 __entry->range_start,
347486 __entry->range_end,
348
- __entry->cgroup_ino
487
+ (unsigned long)__entry->cgroup_ino
349488 )
350489 )
351490
....@@ -367,7 +506,7 @@
367506 __field(long, age)
368507 __field(int, moved)
369508 __field(int, reason)
370
- __field(unsigned int, cgroup_ino)
509
+ __field(ino_t, cgroup_ino)
371510 ),
372511 TP_fast_assign(
373512 strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
....@@ -377,13 +516,13 @@
377516 __entry->reason = work->reason;
378517 __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
379518 ),
380
- TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%u",
519
+ TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%lu",
381520 __entry->name,
382521 __entry->older, /* dirtied_before in jiffies */
383522 __entry->age, /* dirtied_before in relative milliseconds */
384523 __entry->moved,
385524 __print_symbolic(__entry->reason, WB_WORK_REASON),
386
- __entry->cgroup_ino
525
+ (unsigned long)__entry->cgroup_ino
387526 )
388527 );
389528
....@@ -400,7 +539,6 @@
400539 TP_STRUCT__entry(
401540 __field(unsigned long, nr_dirty)
402541 __field(unsigned long, nr_writeback)
403
- __field(unsigned long, nr_unstable)
404542 __field(unsigned long, background_thresh)
405543 __field(unsigned long, dirty_thresh)
406544 __field(unsigned long, dirty_limit)
....@@ -411,7 +549,6 @@
411549 TP_fast_assign(
412550 __entry->nr_dirty = global_node_page_state(NR_FILE_DIRTY);
413551 __entry->nr_writeback = global_node_page_state(NR_WRITEBACK);
414
- __entry->nr_unstable = global_node_page_state(NR_UNSTABLE_NFS);
415552 __entry->nr_dirtied = global_node_page_state(NR_DIRTIED);
416553 __entry->nr_written = global_node_page_state(NR_WRITTEN);
417554 __entry->background_thresh = background_thresh;
....@@ -419,12 +556,11 @@
419556 __entry->dirty_limit = global_wb_domain.dirty_limit;
420557 ),
421558
422
- TP_printk("dirty=%lu writeback=%lu unstable=%lu "
559
+ TP_printk("dirty=%lu writeback=%lu "
423560 "bg_thresh=%lu thresh=%lu limit=%lu "
424561 "dirtied=%lu written=%lu",
425562 __entry->nr_dirty,
426563 __entry->nr_writeback,
427
- __entry->nr_unstable,
428564 __entry->background_thresh,
429565 __entry->dirty_thresh,
430566 __entry->dirty_limit,
....@@ -451,7 +587,7 @@
451587 __field(unsigned long, dirty_ratelimit)
452588 __field(unsigned long, task_ratelimit)
453589 __field(unsigned long, balanced_dirty_ratelimit)
454
- __field(unsigned int, cgroup_ino)
590
+ __field(ino_t, cgroup_ino)
455591 ),
456592
457593 TP_fast_assign(
....@@ -469,7 +605,7 @@
469605 TP_printk("bdi %s: "
470606 "write_bw=%lu awrite_bw=%lu dirty_rate=%lu "
471607 "dirty_ratelimit=%lu task_ratelimit=%lu "
472
- "balanced_dirty_ratelimit=%lu cgroup_ino=%u",
608
+ "balanced_dirty_ratelimit=%lu cgroup_ino=%lu",
473609 __entry->bdi,
474610 __entry->write_bw, /* write bandwidth */
475611 __entry->avg_write_bw, /* avg write bandwidth */
....@@ -477,7 +613,7 @@
477613 __entry->dirty_ratelimit, /* base ratelimit */
478614 __entry->task_ratelimit, /* ratelimit with position control */
479615 __entry->balanced_dirty_ratelimit, /* the balanced ratelimit */
480
- __entry->cgroup_ino
616
+ (unsigned long)__entry->cgroup_ino
481617 )
482618 );
483619
....@@ -515,7 +651,7 @@
515651 __field( long, pause)
516652 __field(unsigned long, period)
517653 __field( long, think)
518
- __field(unsigned int, cgroup_ino)
654
+ __field(ino_t, cgroup_ino)
519655 ),
520656
521657 TP_fast_assign(
....@@ -547,7 +683,7 @@
547683 "bdi_setpoint=%lu bdi_dirty=%lu "
548684 "dirty_ratelimit=%lu task_ratelimit=%lu "
549685 "dirtied=%u dirtied_pause=%u "
550
- "paused=%lu pause=%ld period=%lu think=%ld cgroup_ino=%u",
686
+ "paused=%lu pause=%ld period=%lu think=%ld cgroup_ino=%lu",
551687 __entry->bdi,
552688 __entry->limit,
553689 __entry->setpoint,
....@@ -562,7 +698,7 @@
562698 __entry->pause, /* ms */
563699 __entry->period, /* ms */
564700 __entry->think, /* ms */
565
- __entry->cgroup_ino
701
+ (unsigned long)__entry->cgroup_ino
566702 )
567703 );
568704
....@@ -573,10 +709,10 @@
573709
574710 TP_STRUCT__entry(
575711 __array(char, name, 32)
576
- __field(unsigned long, ino)
712
+ __field(ino_t, ino)
577713 __field(unsigned long, state)
578714 __field(unsigned long, dirtied_when)
579
- __field(unsigned int, cgroup_ino)
715
+ __field(ino_t, cgroup_ino)
580716 ),
581717
582718 TP_fast_assign(
....@@ -588,13 +724,13 @@
588724 __entry->cgroup_ino = __trace_wb_assign_cgroup(inode_to_wb(inode));
589725 ),
590726
591
- TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu cgroup_ino=%u",
727
+ TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu cgroup_ino=%lu",
592728 __entry->name,
593
- __entry->ino,
729
+ (unsigned long)__entry->ino,
594730 show_inode_state(__entry->state),
595731 __entry->dirtied_when,
596732 (jiffies - __entry->dirtied_when) / HZ,
597
- __entry->cgroup_ino
733
+ (unsigned long)__entry->cgroup_ino
598734 )
599735 );
600736
....@@ -644,13 +780,13 @@
644780
645781 TP_STRUCT__entry(
646782 __array(char, name, 32)
647
- __field(unsigned long, ino)
783
+ __field(ino_t, ino)
648784 __field(unsigned long, state)
649785 __field(unsigned long, dirtied_when)
650786 __field(unsigned long, writeback_index)
651787 __field(long, nr_to_write)
652788 __field(unsigned long, wrote)
653
- __field(unsigned int, cgroup_ino)
789
+ __field(ino_t, cgroup_ino)
654790 ),
655791
656792 TP_fast_assign(
....@@ -666,16 +802,16 @@
666802 ),
667803
668804 TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu "
669
- "index=%lu to_write=%ld wrote=%lu cgroup_ino=%u",
805
+ "index=%lu to_write=%ld wrote=%lu cgroup_ino=%lu",
670806 __entry->name,
671
- __entry->ino,
807
+ (unsigned long)__entry->ino,
672808 show_inode_state(__entry->state),
673809 __entry->dirtied_when,
674810 (jiffies - __entry->dirtied_when) / HZ,
675811 __entry->writeback_index,
676812 __entry->nr_to_write,
677813 __entry->wrote,
678
- __entry->cgroup_ino
814
+ (unsigned long)__entry->cgroup_ino
679815 )
680816 );
681817
....@@ -700,7 +836,7 @@
700836
701837 TP_STRUCT__entry(
702838 __field( dev_t, dev )
703
- __field(unsigned long, ino )
839
+ __field( ino_t, ino )
704840 __field(unsigned long, state )
705841 __field( __u16, mode )
706842 __field(unsigned long, dirtied_when )
....@@ -716,7 +852,7 @@
716852
717853 TP_printk("dev %d,%d ino %lu dirtied %lu state %s mode 0%o",
718854 MAJOR(__entry->dev), MINOR(__entry->dev),
719
- __entry->ino, __entry->dirtied_when,
855
+ (unsigned long)__entry->ino, __entry->dirtied_when,
720856 show_inode_state(__entry->state), __entry->mode)
721857 );
722858