1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Copyright (c) 2000,2005 Silicon Graphics, Inc. |
4 | * All Rights Reserved. |
5 | */ |
6 | #ifndef __XFS_ALLOC_BTREE_H__ |
7 | #define __XFS_ALLOC_BTREE_H__ |
8 | |
9 | /* |
10 | * Freespace on-disk structures |
11 | */ |
12 | |
13 | struct xfs_buf; |
14 | struct xfs_btree_cur; |
15 | struct xfs_mount; |
16 | struct xfs_perag; |
17 | struct xbtree_afakeroot; |
18 | |
19 | /* |
20 | * Btree block header size depends on a superblock flag. |
21 | */ |
22 | #define XFS_ALLOC_BLOCK_LEN(mp) \ |
23 | (xfs_has_crc(((mp))) ? \ |
24 | XFS_BTREE_SBLOCK_CRC_LEN : XFS_BTREE_SBLOCK_LEN) |
25 | |
26 | /* |
27 | * Record, key, and pointer address macros for btree blocks. |
28 | * |
29 | * (note that some of these may appear unused, but they are used in userspace) |
30 | */ |
31 | #define XFS_ALLOC_REC_ADDR(mp, block, index) \ |
32 | ((xfs_alloc_rec_t *) \ |
33 | ((char *)(block) + \ |
34 | XFS_ALLOC_BLOCK_LEN(mp) + \ |
35 | (((index) - 1) * sizeof(xfs_alloc_rec_t)))) |
36 | |
37 | #define XFS_ALLOC_KEY_ADDR(mp, block, index) \ |
38 | ((xfs_alloc_key_t *) \ |
39 | ((char *)(block) + \ |
40 | XFS_ALLOC_BLOCK_LEN(mp) + \ |
41 | ((index) - 1) * sizeof(xfs_alloc_key_t))) |
42 | |
43 | #define XFS_ALLOC_PTR_ADDR(mp, block, index, maxrecs) \ |
44 | ((xfs_alloc_ptr_t *) \ |
45 | ((char *)(block) + \ |
46 | XFS_ALLOC_BLOCK_LEN(mp) + \ |
47 | (maxrecs) * sizeof(xfs_alloc_key_t) + \ |
48 | ((index) - 1) * sizeof(xfs_alloc_ptr_t))) |
49 | |
50 | struct xfs_btree_cur *xfs_bnobt_init_cursor(struct xfs_mount *mp, |
51 | struct xfs_trans *tp, struct xfs_buf *bp, |
52 | struct xfs_perag *pag); |
53 | struct xfs_btree_cur *xfs_cntbt_init_cursor(struct xfs_mount *mp, |
54 | struct xfs_trans *tp, struct xfs_buf *bp, |
55 | struct xfs_perag *pag); |
56 | extern int xfs_allocbt_maxrecs(struct xfs_mount *, int, int); |
57 | extern xfs_extlen_t xfs_allocbt_calc_size(struct xfs_mount *mp, |
58 | unsigned long long len); |
59 | |
60 | void xfs_allocbt_commit_staged_btree(struct xfs_btree_cur *cur, |
61 | struct xfs_trans *tp, struct xfs_buf *agbp); |
62 | |
63 | unsigned int xfs_allocbt_maxlevels_ondisk(void); |
64 | |
65 | int __init xfs_allocbt_init_cur_cache(void); |
66 | void xfs_allocbt_destroy_cur_cache(void); |
67 | |
68 | #endif /* __XFS_ALLOC_BTREE_H__ */ |
69 | |