2020-05-12 16:54:17 -07:00
/* SPDX-License-Identifier: GPL-2.0 */
2005-04-16 15:20:36 -07:00
/*
2005-11-02 14:58:39 +11:00
* Copyright ( c ) 2000 , 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-16 15:20:36 -07:00
*/
# ifndef __XFS_ALLOC_BTREE_H__
# define __XFS_ALLOC_BTREE_H__
/*
* Freespace on - disk structures
*/
struct xfs_buf ;
struct xfs_btree_cur ;
struct xfs_mount ;
2020-03-11 10:52:49 -07:00
struct xbtree_afakeroot ;
2005-04-16 15:20:36 -07:00
2008-10-30 17:14:34 +11:00
/*
* Btree block header size depends on a superblock flag .
*/
2013-04-21 14:53:46 -05:00
# define XFS_ALLOC_BLOCK_LEN(mp) \
( xfs_sb_version_hascrc ( & ( ( mp ) - > m_sb ) ) ? \
XFS_BTREE_SBLOCK_CRC_LEN : XFS_BTREE_SBLOCK_LEN )
2008-10-30 17:14:34 +11:00
2005-04-16 15:20:36 -07:00
/*
* Record , key , and pointer address macros for btree blocks .
2008-10-30 17:11:40 +11:00
*
* ( note that some of these may appear unused , but they are used in userspace )
2005-04-16 15:20:36 -07:00
*/
2008-10-30 17:11:40 +11:00
# define XFS_ALLOC_REC_ADDR(mp, block, index) \
( ( xfs_alloc_rec_t * ) \
( ( char * ) ( block ) + \
2008-10-30 17:14:34 +11:00
XFS_ALLOC_BLOCK_LEN ( mp ) + \
2008-10-30 17:11:40 +11:00
( ( ( index ) - 1 ) * sizeof ( xfs_alloc_rec_t ) ) ) )
2005-04-16 15:20:36 -07:00
2008-10-30 17:11:40 +11:00
# define XFS_ALLOC_KEY_ADDR(mp, block, index) \
( ( xfs_alloc_key_t * ) \
( ( char * ) ( block ) + \
2008-10-30 17:14:34 +11:00
XFS_ALLOC_BLOCK_LEN ( mp ) + \
2008-10-30 17:11:40 +11:00
( ( index ) - 1 ) * sizeof ( xfs_alloc_key_t ) ) )
2005-04-16 15:20:36 -07:00
2008-10-30 17:11:40 +11:00
# define XFS_ALLOC_PTR_ADDR(mp, block, index, maxrecs) \
( ( xfs_alloc_ptr_t * ) \
( ( char * ) ( block ) + \
2008-10-30 17:14:34 +11:00
XFS_ALLOC_BLOCK_LEN ( mp ) + \
2008-10-30 17:11:40 +11:00
( maxrecs ) * sizeof ( xfs_alloc_key_t ) + \
( ( index ) - 1 ) * sizeof ( xfs_alloc_ptr_t ) ) )
2008-10-30 16:53:59 +11:00
extern struct xfs_btree_cur * xfs_allocbt_init_cursor ( struct xfs_mount * ,
struct xfs_trans * , struct xfs_buf * ,
xfs_agnumber_t , xfs_btnum_t ) ;
2020-03-11 10:52:49 -07:00
struct xfs_btree_cur * xfs_allocbt_stage_cursor ( struct xfs_mount * mp ,
struct xbtree_afakeroot * afake , xfs_agnumber_t agno ,
xfs_btnum_t btnum ) ;
2008-10-30 17:11:19 +11:00
extern int xfs_allocbt_maxrecs ( struct xfs_mount * , int , int ) ;
2018-05-09 10:02:01 -07:00
extern xfs_extlen_t xfs_allocbt_calc_size ( struct xfs_mount * mp ,
unsigned long long len ) ;
2008-10-30 16:53:59 +11:00
2020-03-11 10:52:49 -07:00
void xfs_allocbt_commit_staged_btree ( struct xfs_btree_cur * cur ,
struct xfs_trans * tp , struct xfs_buf * agbp ) ;
2005-04-16 15:20:36 -07:00
# endif /* __XFS_ALLOC_BTREE_H__ */