]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
xfs: add a tracepoint for blockgc scans
authorDarrick J. Wong <djwong@kernel.org>
Sat, 23 Jan 2021 00:48:38 +0000 (16:48 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 3 Feb 2021 17:18:49 +0000 (09:18 -0800)
Add some tracepoints so that we can observe when the speculative
preallocation garbage collector runs.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/xfs_ioctl.c
fs/xfs/xfs_trace.c
fs/xfs/xfs_trace.h

index 38ee66d999d8cdc9c51fe63c4e1f9dfa4435b7f5..3ddefb685ac6f10a63fdc04b0da4dde55f2ecc11 100644 (file)
@@ -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);
index 120398a37c2a689abdd2ded154704987d9c2186f..9b8d703dc9fd9c7e3c02a2b29ad363bd8cf32615 100644 (file)
@@ -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
index e2e0092c331df5c4df5cd392699354ce92e9120b..9658730261163876ba180bd5f5528af0638bbe7f 100644 (file)
@@ -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