^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #undef TRACE_SYSTEM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define TRACE_SYSTEM writeback
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #if !defined(_TRACE_WRITEBACK_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define _TRACE_WRITEBACK_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/tracepoint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/backing-dev.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/writeback.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define show_inode_state(state) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) __print_flags(state, "|", \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) {I_DIRTY_SYNC, "I_DIRTY_SYNC"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) {I_DIRTY_DATASYNC, "I_DIRTY_DATASYNC"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) {I_DIRTY_PAGES, "I_DIRTY_PAGES"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) {I_NEW, "I_NEW"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) {I_WILL_FREE, "I_WILL_FREE"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) {I_FREEING, "I_FREEING"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) {I_CLEAR, "I_CLEAR"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) {I_SYNC, "I_SYNC"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) {I_DIRTY_TIME, "I_DIRTY_TIME"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) {I_REFERENCED, "I_REFERENCED"} \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /* enums need to be exported to user space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #undef EM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #undef EMe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define EM(a,b) TRACE_DEFINE_ENUM(a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define EMe(a,b) TRACE_DEFINE_ENUM(a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define WB_WORK_REASON \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) EM( WB_REASON_BACKGROUND, "background") \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) EM( WB_REASON_VMSCAN, "vmscan") \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) EM( WB_REASON_SYNC, "sync") \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) EM( WB_REASON_PERIODIC, "periodic") \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) EM( WB_REASON_LAPTOP_TIMER, "laptop_timer") \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) EM( WB_REASON_FS_FREE_SPACE, "fs_free_space") \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) EMe(WB_REASON_FORKER_THREAD, "forker_thread")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) WB_WORK_REASON
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) * Now redefine the EM() and EMe() macros to map the enums to the strings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * that will be printed in the output.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #undef EM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #undef EMe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define EM(a,b) { a, b },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define EMe(a,b) { a, b }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct wb_writeback_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) DECLARE_EVENT_CLASS(writeback_page_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) TP_PROTO(struct page *page, struct address_space *mapping),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) TP_ARGS(page, mapping),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) TP_STRUCT__entry (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __field(pgoff_t, index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) strscpy_pad(__entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) bdi_dev_name(mapping ? inode_to_bdi(mapping->host) :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) NULL), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) __entry->ino = mapping ? mapping->host->i_ino : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) __entry->index = page->index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) TP_printk("bdi %s: ino=%lu index=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __entry->index
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) DEFINE_EVENT(writeback_page_template, writeback_dirty_page,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) TP_PROTO(struct page *page, struct address_space *mapping),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) TP_ARGS(page, mapping)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) DEFINE_EVENT(writeback_page_template, wait_on_page_writeback,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) TP_PROTO(struct page *page, struct address_space *mapping),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) TP_ARGS(page, mapping)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) DECLARE_EVENT_CLASS(writeback_dirty_inode_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) TP_PROTO(struct inode *inode, int flags),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) TP_ARGS(inode, flags),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) TP_STRUCT__entry (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) __field(unsigned long, state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) __field(unsigned long, flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct backing_dev_info *bdi = inode_to_bdi(inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) /* may be called for files on pseudo FSes w/ unregistered bdi */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) strscpy_pad(__entry->name, bdi_dev_name(bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) __entry->state = inode->i_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) __entry->flags = flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) TP_printk("bdi %s: ino=%lu state=%s flags=%s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) show_inode_state(__entry->state),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) show_inode_state(__entry->flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) DEFINE_EVENT(writeback_dirty_inode_template, writeback_mark_inode_dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) TP_PROTO(struct inode *inode, int flags),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) TP_ARGS(inode, flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) TP_PROTO(struct inode *inode, int flags),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) TP_ARGS(inode, flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) TP_PROTO(struct inode *inode, int flags),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) TP_ARGS(inode, flags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #ifdef CREATE_TRACE_POINTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #ifdef CONFIG_CGROUP_WRITEBACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) static inline ino_t __trace_wb_assign_cgroup(struct bdi_writeback *wb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) return cgroup_ino(wb->memcg_css->cgroup);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) static inline ino_t __trace_wbc_assign_cgroup(struct writeback_control *wbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) if (wbc->wb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) return __trace_wb_assign_cgroup(wbc->wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #else /* CONFIG_CGROUP_WRITEBACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) static inline ino_t __trace_wb_assign_cgroup(struct bdi_writeback *wb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) static inline ino_t __trace_wbc_assign_cgroup(struct writeback_control *wbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #endif /* CONFIG_CGROUP_WRITEBACK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #endif /* CREATE_TRACE_POINTS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #ifdef CONFIG_CGROUP_WRITEBACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) TRACE_EVENT(inode_foreign_history,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) TP_PROTO(struct inode *inode, struct writeback_control *wbc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) unsigned int history),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) TP_ARGS(inode, wbc, history),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) __field(unsigned int, history)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) strscpy_pad(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) __entry->history = history;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) TP_printk("bdi %s: ino=%lu cgroup_ino=%lu history=0x%x",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) (unsigned long)__entry->cgroup_ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) __entry->history
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) TRACE_EVENT(inode_switch_wbs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) TP_PROTO(struct inode *inode, struct bdi_writeback *old_wb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) struct bdi_writeback *new_wb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) TP_ARGS(inode, old_wb, new_wb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) __field(ino_t, old_cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) __field(ino_t, new_cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) strscpy_pad(__entry->name, bdi_dev_name(old_wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) __entry->old_cgroup_ino = __trace_wb_assign_cgroup(old_wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) __entry->new_cgroup_ino = __trace_wb_assign_cgroup(new_wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) TP_printk("bdi %s: ino=%lu old_cgroup_ino=%lu new_cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) (unsigned long)__entry->old_cgroup_ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) (unsigned long)__entry->new_cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) TRACE_EVENT(track_foreign_dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) TP_PROTO(struct page *page, struct bdi_writeback *wb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) TP_ARGS(page, wb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) __field(u64, bdi_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) __field(unsigned int, memcg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) __field(ino_t, page_cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) struct address_space *mapping = page_mapping(page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) struct inode *inode = mapping ? mapping->host : NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) __entry->bdi_id = wb->bdi->id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) __entry->ino = inode ? inode->i_ino : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) __entry->memcg_id = wb->memcg_css->id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) __entry->page_cgroup_ino = cgroup_ino(page->mem_cgroup->css.cgroup);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) TP_printk("bdi %s[%llu]: ino=%lu memcg_id=%u cgroup_ino=%lu page_cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) __entry->bdi_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) __entry->memcg_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) (unsigned long)__entry->cgroup_ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) (unsigned long)__entry->page_cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) TRACE_EVENT(flush_foreign,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) TP_PROTO(struct bdi_writeback *wb, unsigned int frn_bdi_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) unsigned int frn_memcg_id),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) TP_ARGS(wb, frn_bdi_id, frn_memcg_id),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) __field(unsigned int, frn_bdi_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) __field(unsigned int, frn_memcg_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) __entry->frn_bdi_id = frn_bdi_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) __entry->frn_memcg_id = frn_memcg_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) TP_printk("bdi %s: cgroup_ino=%lu frn_bdi_id=%u frn_memcg_id=%u",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) (unsigned long)__entry->cgroup_ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) __entry->frn_bdi_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) __entry->frn_memcg_id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) DECLARE_EVENT_CLASS(writeback_write_inode_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) TP_PROTO(struct inode *inode, struct writeback_control *wbc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) TP_ARGS(inode, wbc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) TP_STRUCT__entry (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) __field(int, sync_mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) strscpy_pad(__entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) bdi_dev_name(inode_to_bdi(inode)), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) __entry->sync_mode = wbc->sync_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) TP_printk("bdi %s: ino=%lu sync_mode=%d cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) __entry->sync_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) DEFINE_EVENT(writeback_write_inode_template, writeback_write_inode_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) TP_PROTO(struct inode *inode, struct writeback_control *wbc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) TP_ARGS(inode, wbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) DEFINE_EVENT(writeback_write_inode_template, writeback_write_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) TP_PROTO(struct inode *inode, struct writeback_control *wbc),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) TP_ARGS(inode, wbc)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) DECLARE_EVENT_CLASS(writeback_work_class,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) TP_ARGS(wb, work),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) __field(long, nr_pages)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) __field(dev_t, sb_dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) __field(int, sync_mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) __field(int, for_kupdate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) __field(int, range_cyclic)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) __field(int, for_background)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) __field(int, reason)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) __entry->nr_pages = work->nr_pages;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) __entry->sb_dev = work->sb ? work->sb->s_dev : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) __entry->sync_mode = work->sync_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) __entry->for_kupdate = work->for_kupdate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) __entry->range_cyclic = work->range_cyclic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) __entry->for_background = work->for_background;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) __entry->reason = work->reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) TP_printk("bdi %s: sb_dev %d:%d nr_pages=%ld sync_mode=%d "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) "kupdate=%d range_cyclic=%d background=%d reason=%s cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) MAJOR(__entry->sb_dev), MINOR(__entry->sb_dev),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) __entry->nr_pages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) __entry->sync_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) __entry->for_kupdate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) __entry->range_cyclic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) __entry->for_background,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) __print_symbolic(__entry->reason, WB_WORK_REASON),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) #define DEFINE_WRITEBACK_WORK_EVENT(name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) DEFINE_EVENT(writeback_work_class, name, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) TP_PROTO(struct bdi_writeback *wb, struct wb_writeback_work *work), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) TP_ARGS(wb, work))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) DEFINE_WRITEBACK_WORK_EVENT(writeback_queue);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) DEFINE_WRITEBACK_WORK_EVENT(writeback_exec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) DEFINE_WRITEBACK_WORK_EVENT(writeback_start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) DEFINE_WRITEBACK_WORK_EVENT(writeback_written);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) DEFINE_WRITEBACK_WORK_EVENT(writeback_wait);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) TRACE_EVENT(writeback_pages_written,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) TP_PROTO(long pages_written),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) TP_ARGS(pages_written),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) __field(long, pages)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) __entry->pages = pages_written;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) TP_printk("%ld", __entry->pages)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) DECLARE_EVENT_CLASS(writeback_class,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) TP_PROTO(struct bdi_writeback *wb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) TP_ARGS(wb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) TP_printk("bdi %s: cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #define DEFINE_WRITEBACK_EVENT(name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) DEFINE_EVENT(writeback_class, name, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) TP_PROTO(struct bdi_writeback *wb), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) TP_ARGS(wb))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) DEFINE_WRITEBACK_EVENT(writeback_wake_background);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) TRACE_EVENT(writeback_bdi_register,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) TP_PROTO(struct backing_dev_info *bdi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) TP_ARGS(bdi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) strscpy_pad(__entry->name, bdi_dev_name(bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) TP_printk("bdi %s",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) __entry->name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) DECLARE_EVENT_CLASS(wbc_class,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) TP_ARGS(wbc, bdi),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) __field(long, nr_to_write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) __field(long, pages_skipped)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) __field(int, sync_mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) __field(int, for_kupdate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) __field(int, for_background)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) __field(int, for_reclaim)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) __field(int, range_cyclic)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) __field(long, range_start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) __field(long, range_end)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) strscpy_pad(__entry->name, bdi_dev_name(bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) __entry->nr_to_write = wbc->nr_to_write;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) __entry->pages_skipped = wbc->pages_skipped;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) __entry->sync_mode = wbc->sync_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) __entry->for_kupdate = wbc->for_kupdate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) __entry->for_background = wbc->for_background;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) __entry->for_reclaim = wbc->for_reclaim;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) __entry->range_cyclic = wbc->range_cyclic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) __entry->range_start = (long)wbc->range_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) __entry->range_end = (long)wbc->range_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) TP_printk("bdi %s: towrt=%ld skip=%ld mode=%d kupd=%d "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) "bgrd=%d reclm=%d cyclic=%d "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) "start=0x%lx end=0x%lx cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) __entry->nr_to_write,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) __entry->pages_skipped,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) __entry->sync_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) __entry->for_kupdate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) __entry->for_background,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) __entry->for_reclaim,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) __entry->range_cyclic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) __entry->range_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) __entry->range_end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) #define DEFINE_WBC_EVENT(name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) DEFINE_EVENT(wbc_class, name, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) TP_ARGS(wbc, bdi))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) DEFINE_WBC_EVENT(wbc_writepage);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) TRACE_EVENT(writeback_queue_io,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) TP_PROTO(struct bdi_writeback *wb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) struct wb_writeback_work *work,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) unsigned long dirtied_before,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) int moved),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) TP_ARGS(wb, work, dirtied_before, moved),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) __field(unsigned long, older)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) __field(long, age)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) __field(int, moved)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) __field(int, reason)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) __entry->older = dirtied_before;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) __entry->age = (jiffies - dirtied_before) * 1000 / HZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) __entry->moved = moved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) __entry->reason = work->reason;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) TP_printk("bdi %s: older=%lu age=%ld enqueue=%d reason=%s cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) __entry->older, /* dirtied_before in jiffies */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) __entry->age, /* dirtied_before in relative milliseconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) __entry->moved,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) __print_symbolic(__entry->reason, WB_WORK_REASON),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) TRACE_EVENT(global_dirty_state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) TP_PROTO(unsigned long background_thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) unsigned long dirty_thresh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) TP_ARGS(background_thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) dirty_thresh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) __field(unsigned long, nr_dirty)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) __field(unsigned long, nr_writeback)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) __field(unsigned long, background_thresh)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) __field(unsigned long, dirty_thresh)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) __field(unsigned long, dirty_limit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) __field(unsigned long, nr_dirtied)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) __field(unsigned long, nr_written)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) __entry->nr_dirty = global_node_page_state(NR_FILE_DIRTY);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) __entry->nr_writeback = global_node_page_state(NR_WRITEBACK);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) __entry->nr_dirtied = global_node_page_state(NR_DIRTIED);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) __entry->nr_written = global_node_page_state(NR_WRITTEN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) __entry->background_thresh = background_thresh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) __entry->dirty_thresh = dirty_thresh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) __entry->dirty_limit = global_wb_domain.dirty_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) TP_printk("dirty=%lu writeback=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) "bg_thresh=%lu thresh=%lu limit=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) "dirtied=%lu written=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) __entry->nr_dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) __entry->nr_writeback,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) __entry->background_thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) __entry->dirty_thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) __entry->dirty_limit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) __entry->nr_dirtied,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) __entry->nr_written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) #define KBps(x) ((x) << (PAGE_SHIFT - 10))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) TRACE_EVENT(bdi_dirty_ratelimit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) TP_PROTO(struct bdi_writeback *wb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) unsigned long dirty_rate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) unsigned long task_ratelimit),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) TP_ARGS(wb, dirty_rate, task_ratelimit),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) __array(char, bdi, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) __field(unsigned long, write_bw)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) __field(unsigned long, avg_write_bw)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) __field(unsigned long, dirty_rate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) __field(unsigned long, dirty_ratelimit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) __field(unsigned long, task_ratelimit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) __field(unsigned long, balanced_dirty_ratelimit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) strscpy_pad(__entry->bdi, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) __entry->write_bw = KBps(wb->write_bandwidth);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) __entry->avg_write_bw = KBps(wb->avg_write_bandwidth);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) __entry->dirty_rate = KBps(dirty_rate);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) __entry->dirty_ratelimit = KBps(wb->dirty_ratelimit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) __entry->task_ratelimit = KBps(task_ratelimit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) __entry->balanced_dirty_ratelimit =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) KBps(wb->balanced_dirty_ratelimit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) TP_printk("bdi %s: "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) "write_bw=%lu awrite_bw=%lu dirty_rate=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) "dirty_ratelimit=%lu task_ratelimit=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) "balanced_dirty_ratelimit=%lu cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) __entry->bdi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) __entry->write_bw, /* write bandwidth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) __entry->avg_write_bw, /* avg write bandwidth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) __entry->dirty_rate, /* bdi dirty rate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) __entry->dirty_ratelimit, /* base ratelimit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) __entry->task_ratelimit, /* ratelimit with position control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) __entry->balanced_dirty_ratelimit, /* the balanced ratelimit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) TRACE_EVENT(balance_dirty_pages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) TP_PROTO(struct bdi_writeback *wb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) unsigned long thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) unsigned long bg_thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) unsigned long dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) unsigned long bdi_thresh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) unsigned long bdi_dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) unsigned long dirty_ratelimit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) unsigned long task_ratelimit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) unsigned long dirtied,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) unsigned long period,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) long pause,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) unsigned long start_time),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) TP_ARGS(wb, thresh, bg_thresh, dirty, bdi_thresh, bdi_dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) dirty_ratelimit, task_ratelimit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) dirtied, period, pause, start_time),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) __array( char, bdi, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) __field(unsigned long, limit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) __field(unsigned long, setpoint)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) __field(unsigned long, dirty)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) __field(unsigned long, bdi_setpoint)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) __field(unsigned long, bdi_dirty)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) __field(unsigned long, dirty_ratelimit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) __field(unsigned long, task_ratelimit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) __field(unsigned int, dirtied)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) __field(unsigned int, dirtied_pause)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) __field(unsigned long, paused)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) __field( long, pause)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) __field(unsigned long, period)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) __field( long, think)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) unsigned long freerun = (thresh + bg_thresh) / 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) strscpy_pad(__entry->bdi, bdi_dev_name(wb->bdi), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) __entry->limit = global_wb_domain.dirty_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) __entry->setpoint = (global_wb_domain.dirty_limit +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) freerun) / 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) __entry->dirty = dirty;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) __entry->bdi_setpoint = __entry->setpoint *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) bdi_thresh / (thresh + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) __entry->bdi_dirty = bdi_dirty;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) __entry->dirty_ratelimit = KBps(dirty_ratelimit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) __entry->task_ratelimit = KBps(task_ratelimit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) __entry->dirtied = dirtied;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) __entry->dirtied_pause = current->nr_dirtied_pause;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) __entry->think = current->dirty_paused_when == 0 ? 0 :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) (long)(jiffies - current->dirty_paused_when) * 1000/HZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) __entry->period = period * 1000 / HZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) __entry->pause = pause * 1000 / HZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) __entry->paused = (jiffies - start_time) * 1000 / HZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) __entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) TP_printk("bdi %s: "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) "limit=%lu setpoint=%lu dirty=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) "bdi_setpoint=%lu bdi_dirty=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) "dirty_ratelimit=%lu task_ratelimit=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) "dirtied=%u dirtied_pause=%u "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) "paused=%lu pause=%ld period=%lu think=%ld cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) __entry->bdi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) __entry->limit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) __entry->setpoint,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) __entry->dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) __entry->bdi_setpoint,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) __entry->bdi_dirty,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) __entry->dirty_ratelimit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) __entry->task_ratelimit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) __entry->dirtied,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) __entry->dirtied_pause,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) __entry->paused, /* ms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) __entry->pause, /* ms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) __entry->period, /* ms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) __entry->think, /* ms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) TRACE_EVENT(writeback_sb_inodes_requeue,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) TP_ARGS(inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) __field(unsigned long, state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) __field(unsigned long, dirtied_when)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) strscpy_pad(__entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) bdi_dev_name(inode_to_bdi(inode)), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) __entry->state = inode->i_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) __entry->dirtied_when = inode->dirtied_when;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) __entry->cgroup_ino = __trace_wb_assign_cgroup(inode_to_wb(inode));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) show_inode_state(__entry->state),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) __entry->dirtied_when,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) (jiffies - __entry->dirtied_when) / HZ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) DECLARE_EVENT_CLASS(writeback_congest_waited_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) TP_ARGS(usec_timeout, usec_delayed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) __field( unsigned int, usec_timeout )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) __field( unsigned int, usec_delayed )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) __entry->usec_timeout = usec_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) __entry->usec_delayed = usec_delayed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) TP_printk("usec_timeout=%u usec_delayed=%u",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) __entry->usec_timeout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) __entry->usec_delayed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) DEFINE_EVENT(writeback_congest_waited_template, writeback_congestion_wait,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) TP_ARGS(usec_timeout, usec_delayed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) DEFINE_EVENT(writeback_congest_waited_template, writeback_wait_iff_congested,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) TP_PROTO(unsigned int usec_timeout, unsigned int usec_delayed),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) TP_ARGS(usec_timeout, usec_delayed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) DECLARE_EVENT_CLASS(writeback_single_inode_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) TP_PROTO(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) struct writeback_control *wbc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) unsigned long nr_to_write
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) TP_ARGS(inode, wbc, nr_to_write),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) __array(char, name, 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) __field(ino_t, ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) __field(unsigned long, state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) __field(unsigned long, dirtied_when)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) __field(unsigned long, writeback_index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) __field(long, nr_to_write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) __field(unsigned long, wrote)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) __field(ino_t, cgroup_ino)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) strscpy_pad(__entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) bdi_dev_name(inode_to_bdi(inode)), 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) __entry->state = inode->i_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) __entry->dirtied_when = inode->dirtied_when;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) __entry->writeback_index = inode->i_mapping->writeback_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) __entry->nr_to_write = nr_to_write;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) __entry->wrote = nr_to_write - wbc->nr_to_write;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) __entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) TP_printk("bdi %s: ino=%lu state=%s dirtied_when=%lu age=%lu "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) "index=%lu to_write=%ld wrote=%lu cgroup_ino=%lu",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) __entry->name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) (unsigned long)__entry->ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) show_inode_state(__entry->state),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) __entry->dirtied_when,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) (jiffies - __entry->dirtied_when) / HZ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) __entry->writeback_index,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) __entry->nr_to_write,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) __entry->wrote,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) (unsigned long)__entry->cgroup_ino
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode_start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) TP_PROTO(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) struct writeback_control *wbc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) unsigned long nr_to_write),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) TP_ARGS(inode, wbc, nr_to_write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) TP_PROTO(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) struct writeback_control *wbc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) unsigned long nr_to_write),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) TP_ARGS(inode, wbc, nr_to_write)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) DECLARE_EVENT_CLASS(writeback_inode_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) TP_ARGS(inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) __field( dev_t, dev )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) __field( ino_t, ino )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) __field(unsigned long, state )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) __field( __u16, mode )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) __field(unsigned long, dirtied_when )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) __entry->dev = inode->i_sb->s_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) __entry->ino = inode->i_ino;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) __entry->state = inode->i_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) __entry->mode = inode->i_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) __entry->dirtied_when = inode->dirtied_when;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) TP_printk("dev %d,%d ino %lu dirtied %lu state %s mode 0%o",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) MAJOR(__entry->dev), MINOR(__entry->dev),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) (unsigned long)__entry->ino, __entry->dirtied_when,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) show_inode_state(__entry->state), __entry->mode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) DEFINE_EVENT(writeback_inode_template, writeback_lazytime,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) TP_ARGS(inode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) DEFINE_EVENT(writeback_inode_template, writeback_lazytime_iput,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) TP_ARGS(inode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) DEFINE_EVENT(writeback_inode_template, writeback_dirty_inode_enqueue,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) TP_ARGS(inode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) * Inode writeback list tracking.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) DEFINE_EVENT(writeback_inode_template, sb_mark_inode_writeback,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) TP_ARGS(inode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) DEFINE_EVENT(writeback_inode_template, sb_clear_inode_writeback,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) TP_PROTO(struct inode *inode),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) TP_ARGS(inode)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) #endif /* _TRACE_WRITEBACK_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) /* This part must be outside protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) #include <trace/define_trace.h>