xfs: introduce rmap extent operation stubs
Originally-From: Dave Chinner <dchinner@redhat.com> Add the stubs into the extent allocation and freeing paths that the rmap btree implementation will hook into. While doing this, add the trace points that will be used to track rmap btree extent manipulations. [darrick.wong@oracle.com: Extend the stubs to take full owner info.] Signed-off-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:

committed by
Dave Chinner

parent
340785cca1
commit
673930c34a
@@ -2423,6 +2423,83 @@ DEFINE_MAP_EXTENT_DEFERRED_EVENT(xfs_defer_map_extent);
|
||||
DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_defer);
|
||||
DEFINE_BMAP_FREE_DEFERRED_EVENT(xfs_bmap_free_deferred);
|
||||
|
||||
/* rmap tracepoints */
|
||||
DECLARE_EVENT_CLASS(xfs_rmap_class,
|
||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
|
||||
xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten,
|
||||
struct xfs_owner_info *oinfo),
|
||||
TP_ARGS(mp, agno, agbno, len, unwritten, oinfo),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(xfs_agnumber_t, agno)
|
||||
__field(xfs_agblock_t, agbno)
|
||||
__field(xfs_extlen_t, len)
|
||||
__field(uint64_t, owner)
|
||||
__field(uint64_t, offset)
|
||||
__field(unsigned long, flags)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->dev = mp->m_super->s_dev;
|
||||
__entry->agno = agno;
|
||||
__entry->agbno = agbno;
|
||||
__entry->len = len;
|
||||
__entry->owner = oinfo->oi_owner;
|
||||
__entry->offset = oinfo->oi_offset;
|
||||
__entry->flags = oinfo->oi_flags;
|
||||
),
|
||||
TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%lx",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->agno,
|
||||
__entry->agbno,
|
||||
__entry->len,
|
||||
__entry->owner,
|
||||
__entry->offset,
|
||||
__entry->flags)
|
||||
);
|
||||
#define DEFINE_RMAP_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_rmap_class, name, \
|
||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
|
||||
xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \
|
||||
struct xfs_owner_info *oinfo), \
|
||||
TP_ARGS(mp, agno, agbno, len, unwritten, oinfo))
|
||||
|
||||
/* simple AG-based error/%ip tracepoint class */
|
||||
DECLARE_EVENT_CLASS(xfs_ag_error_class,
|
||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error,
|
||||
unsigned long caller_ip),
|
||||
TP_ARGS(mp, agno, error, caller_ip),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(xfs_agnumber_t, agno)
|
||||
__field(int, error)
|
||||
__field(unsigned long, caller_ip)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->dev = mp->m_super->s_dev;
|
||||
__entry->agno = agno;
|
||||
__entry->error = error;
|
||||
__entry->caller_ip = caller_ip;
|
||||
),
|
||||
TP_printk("dev %d:%d agno %u error %d caller %ps",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->agno,
|
||||
__entry->error,
|
||||
(char *)__entry->caller_ip)
|
||||
);
|
||||
|
||||
#define DEFINE_AG_ERROR_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_ag_error_class, name, \
|
||||
TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, int error, \
|
||||
unsigned long caller_ip), \
|
||||
TP_ARGS(mp, agno, error, caller_ip))
|
||||
|
||||
DEFINE_RMAP_EVENT(xfs_rmap_unmap);
|
||||
DEFINE_RMAP_EVENT(xfs_rmap_unmap_done);
|
||||
DEFINE_AG_ERROR_EVENT(xfs_rmap_unmap_error);
|
||||
DEFINE_RMAP_EVENT(xfs_rmap_map);
|
||||
DEFINE_RMAP_EVENT(xfs_rmap_map_done);
|
||||
DEFINE_AG_ERROR_EVENT(xfs_rmap_map_error);
|
||||
|
||||
#endif /* _TRACE_XFS_H */
|
||||
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
|
Reference in New Issue
Block a user