diff options
Diffstat (limited to 'fs/xfs/xfs_ialloc_btree.h')
-rw-r--r-- | fs/xfs/xfs_ialloc_btree.h | 111 |
1 files changed, 30 insertions, 81 deletions
diff --git a/fs/xfs/xfs_ialloc_btree.h b/fs/xfs/xfs_ialloc_btree.h index 8efc4a5b8b92..37e5dd01a577 100644 --- a/fs/xfs/xfs_ialloc_btree.h +++ b/fs/xfs/xfs_ialloc_btree.h | |||
@@ -24,7 +24,6 @@ | |||
24 | 24 | ||
25 | struct xfs_buf; | 25 | struct xfs_buf; |
26 | struct xfs_btree_cur; | 26 | struct xfs_btree_cur; |
27 | struct xfs_btree_sblock; | ||
28 | struct xfs_mount; | 27 | struct xfs_mount; |
29 | 28 | ||
30 | /* | 29 | /* |
@@ -70,11 +69,6 @@ typedef struct xfs_inobt_key { | |||
70 | /* btree pointer type */ | 69 | /* btree pointer type */ |
71 | typedef __be32 xfs_inobt_ptr_t; | 70 | typedef __be32 xfs_inobt_ptr_t; |
72 | 71 | ||
73 | /* btree block header type */ | ||
74 | typedef struct xfs_btree_sblock xfs_inobt_block_t; | ||
75 | |||
76 | #define XFS_BUF_TO_INOBT_BLOCK(bp) ((xfs_inobt_block_t *)XFS_BUF_PTR(bp)) | ||
77 | |||
78 | /* | 72 | /* |
79 | * Bit manipulations for ir_free. | 73 | * Bit manipulations for ir_free. |
80 | */ | 74 | */ |
@@ -85,14 +79,6 @@ typedef struct xfs_btree_sblock xfs_inobt_block_t; | |||
85 | #define XFS_INOBT_CLR_FREE(rp,i) ((rp)->ir_free &= ~XFS_INOBT_MASK(i)) | 79 | #define XFS_INOBT_CLR_FREE(rp,i) ((rp)->ir_free &= ~XFS_INOBT_MASK(i)) |
86 | 80 | ||
87 | /* | 81 | /* |
88 | * Real block structures have a size equal to the disk block size. | ||
89 | */ | ||
90 | #define XFS_INOBT_BLOCK_MAXRECS(lev,cur) ((cur)->bc_mp->m_inobt_mxr[lev != 0]) | ||
91 | #define XFS_INOBT_BLOCK_MINRECS(lev,cur) ((cur)->bc_mp->m_inobt_mnr[lev != 0]) | ||
92 | #define XFS_INOBT_IS_LAST_REC(cur) \ | ||
93 | ((cur)->bc_ptrs[0] == be16_to_cpu(XFS_BUF_TO_INOBT_BLOCK((cur)->bc_bufs[0])->bb_numrecs)) | ||
94 | |||
95 | /* | ||
96 | * Maximum number of inode btree levels. | 82 | * Maximum number of inode btree levels. |
97 | */ | 83 | */ |
98 | #define XFS_IN_MAXLEVELS(mp) ((mp)->m_in_maxlevels) | 84 | #define XFS_IN_MAXLEVELS(mp) ((mp)->m_in_maxlevels) |
@@ -104,75 +90,38 @@ typedef struct xfs_btree_sblock xfs_inobt_block_t; | |||
104 | #define XFS_PREALLOC_BLOCKS(mp) ((xfs_agblock_t)(XFS_IBT_BLOCK(mp) + 1)) | 90 | #define XFS_PREALLOC_BLOCKS(mp) ((xfs_agblock_t)(XFS_IBT_BLOCK(mp) + 1)) |
105 | 91 | ||
106 | /* | 92 | /* |
107 | * Record, key, and pointer address macros for btree blocks. | 93 | * Btree block header size depends on a superblock flag. |
108 | */ | 94 | * |
109 | #define XFS_INOBT_REC_ADDR(bb,i,cur) \ | 95 | * (not quite yet, but soon) |
110 | (XFS_BTREE_REC_ADDR(xfs_inobt, bb, i)) | ||
111 | |||
112 | #define XFS_INOBT_KEY_ADDR(bb,i,cur) \ | ||
113 | (XFS_BTREE_KEY_ADDR(xfs_inobt, bb, i)) | ||
114 | |||
115 | #define XFS_INOBT_PTR_ADDR(bb,i,cur) \ | ||
116 | (XFS_BTREE_PTR_ADDR(xfs_inobt, bb, \ | ||
117 | i, XFS_INOBT_BLOCK_MAXRECS(1, cur))) | ||
118 | |||
119 | /* | ||
120 | * Decrement cursor by one record at the level. | ||
121 | * For nonzero levels the leaf-ward information is untouched. | ||
122 | */ | ||
123 | extern int xfs_inobt_decrement(struct xfs_btree_cur *cur, int level, int *stat); | ||
124 | |||
125 | /* | ||
126 | * Delete the record pointed to by cur. | ||
127 | * The cursor refers to the place where the record was (could be inserted) | ||
128 | * when the operation returns. | ||
129 | */ | ||
130 | extern int xfs_inobt_delete(struct xfs_btree_cur *cur, int *stat); | ||
131 | |||
132 | /* | ||
133 | * Get the data from the pointed-to record. | ||
134 | */ | ||
135 | extern int xfs_inobt_get_rec(struct xfs_btree_cur *cur, xfs_agino_t *ino, | ||
136 | __int32_t *fcnt, xfs_inofree_t *free, int *stat); | ||
137 | |||
138 | /* | ||
139 | * Increment cursor by one record at the level. | ||
140 | * For nonzero levels the leaf-ward information is untouched. | ||
141 | */ | ||
142 | extern int xfs_inobt_increment(struct xfs_btree_cur *cur, int level, int *stat); | ||
143 | |||
144 | /* | ||
145 | * Insert the current record at the point referenced by cur. | ||
146 | * The cursor may be inconsistent on return if splits have been done. | ||
147 | */ | ||
148 | extern int xfs_inobt_insert(struct xfs_btree_cur *cur, int *stat); | ||
149 | |||
150 | /* | ||
151 | * Lookup the record equal to ino in the btree given by cur. | ||
152 | */ | ||
153 | extern int xfs_inobt_lookup_eq(struct xfs_btree_cur *cur, xfs_agino_t ino, | ||
154 | __int32_t fcnt, xfs_inofree_t free, int *stat); | ||
155 | |||
156 | /* | ||
157 | * Lookup the first record greater than or equal to ino | ||
158 | * in the btree given by cur. | ||
159 | */ | ||
160 | extern int xfs_inobt_lookup_ge(struct xfs_btree_cur *cur, xfs_agino_t ino, | ||
161 | __int32_t fcnt, xfs_inofree_t free, int *stat); | ||
162 | |||
163 | /* | ||
164 | * Lookup the first record less than or equal to ino | ||
165 | * in the btree given by cur. | ||
166 | */ | 96 | */ |
167 | extern int xfs_inobt_lookup_le(struct xfs_btree_cur *cur, xfs_agino_t ino, | 97 | #define XFS_INOBT_BLOCK_LEN(mp) XFS_BTREE_SBLOCK_LEN |
168 | __int32_t fcnt, xfs_inofree_t free, int *stat); | ||
169 | 98 | ||
170 | /* | 99 | /* |
171 | * Update the record referred to by cur, to the value given | 100 | * Record, key, and pointer address macros for btree blocks. |
172 | * by [ino, fcnt, free]. | 101 | * |
173 | * This either works (return 0) or gets an EFSCORRUPTED error. | 102 | * (note that some of these may appear unused, but they are used in userspace) |
174 | */ | 103 | */ |
175 | extern int xfs_inobt_update(struct xfs_btree_cur *cur, xfs_agino_t ino, | 104 | #define XFS_INOBT_REC_ADDR(mp, block, index) \ |
176 | __int32_t fcnt, xfs_inofree_t free); | 105 | ((xfs_inobt_rec_t *) \ |
106 | ((char *)(block) + \ | ||
107 | XFS_INOBT_BLOCK_LEN(mp) + \ | ||
108 | (((index) - 1) * sizeof(xfs_inobt_rec_t)))) | ||
109 | |||
110 | #define XFS_INOBT_KEY_ADDR(mp, block, index) \ | ||
111 | ((xfs_inobt_key_t *) \ | ||
112 | ((char *)(block) + \ | ||
113 | XFS_INOBT_BLOCK_LEN(mp) + \ | ||
114 | ((index) - 1) * sizeof(xfs_inobt_key_t))) | ||
115 | |||
116 | #define XFS_INOBT_PTR_ADDR(mp, block, index, maxrecs) \ | ||
117 | ((xfs_inobt_ptr_t *) \ | ||
118 | ((char *)(block) + \ | ||
119 | XFS_INOBT_BLOCK_LEN(mp) + \ | ||
120 | (maxrecs) * sizeof(xfs_inobt_key_t) + \ | ||
121 | ((index) - 1) * sizeof(xfs_inobt_ptr_t))) | ||
122 | |||
123 | extern struct xfs_btree_cur *xfs_inobt_init_cursor(struct xfs_mount *, | ||
124 | struct xfs_trans *, struct xfs_buf *, xfs_agnumber_t); | ||
125 | extern int xfs_inobt_maxrecs(struct xfs_mount *, int, int); | ||
177 | 126 | ||
178 | #endif /* __XFS_IALLOC_BTREE_H__ */ | 127 | #endif /* __XFS_IALLOC_BTREE_H__ */ |