0001
0002
0003
0004
0005
0006 #ifndef __XFS_REFCOUNT_BTREE_H__
0007 #define __XFS_REFCOUNT_BTREE_H__
0008
0009
0010
0011
0012
0013 struct xfs_buf;
0014 struct xfs_btree_cur;
0015 struct xfs_mount;
0016 struct xfs_perag;
0017 struct xbtree_afakeroot;
0018
0019
0020
0021
0022 #define XFS_REFCOUNT_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN
0023
0024
0025
0026
0027
0028
0029 #define XFS_REFCOUNT_REC_ADDR(block, index) \
0030 ((struct xfs_refcount_rec *) \
0031 ((char *)(block) + \
0032 XFS_REFCOUNT_BLOCK_LEN + \
0033 (((index) - 1) * sizeof(struct xfs_refcount_rec))))
0034
0035 #define XFS_REFCOUNT_KEY_ADDR(block, index) \
0036 ((struct xfs_refcount_key *) \
0037 ((char *)(block) + \
0038 XFS_REFCOUNT_BLOCK_LEN + \
0039 ((index) - 1) * sizeof(struct xfs_refcount_key)))
0040
0041 #define XFS_REFCOUNT_PTR_ADDR(block, index, maxrecs) \
0042 ((xfs_refcount_ptr_t *) \
0043 ((char *)(block) + \
0044 XFS_REFCOUNT_BLOCK_LEN + \
0045 (maxrecs) * sizeof(struct xfs_refcount_key) + \
0046 ((index) - 1) * sizeof(xfs_refcount_ptr_t)))
0047
0048 extern struct xfs_btree_cur *xfs_refcountbt_init_cursor(struct xfs_mount *mp,
0049 struct xfs_trans *tp, struct xfs_buf *agbp,
0050 struct xfs_perag *pag);
0051 struct xfs_btree_cur *xfs_refcountbt_stage_cursor(struct xfs_mount *mp,
0052 struct xbtree_afakeroot *afake, struct xfs_perag *pag);
0053 extern int xfs_refcountbt_maxrecs(int blocklen, bool leaf);
0054 extern void xfs_refcountbt_compute_maxlevels(struct xfs_mount *mp);
0055
0056 extern xfs_extlen_t xfs_refcountbt_calc_size(struct xfs_mount *mp,
0057 unsigned long long len);
0058 extern xfs_extlen_t xfs_refcountbt_max_size(struct xfs_mount *mp,
0059 xfs_agblock_t agblocks);
0060
0061 extern int xfs_refcountbt_calc_reserves(struct xfs_mount *mp,
0062 struct xfs_trans *tp, struct xfs_perag *pag, xfs_extlen_t *ask,
0063 xfs_extlen_t *used);
0064
0065 void xfs_refcountbt_commit_staged_btree(struct xfs_btree_cur *cur,
0066 struct xfs_trans *tp, struct xfs_buf *agbp);
0067
0068 unsigned int xfs_refcountbt_maxlevels_ondisk(void);
0069
0070 int __init xfs_refcountbt_init_cur_cache(void);
0071 void xfs_refcountbt_destroy_cur_cache(void);
0072
0073 #endif