mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
xfs: add attr state machine tracepoints
This is a quick patch to add a new xfs_attr_*_return tracepoints. We use these to track when ever a new state is set or -EAGAIN is returned Signed-off-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
4bc619833f
commit
df0826312a
@ -335,6 +335,7 @@ xfs_attr_sf_addname(
|
||||
* the attr fork to leaf format and will restart with the leaf
|
||||
* add.
|
||||
*/
|
||||
trace_xfs_attr_sf_addname_return(XFS_DAS_UNINIT, args->dp);
|
||||
dac->flags |= XFS_DAC_DEFER_FINISH;
|
||||
return -EAGAIN;
|
||||
}
|
||||
@ -394,6 +395,8 @@ xfs_attr_set_iter(
|
||||
* handling code below
|
||||
*/
|
||||
dac->flags |= XFS_DAC_DEFER_FINISH;
|
||||
trace_xfs_attr_set_iter_return(
|
||||
dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
} else if (error) {
|
||||
return error;
|
||||
@ -411,6 +414,7 @@ xfs_attr_set_iter(
|
||||
|
||||
dac->dela_state = XFS_DAS_FOUND_NBLK;
|
||||
}
|
||||
trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
case XFS_DAS_FOUND_LBLK:
|
||||
/*
|
||||
@ -438,6 +442,8 @@ xfs_attr_set_iter(
|
||||
error = xfs_attr_rmtval_set_blk(dac);
|
||||
if (error)
|
||||
return error;
|
||||
trace_xfs_attr_set_iter_return(dac->dela_state,
|
||||
args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -472,6 +478,7 @@ xfs_attr_set_iter(
|
||||
* series.
|
||||
*/
|
||||
dac->dela_state = XFS_DAS_FLIP_LFLAG;
|
||||
trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
case XFS_DAS_FLIP_LFLAG:
|
||||
/*
|
||||
@ -489,10 +496,14 @@ xfs_attr_set_iter(
|
||||
dac->dela_state = XFS_DAS_RM_LBLK;
|
||||
if (args->rmtblkno) {
|
||||
error = __xfs_attr_rmtval_remove(dac);
|
||||
if (error == -EAGAIN)
|
||||
trace_xfs_attr_set_iter_return(
|
||||
dac->dela_state, args->dp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
dac->dela_state = XFS_DAS_RD_LEAF;
|
||||
trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -542,6 +553,8 @@ xfs_attr_set_iter(
|
||||
error = xfs_attr_rmtval_set_blk(dac);
|
||||
if (error)
|
||||
return error;
|
||||
trace_xfs_attr_set_iter_return(
|
||||
dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -577,6 +590,7 @@ xfs_attr_set_iter(
|
||||
* series
|
||||
*/
|
||||
dac->dela_state = XFS_DAS_FLIP_NFLAG;
|
||||
trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
|
||||
case XFS_DAS_FLIP_NFLAG:
|
||||
@ -596,10 +610,15 @@ xfs_attr_set_iter(
|
||||
dac->dela_state = XFS_DAS_RM_NBLK;
|
||||
if (args->rmtblkno) {
|
||||
error = __xfs_attr_rmtval_remove(dac);
|
||||
if (error == -EAGAIN)
|
||||
trace_xfs_attr_set_iter_return(
|
||||
dac->dela_state, args->dp);
|
||||
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
dac->dela_state = XFS_DAS_CLR_FLAG;
|
||||
trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -1176,6 +1195,8 @@ xfs_attr_node_addname(
|
||||
* this point.
|
||||
*/
|
||||
dac->flags |= XFS_DAC_DEFER_FINISH;
|
||||
trace_xfs_attr_node_addname_return(
|
||||
dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -1422,10 +1443,13 @@ xfs_attr_remove_iter(
|
||||
* blocks are removed.
|
||||
*/
|
||||
error = __xfs_attr_rmtval_remove(dac);
|
||||
if (error == -EAGAIN)
|
||||
if (error == -EAGAIN) {
|
||||
trace_xfs_attr_remove_iter_return(
|
||||
dac->dela_state, args->dp);
|
||||
return error;
|
||||
else if (error)
|
||||
} else if (error) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Refill the state structure with buffers (the prior
|
||||
@ -1438,6 +1462,7 @@ xfs_attr_remove_iter(
|
||||
goto out;
|
||||
dac->dela_state = XFS_DAS_RM_NAME;
|
||||
dac->flags |= XFS_DAC_DEFER_FINISH;
|
||||
trace_xfs_attr_remove_iter_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -1466,6 +1491,8 @@ xfs_attr_remove_iter(
|
||||
|
||||
dac->flags |= XFS_DAC_DEFER_FINISH;
|
||||
dac->dela_state = XFS_DAS_RM_SHRINK;
|
||||
trace_xfs_attr_remove_iter_return(
|
||||
dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
|
@ -696,6 +696,7 @@ __xfs_attr_rmtval_remove(
|
||||
*/
|
||||
if (!done) {
|
||||
dac->flags |= XFS_DAC_DEFER_FINISH;
|
||||
trace_xfs_attr_rmtval_remove_return(dac->dela_state, args->dp);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
|
@ -4073,6 +4073,30 @@ DEFINE_ICLOG_EVENT(xlog_iclog_want_sync);
|
||||
DEFINE_ICLOG_EVENT(xlog_iclog_wait_on);
|
||||
DEFINE_ICLOG_EVENT(xlog_iclog_write);
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_das_state_class,
|
||||
TP_PROTO(int das, struct xfs_inode *ip),
|
||||
TP_ARGS(das, ip),
|
||||
TP_STRUCT__entry(
|
||||
__field(int, das)
|
||||
__field(xfs_ino_t, ino)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->das = das;
|
||||
__entry->ino = ip->i_ino;
|
||||
),
|
||||
TP_printk("state change %d ino 0x%llx",
|
||||
__entry->das, __entry->ino)
|
||||
)
|
||||
|
||||
#define DEFINE_DAS_STATE_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_das_state_class, name, \
|
||||
TP_PROTO(int das, struct xfs_inode *ip), \
|
||||
TP_ARGS(das, ip))
|
||||
DEFINE_DAS_STATE_EVENT(xfs_attr_sf_addname_return);
|
||||
DEFINE_DAS_STATE_EVENT(xfs_attr_set_iter_return);
|
||||
DEFINE_DAS_STATE_EVENT(xfs_attr_node_addname_return);
|
||||
DEFINE_DAS_STATE_EVENT(xfs_attr_remove_iter_return);
|
||||
DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_remove_return);
|
||||
#endif /* _TRACE_XFS_H */
|
||||
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
|
Loading…
Reference in New Issue
Block a user