10b61f8a4SDave Chinner // SPDX-License-Identifier: GPL-2.0 284be0ffcSDave Chinner /* 384be0ffcSDave Chinner * Copyright (c) 2000,2005 Silicon Graphics, Inc. 484be0ffcSDave Chinner * All Rights Reserved. 584be0ffcSDave Chinner */ 684be0ffcSDave Chinner #ifndef __XFS_IALLOC_BTREE_H__ 784be0ffcSDave Chinner #define __XFS_IALLOC_BTREE_H__ 884be0ffcSDave Chinner 984be0ffcSDave Chinner /* 1084be0ffcSDave Chinner * Inode map on-disk structures 1184be0ffcSDave Chinner */ 1284be0ffcSDave Chinner 1384be0ffcSDave Chinner struct xfs_buf; 1484be0ffcSDave Chinner struct xfs_btree_cur; 1584be0ffcSDave Chinner struct xfs_mount; 16be9fb17dSDave Chinner struct xfs_perag; 1784be0ffcSDave Chinner 1884be0ffcSDave Chinner /* 1984be0ffcSDave Chinner * Btree block header size depends on a superblock flag. 2084be0ffcSDave Chinner */ 2184be0ffcSDave Chinner #define XFS_INOBT_BLOCK_LEN(mp) \ 2238c26bfdSDave Chinner (xfs_has_crc(((mp))) ? \ 2384be0ffcSDave Chinner XFS_BTREE_SBLOCK_CRC_LEN : XFS_BTREE_SBLOCK_LEN) 2484be0ffcSDave Chinner 2584be0ffcSDave Chinner /* 2684be0ffcSDave Chinner * Record, key, and pointer address macros for btree blocks. 2784be0ffcSDave Chinner * 2884be0ffcSDave Chinner * (note that some of these may appear unused, but they are used in userspace) 2984be0ffcSDave Chinner */ 3084be0ffcSDave Chinner #define XFS_INOBT_REC_ADDR(mp, block, index) \ 3184be0ffcSDave Chinner ((xfs_inobt_rec_t *) \ 3284be0ffcSDave Chinner ((char *)(block) + \ 3384be0ffcSDave Chinner XFS_INOBT_BLOCK_LEN(mp) + \ 3484be0ffcSDave Chinner (((index) - 1) * sizeof(xfs_inobt_rec_t)))) 3584be0ffcSDave Chinner 3684be0ffcSDave Chinner #define XFS_INOBT_KEY_ADDR(mp, block, index) \ 3784be0ffcSDave Chinner ((xfs_inobt_key_t *) \ 3884be0ffcSDave Chinner ((char *)(block) + \ 3984be0ffcSDave Chinner XFS_INOBT_BLOCK_LEN(mp) + \ 4084be0ffcSDave Chinner ((index) - 1) * sizeof(xfs_inobt_key_t))) 4184be0ffcSDave Chinner 4284be0ffcSDave Chinner #define XFS_INOBT_PTR_ADDR(mp, block, index, maxrecs) \ 4384be0ffcSDave Chinner ((xfs_inobt_ptr_t *) \ 4484be0ffcSDave Chinner ((char *)(block) + \ 4584be0ffcSDave Chinner XFS_INOBT_BLOCK_LEN(mp) + \ 4684be0ffcSDave Chinner (maxrecs) * sizeof(xfs_inobt_key_t) + \ 4784be0ffcSDave Chinner ((index) - 1) * sizeof(xfs_inobt_ptr_t))) 4884be0ffcSDave Chinner 4914dd46cfSChristoph Hellwig struct xfs_btree_cur *xfs_inobt_init_cursor(struct xfs_perag *pag, 5014dd46cfSChristoph Hellwig struct xfs_trans *tp, struct xfs_buf *agbp); 5114dd46cfSChristoph Hellwig struct xfs_btree_cur *xfs_finobt_init_cursor(struct xfs_perag *pag, 5214dd46cfSChristoph Hellwig struct xfs_trans *tp, struct xfs_buf *agbp); 53*411a7125SDarrick J. Wong unsigned int xfs_inobt_maxrecs(struct xfs_mount *mp, unsigned int blocklen, 54*411a7125SDarrick J. Wong bool leaf); 5584be0ffcSDave Chinner 564148c347SBrian Foster /* ir_holemask to inode allocation bitmap conversion */ 57366a0b8dSDarrick J. Wong uint64_t xfs_inobt_irec_to_allocmask(const struct xfs_inobt_rec_incore *irec); 584148c347SBrian Foster 5956d1115cSBrian Foster #if defined(DEBUG) || defined(XFS_WARN) 6056d1115cSBrian Foster int xfs_inobt_rec_check_count(struct xfs_mount *, 6156d1115cSBrian Foster struct xfs_inobt_rec_incore *); 6256d1115cSBrian Foster #else 6356d1115cSBrian Foster #define xfs_inobt_rec_check_count(mp, rec) 0 6456d1115cSBrian Foster #endif /* DEBUG */ 6556d1115cSBrian Foster 66bab8b795SDave Chinner int xfs_finobt_calc_reserves(struct xfs_perag *perag, struct xfs_trans *tp, 67bab8b795SDave Chinner xfs_extlen_t *ask, xfs_extlen_t *used); 6814861c47SDarrick J. Wong extern xfs_extlen_t xfs_iallocbt_calc_size(struct xfs_mount *mp, 6914861c47SDarrick J. Wong unsigned long long len); 7076d771b4SChristoph Hellwig 71c29ce8f4SDarrick J. Wong void xfs_inobt_commit_staged_btree(struct xfs_btree_cur *cur, 72c29ce8f4SDarrick J. Wong struct xfs_trans *tp, struct xfs_buf *agbp); 73c29ce8f4SDarrick J. Wong 740ed5f735SDarrick J. Wong unsigned int xfs_iallocbt_maxlevels_ondisk(void); 750ed5f735SDarrick J. Wong 769fa47bdcSDarrick J. Wong int __init xfs_inobt_init_cur_cache(void); 779fa47bdcSDarrick J. Wong void xfs_inobt_destroy_cur_cache(void); 789fa47bdcSDarrick J. Wong 7984be0ffcSDave Chinner #endif /* __XFS_IALLOC_BTREE_H__ */ 80