]> www.infradead.org Git - users/hch/xfs.git/commitdiff
xfs: prepare rmap btree cursor tracepoints for realtime
authorDarrick J. Wong <djwong@kernel.org>
Fri, 20 Sep 2024 17:33:27 +0000 (19:33 +0200)
committerChristoph Hellwig <hch@lst.de>
Sun, 22 Sep 2024 08:01:35 +0000 (10:01 +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 aaa0ea06910d88267e6a30d1999dc70915b75c3e..a7ee7afe043ea554f5e5398ed96deb5e30c12cab 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)
+{
+       if (cur->bc_group)
+               *agno = cur->bc_group->xg_index;
+       else
+               *agno = 0;
+
+       switch (cur->bc_ops->type) {
+       case XFS_BTREE_TYPE_INODE:
+               *opdev = cur->bc_mp->m_rtdev_targp->bt_dev;
+               break;
+       case XFS_BTREE_TYPE_AG:
+               *opdev = cur->bc_mp->m_super->s_dev;
+               break;
+       case XFS_BTREE_TYPE_MEM:
+               *opdev = (dev_t)-1;
+               break;
+       }
+}
+
 /*
  * We include this last to have the helpers above available for the trace
  * event implementations.
index 726c0c8d0419af9ad319f9ff7b3ffd90b12b319b..53ee6dbb19457a24991d1c96706f7a835758ee70 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
  *
@@ -2838,13 +2842,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)
@@ -2852,8 +2857,8 @@ DECLARE_EVENT_CLASS(xfs_rmap_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
-               __entry->agno = cur->bc_group->xg_index;
-               __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;
@@ -2861,10 +2866,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,
@@ -2873,9 +2879,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,
@@ -2938,47 +2944,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_group->xg_index;
-                       __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)
@@ -2986,17 +2980,18 @@ DECLARE_EVENT_CLASS(xfs_rmapbt_class,
        ),
        TP_fast_assign(
                __entry->dev = cur->bc_mp->m_super->s_dev;
-               __entry->agno = cur->bc_group->xg_index;
-               __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,
@@ -3005,9 +3000,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);