xfs: add more attribute tree trace points.
Added when debugging recent attribute tree problems to more finely trace code execution through the maze of twisty passages that makes up the attr code. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
@ -96,6 +96,8 @@ DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full);
|
||||
DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add);
|
||||
DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk);
|
||||
DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound);
|
||||
DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list);
|
||||
DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list);
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_perag_class,
|
||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int refcount,
|
||||
@ -1502,8 +1504,42 @@ DEFINE_DIR2_EVENT(xfs_dir2_node_replace);
|
||||
DEFINE_DIR2_EVENT(xfs_dir2_node_removename);
|
||||
DEFINE_DIR2_EVENT(xfs_dir2_node_to_leaf);
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_attr_class,
|
||||
TP_PROTO(struct xfs_da_args *args),
|
||||
TP_ARGS(args),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(xfs_ino_t, ino)
|
||||
__dynamic_array(char, name, args->namelen)
|
||||
__field(int, namelen)
|
||||
__field(int, valuelen)
|
||||
__field(xfs_dahash_t, hashval)
|
||||
__field(int, op_flags)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->dev = VFS_I(args->dp)->i_sb->s_dev;
|
||||
__entry->ino = args->dp->i_ino;
|
||||
if (args->namelen)
|
||||
memcpy(__get_str(name), args->name, args->namelen);
|
||||
__entry->namelen = args->namelen;
|
||||
__entry->valuelen = args->valuelen;
|
||||
__entry->hashval = args->hashval;
|
||||
__entry->op_flags = args->op_flags;
|
||||
),
|
||||
TP_printk("dev %d:%d ino 0x%llx name %.*s namelen %d valuelen %d "
|
||||
"hashval 0x%x op_flags %s",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->ino,
|
||||
__entry->namelen,
|
||||
__entry->namelen ? __get_str(name) : NULL,
|
||||
__entry->namelen,
|
||||
__entry->valuelen,
|
||||
__entry->hashval,
|
||||
__print_flags(__entry->op_flags, "|", XFS_DA_OP_FLAGS))
|
||||
)
|
||||
|
||||
#define DEFINE_ATTR_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_da_class, name, \
|
||||
DEFINE_EVENT(xfs_attr_class, name, \
|
||||
TP_PROTO(struct xfs_da_args *args), \
|
||||
TP_ARGS(args))
|
||||
DEFINE_ATTR_EVENT(xfs_attr_sf_add);
|
||||
@ -1517,10 +1553,14 @@ DEFINE_ATTR_EVENT(xfs_attr_sf_to_leaf);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_add);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_add_old);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_add_new);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_add_work);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_addname);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_create);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_compact);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_get);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_lookup);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_replace);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_remove);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_removename);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_split);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_split_before);
|
||||
@ -1532,12 +1572,21 @@ DEFINE_ATTR_EVENT(xfs_attr_leaf_to_sf);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_to_node);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_rebalance);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_unbalance);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_leaf_toosmall);
|
||||
|
||||
DEFINE_ATTR_EVENT(xfs_attr_node_addname);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_node_get);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_node_lookup);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_node_replace);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_node_removename);
|
||||
|
||||
DEFINE_ATTR_EVENT(xfs_attr_fillstate);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_refillstate);
|
||||
|
||||
DEFINE_ATTR_EVENT(xfs_attr_rmtval_get);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_rmtval_set);
|
||||
DEFINE_ATTR_EVENT(xfs_attr_rmtval_remove);
|
||||
|
||||
#define DEFINE_DA_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_da_class, name, \
|
||||
TP_PROTO(struct xfs_da_args *args), \
|
||||
@ -1556,9 +1605,12 @@ DEFINE_DA_EVENT(xfs_da_node_split);
|
||||
DEFINE_DA_EVENT(xfs_da_node_remove);
|
||||
DEFINE_DA_EVENT(xfs_da_node_rebalance);
|
||||
DEFINE_DA_EVENT(xfs_da_node_unbalance);
|
||||
DEFINE_DA_EVENT(xfs_da_node_toosmall);
|
||||
DEFINE_DA_EVENT(xfs_da_swap_lastblock);
|
||||
DEFINE_DA_EVENT(xfs_da_grow_inode);
|
||||
DEFINE_DA_EVENT(xfs_da_shrink_inode);
|
||||
DEFINE_DA_EVENT(xfs_da_fixhashpath);
|
||||
DEFINE_DA_EVENT(xfs_da_path_shift);
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_dir2_space_class,
|
||||
TP_PROTO(struct xfs_da_args *args, int idx),
|
||||
|
Reference in New Issue
Block a user