ext4: add transaction tid info in fc_track events
This patch adds the transaction & inode tid info in trace events for callers of ext4_fc_track_template(). This is helpful in debugging race conditions where an inode could belong to two different transaction tids. It also fixes the checkpatch warnings which says use tabs instead of spaces. Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> Link: https://lore.kernel.org/r/c203c09dc11bb372803c430f621f25a4b8c2c8b4.1647057583.git.riteshh@linux.ibm.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
08f4c42aba
commit
1d2e2440c5
|
@ -487,7 +487,7 @@ void __ext4_fc_track_unlink(handle_t *handle,
|
||||||
|
|
||||||
ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
|
ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
|
||||||
(void *)&args, 0);
|
(void *)&args, 0);
|
||||||
trace_ext4_fc_track_unlink(inode, dentry, ret);
|
trace_ext4_fc_track_unlink(handle, inode, dentry, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry)
|
void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry)
|
||||||
|
@ -516,7 +516,7 @@ void __ext4_fc_track_link(handle_t *handle,
|
||||||
|
|
||||||
ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
|
ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
|
||||||
(void *)&args, 0);
|
(void *)&args, 0);
|
||||||
trace_ext4_fc_track_link(inode, dentry, ret);
|
trace_ext4_fc_track_link(handle, inode, dentry, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ext4_fc_track_link(handle_t *handle, struct dentry *dentry)
|
void ext4_fc_track_link(handle_t *handle, struct dentry *dentry)
|
||||||
|
@ -545,7 +545,7 @@ void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
|
||||||
|
|
||||||
ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
|
ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
|
||||||
(void *)&args, 0);
|
(void *)&args, 0);
|
||||||
trace_ext4_fc_track_create(inode, dentry, ret);
|
trace_ext4_fc_track_create(handle, inode, dentry, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
|
void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
|
||||||
|
@ -596,7 +596,7 @@ void ext4_fc_track_inode(handle_t *handle, struct inode *inode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ret = ext4_fc_track_template(handle, inode, __track_inode, NULL, 1);
|
ret = ext4_fc_track_template(handle, inode, __track_inode, NULL, 1);
|
||||||
trace_ext4_fc_track_inode(inode, ret);
|
trace_ext4_fc_track_inode(handle, inode, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct __track_range_args {
|
struct __track_range_args {
|
||||||
|
@ -653,7 +653,7 @@ void ext4_fc_track_range(handle_t *handle, struct inode *inode, ext4_lblk_t star
|
||||||
|
|
||||||
ret = ext4_fc_track_template(handle, inode, __track_range, &args, 1);
|
ret = ext4_fc_track_template(handle, inode, __track_range, &args, 1);
|
||||||
|
|
||||||
trace_ext4_fc_track_range(inode, start, end, ret);
|
trace_ext4_fc_track_range(handle, inode, start, end, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ext4_fc_submit_bh(struct super_block *sb, bool is_tail)
|
static void ext4_fc_submit_bh(struct super_block *sb, bool is_tail)
|
||||||
|
|
|
@ -2782,32 +2782,41 @@ TRACE_EVENT(ext4_fc_stats,
|
||||||
|
|
||||||
DECLARE_EVENT_CLASS(ext4_fc_track_dentry,
|
DECLARE_EVENT_CLASS(ext4_fc_track_dentry,
|
||||||
|
|
||||||
TP_PROTO(struct inode *inode, struct dentry *dentry, int ret),
|
TP_PROTO(handle_t *handle, struct inode *inode,
|
||||||
|
struct dentry *dentry, int ret),
|
||||||
|
|
||||||
TP_ARGS(inode, dentry, ret),
|
TP_ARGS(handle, inode, dentry, ret),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(dev_t, dev)
|
__field(dev_t, dev)
|
||||||
|
__field(tid_t, t_tid)
|
||||||
__field(ino_t, i_ino)
|
__field(ino_t, i_ino)
|
||||||
|
__field(tid_t, i_sync_tid)
|
||||||
__field(int, error)
|
__field(int, error)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
|
struct ext4_inode_info *ei = EXT4_I(inode);
|
||||||
|
|
||||||
__entry->dev = inode->i_sb->s_dev;
|
__entry->dev = inode->i_sb->s_dev;
|
||||||
|
__entry->t_tid = handle->h_transaction->t_tid;
|
||||||
__entry->i_ino = inode->i_ino;
|
__entry->i_ino = inode->i_ino;
|
||||||
|
__entry->i_sync_tid = ei->i_sync_tid;
|
||||||
__entry->error = ret;
|
__entry->error = ret;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev %d,%d, ino %lu, error %d",
|
TP_printk("dev %d,%d, t_tid %u, ino %lu, i_sync_tid %u, error %d",
|
||||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||||
__entry->i_ino, __entry->error
|
__entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
|
||||||
|
__entry->error
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
#define DEFINE_EVENT_CLASS_DENTRY(__type) \
|
#define DEFINE_EVENT_CLASS_DENTRY(__type) \
|
||||||
DEFINE_EVENT(ext4_fc_track_dentry, ext4_fc_track_##__type, \
|
DEFINE_EVENT(ext4_fc_track_dentry, ext4_fc_track_##__type, \
|
||||||
TP_PROTO(struct inode *inode, struct dentry *dentry, int ret), \
|
TP_PROTO(handle_t *handle, struct inode *inode, \
|
||||||
TP_ARGS(inode, dentry, ret) \
|
struct dentry *dentry, int ret), \
|
||||||
|
TP_ARGS(handle, inode, dentry, ret) \
|
||||||
)
|
)
|
||||||
|
|
||||||
DEFINE_EVENT_CLASS_DENTRY(create);
|
DEFINE_EVENT_CLASS_DENTRY(create);
|
||||||
|
@ -2815,52 +2824,66 @@ DEFINE_EVENT_CLASS_DENTRY(link);
|
||||||
DEFINE_EVENT_CLASS_DENTRY(unlink);
|
DEFINE_EVENT_CLASS_DENTRY(unlink);
|
||||||
|
|
||||||
TRACE_EVENT(ext4_fc_track_inode,
|
TRACE_EVENT(ext4_fc_track_inode,
|
||||||
TP_PROTO(struct inode *inode, int ret),
|
TP_PROTO(handle_t *handle, struct inode *inode, int ret),
|
||||||
|
|
||||||
TP_ARGS(inode, ret),
|
TP_ARGS(handle, inode, ret),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(dev_t, dev)
|
__field(dev_t, dev)
|
||||||
__field(int, ino)
|
__field(tid_t, t_tid)
|
||||||
__field(int, error)
|
__field(ino_t, i_ino)
|
||||||
),
|
__field(tid_t, i_sync_tid)
|
||||||
|
__field(int, error)
|
||||||
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = inode->i_sb->s_dev;
|
struct ext4_inode_info *ei = EXT4_I(inode);
|
||||||
__entry->ino = inode->i_ino;
|
|
||||||
__entry->error = ret;
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_printk("dev %d:%d, inode %d, error %d",
|
__entry->dev = inode->i_sb->s_dev;
|
||||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
__entry->t_tid = handle->h_transaction->t_tid;
|
||||||
__entry->ino, __entry->error)
|
__entry->i_ino = inode->i_ino;
|
||||||
|
__entry->i_sync_tid = ei->i_sync_tid;
|
||||||
|
__entry->error = ret;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk("dev %d:%d, t_tid %u, inode %lu, i_sync_tid %u, error %d",
|
||||||
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||||
|
__entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
|
||||||
|
__entry->error)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ext4_fc_track_range,
|
TRACE_EVENT(ext4_fc_track_range,
|
||||||
TP_PROTO(struct inode *inode, long start, long end, int ret),
|
TP_PROTO(handle_t *handle, struct inode *inode,
|
||||||
|
long start, long end, int ret),
|
||||||
|
|
||||||
TP_ARGS(inode, start, end, ret),
|
TP_ARGS(handle, inode, start, end, ret),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(dev_t, dev)
|
__field(dev_t, dev)
|
||||||
__field(int, ino)
|
__field(tid_t, t_tid)
|
||||||
__field(long, start)
|
__field(ino_t, i_ino)
|
||||||
__field(long, end)
|
__field(tid_t, i_sync_tid)
|
||||||
__field(int, error)
|
__field(long, start)
|
||||||
),
|
__field(long, end)
|
||||||
|
__field(int, error)
|
||||||
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = inode->i_sb->s_dev;
|
struct ext4_inode_info *ei = EXT4_I(inode);
|
||||||
__entry->ino = inode->i_ino;
|
|
||||||
__entry->start = start;
|
|
||||||
__entry->end = end;
|
|
||||||
__entry->error = ret;
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_printk("dev %d:%d, inode %d, error %d, start %ld, end %ld",
|
__entry->dev = inode->i_sb->s_dev;
|
||||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
__entry->t_tid = handle->h_transaction->t_tid;
|
||||||
__entry->ino, __entry->error, __entry->start,
|
__entry->i_ino = inode->i_ino;
|
||||||
__entry->end)
|
__entry->i_sync_tid = ei->i_sync_tid;
|
||||||
|
__entry->start = start;
|
||||||
|
__entry->end = end;
|
||||||
|
__entry->error = ret;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk("dev %d:%d, t_tid %u, inode %lu, i_sync_tid %u, error %d, start %ld, end %ld",
|
||||||
|
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||||
|
__entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
|
||||||
|
__entry->error, __entry->start, __entry->end)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(ext4_fc_cleanup,
|
TRACE_EVENT(ext4_fc_cleanup,
|
||||||
|
|
Loading…
Reference in New Issue