Commit 5f3e2403 authored by changfengnan's avatar changfengnan Committed by Theodore Ts'o
Browse files

ext4: split ext4_journal_start trace for debug



we might want to know why jbd2 thread using high io for detail,
split ext4_journal_start trace to ext4_journal_start_sb and
ext4_journal_start_inode, show ino and handle type when possible.

Signed-off-by: default avatarchangfengnan <changfengnan@bytedance.com>
Link: https://lore.kernel.org/r/20221008120518.74870-1-changfengnan@bytedance.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent e3ea75ee
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -86,14 +86,20 @@ static int ext4_journal_check_start(struct super_block *sb)
	return 0;
}

handle_t *__ext4_journal_start_sb(struct super_block *sb, unsigned int line,
handle_t *__ext4_journal_start_sb(struct inode *inode,
				  struct super_block *sb, unsigned int line,
				  int type, int blocks, int rsv_blocks,
				  int revoke_creds)
{
	journal_t *journal;
	int err;

	trace_ext4_journal_start(sb, blocks, rsv_blocks, revoke_creds,
	if (inode)
		trace_ext4_journal_start_inode(inode, blocks, rsv_blocks,
					revoke_creds, type,
					_RET_IP_);
	else
		trace_ext4_journal_start_sb(sb, blocks, rsv_blocks,
					revoke_creds, type,
					_RET_IP_);
	err = ext4_journal_check_start(sb);
	if (err < 0)
+5 −5
Original line number Diff line number Diff line
@@ -261,9 +261,9 @@ int __ext4_handle_dirty_metadata(const char *where, unsigned int line,
	__ext4_handle_dirty_metadata(__func__, __LINE__, (handle), (inode), \
				     (bh))

handle_t *__ext4_journal_start_sb(struct super_block *sb, unsigned int line,
				  int type, int blocks, int rsv_blocks,
				  int revoke_creds);
handle_t *__ext4_journal_start_sb(struct inode *inode, struct super_block *sb,
				  unsigned int line, int type, int blocks,
				  int rsv_blocks, int revoke_creds);
int __ext4_journal_stop(const char *where, unsigned int line, handle_t *handle);

#define EXT4_NOJOURNAL_MAX_REF_COUNT ((unsigned long) 4096)
@@ -303,7 +303,7 @@ static inline int ext4_trans_default_revoke_credits(struct super_block *sb)
}

#define ext4_journal_start_sb(sb, type, nblocks)			\
	__ext4_journal_start_sb((sb), __LINE__, (type), (nblocks), 0,	\
	__ext4_journal_start_sb(NULL, (sb), __LINE__, (type), (nblocks), 0,\
				ext4_trans_default_revoke_credits(sb))

#define ext4_journal_start(inode, type, nblocks)			\
@@ -323,7 +323,7 @@ static inline handle_t *__ext4_journal_start(struct inode *inode,
					     int blocks, int rsv_blocks,
					     int revoke_creds)
{
	return __ext4_journal_start_sb(inode->i_sb, line, type, blocks,
	return __ext4_journal_start_sb(inode, inode->i_sb, line, type, blocks,
				       rsv_blocks, revoke_creds);
}

+2 −2
Original line number Diff line number Diff line
@@ -1076,8 +1076,8 @@ struct inode *__ext4_new_inode(struct user_namespace *mnt_userns,

		if ((!(sbi->s_mount_state & EXT4_FC_REPLAY)) && !handle) {
			BUG_ON(nblocks <= 0);
			handle = __ext4_journal_start_sb(dir->i_sb, line_no,
				 handle_type, nblocks, 0,
			handle = __ext4_journal_start_sb(NULL, dir->i_sb,
				 line_no, handle_type, nblocks, 0,
				 ext4_trans_default_revoke_credits(sb));
			if (IS_ERR(handle)) {
				err = PTR_ERR(handle);
+46 −11
Original line number Diff line number Diff line
@@ -1744,11 +1744,11 @@ TRACE_EVENT(ext4_load_inode,
		  (unsigned long) __entry->ino)
);

TRACE_EVENT(ext4_journal_start,
TRACE_EVENT(ext4_journal_start_sb,
	TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
		 int revoke_creds, unsigned long IP),
		 int revoke_creds, int type, unsigned long IP),

	TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP),
	TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, type, IP),

	TP_STRUCT__entry(
		__field(	dev_t,		dev		)
@@ -1756,6 +1756,7 @@ TRACE_EVENT(ext4_journal_start,
		__field(	int,		blocks		)
		__field(	int,		rsv_blocks	)
		__field(	int,		revoke_creds	)
		__field(	int,		type		)
	),

	TP_fast_assign(
@@ -1764,11 +1765,45 @@ TRACE_EVENT(ext4_journal_start,
		__entry->blocks		 = blocks;
		__entry->rsv_blocks	 = rsv_blocks;
		__entry->revoke_creds	 = revoke_creds;
		__entry->type		 = type;
	),

	TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d,"
		  "caller %pS", MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->blocks, __entry->rsv_blocks, __entry->revoke_creds,
		  " type %d, caller %pS", MAJOR(__entry->dev),
		  MINOR(__entry->dev), __entry->blocks, __entry->rsv_blocks,
		  __entry->revoke_creds, __entry->type, (void *)__entry->ip)
);

TRACE_EVENT(ext4_journal_start_inode,
	TP_PROTO(struct inode *inode, int blocks, int rsv_blocks,
		 int revoke_creds, int type, unsigned long IP),

	TP_ARGS(inode, blocks, rsv_blocks, revoke_creds, type, IP),

	TP_STRUCT__entry(
		__field(	unsigned long,	ino		)
		__field(	dev_t,		dev		)
		__field(	unsigned long,	ip		)
		__field(	int,		blocks		)
		__field(	int,		rsv_blocks	)
		__field(	int,		revoke_creds	)
		__field(	int,		type		)
	),

	TP_fast_assign(
		__entry->dev		 = inode->i_sb->s_dev;
		__entry->ip		 = IP;
		__entry->blocks		 = blocks;
		__entry->rsv_blocks	 = rsv_blocks;
		__entry->revoke_creds	 = revoke_creds;
		__entry->type		 = type;
		__entry->ino		 = inode->i_ino;
	),

	TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d,"
		  " type %d, ino %lu, caller %pS", MAJOR(__entry->dev),
		  MINOR(__entry->dev), __entry->blocks, __entry->rsv_blocks,
		  __entry->revoke_creds, __entry->type, __entry->ino,
		  (void *)__entry->ip)
);