]> www.infradead.org Git - users/hch/xfs.git/commitdiff
xfs: prepare rmap btree cursor tracepoints for realtime
authorDarrick J. Wong <djwong@kernel.org>
Wed, 29 May 2024 04:11:46 +0000 (21:11 -0700)
committerChristoph Hellwig <hch@lst.de>
Sat, 10 Aug 2024 08:44:23 +0000 (10:44 +0200)
Rework the rmap btree cursor tracepoints in preparation to handle the
realtime rmap btree cursor.  Mostly this involves renaming the field to
"rmapbno" and extracting the group number from the cursor when possible.

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

index f888d41e3283f35f742cafd71304adc0ae6a2a01..b63470d78f93cd11549c9228807bdd22d296cbbe 100644 (file)
 #include "xfs_metadir.h"
 #include "xfs_rtgroup.h"
 
+static inline void
+xfs_rmapbt_crack_agno_opdev(
+       struct xfs_btree_cur    *cur,
+       xfs_agnumber_t          *agno,
+       dev_t                   *opdev)
+{
+       switch (cur->bc_ops->type) {
+       case XFS_BTREE_TYPE_INODE:
+               *agno = cur->bc_ino.rtg->rtg_rgno;
+               *opdev = cur->bc_mp->m_rtdev_targp->bt_dev;
+               break;
+       case XFS_BTREE_TYPE_AG:
+               *agno = cur->bc_ag.pag->pag_agno;
+               *opdev = cur->bc_mp->m_super->s_dev;
+               break;
+       case XFS_BTREE_TYPE_MEM:
+               *agno = 0;
+               *opdev = (dev_t)-1;
+               break;
+       }
+}
+
 /*
  * We include this last to have the helpers above available for the trace
  * event implementations.
index 5246440ee7c36f73bf851f8707b4959134825ef1..781a9ee7deead4eccf5b8c4b7bd52bc2ca3e4c0e 100644 (file)
  * ino: filesystem inode number
  *
  * agbno: per-AG block number in fs blocks
+ * rgbno: per-rtgroup block number in fs blocks
  * startblock: physical block number for file mappings.  This is either a
  *             segmented fsblock for data device mappings, or a rfsblock
  *             for realtime device mappings
  * fsbcount: number of blocks in an extent, in fs blocks
  *
+ * rmapbno: physical block number for a reverse mapping.  This is an agbno for
+ *          per-AG rmap btrees or a rgbno for realtime rmap btrees.
+ *
  * daddr: physical block number in 512b blocks
  * bbcount: number of blocks in a physical extent, in 512b blocks
  *
@@ -2828,13 +2832,14 @@ DEFINE_DEFER_PENDING_ITEM_EVENT(xfs_defer_finish_item);
 /* rmap tracepoints */
 DECLARE_EVENT_CLASS(xfs_rmap_class,
        TP_PROTO(struct xfs_btree_cur *cur,
-                xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten,
+                xfs_agblock_t rmapbno, xfs_extlen_t len, bool unwritten,
                 const struct xfs_owner_info *oinfo),
-       TP_ARGS(cur, agbno, len, unwritten, oinfo),
+       TP_ARGS(cur, rmapbno, len, unwritten, oinfo),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(dev_t, opdev)
                __field(xfs_agnumber_t, agno)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, rmapbno)
                __field(xfs_extlen_t, len)
                __field(uint64_t, owner)
                __field(uint64_t, offset)
@@ -2842,8 +2847,8 @@ DECLARE_EVENT_CLASS(xfs_rmap_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
-               __entry->agno = cur->bc_ag.pag->pag_agno;
-               __entry->agbno = agbno;
+               xfs_rmapbt_crack_agno_opdev(cur, &__entry->agno, &__entry->opdev);
+               __entry->rmapbno = rmapbno;
                __entry->len = len;
                __entry->owner = oinfo->oi_owner;
                __entry->offset = oinfo->oi_offset;
@@ -2851,10 +2856,11 @@ DECLARE_EVENT_CLASS(xfs_rmap_class,
                if (unwritten)
                        __entry->flags |= XFS_RMAP_UNWRITTEN;
        ),
-       TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%lx",
+       TP_printk("dev %d:%d opdev %d:%d agno 0x%x rmapbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%lx",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 MAJOR(__entry->opdev), MINOR(__entry->opdev),
                  __entry->agno,
-                 __entry->agbno,
+                 __entry->rmapbno,
                  __entry->len,
                  __entry->owner,
                  __entry->offset,
@@ -2863,9 +2869,9 @@ DECLARE_EVENT_CLASS(xfs_rmap_class,
 #define DEFINE_RMAP_EVENT(name) \
 DEFINE_EVENT(xfs_rmap_class, name, \
        TP_PROTO(struct xfs_btree_cur *cur, \
-                xfs_agblock_t agbno, xfs_extlen_t len, bool unwritten, \
+                xfs_agblock_t rmapbno, xfs_extlen_t len, bool unwritten, \
                 const struct xfs_owner_info *oinfo), \
-       TP_ARGS(cur, agbno, len, unwritten, oinfo))
+       TP_ARGS(cur, rmapbno, len, unwritten, oinfo))
 
 /* btree cursor error/%ip tracepoint class */
 DECLARE_EVENT_CLASS(xfs_btree_error_class,
@@ -2928,47 +2934,35 @@ TRACE_EVENT(xfs_rmap_convert_state,
        TP_ARGS(cur, state, caller_ip),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(dev_t, opdev)
                __field(xfs_agnumber_t, agno)
-               __field(xfs_ino_t, ino)
                __field(int, state)
                __field(unsigned long, caller_ip)
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
-               switch (cur->bc_ops->type) {
-               case XFS_BTREE_TYPE_INODE:
-                       __entry->agno = 0;
-                       __entry->ino = cur->bc_ino.ip->i_ino;
-                       break;
-               case XFS_BTREE_TYPE_AG:
-                       __entry->agno = cur->bc_ag.pag->pag_agno;
-                       __entry->ino = 0;
-                       break;
-               case XFS_BTREE_TYPE_MEM:
-                       __entry->agno = 0;
-                       __entry->ino = 0;
-                       break;
-               }
+               xfs_rmapbt_crack_agno_opdev(cur, &__entry->agno, &__entry->opdev);
                __entry->state = state;
                __entry->caller_ip = caller_ip;
        ),
-       TP_printk("dev %d:%d agno 0x%x ino 0x%llx state %d caller %pS",
+       TP_printk("dev %d:%d opdev %d:%d agno 0x%x state %d caller %pS",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 MAJOR(__entry->opdev), MINOR(__entry->opdev),
                  __entry->agno,
-                 __entry->ino,
                  __entry->state,
                  (char *)__entry->caller_ip)
 );
 
 DECLARE_EVENT_CLASS(xfs_rmapbt_class,
        TP_PROTO(struct xfs_btree_cur *cur,
-                xfs_agblock_t agbno, xfs_extlen_t len,
+                xfs_agblock_t rmapbno, xfs_extlen_t len,
                 uint64_t owner, uint64_t offset, unsigned int flags),
-       TP_ARGS(cur, agbno, len, owner, offset, flags),
+       TP_ARGS(cur, rmapbno, len, owner, offset, flags),
        TP_STRUCT__entry(
                __field(dev_t, dev)
+               __field(dev_t, opdev)
                __field(xfs_agnumber_t, agno)
-               __field(xfs_agblock_t, agbno)
+               __field(xfs_agblock_t, rmapbno)
                __field(xfs_extlen_t, len)
                __field(uint64_t, owner)
                __field(uint64_t, offset)
@@ -2976,17 +2970,18 @@ DECLARE_EVENT_CLASS(xfs_rmapbt_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
-               __entry->agno = cur->bc_ag.pag->pag_agno;
-               __entry->agbno = agbno;
+               xfs_rmapbt_crack_agno_opdev(cur, &__entry->agno, &__entry->opdev);
+               __entry->rmapbno = rmapbno;
                __entry->len = len;
                __entry->owner = owner;
                __entry->offset = offset;
                __entry->flags = flags;
        ),
-       TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
+       TP_printk("dev %d:%d opdev %d:%d agno 0x%x rmapbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
                  MAJOR(__entry->dev), MINOR(__entry->dev),
+                 MAJOR(__entry->opdev), MINOR(__entry->opdev),
                  __entry->agno,
-                 __entry->agbno,
+                 __entry->rmapbno,
                  __entry->len,
                  __entry->owner,
                  __entry->offset,
@@ -2995,9 +2990,9 @@ DECLARE_EVENT_CLASS(xfs_rmapbt_class,
 #define DEFINE_RMAPBT_EVENT(name) \
 DEFINE_EVENT(xfs_rmapbt_class, name, \
        TP_PROTO(struct xfs_btree_cur *cur, \
-                xfs_agblock_t agbno, xfs_extlen_t len, \
+                xfs_agblock_t rmapbno, xfs_extlen_t len, \
                 uint64_t owner, uint64_t offset, unsigned int flags), \
-       TP_ARGS(cur, agbno, len, owner, offset, flags))
+       TP_ARGS(cur, rmapbno, len, owner, offset, flags))
 
 TRACE_DEFINE_ENUM(XFS_RMAP_MAP);
 TRACE_DEFINE_ENUM(XFS_RMAP_MAP_SHARED);