aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/libxfs/xfs_rtrmap_btree.c
diff options
context:
space:
mode:
authorChristoph Hellwig <[email protected]>2024-12-21 08:40:17 +0000
committerChristoph Hellwig <[email protected]>2025-03-03 15:16:45 +0000
commitaacde95a37160b1462e46e0fd0cc7fd70e3bf1cc (patch)
tree2cfc5ce378a394b540a1c6533f1f98597df2520a /fs/xfs/libxfs/xfs_rtrmap_btree.c
parentxfs: support XFS_BMAPI_REMAP in xfs_bmap_del_extent_delay (diff)
downloadkernel-aacde95a37160b1462e46e0fd0cc7fd70e3bf1cc.tar.gz
kernel-aacde95a37160b1462e46e0fd0cc7fd70e3bf1cc.zip
xfs: add a xfs_rtrmap_highest_rgbno helper
Add a helper to find the last offset mapped in the rtrmap. This will be used by the zoned code to find out where to start writing again on conventional devices without hardware zone support. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: "Darrick J. Wong" <[email protected]>
Diffstat (limited to 'fs/xfs/libxfs/xfs_rtrmap_btree.c')
-rw-r--r--fs/xfs/libxfs/xfs_rtrmap_btree.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/xfs/libxfs/xfs_rtrmap_btree.c b/fs/xfs/libxfs/xfs_rtrmap_btree.c
index e4ec36943cb7..9bdc2cbfc113 100644
--- a/fs/xfs/libxfs/xfs_rtrmap_btree.c
+++ b/fs/xfs/libxfs/xfs_rtrmap_btree.c
@@ -1033,3 +1033,22 @@ xfs_rtrmapbt_init_rtsb(
xfs_btree_del_cursor(cur, error);
return error;
}
+
+/*
+ * Return the highest rgbno currently tracked by the rmap for this rtg.
+ */
+xfs_rgblock_t
+xfs_rtrmap_highest_rgbno(
+ struct xfs_rtgroup *rtg)
+{
+ struct xfs_btree_block *block = rtg_rmap(rtg)->i_df.if_broot;
+ union xfs_btree_key key = {};
+ struct xfs_btree_cur *cur;
+
+ if (block->bb_numrecs == 0)
+ return NULLRGBLOCK;
+ cur = xfs_rtrmapbt_init_cursor(NULL, rtg);
+ xfs_btree_get_keys(cur, block, &key);
+ xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
+ return be32_to_cpu(key.__rmap_bigkey[1].rm_startblock);
+}