73 lines · c
1// SPDX-License-Identifier: GPL-2.0+2/*3 * Copyright (C) 2016 Oracle. All Rights Reserved.4 * Author: Darrick J. Wong <darrick.wong@oracle.com>5 */6#ifndef __XFS_REFCOUNT_BTREE_H__7#define __XFS_REFCOUNT_BTREE_H__8 9/*10 * Reference Count Btree on-disk structures11 */12 13struct xfs_buf;14struct xfs_btree_cur;15struct xfs_mount;16struct xfs_perag;17struct xbtree_afakeroot;18 19/*20 * Btree block header size21 */22#define XFS_REFCOUNT_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN23 24/*25 * Record, key, and pointer address macros for btree blocks.26 *27 * (note that some of these may appear unused, but they are used in userspace)28 */29#define XFS_REFCOUNT_REC_ADDR(block, index) \30 ((struct xfs_refcount_rec *) \31 ((char *)(block) + \32 XFS_REFCOUNT_BLOCK_LEN + \33 (((index) - 1) * sizeof(struct xfs_refcount_rec))))34 35#define XFS_REFCOUNT_KEY_ADDR(block, index) \36 ((struct xfs_refcount_key *) \37 ((char *)(block) + \38 XFS_REFCOUNT_BLOCK_LEN + \39 ((index) - 1) * sizeof(struct xfs_refcount_key)))40 41#define XFS_REFCOUNT_PTR_ADDR(block, index, maxrecs) \42 ((xfs_refcount_ptr_t *) \43 ((char *)(block) + \44 XFS_REFCOUNT_BLOCK_LEN + \45 (maxrecs) * sizeof(struct xfs_refcount_key) + \46 ((index) - 1) * sizeof(xfs_refcount_ptr_t)))47 48extern struct xfs_btree_cur *xfs_refcountbt_init_cursor(struct xfs_mount *mp,49 struct xfs_trans *tp, struct xfs_buf *agbp,50 struct xfs_perag *pag);51unsigned int xfs_refcountbt_maxrecs(struct xfs_mount *mp, unsigned int blocklen,52 bool leaf);53extern void xfs_refcountbt_compute_maxlevels(struct xfs_mount *mp);54 55extern xfs_extlen_t xfs_refcountbt_calc_size(struct xfs_mount *mp,56 unsigned long long len);57extern xfs_extlen_t xfs_refcountbt_max_size(struct xfs_mount *mp,58 xfs_agblock_t agblocks);59 60extern int xfs_refcountbt_calc_reserves(struct xfs_mount *mp,61 struct xfs_trans *tp, struct xfs_perag *pag, xfs_extlen_t *ask,62 xfs_extlen_t *used);63 64void xfs_refcountbt_commit_staged_btree(struct xfs_btree_cur *cur,65 struct xfs_trans *tp, struct xfs_buf *agbp);66 67unsigned int xfs_refcountbt_maxlevels_ondisk(void);68 69int __init xfs_refcountbt_init_cur_cache(void);70void xfs_refcountbt_destroy_cur_cache(void);71 72#endif /* __XFS_REFCOUNT_BTREE_H__ */73