xfs: trace in-memory freecounter reservations
Add two tracepoints when the freecounter dips into the reserved pool and when it is entirely out of space. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
This commit is contained in:
parent
c8c4e8bc69
commit
a0760cca8e
|
|
@ -1341,6 +1341,7 @@ xfs_dec_freecounter(
|
|||
goto fdblocks_enospc;
|
||||
}
|
||||
counter->res_avail -= delta;
|
||||
trace_xfs_freecounter_reserved(mp, ctr, delta, _RET_IP_);
|
||||
spin_unlock(&mp->m_sb_lock);
|
||||
}
|
||||
|
||||
|
|
@ -1348,6 +1349,7 @@ xfs_dec_freecounter(
|
|||
return 0;
|
||||
|
||||
fdblocks_enospc:
|
||||
trace_xfs_freecounter_enospc(mp, ctr, delta, _RET_IP_);
|
||||
spin_unlock(&mp->m_sb_lock);
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5669,6 +5669,45 @@ TRACE_EVENT(xfs_growfs_check_rtgeom,
|
|||
);
|
||||
#endif /* CONFIG_XFS_RT */
|
||||
|
||||
TRACE_DEFINE_ENUM(XC_FREE_BLOCKS);
|
||||
TRACE_DEFINE_ENUM(XC_FREE_RTEXTENTS);
|
||||
|
||||
DECLARE_EVENT_CLASS(xfs_freeblocks_resv_class,
|
||||
TP_PROTO(struct xfs_mount *mp, enum xfs_free_counter ctr,
|
||||
uint64_t delta, unsigned long caller_ip),
|
||||
TP_ARGS(mp, ctr, delta, caller_ip),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(enum xfs_free_counter, ctr)
|
||||
__field(uint64_t, delta)
|
||||
__field(uint64_t, avail)
|
||||
__field(uint64_t, total)
|
||||
__field(unsigned long, caller_ip)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->dev = mp->m_super->s_dev;
|
||||
__entry->ctr = ctr;
|
||||
__entry->delta = delta;
|
||||
__entry->avail = mp->m_free[ctr].res_avail;
|
||||
__entry->total = mp->m_free[ctr].res_total;
|
||||
__entry->caller_ip = caller_ip;
|
||||
),
|
||||
TP_printk("dev %d:%d ctr %s delta %llu avail %llu total %llu caller %pS",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__print_symbolic(__entry->ctr, XFS_FREECOUNTER_STR),
|
||||
__entry->delta,
|
||||
__entry->avail,
|
||||
__entry->total,
|
||||
(char *)__entry->caller_ip)
|
||||
)
|
||||
#define DEFINE_FREEBLOCKS_RESV_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_freeblocks_resv_class, name, \
|
||||
TP_PROTO(struct xfs_mount *mp, enum xfs_free_counter ctr, \
|
||||
uint64_t delta, unsigned long caller_ip), \
|
||||
TP_ARGS(mp, ctr, delta, caller_ip))
|
||||
DEFINE_FREEBLOCKS_RESV_EVENT(xfs_freecounter_reserved);
|
||||
DEFINE_FREEBLOCKS_RESV_EVENT(xfs_freecounter_enospc);
|
||||
|
||||
#endif /* _TRACE_XFS_H */
|
||||
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
|
|
|
|||
Loading…
Reference in New Issue