2018-06-05 19:42:14 -07:00
// SPDX-License-Identifier: GPL-2.0
2016-08-03 11:36:07 +10:00
/*
* Copyright ( c ) 2014 Red Hat , Inc .
* All Rights Reserved .
*/
# ifndef __XFS_RMAP_BTREE_H__
# define __XFS_RMAP_BTREE_H__
struct xfs_buf ;
struct xfs_btree_cur ;
struct xfs_mount ;
2020-03-11 11:11:42 -07:00
struct xbtree_afakeroot ;
2024-02-22 12:43:39 -08:00
struct xfbtree ;
2016-08-03 11:36:07 +10:00
/* rmaps only exist on crc enabled filesystems */
# define XFS_RMAP_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN
/*
* Record , key , and pointer address macros for btree blocks .
*
* ( note that some of these may appear unused , but they are used in userspace )
*/
# define XFS_RMAP_REC_ADDR(block, index) \
( ( struct xfs_rmap_rec * ) \
( ( char * ) ( block ) + XFS_RMAP_BLOCK_LEN + \
( ( ( index ) - 1 ) * sizeof ( struct xfs_rmap_rec ) ) ) )
# define XFS_RMAP_KEY_ADDR(block, index) \
( ( struct xfs_rmap_key * ) \
( ( char * ) ( block ) + XFS_RMAP_BLOCK_LEN + \
2016-08-03 11:40:56 +10:00
( ( index ) - 1 ) * 2 * sizeof ( struct xfs_rmap_key ) ) )
# define XFS_RMAP_HIGH_KEY_ADDR(block, index) \
( ( struct xfs_rmap_key * ) \
( ( char * ) ( block ) + XFS_RMAP_BLOCK_LEN + \
sizeof ( struct xfs_rmap_key ) + \
( ( index ) - 1 ) * 2 * sizeof ( struct xfs_rmap_key ) ) )
2016-08-03 11:36:07 +10:00
# define XFS_RMAP_PTR_ADDR(block, index, maxrecs) \
( ( xfs_rmap_ptr_t * ) \
( ( char * ) ( block ) + XFS_RMAP_BLOCK_LEN + \
2016-08-03 11:40:56 +10:00
( maxrecs ) * 2 * sizeof ( struct xfs_rmap_key ) + \
2016-08-03 11:36:07 +10:00
( ( index ) - 1 ) * sizeof ( xfs_rmap_ptr_t ) ) )
struct xfs_btree_cur * xfs_rmapbt_init_cursor ( struct xfs_mount * mp ,
struct xfs_trans * tp , struct xfs_buf * bp ,
2021-06-02 10:48:24 +10:00
struct xfs_perag * pag ) ;
2020-03-11 11:11:42 -07:00
void xfs_rmapbt_commit_staged_btree ( struct xfs_btree_cur * cur ,
struct xfs_trans * tp , struct xfs_buf * agbp ) ;
2018-04-06 10:09:42 -07:00
int xfs_rmapbt_maxrecs ( int blocklen , int leaf ) ;
2016-08-03 11:36:07 +10:00
extern void xfs_rmapbt_compute_maxlevels ( struct xfs_mount * mp ) ;
2016-10-03 09:11:44 -07:00
extern xfs_extlen_t xfs_rmapbt_calc_size ( struct xfs_mount * mp ,
unsigned long long len ) ;
2017-01-03 18:39:33 -08:00
extern xfs_extlen_t xfs_rmapbt_max_size ( struct xfs_mount * mp ,
xfs_agblock_t agblocks ) ;
2016-10-03 09:11:44 -07:00
2018-07-29 22:37:08 -07:00
extern int xfs_rmapbt_calc_reserves ( struct xfs_mount * mp , struct xfs_trans * tp ,
2021-06-02 10:48:24 +10:00
struct xfs_perag * pag , xfs_extlen_t * ask , xfs_extlen_t * used ) ;
2016-10-03 09:11:44 -07:00
2021-09-23 10:32:06 -07:00
unsigned int xfs_rmapbt_maxlevels_ondisk ( void ) ;
2021-09-23 12:21:37 -07:00
int __init xfs_rmapbt_init_cur_cache ( void ) ;
void xfs_rmapbt_destroy_cur_cache ( void ) ;
2024-02-22 12:43:39 -08:00
struct xfs_btree_cur * xfs_rmapbt_mem_cursor ( struct xfs_perag * pag ,
struct xfs_trans * tp , struct xfbtree * xfbtree ) ;
int xfs_rmapbt_mem_init ( struct xfs_mount * mp , struct xfbtree * xfbtree ,
struct xfs_buftarg * btp , xfs_agnumber_t agno ) ;
2021-08-06 11:05:44 -07:00
# endif /* __XFS_RMAP_BTREE_H__ */