Commit aacde95a authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

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: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
parent f42c6524
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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);
}
+2 −0
Original line number Diff line number Diff line
@@ -207,4 +207,6 @@ struct xfs_btree_cur *xfs_rtrmapbt_mem_cursor(struct xfs_rtgroup *rtg,
int xfs_rtrmapbt_mem_init(struct xfs_mount *mp, struct xfbtree *xfbtree,
		struct xfs_buftarg *btp, xfs_rgnumber_t rgno);

xfs_rgblock_t xfs_rtrmap_highest_rgbno(struct xfs_rtgroup *rtg);

#endif /* __XFS_RTRMAP_BTREE_H__ */