]> www.infradead.org Git - users/hch/xfs.git/commitdiff
xfs: prepare refcount btree cursor tracepoints for realtime
authorDarrick J. Wong <djwong@kernel.org>
Mon, 23 Sep 2024 20:42:20 +0000 (13:42 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 9 Oct 2024 13:55:48 +0000 (15:55 +0200)
Rework the refcount btree cursor tracepoints in preparation to handle the
realtime refcount btree cursor.  Mostly this involves renaming the field to
"refcbno" and extracting the group number from the cursor when possible.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/xfs_refcount_item.c
fs/xfs/xfs_trace.h

index 870c863d51e50c2d640bec8e3a782d91d1666f69..48d1f2a11ed1a39651fafebd86a492d84587bc9c 100644 (file)
@@ -328,9 +328,9 @@ xfs_refcount_defer_add(
 {
        struct xfs_mount                *mp = tp->t_mountp;
 
-       trace_xfs_refcount_defer(mp, ri);
-
        ri->ri_group = xfs_group_intent_get(mp, ri->ri_startblock, XG_TYPE_AG);
+
+       trace_xfs_refcount_defer(mp, ri);
        xfs_defer_add(tp, &ri->ri_list, &xfs_refcount_update_defer_type);
 }
 
index 5e9cbbb5033875d0201be3e1ba459850d2b20c35..65cd643bdbafa4f2de8b3dcaa83b42ffe856557e 100644 (file)
@@ -22,6 +22,8 @@
  *
  * gbno: generic allocation group block number.  This is an agbno for
  *          per-AG rmap btrees or a rgbno for realtime rmap btrees.
+ * refcbno: physical block number for a refcount record.  This is an agbno for
+ *          per-AG refcount btrees or a rgbno for realtime refcount btrees.
  *
  * daddr: physical block number in 512b blocks
  * bbcount: number of blocks in a physical extent, in 512b blocks
@@ -3303,56 +3305,62 @@ TRACE_EVENT(xfs_ag_resv_init_error,
 /* refcount tracepoint classes */
 
 DECLARE_EVENT_CLASS(xfs_refcount_class,
-       TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t agbno,
+       TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t refcbno,
                xfs_extlen_t len),
-       TP_ARGS(cur, agbno, len),
+       TP_ARGS(cur, refcbno, len),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, refcbno)
                __field(xfs_extlen_t, len)
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
-               __entry->agbno = agbno;
+               __entry->refcbno = refcbno;
                __entry->len = len;
        ),
-       TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
+       TP_printk("dev %d:%d %sno 0x%x gbno 0x%x fsbcount 0x%x",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
-                 __entry->agbno,
+                 __entry->refcbno,
                  __entry->len)
 );
 #define DEFINE_REFCOUNT_EVENT(name) \
 DEFINE_EVENT(xfs_refcount_class, name, \
-       TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t agbno, \
+       TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t refcbno, \
                xfs_extlen_t len), \
-       TP_ARGS(cur, agbno, len))
+       TP_ARGS(cur, refcbno, len))
 
 TRACE_DEFINE_ENUM(XFS_LOOKUP_EQi);
 TRACE_DEFINE_ENUM(XFS_LOOKUP_LEi);
 TRACE_DEFINE_ENUM(XFS_LOOKUP_GEi);
 TRACE_EVENT(xfs_refcount_lookup,
-       TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t agbno,
+       TP_PROTO(struct xfs_btree_cur *cur, xfs_agblock_t refcbno,
                xfs_lookup_t dir),
-       TP_ARGS(cur, agbno, dir),
+       TP_ARGS(cur, refcbno, dir),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, refcbno)
                __field(xfs_lookup_t, dir)
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
-               __entry->agbno = agbno;
+               __entry->refcbno = refcbno;
                __entry->dir = dir;
        ),
-       TP_printk("dev %d:%d agno 0x%x agbno 0x%x cmp %s(%d)",
+       TP_printk("dev %d:%d %sno 0x%x gbno 0x%x cmp %s(%d)",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
-                 __entry->agbno,
+                 __entry->refcbno,
                  __print_symbolic(__entry->dir, XFS_AG_BTREE_CMP_FORMAT_STR),
                  __entry->dir)
 )
@@ -3363,6 +3371,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_class,
        TP_ARGS(cur, irec),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
                __field(enum xfs_refc_domain, domain)
                __field(xfs_agblock_t, startblock)
@@ -3371,14 +3380,16 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
                __entry->domain = irec->rc_domain;
                __entry->startblock = irec->rc_startblock;
                __entry->blockcount = irec->rc_blockcount;
                __entry->refcount = irec->rc_refcount;
        ),
-       TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u",
+       TP_printk("dev %d:%d %sno 0x%x dom %s gbno 0x%x fsbcount 0x%x refcount %u",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
                  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
                  __entry->startblock,
@@ -3394,49 +3405,53 @@ DEFINE_EVENT(xfs_refcount_extent_class, name, \
 /* single-rcext and an agbno tracepoint class */
 DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class,
        TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec,
-                xfs_agblock_t agbno),
-       TP_ARGS(cur, irec, agbno),
+                xfs_agblock_t refcbno),
+       TP_ARGS(cur, irec, refcbno),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
                __field(enum xfs_refc_domain, domain)
                __field(xfs_agblock_t, startblock)
                __field(xfs_extlen_t, blockcount)
                __field(xfs_nlink_t, refcount)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, refcbno)
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
                __entry->domain = irec->rc_domain;
                __entry->startblock = irec->rc_startblock;
                __entry->blockcount = irec->rc_blockcount;
                __entry->refcount = irec->rc_refcount;
-               __entry->agbno = agbno;
+               __entry->refcbno = refcbno;
        ),
-       TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",
+       TP_printk("dev %d:%d %sno 0x%x dom %s gbno 0x%x fsbcount 0x%x refcount %u @ gbno 0x%x",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
                  __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
                  __entry->startblock,
                  __entry->blockcount,
                  __entry->refcount,
-                 __entry->agbno)
+                 __entry->refcbno)
 )
 
 #define DEFINE_REFCOUNT_EXTENT_AT_EVENT(name) \
 DEFINE_EVENT(xfs_refcount_extent_at_class, name, \
        TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec, \
-                xfs_agblock_t agbno), \
-       TP_ARGS(cur, irec, agbno))
+                xfs_agblock_t refcbno), \
+       TP_ARGS(cur, irec, refcbno))
 
 /* double-rcext tracepoint class */
 DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,
        TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1,
-               struct xfs_refcount_irec *i2),
+                struct xfs_refcount_irec *i2),
        TP_ARGS(cur, i1, i2),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
                __field(enum xfs_refc_domain, i1_domain)
                __field(xfs_agblock_t, i1_startblock)
@@ -3449,6 +3464,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
                __entry->i1_domain = i1->rc_domain;
                __entry->i1_startblock = i1->rc_startblock;
@@ -3459,9 +3475,10 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,
                __entry->i2_blockcount = i2->rc_blockcount;
                __entry->i2_refcount = i2->rc_refcount;
        ),
-       TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
-                 "dom %s agbno 0x%x fsbcount 0x%x refcount %u",
+       TP_printk("dev %d:%d %sno 0x%x dom %s gbno 0x%x fsbcount 0x%x refcount %u -- "
+                 "dom %s gbno 0x%x fsbcount 0x%x refcount %u",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
                  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),
                  __entry->i1_startblock,
@@ -3482,10 +3499,11 @@ DEFINE_EVENT(xfs_refcount_double_extent_class, name, \
 /* double-rcext and an agbno tracepoint class */
 DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
        TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1,
-                struct xfs_refcount_irec *i2, xfs_agblock_t agbno),
-       TP_ARGS(cur, i1, i2, agbno),
+                struct xfs_refcount_irec *i2, xfs_agblock_t refcbno),
+       TP_ARGS(cur, i1, i2, refcbno),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
                __field(enum xfs_refc_domain, i1_domain)
                __field(xfs_agblock_t, i1_startblock)
@@ -3495,10 +3513,11 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
                __field(xfs_agblock_t, i2_startblock)
                __field(xfs_extlen_t, i2_blockcount)
                __field(xfs_nlink_t, i2_refcount)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, refcbno)
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
                __entry->i1_domain = i1->rc_domain;
                __entry->i1_startblock = i1->rc_startblock;
@@ -3508,11 +3527,12 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
                __entry->i2_startblock = i2->rc_startblock;
                __entry->i2_blockcount = i2->rc_blockcount;
                __entry->i2_refcount = i2->rc_refcount;
-               __entry->agbno = agbno;
+               __entry->refcbno = refcbno;
        ),
-       TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
-                 "dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",
+       TP_printk("dev %d:%d %sno 0x%x dom %s gbno 0x%x fsbcount 0x%x refcount %u -- "
+                 "dom %s gbno 0x%x fsbcount 0x%x refcount %u @ gbno 0x%x",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
                  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),
                  __entry->i1_startblock,
@@ -3522,14 +3542,14 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
                  __entry->i2_startblock,
                  __entry->i2_blockcount,
                  __entry->i2_refcount,
-                 __entry->agbno)
+                 __entry->refcbno)
 )
 
 #define DEFINE_REFCOUNT_DOUBLE_EXTENT_AT_EVENT(name) \
 DEFINE_EVENT(xfs_refcount_double_extent_at_class, name, \
        TP_PROTO(struct xfs_btree_cur *cur, struct xfs_refcount_irec *i1, \
-               struct xfs_refcount_irec *i2, xfs_agblock_t agbno), \
-       TP_ARGS(cur, i1, i2, agbno))
+               struct xfs_refcount_irec *i2, xfs_agblock_t refcbno), \
+       TP_ARGS(cur, i1, i2, refcbno))
 
 /* triple-rcext tracepoint class */
 DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
@@ -3538,6 +3558,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
        TP_ARGS(cur, i1, i2, i3),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
                __field(enum xfs_refc_domain, i1_domain)
                __field(xfs_agblock_t, i1_startblock)
@@ -3554,6 +3575,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
+               __entry->type = cur->bc_group->xg_type;
                __entry->agno = cur->bc_group->xg_index;
                __entry->i1_domain = i1->rc_domain;
                __entry->i1_startblock = i1->rc_startblock;
@@ -3568,10 +3590,11 @@ DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
                __entry->i3_blockcount = i3->rc_blockcount;
                __entry->i3_refcount = i3->rc_refcount;
        ),
-       TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
-                 "dom %s agbno 0x%x fsbcount 0x%x refcount %u -- "
-                 "dom %s agbno 0x%x fsbcount 0x%x refcount %u",
+       TP_printk("dev %d:%d %sno 0x%x dom %s gbno 0x%x fsbcount 0x%x refcount %u -- "
+                 "dom %s gbno 0x%x fsbcount 0x%x refcount %u -- "
+                 "dom %s gbno 0x%x fsbcount 0x%x refcount %u",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
                  __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS),
                  __entry->i1_startblock,
@@ -3639,23 +3662,27 @@ DECLARE_EVENT_CLASS(xfs_refcount_deferred_class,
        TP_ARGS(mp, refc),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(enum xfs_group_type, type)
                __field(xfs_agnumber_t, agno)
                __field(int, op)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, refcbno)
                __field(xfs_extlen_t, len)
        ),
        TP_fast_assign(
                __entry->dev = mp->m_super->s_dev;
-               __entry->agno = XFS_FSB_TO_AGNO(mp, refc->ri_startblock);
+               __entry->type = refc->ri_group->xg_type;
+               __entry->agno = refc->ri_group->xg_index;
                __entry->op = refc->ri_type;
-               __entry->agbno = XFS_FSB_TO_AGBNO(mp, refc->ri_startblock);
+               __entry->refcbno = xfs_fsb_to_gbno(mp, refc->ri_startblock,
+                                                  refc->ri_group->xg_type);
                __entry->len = refc->ri_blockcount;
        ),
-       TP_printk("dev %d:%d op %s agno 0x%x agbno 0x%x fsbcount 0x%x",
+       TP_printk("dev %d:%d op %s %sno 0x%x gbno 0x%x fsbcount 0x%x",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
                  __print_symbolic(__entry->op, XFS_REFCOUNT_INTENT_STRINGS),
+                 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
                  __entry->agno,
-                 __entry->agbno,
+                 __entry->refcbno,
                  __entry->len)
 );
 #define DEFINE_REFCOUNT_DEFERRED_EVENT(name) \