]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: consolidate btree block freeing tracepoints
authorDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:33:06 +0000 (12:33 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:33:06 +0000 (12:33 -0800)
Don't waste memory on extra per-btree block freeing tracepoints when we
can do it from the generic btree code.

With this patch applied, two tracepoints are collapsed into one
tracepoint, with the following effects on objdump -hx xfs.ko output:

Before:

 10 __tracepoints_ptrs 00000b3c  0000000000000000  0000000000000000  00140eb0  2**2
 14 __tracepoints_strings 00005453  0000000000000000  0000000000000000  00168540  2**5
 29 __tracepoints 00010d90  0000000000000000  0000000000000000  0023f5e0  2**5

After:

 10 __tracepoints_ptrs 00000b38  0000000000000000  0000000000000000  001412f0  2**2
 14 __tracepoints_strings 00005433  0000000000000000  0000000000000000  001689a0  2**5
 29 __tracepoints 00010d30  0000000000000000  0000000000000000  0023fe00  2**5

Column 3 is the section size in bytes; removing these two tracepoints
reduces the size of the ELF segments by 132 bytes.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_btree.c
fs/xfs/libxfs/xfs_refcount_btree.c
fs/xfs/libxfs/xfs_rmap_btree.c
fs/xfs/xfs_trace.h

index 70d406dbb3e48c426a1253546133532524956bd8..fd86996aa626294315df284b97aa1787eff3fa1d 100644 (file)
@@ -414,6 +414,8 @@ xfs_btree_free_block(
 {
        int                     error;
 
+       trace_xfs_btree_free_block(cur, bp);
+
        error = cur->bc_ops->free_block(cur, bp);
        if (!error) {
                xfs_trans_binval(cur->bc_tp, bp);
index 0d80bd99147cc9d93a07d8fa7343668a9ed343b4..a346e49981ac31405c246adf94a0ef09bf1f2869 100644 (file)
@@ -107,8 +107,6 @@ xfs_refcountbt_free_block(
        struct xfs_agf          *agf = agbp->b_addr;
        xfs_fsblock_t           fsbno = XFS_DADDR_TO_FSB(mp, xfs_buf_daddr(bp));
 
-       trace_xfs_refcountbt_free_block(cur->bc_mp, cur->bc_ag.pag->pag_agno,
-                       XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno), 1);
        be32_add_cpu(&agf->agf_refcount_blocks, -1);
        xfs_alloc_log_agf(cur->bc_tp, agbp, XFS_AGF_REFCOUNT_BLOCKS);
        return xfs_free_extent_later(cur->bc_tp, fsbno, 1,
index 6c81b20e97d21a888155a747ce2ad51bef0c45fb..0dc086bc528f70756cb705b5cb1c681fcffd19f5 100644 (file)
@@ -125,8 +125,6 @@ xfs_rmapbt_free_block(
        int                     error;
 
        bno = xfs_daddr_to_agbno(cur->bc_mp, xfs_buf_daddr(bp));
-       trace_xfs_rmapbt_free_block(cur->bc_mp, pag->pag_agno,
-                       bno, 1);
        be32_add_cpu(&agf->agf_rmap_blocks, -1);
        xfs_alloc_log_agf(cur->bc_tp, agbp, XFS_AGF_RMAP_BLOCKS);
        error = xfs_alloc_put_freelist(pag, cur->bc_tp, agbp, NULL, bno, 1);
index 8ea6a6e712b36ec0d8e9fc995c09425723135103..fc6190340b95b8d9bac068dba2b89437d7973f85 100644 (file)
@@ -2496,6 +2496,36 @@ DEFINE_EVENT(xfs_btree_cur_class, name, \
 DEFINE_BTREE_CUR_EVENT(xfs_btree_updkeys);
 DEFINE_BTREE_CUR_EVENT(xfs_btree_overlapped_query_range);
 
+TRACE_EVENT(xfs_btree_free_block,
+       TP_PROTO(struct xfs_btree_cur *cur, struct xfs_buf *bp),
+       TP_ARGS(cur, bp),
+       TP_STRUCT__entry(
+               __field(dev_t, dev)
+               __field(xfs_agnumber_t, agno)
+               __field(xfs_ino_t, ino)
+               __field(xfs_btnum_t, btnum)
+               __field(xfs_agblock_t, agbno)
+       ),
+       TP_fast_assign(
+               __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->agno = xfs_daddr_to_agno(cur->bc_mp,
+                                                       xfs_buf_daddr(bp));
+               if (cur->bc_flags & XFS_BTREE_ROOT_IN_INODE)
+                       __entry->ino = cur->bc_ino.ip->i_ino;
+               else
+                       __entry->ino = 0;
+               __entry->btnum = cur->bc_btnum;
+               __entry->agbno = xfs_daddr_to_agbno(cur->bc_mp,
+                                                       xfs_buf_daddr(bp));
+       ),
+       TP_printk("dev %d:%d btree %s agno 0x%x ino 0x%llx agbno 0x%x",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
+                 __entry->agno,
+                 __entry->ino,
+                 __entry->agbno)
+);
+
 /* deferred ops */
 struct xfs_defer_pending;
 
@@ -2859,7 +2889,6 @@ DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_defer);
 DEFINE_RMAP_DEFERRED_EVENT(xfs_rmap_deferred);
 
 DEFINE_BUSY_EVENT(xfs_rmapbt_alloc_block);
-DEFINE_BUSY_EVENT(xfs_rmapbt_free_block);
 DEFINE_RMAPBT_EVENT(xfs_rmap_update);
 DEFINE_RMAPBT_EVENT(xfs_rmap_insert);
 DEFINE_RMAPBT_EVENT(xfs_rmap_delete);
@@ -3218,7 +3247,6 @@ DEFINE_EVENT(xfs_refcount_triple_extent_class, name, \
 
 /* refcount btree tracepoints */
 DEFINE_BUSY_EVENT(xfs_refcountbt_alloc_block);
-DEFINE_BUSY_EVENT(xfs_refcountbt_free_block);
 DEFINE_AG_BTREE_LOOKUP_EVENT(xfs_refcount_lookup);
 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_get);
 DEFINE_REFCOUNT_EXTENT_EVENT(xfs_refcount_update);