1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __XFS_IALLOC_BTREE_H__
19#define __XFS_IALLOC_BTREE_H__
20
21
22
23
24
25struct xfs_buf;
26struct xfs_btree_cur;
27struct xfs_mount;
28
29
30
31
32#define XFS_IBT_MAGIC 0x49414254
33#define XFS_IBT_CRC_MAGIC 0x49414233
34
35typedef __uint64_t xfs_inofree_t;
36#define XFS_INODES_PER_CHUNK (NBBY * sizeof(xfs_inofree_t))
37#define XFS_INODES_PER_CHUNK_LOG (XFS_NBBYLOG + 3)
38#define XFS_INOBT_ALL_FREE ((xfs_inofree_t)-1)
39#define XFS_INOBT_MASK(i) ((xfs_inofree_t)1 << (i))
40
41static inline xfs_inofree_t xfs_inobt_maskn(int i, int n)
42{
43 return ((n >= XFS_INODES_PER_CHUNK ? 0 : XFS_INOBT_MASK(n)) - 1) << i;
44}
45
46
47
48
49typedef struct xfs_inobt_rec {
50 __be32 ir_startino;
51 __be32 ir_freecount;
52 __be64 ir_free;
53} xfs_inobt_rec_t;
54
55typedef struct xfs_inobt_rec_incore {
56 xfs_agino_t ir_startino;
57 __int32_t ir_freecount;
58 xfs_inofree_t ir_free;
59} xfs_inobt_rec_incore_t;
60
61
62
63
64
65typedef struct xfs_inobt_key {
66 __be32 ir_startino;
67} xfs_inobt_key_t;
68
69
70typedef __be32 xfs_inobt_ptr_t;
71
72
73
74
75#define XFS_IBT_BLOCK(mp) ((xfs_agblock_t)(XFS_CNT_BLOCK(mp) + 1))
76#define XFS_PREALLOC_BLOCKS(mp) ((xfs_agblock_t)(XFS_IBT_BLOCK(mp) + 1))
77
78
79
80
81#define XFS_INOBT_BLOCK_LEN(mp) \
82 (xfs_sb_version_hascrc(&((mp)->m_sb)) ? \
83 XFS_BTREE_SBLOCK_CRC_LEN : XFS_BTREE_SBLOCK_LEN)
84
85
86
87
88
89
90#define XFS_INOBT_REC_ADDR(mp, block, index) \
91 ((xfs_inobt_rec_t *) \
92 ((char *)(block) + \
93 XFS_INOBT_BLOCK_LEN(mp) + \
94 (((index) - 1) * sizeof(xfs_inobt_rec_t))))
95
96#define XFS_INOBT_KEY_ADDR(mp, block, index) \
97 ((xfs_inobt_key_t *) \
98 ((char *)(block) + \
99 XFS_INOBT_BLOCK_LEN(mp) + \
100 ((index) - 1) * sizeof(xfs_inobt_key_t)))
101
102#define XFS_INOBT_PTR_ADDR(mp, block, index, maxrecs) \
103 ((xfs_inobt_ptr_t *) \
104 ((char *)(block) + \
105 XFS_INOBT_BLOCK_LEN(mp) + \
106 (maxrecs) * sizeof(xfs_inobt_key_t) + \
107 ((index) - 1) * sizeof(xfs_inobt_ptr_t)))
108
109extern struct xfs_btree_cur *xfs_inobt_init_cursor(struct xfs_mount *,
110 struct xfs_trans *, struct xfs_buf *, xfs_agnumber_t);
111extern int xfs_inobt_maxrecs(struct xfs_mount *, int, int);
112
113extern const struct xfs_buf_ops xfs_inobt_buf_ops;
114
115#endif
116