Commit 38899f80 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: add a tracepoint for blockgc scans



Add some tracepoints so that we can observe when the speculative
preallocation garbage collector runs.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
parent 758303d1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2339,6 +2339,8 @@ xfs_file_ioctl(
		if (error)
			return error;

		trace_xfs_ioc_free_eofblocks(mp, &keofb, _RET_IP_);

		sb_start_write(mp->m_super);
		error = xfs_icache_free_eofblocks(mp, &keofb);
		sb_end_write(mp->m_super);
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include "xfs_filestream.h"
#include "xfs_fsmap.h"
#include "xfs_btree_staging.h"
#include "xfs_icache.h"

/*
 * We include this last to have the helpers above available for the trace
+41 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ struct xfs_trans_res;
struct xfs_inobt_rec_incore;
union xfs_btree_ptr;
struct xfs_dqtrx;
struct xfs_eofblocks;

#define XFS_ATTR_FILTER_FLAGS \
	{ XFS_ATTR_ROOT,	"ROOT" }, \
@@ -3888,6 +3889,46 @@ DEFINE_EVENT(xfs_timestamp_range_class, name, \
DEFINE_TIMESTAMP_RANGE_EVENT(xfs_inode_timestamp_range);
DEFINE_TIMESTAMP_RANGE_EVENT(xfs_quota_expiry_range);

DECLARE_EVENT_CLASS(xfs_eofblocks_class,
	TP_PROTO(struct xfs_mount *mp, struct xfs_eofblocks *eofb,
		 unsigned long caller_ip),
	TP_ARGS(mp, eofb, caller_ip),
	TP_STRUCT__entry(
		__field(dev_t, dev)
		__field(__u32, flags)
		__field(uint32_t, uid)
		__field(uint32_t, gid)
		__field(prid_t, prid)
		__field(__u64, min_file_size)
		__field(unsigned long, caller_ip)
	),
	TP_fast_assign(
		__entry->dev = mp->m_super->s_dev;
		__entry->flags = eofb ? eofb->eof_flags : 0;
		__entry->uid = eofb ? from_kuid(mp->m_super->s_user_ns,
						eofb->eof_uid) : 0;
		__entry->gid = eofb ? from_kgid(mp->m_super->s_user_ns,
						eofb->eof_gid) : 0;
		__entry->prid = eofb ? eofb->eof_prid : 0;
		__entry->min_file_size = eofb ? eofb->eof_min_file_size : 0;
		__entry->caller_ip = caller_ip;
	),
	TP_printk("dev %d:%d flags 0x%x uid %u gid %u prid %u minsize %llu caller %pS",
		  MAJOR(__entry->dev), MINOR(__entry->dev),
		  __entry->flags,
		  __entry->uid,
		  __entry->gid,
		  __entry->prid,
		  __entry->min_file_size,
		  (char *)__entry->caller_ip)
);
#define DEFINE_EOFBLOCKS_EVENT(name)	\
DEFINE_EVENT(xfs_eofblocks_class, name,	\
	TP_PROTO(struct xfs_mount *mp, struct xfs_eofblocks *eofb, \
		 unsigned long caller_ip), \
	TP_ARGS(mp, eofb, caller_ip))
DEFINE_EOFBLOCKS_EVENT(xfs_ioc_free_eofblocks);

#endif /* _TRACE_XFS_H */

#undef TRACE_INCLUDE_PATH