Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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>