2018-06-05 19:42:14 -07:00
// SPDX-License-Identifier: GPL-2.0+
2016-10-03 09:11:18 -07:00
/*
* Copyright ( C ) 2016 Oracle . All Rights Reserved .
* Author : Darrick J . Wong < darrick . wong @ oracle . com >
*/
# ifndef __XFS_REFCOUNT_BTREE_H__
# define __XFS_REFCOUNT_BTREE_H__
/*
* Reference Count Btree on - disk structures
*/
struct xfs_buf ;
struct xfs_btree_cur ;
struct xfs_mount ;
2020-03-11 11:09:06 -07:00
struct xbtree_afakeroot ;
2016-10-03 09:11:18 -07:00
/*
* Btree block header size
*/
# define XFS_REFCOUNT_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_REFCOUNT_REC_ADDR(block, index) \
( ( struct xfs_refcount_rec * ) \
( ( char * ) ( block ) + \
XFS_REFCOUNT_BLOCK_LEN + \
( ( ( index ) - 1 ) * sizeof ( struct xfs_refcount_rec ) ) ) )
# define XFS_REFCOUNT_KEY_ADDR(block, index) \
( ( struct xfs_refcount_key * ) \
( ( char * ) ( block ) + \
XFS_REFCOUNT_BLOCK_LEN + \
( ( index ) - 1 ) * sizeof ( struct xfs_refcount_key ) ) )
# define XFS_REFCOUNT_PTR_ADDR(block, index, maxrecs) \
( ( xfs_refcount_ptr_t * ) \
( ( char * ) ( block ) + \
XFS_REFCOUNT_BLOCK_LEN + \
( maxrecs ) * sizeof ( struct xfs_refcount_key ) + \
( ( index ) - 1 ) * sizeof ( xfs_refcount_ptr_t ) ) )
extern struct xfs_btree_cur * xfs_refcountbt_init_cursor ( struct xfs_mount * mp ,
2018-07-11 22:26:17 -07:00
struct xfs_trans * tp , struct xfs_buf * agbp ,
xfs_agnumber_t agno ) ;
2020-03-11 11:09:06 -07:00
struct xfs_btree_cur * xfs_refcountbt_stage_cursor ( struct xfs_mount * mp ,
struct xbtree_afakeroot * afake , xfs_agnumber_t agno ) ;
2018-04-06 10:09:42 -07:00
extern int xfs_refcountbt_maxrecs ( int blocklen , bool leaf ) ;
2016-10-03 09:11:18 -07:00
extern void xfs_refcountbt_compute_maxlevels ( struct xfs_mount * mp ) ;
2016-10-03 09:11:44 -07:00
extern xfs_extlen_t xfs_refcountbt_calc_size ( struct xfs_mount * mp ,
unsigned long long len ) ;
2017-01-03 18:39:33 -08:00
extern xfs_extlen_t xfs_refcountbt_max_size ( struct xfs_mount * mp ,
xfs_agblock_t agblocks ) ;
2016-10-03 09:11:44 -07:00
extern int xfs_refcountbt_calc_reserves ( struct xfs_mount * mp ,
2018-07-29 22:37:08 -07:00
struct xfs_trans * tp , xfs_agnumber_t agno , xfs_extlen_t * ask ,
xfs_extlen_t * used ) ;
2016-10-03 09:11:44 -07:00
2020-03-11 11:09:06 -07:00
void xfs_refcountbt_commit_staged_btree ( struct xfs_btree_cur * cur ,
struct xfs_trans * tp , struct xfs_buf * agbp ) ;
2016-10-03 09:11:18 -07:00
# endif /* __XFS_REFCOUNT_BTREE_H__ */