On Sat, Jan 23, 2021 at 10:52:49AM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > Add some tracepoints so that we can observe when the speculative > preallocation garbage collector runs. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > fs/xfs/xfs_ioctl.c | 2 ++ > fs/xfs/xfs_trace.c | 1 + > fs/xfs/xfs_trace.h | 39 +++++++++++++++++++++++++++++++++++++++ > 3 files changed, 42 insertions(+) > > > diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c > index 952eca338807..da407934364c 100644 > --- a/fs/xfs/xfs_ioctl.c > +++ b/fs/xfs/xfs_ioctl.c > @@ -2356,6 +2356,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); > diff --git a/fs/xfs/xfs_trace.c b/fs/xfs/xfs_trace.c > index 120398a37c2a..9b8d703dc9fd 100644 > --- a/fs/xfs/xfs_trace.c > +++ b/fs/xfs/xfs_trace.c > @@ -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 > diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h > index 407c3a5208ab..4cbf446bae9a 100644 > --- a/fs/xfs/xfs_trace.h > +++ b/fs/xfs/xfs_trace.h > @@ -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,44 @@ 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->eof_flags; > + __entry->uid = from_kuid(mp->m_super->s_user_ns, eofb->eof_uid); > + __entry->gid = from_kgid(mp->m_super->s_user_ns, eofb->eof_gid); > + __entry->prid = eofb->eof_prid; > + __entry->min_file_size = eofb->eof_min_file_size; > + __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 >