3163 lines · 79.2 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 */#undef TRACE_SYSTEM#define TRACE_SYSTEM ext4 #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ)#define _TRACE_EXT4_H #include <linux/writeback.h>#include <linux/tracepoint.h> struct ext4_allocation_context;struct ext4_allocation_request;struct ext4_extent;struct ext4_prealloc_space;struct ext4_inode_info;struct mpage_da_data;struct ext4_map_blocks;struct extent_status;struct ext4_fsmap;struct partial_cluster; #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode)) #define show_mballoc_flags(flags) __print_flags(flags, "|",	\	{ EXT4_MB_HINT_MERGE,		"HINT_MERGE" },		\	{ EXT4_MB_HINT_FIRST,		"HINT_FIRST" },		\	{ EXT4_MB_HINT_DATA,		"HINT_DATA" },		\	{ EXT4_MB_HINT_NOPREALLOC,	"HINT_NOPREALLOC" },	\	{ EXT4_MB_HINT_GROUP_ALLOC,	"HINT_GRP_ALLOC" },	\	{ EXT4_MB_HINT_GOAL_ONLY,	"HINT_GOAL_ONLY" },	\	{ EXT4_MB_HINT_TRY_GOAL,	"HINT_TRY_GOAL" },	\	{ EXT4_MB_DELALLOC_RESERVED,	"DELALLOC_RESV" },	\	{ EXT4_MB_STREAM_ALLOC,		"STREAM_ALLOC" },	\	{ EXT4_MB_USE_ROOT_BLOCKS,	"USE_ROOT_BLKS" },	\	{ EXT4_MB_USE_RESERVED,		"USE_RESV" },		\	{ EXT4_MB_STRICT_CHECK,		"STRICT_CHECK" }) #define show_map_flags(flags) __print_flags(flags, "|",			\	{ EXT4_GET_BLOCKS_CREATE,		"CREATE" },		\	{ EXT4_GET_BLOCKS_UNWRIT_EXT,		"UNWRIT" },		\	{ EXT4_GET_BLOCKS_DELALLOC_RESERVE,	"DELALLOC" },		\	{ EXT4_GET_BLOCKS_SPLIT_NOMERGE,	"SPLIT_NOMERGE" },	\	{ EXT4_GET_BLOCKS_CONVERT,		"CONVERT" },		\	{ EXT4_GET_BLOCKS_METADATA_NOFAIL,	"METADATA_NOFAIL" },	\	{ EXT4_GET_BLOCKS_NO_NORMALIZE,		"NO_NORMALIZE" },	\	{ EXT4_GET_BLOCKS_CONVERT_UNWRITTEN,	"CONVERT_UNWRITTEN" },  \	{ EXT4_GET_BLOCKS_ZERO,			"ZERO" },		\	{ EXT4_GET_BLOCKS_IO_SUBMIT,		"IO_SUBMIT" },		\	{ EXT4_EX_NOCACHE,			"EX_NOCACHE" }) /* * __print_flags() requires that all enum values be wrapped in the * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace * ring buffer. */TRACE_DEFINE_ENUM(BH_New);TRACE_DEFINE_ENUM(BH_Mapped);TRACE_DEFINE_ENUM(BH_Unwritten);TRACE_DEFINE_ENUM(BH_Boundary); #define show_mflags(flags) __print_flags(flags, "",	\	{ EXT4_MAP_NEW,		"N" },			\	{ EXT4_MAP_MAPPED,	"M" },			\	{ EXT4_MAP_UNWRITTEN,	"U" },			\	{ EXT4_MAP_BOUNDARY,	"B" }) #define show_free_flags(flags) __print_flags(flags, "|",	\	{ EXT4_FREE_BLOCKS_METADATA,		"METADATA" },	\	{ EXT4_FREE_BLOCKS_FORGET,		"FORGET" },	\	{ EXT4_FREE_BLOCKS_VALIDATED,		"VALIDATED" },	\	{ EXT4_FREE_BLOCKS_NO_QUOT_UPDATE,	"NO_QUOTA" },	\	{ EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\	{ EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER,	"LAST_CLUSTER" }) TRACE_DEFINE_ENUM(ES_WRITTEN_B);TRACE_DEFINE_ENUM(ES_UNWRITTEN_B);TRACE_DEFINE_ENUM(ES_DELAYED_B);TRACE_DEFINE_ENUM(ES_HOLE_B);TRACE_DEFINE_ENUM(ES_REFERENCED_B); #define show_extent_status(status) __print_flags(status, "",	\	{ EXTENT_STATUS_WRITTEN,	"W" },			\	{ EXTENT_STATUS_UNWRITTEN,	"U" },			\	{ EXTENT_STATUS_DELAYED,	"D" },			\	{ EXTENT_STATUS_HOLE,		"H" },			\	{ EXTENT_STATUS_REFERENCED,	"R" }) #define show_falloc_mode(mode) __print_flags(mode, "|",		\	{ FALLOC_FL_KEEP_SIZE,		"KEEP_SIZE"},		\	{ FALLOC_FL_PUNCH_HOLE,		"PUNCH_HOLE"},		\	{ FALLOC_FL_COLLAPSE_RANGE,	"COLLAPSE_RANGE"},	\	{ FALLOC_FL_ZERO_RANGE,		"ZERO_RANGE"},		\	{ FALLOC_FL_WRITE_ZEROES,	"WRITE_ZEROES"}) TRACE_DEFINE_ENUM(EXT4_FC_REASON_XATTR);TRACE_DEFINE_ENUM(EXT4_FC_REASON_CROSS_RENAME);TRACE_DEFINE_ENUM(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE);TRACE_DEFINE_ENUM(EXT4_FC_REASON_NOMEM);TRACE_DEFINE_ENUM(EXT4_FC_REASON_SWAP_BOOT);TRACE_DEFINE_ENUM(EXT4_FC_REASON_RESIZE);TRACE_DEFINE_ENUM(EXT4_FC_REASON_RENAME_DIR);TRACE_DEFINE_ENUM(EXT4_FC_REASON_FALLOC_RANGE);TRACE_DEFINE_ENUM(EXT4_FC_REASON_INODE_JOURNAL_DATA);TRACE_DEFINE_ENUM(EXT4_FC_REASON_ENCRYPTED_FILENAME);TRACE_DEFINE_ENUM(EXT4_FC_REASON_MIGRATE);TRACE_DEFINE_ENUM(EXT4_FC_REASON_VERITY);TRACE_DEFINE_ENUM(EXT4_FC_REASON_MOVE_EXT);TRACE_DEFINE_ENUM(EXT4_FC_REASON_MAX); #undef EM#undef EMe#define EM(a)	TRACE_DEFINE_ENUM(EXT4_FC_SNAP_ERR_##a);#define EMe(a)	TRACE_DEFINE_ENUM(EXT4_FC_SNAP_ERR_##a); #define TRACE_SNAP_ERR						\	EM(NONE)						\	EM(ES_MISS)						\	EM(ES_DELAYED)						\	EM(ES_OTHER)						\	EM(INODES_CAP)						\	EM(RANGES_CAP)						\	EM(NOMEM)						\	EMe(INODE_LOC) TRACE_SNAP_ERR #undef EM#undef EMe #define show_fc_reason(reason)						\	__print_symbolic(reason,					\		{ EXT4_FC_REASON_XATTR,		"XATTR"},		\		{ EXT4_FC_REASON_CROSS_RENAME,	"CROSS_RENAME"},	\		{ EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, "JOURNAL_FLAG_CHANGE"}, \		{ EXT4_FC_REASON_NOMEM,	"NO_MEM"},			\		{ EXT4_FC_REASON_SWAP_BOOT,	"SWAP_BOOT"},		\		{ EXT4_FC_REASON_RESIZE,	"RESIZE"},		\		{ EXT4_FC_REASON_RENAME_DIR,	"RENAME_DIR"},		\		{ EXT4_FC_REASON_FALLOC_RANGE,	"FALLOC_RANGE"},	\		{ EXT4_FC_REASON_INODE_JOURNAL_DATA,	"INODE_JOURNAL_DATA"}, \		{ EXT4_FC_REASON_ENCRYPTED_FILENAME,	"ENCRYPTED_FILENAME"}, \		{ EXT4_FC_REASON_MIGRATE,		"MIGRATE"},	\		{ EXT4_FC_REASON_VERITY,		"VERITY"},	\		{ EXT4_FC_REASON_MOVE_EXT,		"MOVE_EXT"}) TRACE_DEFINE_ENUM(CR_POWER2_ALIGNED);TRACE_DEFINE_ENUM(CR_GOAL_LEN_FAST);TRACE_DEFINE_ENUM(CR_BEST_AVAIL_LEN);TRACE_DEFINE_ENUM(CR_GOAL_LEN_SLOW);TRACE_DEFINE_ENUM(CR_ANY_FREE); #define show_criteria(cr)                                               \	__print_symbolic(cr,                                            \			 { CR_POWER2_ALIGNED, "CR_POWER2_ALIGNED" },	\			 { CR_GOAL_LEN_FAST, "CR_GOAL_LEN_FAST" },      \			 { CR_BEST_AVAIL_LEN, "CR_BEST_AVAIL_LEN" },    \			 { CR_GOAL_LEN_SLOW, "CR_GOAL_LEN_SLOW" },      \			 { CR_ANY_FREE, "CR_ANY_FREE" }) TRACE_EVENT(ext4_other_inode_update_time,	TP_PROTO(struct inode *inode, u64 orig_ino), 	TP_ARGS(inode, orig_ino), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	u64,	orig_ino		)		__field(	dev_t,	dev			)		__field(	uid_t,	uid			)		__field(	gid_t,	gid			)		__field(	__u16, mode			)	), 	TP_fast_assign(		__entry->orig_ino = orig_ino;		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->uid	= i_uid_read(inode);		__entry->gid	= i_gid_read(inode);		__entry->mode	= inode->i_mode;	), 	TP_printk("dev %d,%d orig_ino %llu ino %llu mode 0%o uid %u gid %u",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->orig_ino,		  __entry->ino, __entry->mode,		  __entry->uid, __entry->gid)); TRACE_EVENT(ext4_free_inode,	TP_PROTO(struct inode *inode), 	TP_ARGS(inode), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	__u64, blocks			)		__field(	dev_t,	dev			)		__field(	uid_t,	uid			)		__field(	gid_t,	gid			)		__field(	__u16, mode			)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->uid	= i_uid_read(inode);		__entry->gid	= i_gid_read(inode);		__entry->blocks	= inode->i_blocks;		__entry->mode	= inode->i_mode;	), 	TP_printk("dev %d,%d ino %llu mode 0%o uid %u gid %u blocks %llu",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino, __entry->mode,		  __entry->uid, __entry->gid, __entry->blocks)); TRACE_EVENT(ext4_request_inode,	TP_PROTO(struct inode *dir, int mode), 	TP_ARGS(dir, mode), 	TP_STRUCT__entry(		__field(	u64,	dir			)		__field(	dev_t,	dev			)		__field(	__u16, mode			)	), 	TP_fast_assign(		__entry->dev	= dir->i_sb->s_dev;		__entry->dir	= dir->i_ino;		__entry->mode	= mode;	), 	TP_printk("dev %d,%d dir %llu mode 0%o",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->dir, __entry->mode)); TRACE_EVENT(ext4_allocate_inode,	TP_PROTO(struct inode *inode, struct inode *dir, int mode), 	TP_ARGS(inode, dir, mode), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	u64,	dir			)		__field(	dev_t,	dev			)		__field(	__u16,	mode			)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->dir	= dir->i_ino;		__entry->mode	= mode;	), 	TP_printk("dev %d,%d ino %llu dir %llu mode 0%o",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino,		  __entry->dir, __entry->mode)); TRACE_EVENT(ext4_evict_inode,	TP_PROTO(struct inode *inode), 	TP_ARGS(inode), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	dev_t,	dev			)		__field(	int,	nlink			)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->nlink	= inode->i_nlink;	), 	TP_printk("dev %d,%d ino %llu nlink %d",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino, __entry->nlink)); TRACE_EVENT(ext4_drop_inode,	TP_PROTO(struct inode *inode, int drop), 	TP_ARGS(inode, drop), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	dev_t,	dev			)		__field(	int,	drop			)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->drop	= drop;	), 	TP_printk("dev %d,%d ino %llu drop %d",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino, __entry->drop)); TRACE_EVENT(ext4_nfs_commit_metadata,	TP_PROTO(struct inode *inode), 	TP_ARGS(inode), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	dev_t,	dev			)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;	), 	TP_printk("dev %d,%d ino %llu",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino)); TRACE_EVENT(ext4_mark_inode_dirty,	TP_PROTO(struct inode *inode, unsigned long IP), 	TP_ARGS(inode, IP), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(unsigned long,	ip			)		__field(	dev_t,	dev			)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->ip	= IP;	), 	TP_printk("dev %d,%d ino %llu caller %pS",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino, (void *)__entry->ip)); TRACE_EVENT(ext4_begin_ordered_truncate,	TP_PROTO(struct inode *inode, loff_t new_size), 	TP_ARGS(inode, new_size), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	loff_t,	new_size		)		__field(	dev_t,	dev			)	), 	TP_fast_assign(		__entry->dev		= inode->i_sb->s_dev;		__entry->ino		= inode->i_ino;		__entry->new_size	= new_size;	), 	TP_printk("dev %d,%d ino %llu new_size %lld",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino,		  __entry->new_size)); DECLARE_EVENT_CLASS(ext4__write_begin, 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len), 	TP_ARGS(inode, pos, len), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	loff_t,	pos			)		__field(	dev_t,	dev			)		__field(	unsigned int, len		)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->pos	= pos;		__entry->len	= len;	), 	TP_printk("dev %d,%d ino %llu pos %lld len %u",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino,		  __entry->pos, __entry->len)); DEFINE_EVENT(ext4__write_begin, ext4_write_begin, 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len), 	TP_ARGS(inode, pos, len)); DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin, 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len), 	TP_ARGS(inode, pos, len)); DECLARE_EVENT_CLASS(ext4__write_end,	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,			unsigned int copied), 	TP_ARGS(inode, pos, len, copied), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	loff_t,	pos			)		__field(	dev_t,	dev			)		__field(	unsigned int, len		)		__field(	unsigned int, copied		)	), 	TP_fast_assign(		__entry->dev	= inode->i_sb->s_dev;		__entry->ino	= inode->i_ino;		__entry->pos	= pos;		__entry->len	= len;		__entry->copied	= copied;	), 	TP_printk("dev %d,%d ino %llu pos %lld len %u copied %u",		  MAJOR(__entry->dev), MINOR(__entry->dev),		  __entry->ino,		  __entry->pos, __entry->len, __entry->copied)); DEFINE_EVENT(ext4__write_end, ext4_write_end, 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,		 unsigned int copied), 	TP_ARGS(inode, pos, len, copied)); DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end, 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,		 unsigned int copied), 	TP_ARGS(inode, pos, len, copied)); DEFINE_EVENT(ext4__write_end, ext4_da_write_end, 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,		 unsigned int copied), 	TP_ARGS(inode, pos, len, copied)); TRACE_EVENT(ext4_writepages,	TP_PROTO(struct inode *inode, struct writeback_control *wbc), 	TP_ARGS(inode, wbc), 	TP_STRUCT__entry(		__field(	u64,	ino			)		__field(	loff_t,	range_start		)		__field(	loff_t,	range_end		)		__field(	long,	nr_to_write		)		__field(	long,	pages_skipped		)		__field(       pgoff_t,	writeback_index		)		__field(	dev_t,	dev			)		__field(	int,	sync_mode		)		__field(	char,	for_kupdate		)		__field(	char,	range_cyclic		)	), 	TP_fast_assign(		__entry->dev		= inode->i_sb->s_dev;		__entry->ino		= inode->i_ino;		__entry->nr_to_write	= wbc->nr_to_write;		__entry->pages_skipped	= wbc->pages_skipped;		__entry->range_start	= wbc->range_start;		__entry->range_end	= wbc->range_end;		__entry->writeback_index = inode->i_mapping->writeback_index;		__entry->sync_mode	= wbc->sync_mode;		__entry->for_kupdate	= wbc->for_kupdate;		__entry->range_cyclic	= wbc->range_cyclic;	), 	TP_printk("dev %d,%d ino %llu nr_to_write %ld pages_skipped %ld "		  "range_start %lld range_end %lld sync_mode %d "		  "for_kupdate %d range_cyclic %d writeback_index %lu",

Lines 1–500 of 3163.