Commit a0760cca authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

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: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
parent c8c4e8bc
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;
}
+39 −0
Original line number Diff line number Diff line
@@ -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