]>
Commit | Line | Data |
---|---|---|
2bd0ea18 NS |
1 | /* |
2 | * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify it | |
5 | * under the terms of version 2 of the GNU General Public License as | |
6 | * published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope that it would be useful, but | |
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
11 | * | |
12 | * Further, this software is distributed without any warranty that it is | |
13 | * free of the rightful claim of any third person regarding infringement | |
14 | * or the like. Any license provided herein, whether implied or | |
15 | * otherwise, applies only to this software file. Patent licenses, if | |
16 | * any, provided herein do not apply to combinations of this program with | |
17 | * other software, or any other product whatsoever. | |
18 | * | |
19 | * You should have received a copy of the GNU General Public License along | |
20 | * with this program; if not, write the Free Software Foundation, Inc., 59 | |
21 | * Temple Place - Suite 330, Boston MA 02111-1307, USA. | |
22 | * | |
23 | * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, | |
24 | * Mountain View, CA 94043, or: | |
25 | * | |
26 | * http://www.sgi.com | |
27 | * | |
28 | * For further information regarding this notice, see: | |
29 | * | |
30 | * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ | |
31 | */ | |
32 | ||
33 | /* | |
34 | * This header is effectively a "namespace multiplexor" for the | |
35 | * user level XFS code. It provides all of the necessary stuff | |
36 | * such that we can build some parts of the XFS kernel code in | |
37 | * user space in a controlled fashion, and translates the names | |
38 | * used in the kernel into the names which libxfs is going to | |
39 | * make available to user tools. | |
40 | * | |
41 | * It should only ever be #include'd by XFS "kernel" code being | |
42 | * compiled in user space. | |
43 | * | |
44 | * Our goals here are to... | |
45 | * o "share" large amounts of complex code between user and | |
46 | * kernel space; | |
47 | * o shield the user tools from changes in the bleeding | |
48 | * edge kernel code, merging source changes when | |
49 | * convenient and not immediately (no symlinks); | |
50 | * o i.e. be able to merge changes to the kernel source back | |
51 | * into the affected user tools in a controlled fashion; | |
52 | * o provide a _minimalist_ life-support system for kernel | |
53 | * code in user land, not the "everything + the kitchen | |
54 | * sink" model which libsim had mutated into; | |
55 | * o allow the kernel code to be completely free of code | |
56 | * specifically there to support the user level build. | |
57 | */ | |
58 | ||
59 | #include <libxfs.h> | |
60 | #include <string.h> | |
61 | #include <errno.h> | |
62 | #include <sys/stat.h> | |
2bd0ea18 NS |
63 | |
64 | /* | |
65 | * Map XFS kernel routine names to libxfs.h names | |
66 | */ | |
67 | ||
68 | #define xfs_xlatesb libxfs_xlate_sb | |
69 | #define xfs_xlate_dinode_core libxfs_xlate_dinode_core | |
70 | #define xfs_bmbt_get_all libxfs_bmbt_get_all | |
71 | #define xfs_bmbt_get_blockcount libxfs_bmbt_get_blockcount | |
72 | #define xfs_bmbt_get_startoff libxfs_bmbt_get_startoff | |
73 | #define xfs_da_hashname libxfs_da_hashname | |
74 | #define xfs_da_log2_roundup libxfs_da_log2_roundup | |
75 | #define xfs_highbit32 libxfs_highbit32 | |
76 | #define xfs_highbit64 libxfs_highbit64 | |
77 | #define xfs_attr_leaf_newentsize libxfs_attr_leaf_newentsize | |
78 | #define xfs_alloc_compute_maxlevels libxfs_alloc_compute_maxlevels | |
79 | #define xfs_bmap_compute_maxlevels libxfs_bmap_compute_maxlevels | |
80 | #define xfs_ialloc_compute_maxlevels libxfs_ialloc_compute_maxlevels | |
81 | ||
82 | #define xfs_dir_init libxfs_dir_init | |
83 | #define xfs_dir2_init libxfs_dir2_init | |
84 | #define xfs_dir_mount libxfs_dir_mount | |
85 | #define xfs_dir2_mount libxfs_dir2_mount | |
86 | #define xfs_dir_createname libxfs_dir_createname | |
87 | #define xfs_dir2_createname libxfs_dir2_createname | |
88 | #define xfs_dir_lookup libxfs_dir_lookup | |
89 | #define xfs_dir2_lookup libxfs_dir2_lookup | |
90 | #define xfs_dir_replace libxfs_dir_replace | |
91 | #define xfs_dir2_replace libxfs_dir2_replace | |
92 | #define xfs_dir_removename libxfs_dir_removename | |
93 | #define xfs_dir2_removename libxfs_dir2_removename | |
94 | #define xfs_dir_bogus_removename libxfs_dir_bogus_removename | |
95 | #define xfs_dir2_bogus_removename libxfs_dir2_bogus_removename | |
96 | ||
97 | #define xfs_mount_common libxfs_mount_common | |
98 | #define xfs_rtmount_init libxfs_rtmount_init | |
99 | #define xfs_alloc_fix_freelist libxfs_alloc_fix_freelist | |
100 | #define xfs_iread libxfs_iread | |
101 | #define xfs_ialloc libxfs_ialloc | |
102 | #define xfs_idata_realloc libxfs_idata_realloc | |
103 | #define xfs_itobp libxfs_itobp | |
104 | #define xfs_ichgtime libxfs_ichgtime | |
105 | #define xfs_bmapi libxfs_bmapi | |
106 | #define xfs_bmap_finish libxfs_bmap_finish | |
107 | #define xfs_bmap_del_free libxfs_bmap_del_free | |
108 | #define xfs_bunmapi libxfs_bunmapi | |
109 | #define xfs_free_extent libxfs_free_extent | |
110 | #define xfs_rtfree_extent libxfs_rtfree_extent | |
111 | #define xfs_mod_sb libxfs_mod_sb | |
112 | #define xfs_mod_incore_sb libxfs_mod_incore_sb | |
113 | ||
114 | #define xfs_trans_init libxfs_trans_init | |
115 | #define xfs_trans_dup libxfs_trans_dup | |
116 | #define xfs_trans_iget libxfs_trans_iget | |
117 | #define xfs_trans_ijoin libxfs_trans_ijoin | |
118 | #define xfs_trans_ihold libxfs_trans_ihold | |
119 | #define xfs_trans_bjoin libxfs_trans_bjoin | |
120 | #define xfs_trans_bhold libxfs_trans_bhold | |
121 | #define xfs_trans_alloc libxfs_trans_alloc | |
122 | #define xfs_trans_commit libxfs_trans_commit | |
123 | #define xfs_trans_mod_sb libxfs_trans_mod_sb | |
124 | #define xfs_trans_reserve libxfs_trans_reserve | |
125 | #define xfs_trans_get_buf libxfs_trans_get_buf | |
126 | #define xfs_trans_log_buf libxfs_trans_log_buf | |
127 | #define xfs_trans_read_buf libxfs_trans_read_buf | |
128 | #define xfs_trans_log_inode libxfs_trans_log_inode | |
129 | #define xfs_trans_inode_alloc_buf libxfs_trans_inode_alloc_buf | |
130 | #define xfs_trans_brelse libxfs_trans_brelse | |
131 | #define xfs_trans_binval libxfs_trans_binval | |
132 | ||
133 | #define xfs_da_shrink_inode libxfs_da_shrink_inode | |
134 | #define xfs_da_grow_inode libxfs_da_grow_inode | |
135 | #define xfs_da_brelse libxfs_da_brelse | |
136 | #define xfs_da_read_buf libxfs_da_read_buf | |
137 | #define xfs_da_get_buf libxfs_da_get_buf | |
138 | #define xfs_da_log_buf libxfs_da_log_buf | |
139 | #define xfs_da_do_buf libxfs_da_do_buf | |
140 | #define xfs_dir2_shrink_inode libxfs_dir2_shrink_inode | |
141 | #define xfs_dir2_grow_inode libxfs_dir2_grow_inode | |
142 | #define xfs_dir2_isleaf libxfs_dir2_isleaf | |
143 | #define xfs_dir2_isblock libxfs_dir2_isblock | |
144 | #define xfs_dir2_data_use_free libxfs_dir2_data_use_free | |
145 | #define xfs_dir2_data_make_free libxfs_dir2_data_make_free | |
146 | #define xfs_dir2_data_log_entry libxfs_dir2_data_log_entry | |
147 | #define xfs_dir2_data_log_header libxfs_dir2_data_log_header | |
148 | #define xfs_dir2_data_freescan libxfs_dir2_data_freescan | |
149 | #define xfs_dir2_free_log_bests libxfs_dir2_free_log_bests | |
150 | ||
151 | ||
152 | /* | |
153 | * Infrastructure to support building kernel XFS code in user space | |
154 | */ | |
155 | ||
156 | /* buffer management */ | |
157 | #define XFS_BUF_LOCK 0 | |
158 | #define XFS_BUF_MAPPED 0 | |
159 | #define XFS_BUF_TRYLOCK 0 | |
160 | #define XFS_BUF_ISDONE(bp) 0 | |
161 | #define XFS_BUF_GETERROR(bp) 0 | |
162 | #define XFS_BUF_DONE(bp) ((void) 0) | |
163 | #define XFS_BUF_SET_REF(a,b) ((void) 0) | |
164 | #define XFS_BUF_SET_VTYPE(a,b) ((void) 0) | |
165 | #define XFS_BUF_SET_VTYPE_REF(a,b,c) ((void) 0) | |
166 | #define XFS_BUF_SET_BDSTRAT_FUNC(a,b) ((void) 0) | |
167 | #define xfs_baread(a,b,c) ((void) 0) /* no readahead */ | |
168 | #define xfs_buftrace(x,y) ((void) 0) /* debug only */ | |
169 | #define xfs_buf_item_log_debug(bip,a,b) ((void) 0) /* debug only */ | |
170 | #define xfs_validate_extents(e,n,f) ((void) 0) /* debug only */ | |
171 | #define xfs_buf_relse(bp) libxfs_putbuf(bp) | |
6d1d29a7 NS |
172 | #define xfs_read_buf(mp,devp,blkno,len,f,bpp) \ |
173 | ( *(bpp) = libxfs_readbuf( *(dev_t*)devp, (blkno), (len), 1), 0 ) | |
2bd0ea18 NS |
174 | |
175 | ||
176 | /* transaction management */ | |
177 | #define xfs_trans_set_sync(tp) ((void) 0) | |
178 | #define xfs_trans_agblocks_delta(tp, d) ((void) 0) /* debug only */ | |
179 | #define xfs_trans_agflist_delta(tp, d) ((void) 0) /* debug only */ | |
180 | #define xfs_trans_agbtree_delta(tp, d) ((void) 0) /* debug only */ | |
181 | #define xfs_trans_mod_dquot_byino(tp,ip,f,d) ((void) 0) | |
182 | #define xfs_trans_get_block_res(tp) 1 | |
183 | #define xfs_trans_reserve_blkquota(tp,i,n) 0 | |
184 | #define xfs_trans_unreserve_blkquota(tp,i,n) ((void) 0) | |
185 | #define xfs_trans_unreserve_rtblkquota(tp,i,n) ((void) 0) | |
186 | ||
187 | ||
188 | /* memory management */ | |
9de59d6e SL |
189 | #define KM_SLEEP 1 |
190 | #define KM_SLEEP_IO 2 | |
2bd0ea18 NS |
191 | #define kmem_zone_init(a, b) libxfs_zone_init(a, b) |
192 | #define kmem_zone_alloc(z, f) libxfs_zone_zalloc(z) | |
193 | #define kmem_zone_zalloc(z, f) libxfs_zone_zalloc(z) | |
194 | #define kmem_zone_free(z, p) libxfs_zone_free(z, p) | |
195 | #define kmem_realloc(p,sz,u,f) libxfs_realloc(p,sz) | |
196 | #define kmem_alloc(size, f) libxfs_malloc(size) | |
197 | #define kmem_free(p, size) libxfs_free(p) | |
198 | ||
199 | /* directory management */ | |
200 | #define xfs_dir2_trace_args(where, args) ((void) 0) | |
201 | #define xfs_dir2_trace_args_b(where, args, bp) ((void) 0) | |
202 | #define xfs_dir2_trace_args_bb(where, args, lbp, dbp) ((void) 0) | |
203 | #define xfs_dir2_trace_args_bibii(where, args, bs, ss, bd, sd, c) ((void) 0) | |
204 | #define xfs_dir2_trace_args_db(where, args, db, bp) ((void) 0) | |
205 | #define xfs_dir2_trace_args_i(where, args, i) ((void) 0) | |
206 | #define xfs_dir2_trace_args_s(where, args, s) ((void) 0) | |
207 | #define xfs_dir2_trace_args_sb(where, args, s, bp) ((void) 0) | |
208 | #define xfs_dir_shortform_validate_ondisk(a,b) ((void) 0) | |
209 | ||
210 | ||
211 | /* block management */ | |
212 | #define xfs_bmap_check_extents(ip,w) ((void) 0) | |
213 | #define xfs_bmap_trace_delete(f,d,ip,i,c,w) ((void) 0) | |
214 | #define xfs_bmap_trace_exlist(f,ip,i,w) ((void) 0) | |
215 | #define xfs_bmap_trace_insert(f,d,ip,i,c,r1,r2,w) ((void) 0) | |
216 | #define xfs_bmap_trace_post_update(f,d,ip,i,w) ((void) 0) | |
217 | #define xfs_bmap_trace_pre_update(f,d,ip,i,w) ((void) 0) | |
218 | #define xfs_bmap_validate_ret(bno,len,flags,mval,onmap,nmap) ((void) 0) | |
219 | #define xfs_bunmap_trace(ip, bno, len, flags, ra) ((void) 0) | |
220 | #define XFS_BMBT_TRACE_ARGBI(c,b,i) ((void) 0) | |
221 | #define XFS_BMBT_TRACE_ARGBII(c,b,i,j) ((void) 0) | |
222 | #define XFS_BMBT_TRACE_ARGFFFI(c,o,b,i,j) ((void) 0) | |
223 | #define XFS_BMBT_TRACE_ARGI(c,i) ((void) 0) | |
224 | #define XFS_BMBT_TRACE_ARGIFK(c,i,f,k) ((void) 0) | |
225 | #define XFS_BMBT_TRACE_ARGIFR(c,i,f,r) ((void) 0) | |
226 | #define XFS_BMBT_TRACE_ARGIK(c,i,k) ((void) 0) | |
227 | #define XFS_BMBT_TRACE_CURSOR(c,s) ((void) 0) | |
228 | ||
229 | ||
230 | /* anything else */ | |
188239e6 | 231 | typedef __uint32_t uint_t; |
2bd0ea18 NS |
232 | typedef __uint32_t inst_t; /* an instruction */ |
233 | typedef enum { B_FALSE, B_TRUE } boolean_t; | |
234 | typedef struct { dev_t dev; } buftarg_t; | |
235 | #define STATIC | |
fc49813f | 236 | #define ATTR_ROOT 1 /* use attrs in root namespace */ |
afe9b7a8 MN |
237 | #define ENOATTR ENODATA /* Attribute not found */ |
238 | #define EFSCORRUPTED 990 /* Filesystem is corrupted */ | |
2bd0ea18 NS |
239 | #define ktrace_t void |
240 | #define m_ddev_targp m_dev | |
6d1d29a7 | 241 | #define m_rtdev_targp(m)(&(m)->m_rtdev) |
2bd0ea18 NS |
242 | #define KERN_WARNING |
243 | #define XFS_ERROR(e) (e) | |
2bd0ea18 NS |
244 | #define XFS_TEST_ERROR(expr,a,b,c) ( expr ) |
245 | #define TRACE_FREE(s,a,b,x,f) ((void) 0) | |
246 | #define TRACE_ALLOC(s,a) ((void) 0) | |
247 | #define TRACE_MODAGF(a,b,c) ((void) 0) | |
248 | #define XFS_FORCED_SHUTDOWN(mp) 0 | |
34317449 NS |
249 | #define XFS_MOUNT_WSYNC 0 /* ignored in userspace */ |
250 | #define XFS_MOUNT_NOALIGN 0 /* ignored in userspace */ | |
251 | #define XFS_MOUNT_32BITINODES 0x1 /* enforce in userspace */ | |
2bd0ea18 NS |
252 | #define XFS_ILOCK_EXCL 0 |
253 | #define mrlock(a,b,c) ((void) 0) | |
254 | #define mraccunlock(a) ((void) 0) | |
255 | #define mrunlock(a) ((void) 0) | |
256 | #define mraccess(a) ((void) 0) | |
257 | #define ismrlocked(a,b) 1 | |
258 | #define ovbcopy(from,to,count) memmove(to,from,count) | |
259 | #define __return_address __builtin_return_address(0) | |
260 | #define xfs_btree_reada_bufl(m,fsb,c) ((void) 0) | |
261 | #define xfs_btree_reada_bufs(m,fsb,c,x) ((void) 0) | |
262 | #undef XFS_DIR_SHORTFORM_VALIDATE_ONDISK | |
263 | #define XFS_DIR_SHORTFORM_VALIDATE_ONDISK(mp,dip) 0 | |
264 | ||
5b64e00a NS |
265 | #if (__GNUC__ < 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ <= 95)) |
266 | # define xfs_fs_cmn_err(a,b,msg,args...)( fprintf(stderr, msg, ## args) ) | |
267 | # define printk(msg,args...) ( fprintf(stderr, msg, ## args) ) | |
268 | #else | |
269 | # define xfs_fs_cmn_err(a,b,...) ( fprintf(stderr, __VA_ARGS__) ) | |
270 | # define printk(...) ( fprintf(stderr, __VA_ARGS__) ) | |
271 | #endif | |
272 | ||
2bd0ea18 NS |
273 | #define do_mod(a, b) ((a) % (b)) |
274 | #define do_div(n,base) ({ \ | |
275 | int __res; \ | |
276 | __res = ((unsigned long) n) % (unsigned) base; \ | |
277 | n = ((unsigned long) n) / (unsigned) base; \ | |
278 | __res; }) | |
279 | ||
280 | #include <asm/page.h> | |
281 | #define NBPP PAGE_SIZE | |
282 | ||
283 | static inline int atomicIncWithWrap(int *a, int b) | |
284 | { | |
285 | int r = *a; | |
286 | (*a)++; | |
287 | if (*a == b) | |
288 | *a = 0; | |
289 | return r; | |
290 | } | |
291 | ||
292 | ||
293 | /* | |
294 | * Prototypes needed for a clean build | |
295 | */ | |
296 | ||
297 | /* xfs_alloc.c */ | |
298 | int xfs_alloc_get_freelist (xfs_trans_t *, xfs_buf_t *, xfs_agblock_t *); | |
299 | void xfs_alloc_log_agf (xfs_trans_t *, xfs_buf_t *, int); | |
300 | int xfs_alloc_put_freelist (xfs_trans_t *, xfs_buf_t *, xfs_buf_t *, | |
301 | xfs_agblock_t); | |
302 | int xfs_alloc_read_agf (xfs_mount_t *, xfs_trans_t *, xfs_agnumber_t, | |
303 | int, xfs_buf_t **); | |
304 | int xfs_alloc_vextent (xfs_alloc_arg_t *); | |
305 | int xfs_alloc_pagf_init (xfs_mount_t *, xfs_trans_t *, xfs_agnumber_t, int); | |
306 | int xfs_alloc_ag_vextent_size (xfs_alloc_arg_t *); | |
307 | int xfs_alloc_ag_vextent_near (xfs_alloc_arg_t *); | |
308 | int xfs_alloc_ag_vextent_exact (xfs_alloc_arg_t *); | |
309 | int xfs_alloc_ag_vextent_small (xfs_alloc_arg_t *, xfs_btree_cur_t *, | |
310 | xfs_agblock_t *, xfs_extlen_t *, int *); | |
311 | ||
312 | /* xfs_ialloc.c */ | |
313 | int xfs_dialloc (xfs_trans_t *, xfs_ino_t, mode_t, int, xfs_buf_t **, | |
314 | boolean_t *, xfs_ino_t *); | |
315 | void xfs_ialloc_log_agi (xfs_trans_t *, xfs_buf_t *, int); | |
316 | int xfs_ialloc_read_agi (xfs_mount_t *, xfs_trans_t *, xfs_agnumber_t, | |
317 | xfs_buf_t **); | |
318 | int xfs_dilocate (xfs_mount_t *, xfs_trans_t *, xfs_ino_t, xfs_fsblock_t *, | |
319 | int *, int *, uint); | |
320 | ||
321 | /* xfs_rtalloc.c */ | |
322 | int xfs_rtfree_extent (xfs_trans_t *, xfs_rtblock_t, xfs_extlen_t); | |
323 | int xfs_rtmodify_range (xfs_mount_t *, xfs_trans_t *, xfs_rtblock_t, | |
324 | xfs_extlen_t, int); | |
325 | int xfs_rtmodify_summary (xfs_mount_t *, xfs_trans_t *, int, | |
326 | xfs_rtblock_t, int, xfs_buf_t **, xfs_fsblock_t *); | |
327 | ||
328 | /* xfs_btree.c */ | |
329 | extern xfs_zone_t *xfs_btree_cur_zone; | |
330 | void xfs_btree_check_key (xfs_btnum_t, void *, void *); | |
331 | void xfs_btree_check_rec (xfs_btnum_t, void *, void *); | |
332 | int xfs_btree_check_lblock (xfs_btree_cur_t *, xfs_btree_lblock_t *, | |
333 | int, xfs_buf_t *); | |
334 | int xfs_btree_check_sblock (xfs_btree_cur_t *, xfs_btree_sblock_t *, | |
335 | int, xfs_buf_t *); | |
336 | int xfs_btree_check_sptr (xfs_btree_cur_t *, xfs_agblock_t, int); | |
337 | int xfs_btree_check_lptr (xfs_btree_cur_t *, xfs_dfsbno_t, int); | |
338 | void xfs_btree_del_cursor (xfs_btree_cur_t *, int); | |
339 | int xfs_btree_dup_cursor (xfs_btree_cur_t *, xfs_btree_cur_t **); | |
340 | int xfs_btree_firstrec (xfs_btree_cur_t *, int); | |
341 | xfs_btree_block_t *xfs_btree_get_block (xfs_btree_cur_t *, int, xfs_buf_t **); | |
342 | xfs_buf_t *xfs_btree_get_bufs (xfs_mount_t *, xfs_trans_t *, xfs_agnumber_t, | |
343 | xfs_agblock_t, uint); | |
344 | xfs_buf_t *xfs_btree_get_bufl (xfs_mount_t *, xfs_trans_t *tp, | |
345 | xfs_fsblock_t, uint); | |
346 | xfs_btree_cur_t *xfs_btree_init_cursor (xfs_mount_t *, xfs_trans_t *, | |
347 | xfs_buf_t *, xfs_agnumber_t, xfs_btnum_t, | |
348 | xfs_inode_t *, int); | |
349 | int xfs_btree_islastblock (xfs_btree_cur_t *, int); | |
350 | int xfs_btree_lastrec (xfs_btree_cur_t *, int); | |
351 | void xfs_btree_offsets (__int64_t, const short *, int, int *, int *); | |
2bd0ea18 NS |
352 | void xfs_btree_setbuf (xfs_btree_cur_t *, int, xfs_buf_t *); |
353 | int xfs_btree_read_bufs (xfs_mount_t *, xfs_trans_t *, xfs_agnumber_t, | |
354 | xfs_agblock_t, uint, xfs_buf_t **, int); | |
355 | int xfs_btree_read_bufl (xfs_mount_t *, xfs_trans_t *, xfs_fsblock_t, | |
356 | uint, xfs_buf_t **, int); | |
60ca9704 NS |
357 | int xfs_btree_readahead_core (xfs_btree_cur_t *, int, int); |
358 | static inline int xfs_btree_readahead (xfs_btree_cur_t *cur, int lev, int lr) | |
359 | { | |
360 | if ((cur->bc_ra[lev] | lr) == cur->bc_ra[lev]) | |
361 | return 0; | |
362 | return xfs_btree_readahead_core(cur, lev, lr); | |
363 | } | |
364 | ||
2bd0ea18 NS |
365 | |
366 | /* xfs_inode.c */ | |
367 | int xfs_ialloc (xfs_trans_t *, xfs_inode_t *, mode_t, nlink_t, dev_t, cred_t *, | |
368 | xfs_prid_t, int, xfs_buf_t **, boolean_t *, xfs_inode_t **); | |
369 | int xfs_iread_extents (xfs_trans_t *, xfs_inode_t *, int); | |
370 | int xfs_imap (xfs_mount_t *, xfs_trans_t *, xfs_ino_t, xfs_imap_t *, uint); | |
371 | int xfs_iextents_copy (xfs_inode_t *, xfs_bmbt_rec_32_t *, int); | |
372 | int xfs_iflush_int (xfs_inode_t *, xfs_buf_t *); | |
373 | int xfs_iflush_fork (xfs_inode_t *, xfs_dinode_t *, xfs_inode_log_item_t *, | |
374 | int, xfs_buf_t *); | |
9de59d6e SL |
375 | int xfs_iformat_local (xfs_inode_t *, xfs_dinode_t *, int, int, int); |
376 | int xfs_iformat_extents (xfs_inode_t *, xfs_dinode_t *, int, int); | |
377 | int xfs_iformat_btree (xfs_inode_t *, xfs_dinode_t *, int, int); | |
2bd0ea18 NS |
378 | void xfs_iroot_realloc (xfs_inode_t *, int, int); |
379 | void xfs_idata_realloc (xfs_inode_t *, int, int); | |
380 | void xfs_iext_realloc (xfs_inode_t *, int, int); | |
381 | void xfs_idestroy_fork (xfs_inode_t *, int); | |
382 | uint xfs_iroundup (uint); | |
383 | ||
384 | /* xfs_bmap.c */ | |
385 | xfs_bmbt_rec_t *xfs_bmap_search_extents (xfs_inode_t *ip, | |
386 | xfs_fileoff_t, int, int *, xfs_extnum_t *, | |
387 | xfs_bmbt_irec_t *, xfs_bmbt_irec_t *); | |
388 | int xfs_bmap_read_extents (xfs_trans_t *, xfs_inode_t *, int); | |
389 | void xfs_bmap_add_free (xfs_fsblock_t, xfs_filblks_t, xfs_bmap_free_t *, | |
390 | xfs_mount_t *); | |
391 | int xfs_bmap_first_unused (xfs_trans_t *, xfs_inode_t *, xfs_extlen_t, | |
392 | xfs_fileoff_t *, int); | |
393 | int xfs_bmap_last_offset (xfs_trans_t *, xfs_inode_t *, xfs_fileoff_t *, int); | |
394 | int xfs_bmap_last_before (xfs_trans_t *, xfs_inode_t *, xfs_fileoff_t *, int); | |
395 | int xfs_bmap_one_block (xfs_inode_t *, int); | |
396 | int xfs_bmapi_single (xfs_trans_t *, xfs_inode_t *, int, xfs_fsblock_t *, | |
397 | xfs_fileoff_t); | |
398 | int xfs_bmapi (xfs_trans_t *, xfs_inode_t *, xfs_fileoff_t, | |
399 | xfs_filblks_t, int, xfs_fsblock_t *, xfs_extlen_t, | |
400 | xfs_bmbt_irec_t *, int *, xfs_bmap_free_t *); | |
401 | int xfs_bunmapi (xfs_trans_t *, xfs_inode_t *, xfs_fileoff_t, | |
402 | xfs_filblks_t, int, xfs_extnum_t, xfs_fsblock_t *, | |
403 | xfs_bmap_free_t *, int *); | |
404 | int xfs_bmap_add_extent_hole_delay (xfs_inode_t *ip, xfs_extnum_t, | |
405 | xfs_btree_cur_t *, xfs_bmbt_irec_t *, int *, int); | |
406 | int xfs_bmap_add_extent_hole_real (xfs_inode_t *, xfs_extnum_t, | |
407 | xfs_btree_cur_t *, xfs_bmbt_irec_t *, int *, int); | |
408 | int xfs_bmap_add_extent_unwritten_real (xfs_inode_t *, xfs_extnum_t, | |
409 | xfs_btree_cur_t **, xfs_bmbt_irec_t *, int *); | |
410 | int xfs_bmap_add_extent_delay_real (xfs_inode_t *, xfs_extnum_t, | |
411 | xfs_btree_cur_t **, xfs_bmbt_irec_t *, xfs_filblks_t *, | |
412 | xfs_fsblock_t *, xfs_bmap_free_t *, int *, int); | |
413 | int xfs_bmap_extents_to_btree (xfs_trans_t *, xfs_inode_t *, xfs_fsblock_t *, | |
414 | xfs_bmap_free_t *, xfs_btree_cur_t **, int, int *, int); | |
415 | void xfs_bmap_delete_exlist (xfs_inode_t *, xfs_extnum_t, xfs_extnum_t, int); | |
416 | xfs_filblks_t xfs_bmap_worst_indlen (xfs_inode_t *, xfs_filblks_t); | |
417 | int xfs_bmap_isaeof (xfs_inode_t *, xfs_fileoff_t, int, int *); | |
418 | void xfs_bmap_insert_exlist (xfs_inode_t *, xfs_extnum_t, xfs_extnum_t, | |
419 | xfs_bmbt_irec_t *, int); | |
420 | ||
421 | /* xfs_bmap_btree.c */ | |
422 | int xfs_check_nostate_extents (xfs_bmbt_rec_t *, xfs_extnum_t); | |
423 | void xfs_bmbt_log_ptrs (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
424 | void xfs_bmbt_log_keys (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
425 | int xfs_bmbt_killroot (xfs_btree_cur_t *, int); | |
426 | int xfs_bmbt_updkey (xfs_btree_cur_t *, xfs_bmbt_key_t *, int); | |
427 | int xfs_bmbt_lshift (xfs_btree_cur_t *, int, int *); | |
428 | int xfs_bmbt_rshift (xfs_btree_cur_t *, int, int *); | |
429 | int xfs_bmbt_split (xfs_btree_cur_t *, int, xfs_fsblock_t *, | |
430 | xfs_bmbt_key_t *, xfs_btree_cur_t **, int *); | |
431 | ||
432 | /* xfs_ialloc_btree.c */ | |
433 | int xfs_inobt_newroot (xfs_btree_cur_t *, int *); | |
434 | int xfs_inobt_rshift (xfs_btree_cur_t *, int, int *); | |
435 | int xfs_inobt_lshift (xfs_btree_cur_t *, int, int *); | |
436 | int xfs_inobt_split (xfs_btree_cur_t *, int, xfs_agblock_t *, | |
437 | xfs_inobt_key_t *, xfs_btree_cur_t **, int *); | |
438 | void xfs_inobt_log_keys (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
439 | void xfs_inobt_log_ptrs (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
440 | void xfs_inobt_log_recs (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
441 | void xfs_inobt_log_block (xfs_trans_t *, xfs_buf_t *, int); | |
442 | int xfs_inobt_updkey (xfs_btree_cur_t *, xfs_inobt_key_t *, int); | |
443 | ||
444 | /* xfs_alloc_btree.c */ | |
445 | void xfs_alloc_log_ptrs (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
446 | void xfs_alloc_log_keys (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
447 | void xfs_alloc_log_recs (xfs_btree_cur_t *, xfs_buf_t *, int, int); | |
448 | void xfs_alloc_log_block (xfs_trans_t *, xfs_buf_t *, int); | |
449 | int xfs_alloc_updkey (xfs_btree_cur_t *, xfs_alloc_key_t *, int); | |
450 | int xfs_alloc_lshift (xfs_btree_cur_t *, int, int *); | |
451 | int xfs_alloc_rshift (xfs_btree_cur_t *, int, int *); | |
452 | int xfs_alloc_newroot (xfs_btree_cur_t *, int *); | |
453 | int xfs_alloc_split (xfs_btree_cur_t *, int, xfs_agblock_t *, | |
454 | xfs_alloc_key_t *, xfs_btree_cur_t **, int *); | |
455 | ||
456 | /* xfs_da_btree.c */ | |
76c410ff | 457 | xfs_dabuf_t *xfs_da_buf_make (int, xfs_buf_t **, inst_t *, int); |
2bd0ea18 NS |
458 | int xfs_da_root_join (xfs_da_state_t *, xfs_da_state_blk_t *); |
459 | int xfs_da_root_split (xfs_da_state_t *, xfs_da_state_blk_t *, | |
460 | xfs_da_state_blk_t *); | |
461 | void xfs_da_node_add (xfs_da_state_t *, xfs_da_state_blk_t *, | |
462 | xfs_da_state_blk_t *); | |
463 | int xfs_da_node_split (xfs_da_state_t *, xfs_da_state_blk_t *, | |
464 | xfs_da_state_blk_t *, xfs_da_state_blk_t *, int, int *); | |
465 | void xfs_da_node_rebalance (xfs_da_state_t *, xfs_da_state_blk_t *, | |
466 | xfs_da_state_blk_t *); | |
467 | void xfs_da_node_remove (xfs_da_state_t *, xfs_da_state_blk_t *); | |
468 | void xfs_da_node_unbalance (xfs_da_state_t *, xfs_da_state_blk_t *, | |
469 | xfs_da_state_blk_t *); | |
470 | int xfs_da_node_order (xfs_dabuf_t *, xfs_dabuf_t *); | |
471 | int xfs_da_node_toosmall (xfs_da_state_t *, int *); | |
472 | uint xfs_da_node_lasthash (xfs_dabuf_t *, int *); | |
473 | int xfs_da_do_buf (xfs_trans_t *, xfs_inode_t *, xfs_dablk_t, xfs_daddr_t *, | |
474 | xfs_dabuf_t **, int, int, inst_t *); | |
475 | ||
476 | /* xfs_dir.c */ | |
477 | int xfs_dir_node_addname (xfs_da_args_t *); | |
478 | int xfs_dir_leaf_lookup (xfs_da_args_t *); | |
479 | int xfs_dir_node_lookup (xfs_da_args_t *); | |
480 | int xfs_dir_leaf_replace (xfs_da_args_t *); | |
481 | int xfs_dir_node_replace (xfs_da_args_t *); | |
482 | int xfs_dir_node_removename (xfs_da_args_t *); | |
483 | int xfs_dir_leaf_removename (xfs_da_args_t *, int *, int *); | |
484 | ||
485 | /* xfs_dir_leaf.c */ | |
486 | void xfs_dir_leaf_rebalance (xfs_da_state_t *, xfs_da_state_blk_t *, | |
487 | xfs_da_state_blk_t *); | |
488 | void xfs_dir_leaf_add_work (xfs_dabuf_t *, xfs_da_args_t *, int, int); | |
489 | int xfs_dir_leaf_compact (xfs_trans_t *, xfs_dabuf_t *, int, int); | |
490 | int xfs_dir_leaf_figure_balance (xfs_da_state_t *, xfs_da_state_blk_t *, | |
491 | xfs_da_state_blk_t *, int *, int *); | |
492 | void xfs_dir_leaf_moveents (xfs_dir_leafblock_t *, int, | |
493 | xfs_dir_leafblock_t *, int, int, xfs_mount_t *); | |
494 | ||
495 | /* xfs_dir2_leaf.c */ | |
496 | void xfs_dir2_leaf_check (xfs_inode_t *, xfs_dabuf_t *); | |
497 | int xfs_dir2_leaf_lookup_int (xfs_da_args_t *, xfs_dabuf_t **, | |
498 | int *, xfs_dabuf_t **); | |
499 | ||
500 | /* xfs_dir2_block.c */ | |
501 | void xfs_dir2_block_log_tail (xfs_trans_t *, xfs_dabuf_t *); | |
502 | void xfs_dir2_block_log_leaf (xfs_trans_t *, xfs_dabuf_t *, int, int); | |
503 | int xfs_dir2_block_lookup_int (xfs_da_args_t *, xfs_dabuf_t **, int *); | |
504 | ||
505 | /* xfs_dir2_node.c */ | |
506 | void xfs_dir2_leafn_check (xfs_inode_t *, xfs_dabuf_t *); | |
507 | int xfs_dir2_leafn_remove (xfs_da_args_t *, xfs_dabuf_t *, int, | |
508 | xfs_da_state_blk_t *, int *); | |
509 | int xfs_dir2_node_addname_int (xfs_da_args_t *, xfs_da_state_blk_t *); | |
510 | ||
511 | /* xfs_dir2_sf.c */ | |
512 | void xfs_dir2_sf_check (xfs_da_args_t *); | |
513 | int xfs_dir2_sf_addname_pick (xfs_da_args_t *, int, | |
514 | xfs_dir2_sf_entry_t **, xfs_dir2_data_aoff_t *); | |
515 | void xfs_dir2_sf_addname_easy (xfs_da_args_t *, xfs_dir2_sf_entry_t *, | |
516 | xfs_dir2_data_aoff_t, int); | |
517 | void xfs_dir2_sf_addname_hard (xfs_da_args_t *, int, int); | |
518 | void xfs_dir2_sf_toino8 (xfs_da_args_t *); | |
519 | void xfs_dir2_sf_toino4 (xfs_da_args_t *); | |
520 | ||
521 | /* xfs_attr_leaf.c */ | |
522 | void xfs_attr_leaf_rebalance (xfs_da_state_t *, xfs_da_state_blk_t *, | |
523 | xfs_da_state_blk_t *); | |
524 | int xfs_attr_leaf_add_work (xfs_dabuf_t *, xfs_da_args_t *, int); | |
525 | void xfs_attr_leaf_compact (xfs_trans_t *, xfs_dabuf_t *); | |
526 | void xfs_attr_leaf_moveents (xfs_attr_leafblock_t *, int, | |
527 | xfs_attr_leafblock_t *, int, int, xfs_mount_t *); | |
528 | int xfs_attr_leaf_figure_balance (xfs_da_state_t *, xfs_da_state_blk_t *, | |
529 | xfs_da_state_blk_t *, int *, int *); | |
530 | ||
531 | /* xfs_trans_item.c */ | |
532 | xfs_log_item_desc_t *xfs_trans_add_item (xfs_trans_t *, xfs_log_item_t *); | |
533 | xfs_log_item_desc_t *xfs_trans_find_item (xfs_trans_t *, xfs_log_item_t *); | |
534 | void xfs_trans_free_item (xfs_trans_t *, xfs_log_item_desc_t *); | |
535 | void xfs_trans_free_items (xfs_trans_t *, int); | |
536 | ||
537 | /* xfs_trans_buf.c */ | |
538 | xfs_buf_t *xfs_trans_buf_item_match (xfs_trans_t *, buftarg_t *, | |
539 | xfs_daddr_t, int); | |
540 | xfs_buf_t *xfs_trans_buf_item_match_all (xfs_trans_t *, buftarg_t *, | |
541 | xfs_daddr_t, int); | |
542 | ||
543 | /* xfs_inode_item.c */ | |
544 | void xfs_inode_item_init (xfs_inode_t *, xfs_mount_t *); | |
545 | ||
546 | /* xfs_buf_item.c */ | |
547 | void xfs_buf_item_init (xfs_buf_t *, xfs_mount_t *); | |
548 | void xfs_buf_item_log (xfs_buf_log_item_t *, uint, uint); | |
549 | ||
550 | /* local source files */ | |
551 | int xfs_mod_incore_sb (xfs_mount_t *, xfs_sb_field_t, int, int); | |
552 | void xfs_trans_mod_sb (xfs_trans_t *, uint, long); | |
553 | int xfs_trans_unlock_chunk (xfs_log_item_chunk_t *, int, int, xfs_lsn_t); | |
554 | ||
555 | ||
556 | #ifndef DEBUG | |
557 | #define xfs_inobp_check(mp,bp) ((void) 0) | |
558 | #define xfs_btree_check_key(a,b,c) ((void) 0) | |
559 | #define xfs_btree_check_rec(a,b,c) ((void) 0) | |
560 | #define xfs_btree_check_block(a,b,c,d) ((void) 0) | |
561 | #define xfs_dir2_sf_check(args) ((void) 0) | |
562 | #define xfs_dir2_leaf_check(dp,bp) ((void) 0) | |
563 | #define xfs_dir2_leafn_check(dp,bp) ((void) 0) | |
564 | #undef xfs_dir2_data_check | |
565 | #define xfs_dir2_data_check(dp,bp) ((void) 0) | |
566 | #endif |