]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - libxfs/libxfs_priv.h
libfrog: move 64-bit division wrappers to libfrog
[thirdparty/xfsprogs-dev.git] / libxfs / libxfs_priv.h
CommitLineData
959ef981 1// SPDX-License-Identifier: GPL-2.0
2bd0ea18 2/*
da23017d
NS
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
4 * All Rights Reserved.
2bd0ea18
NS
5 */
6
7/*
8 * This header is effectively a "namespace multiplexor" for the
9 * user level XFS code. It provides all of the necessary stuff
10 * such that we can build some parts of the XFS kernel code in
11 * user space in a controlled fashion, and translates the names
12 * used in the kernel into the names which libxfs is going to
13 * make available to user tools.
14 *
15 * It should only ever be #include'd by XFS "kernel" code being
16 * compiled in user space.
dfc130f3 17 *
2bd0ea18
NS
18 * Our goals here are to...
19 * o "share" large amounts of complex code between user and
20 * kernel space;
21 * o shield the user tools from changes in the bleeding
22 * edge kernel code, merging source changes when
23 * convenient and not immediately (no symlinks);
24 * o i.e. be able to merge changes to the kernel source back
25 * into the affected user tools in a controlled fashion;
26 * o provide a _minimalist_ life-support system for kernel
27 * code in user land, not the "everything + the kitchen
28 * sink" model which libsim had mutated into;
29 * o allow the kernel code to be completely free of code
30 * specifically there to support the user level build.
31 */
32
f616e2bf
DC
33/*
34 * define a guard and something we can check to determine what include context
35 * we are running from.
36 */
b626fb59
DC
37#ifndef __LIBXFS_INTERNAL_XFS_H__
38#define __LIBXFS_INTERNAL_XFS_H__
f616e2bf 39
e515cca1 40#include "libxfs_api_defs.h"
6b803e5a 41#include "platform_defs.h"
dcabd4e7 42#include "xfs.h"
b626fb59 43
6b803e5a
CH
44#include "list.h"
45#include "hlist.h"
46#include "cache.h"
47#include "bitops.h"
48#include "kmem.h"
8bf7924e 49#include "libfrog/radix-tree.h"
03dc2ef2 50#include "libfrog/bitmask.h"
af71e8c1 51#include "libfrog/div64.h"
6b803e5a 52#include "atomic.h"
686bddf9 53#include "spinlock.h"
128ba9ce 54#include "linux-err.h"
b626fb59 55
6b803e5a
CH
56#include "xfs_types.h"
57#include "xfs_arch.h"
b626fb59 58
6b803e5a 59#include "xfs_fs.h"
63153a95 60#include "libfrog/crc32c.h"
b626fb59 61
a392fd5a
CH
62#include <sys/xattr.h>
63
4e006361 64/* Zones used in libxfs allocations that aren't in shared header files */
2e1394fc
DW
65extern struct kmem_cache *xfs_buf_item_cache;
66extern struct kmem_cache *xfs_ili_cache;
67extern struct kmem_cache *xfs_buf_cache;
68extern struct kmem_cache *xfs_inode_cache;
69extern struct kmem_cache *xfs_trans_cache;
4e006361 70
75f533e6 71/* fake up iomap, (not) used in xfs_bmap.[ch] */
8b4c5cd1 72#define IOMAP_F_SHARED 0x04
1dcdf505 73#define xfs_bmbt_to_iomap(a, b, c, d, e, f) ((void) 0)
75f533e6 74
b626fb59 75/* CRC stuff, buffer API dependent on it */
b626fb59
DC
76#define crc32c(c,p,l) crc32c_le((c),(unsigned char const *)(p),(l))
77
75f533e6
CH
78/* fake up kernel's iomap, (not) used in xfs_bmap.[ch] */
79struct iomap;
80
8804eace
ES
81#define cancel_delayed_work_sync(work) do { } while(0)
82
6b803e5a 83#include "xfs_cksum.h"
b626fb59
DC
84
85/*
86 * This mirrors the kernel include for xfs_buf.h - it's implicitly included in
87 * every files via a similar include in the kernel xfs_linux.h.
88 */
897853d5 89#include "libxfs_io.h"
b626fb59
DC
90
91/* for all the support code that uses progname in error messages */
92extern char *progname;
2bd0ea18 93
a2ceac1f
DC
94#undef ASSERT
95#define ASSERT(ex) assert(ex)
5e656dbb 96
dc9b1f58
CH
97/*
98 * We have no need for the "linux" dev_t in userspace, so these
99 * are no-ops, and an xfs_dev_t is stored in VFS_I(ip)->i_rdev
100 */
101#define xfs_to_linux_dev_t(dev) dev
102#define linux_to_xfs_dev_t(dev) dev
551174eb 103
a2ceac1f
DC
104#ifndef EWRONGFS
105#define EWRONGFS EINVAL
106#endif
5e656dbb 107
56b2de80 108#define xfs_error_level 0
5e656dbb
BN
109
110#define STATIC static
5e656dbb 111
d7e71605
DW
112/*
113 * Starting in Linux 4.15, the %p (raw pointer value) printk modifier
114 * prints a hashed version of the pointer to avoid leaking kernel
115 * pointers into dmesg. If we're trying to debug the kernel we want the
116 * raw values, so override this behavior as best we can.
117 *
118 * In userspace we don't have this problem.
119 */
120#define PTR_FMT "%p"
121
5dcd1db5
DC
122#define XFS_IGET_CREATE 0x1
123#define XFS_IGET_UNTRUSTED 0x2
124
b626fb59
DC
125extern void cmn_err(int, char *, ...);
126enum ce { CE_DEBUG, CE_CONT, CE_NOTE, CE_WARN, CE_ALERT, CE_PANIC };
127
c16edcd7 128#define xfs_info(mp,fmt,args...) cmn_err(CE_CONT, _(fmt), ## args)
8faa41b4 129#define xfs_notice(mp,fmt,args...) cmn_err(CE_NOTE, _(fmt), ## args)
60066f61 130#define xfs_warn(mp,fmt,args...) cmn_err((mp) ? CE_WARN : CE_WARN, _(fmt), ## args)
8faa41b4
GX
131#define xfs_err(mp,fmt,args...) cmn_err(CE_ALERT, _(fmt), ## args)
132#define xfs_alert(mp,fmt,args...) cmn_err(CE_ALERT, _(fmt), ## args)
7cf9f816 133
a8bbb628
DW
134#define xfs_buf_ioerror_alert(bp,f) ((void) 0);
135
b626fb59 136#define xfs_hex_dump(d,n) ((void) 0)
8791bf6b
ES
137#define xfs_stack_trace() ((void) 0)
138
b626fb59 139
6f4c54a4 140#define xfs_force_shutdown(d,n) ((void) 0)
f73690fe 141#define xfs_mod_delalloc(a,b) ((void) 0)
b626fb59 142
a2ceac1f 143/* stop unused var warnings by assigning mp to itself */
15348e04 144
3177b915 145#define xfs_corruption_error(e,l,mp,b,sz,fi,ln,fa) do { \
15348e04
DW
146 (mp) = (mp); \
147 cmn_err(CE_ALERT, "%s: XFS_CORRUPTION_ERROR", (e)); \
148} while (0)
149
3177b915 150#define XFS_CORRUPTION_ERROR(e, lvl, mp, buf, bufsize) do { \
e0607266
DC
151 (mp) = (mp); \
152 cmn_err(CE_ALERT, "%s: XFS_CORRUPTION_ERROR", (e)); \
153} while (0)
154
155#define XFS_ERROR_REPORT(e,l,mp) do { \
156 (mp) = (mp); \
157 cmn_err(CE_ALERT, "%s: XFS_ERROR_REPORT", (e)); \
158} while (0)
159
fbb4fa7f 160#define XFS_WARN_CORRUPT(mp, expr) \
2420d095 161 ( xfs_is_reporting_corruption(mp) ? \
fbb4fa7f
DW
162 (printf("%s: XFS_WARN_CORRUPT at %s:%d", #expr, \
163 __func__, __LINE__), true) : true)
164
165#define XFS_IS_CORRUPT(mp, expr) \
166 (unlikely(expr) ? XFS_WARN_CORRUPT((mp), (expr)) : false)
167
5e656dbb 168#define XFS_ERRLEVEL_LOW 1
5e656dbb 169#define XFS_ILOCK_EXCL 0
ece930fa
CH
170#define XFS_STATS_INC(mp, count) do { (mp) = (mp); } while (0)
171#define XFS_STATS_DEC(mp, count, x) do { (mp) = (mp); } while (0)
172#define XFS_STATS_ADD(mp, count, x) do { (mp) = (mp); } while (0)
e2a190dd 173#define XFS_TEST_ERROR(expr,a,b) ( expr )
5e656dbb 174
c16edcd7
DW
175#define __section(section) __attribute__((__section__(section)))
176
177#define xfs_printk_once(func, dev, fmt, ...) \
178({ \
179 static bool __section(".data.once") __print_once; \
180 bool __ret_print_once = !__print_once; \
181 \
182 if (!__print_once) { \
183 __print_once = true; \
184 func(dev, fmt, ##__VA_ARGS__); \
185 } \
186 unlikely(__ret_print_once); \
187})
188
189#define xfs_info_once(dev, fmt, ...) \
190 xfs_printk_once(xfs_info, dev, fmt, ##__VA_ARGS__)
191
5e656dbb 192/* miscellaneous kernel routines not in user space */
5e656dbb
BN
193#define likely(x) (x)
194#define unlikely(x) (x)
e4da1b16 195
c1587ecf 196/* Need to be able to handle this bare or in control flow */
c08793bd 197static inline bool WARN_ON(bool expr) {
c1587ecf
CH
198 return (expr);
199}
19ebedcf 200
c08793bd 201#define WARN_ON_ONCE(e) WARN_ON(e)
cbf3beaa
GW
202#define percpu_counter_read(x) (*x)
203#define percpu_counter_read_positive(x) ((*x) > 0 ? (*x) : 0)
204#define percpu_counter_sum(x) (*x)
5e656dbb 205
2bd0ea18 206/*
11d2f5af
JD
207 * get_random_u32 is used for di_gen inode allocation, it must be zero for
208 * libxfs or all sorts of badness can occur!
2bd0ea18 209 */
11d2f5af 210#define get_random_u32() (0)
2bd0ea18 211
b2327e1a 212#define PAGE_SIZE getpagesize()
2bd0ea18 213
d5105a89
JL
214#define inode_peek_iversion(inode) (inode)->i_version
215#define inode_set_iversion_queried(inode, version) do { \
216 (inode)->i_version = (version); \
217} while (0)
218
5e656dbb
BN
219#define min_t(type,x,y) \
220 ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
221#define max_t(type,x,y) \
222 ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
57c9fccb 223
50c8d191
GS
224/**
225 * swap - swap values of @a and @b
226 * @a: first value
227 * @b: second value
228 */
229#define swap(a, b) \
230 do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
91eba724 231
7338c4b8
BF
232#define __round_mask(x, y) ((__typeof__(x))((y)-1))
233#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
234#define round_down(x, y) ((x) & ~__round_mask(x, y))
235#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
236
237/*
238 * Handling for kernel bitmap types.
239 */
240#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, NBBY * sizeof(long))
241#define DECLARE_BITMAP(name,bits) \
242 unsigned long name[BITS_TO_LONGS(bits)]
243#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
244
245/*
246 * This is a common helper function for find_next_bit and
247 * find_next_zero_bit. The difference is the "invert" argument, which
248 * is XORed with each fetched word before searching it for one bits.
249 */
250static inline unsigned long
251_find_next_bit(const unsigned long *addr, unsigned long nbits,
252 unsigned long start, unsigned long invert)
253{
254 unsigned long tmp;
255
256 if (!nbits || start >= nbits)
257 return nbits;
258
259 tmp = addr[start / BITS_PER_LONG] ^ invert;
260
261 /* Handle 1st word. */
262 tmp &= BITMAP_FIRST_WORD_MASK(start);
263 start = round_down(start, BITS_PER_LONG);
264
265 while (!tmp) {
266 start += BITS_PER_LONG;
267 if (start >= nbits)
268 return nbits;
269
270 tmp = addr[start / BITS_PER_LONG] ^ invert;
271 }
272
273 return min(start + ffs(tmp), nbits);
274}
275
276/*
277 * Find the next set bit in a memory region.
278 */
279static inline unsigned long
280find_next_bit(const unsigned long *addr, unsigned long size,
281 unsigned long offset)
282{
283 return _find_next_bit(addr, size, offset, 0UL);
284}
285static inline unsigned long
286find_next_zero_bit(const unsigned long *addr, unsigned long size,
287 unsigned long offset)
288{
289 return _find_next_bit(addr, size, offset, ~0UL);
290}
291#define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0)
91eba724 292
5e656dbb
BN
293static inline __attribute__((const))
294int is_power_of_2(unsigned long n)
295{
296 return (n != 0 && ((n & (n - 1)) == 0));
297}
2bd0ea18
NS
298
299/*
5e656dbb 300 * xfs_iroundup: round up argument to next power of two
2bd0ea18 301 */
5e656dbb
BN
302static inline uint
303roundup_pow_of_two(uint v)
304{
305 int i;
306 uint m;
307
308 if ((v & (v - 1)) == 0)
309 return v;
310 ASSERT((v & 0x80000000) == 0);
311 if ((v & (v + 1)) == 0)
312 return v + 1;
313 for (i = 0, m = 1; i < 31; i++, m <<= 1) {
314 if (v & m)
315 continue;
316 v |= m;
317 if ((v & (v + 1)) == 0)
318 return v + 1;
319 }
320 ASSERT(0);
321 return 0;
322}
2bd0ea18
NS
323
324/* buffer management */
e8a1c983 325#define XBF_TRYLOCK 0
a2ceac1f 326#define XBF_UNMAPPED 0
e9d35108 327#define XBF_DONE 0
a2ceac1f 328#define xfs_buf_stale(bp) ((bp)->b_flags |= LIBXFS_B_STALE)
f1b058f9 329#define XFS_BUF_UNDELAYWRITE(bp) ((bp)->b_flags &= ~LIBXFS_B_DIRTY)
5e656dbb 330
2efa10f3
DC
331/* buffer type flags for write callbacks */
332#define _XBF_INODES 0 /* inode buffer */
333#define _XBF_DQUOTS 0 /* dquot buffer */
334#define _XBF_LOGRECOVERY 0 /* log recovery buffer */
335
0b2f4162
DC
336static inline int
337xfs_buf_incore(
338 struct xfs_buftarg *target,
339 xfs_daddr_t blkno,
340 size_t numblks,
341 xfs_buf_flags_t flags,
342 struct xfs_buf **bpp)
d11bffea 343{
0b2f4162
DC
344 *bpp = NULL;
345 return -ENOENT;
d11bffea
CH
346}
347
971ce259 348#define xfs_buf_oneshot(bp) ((void) 0)
57c9fccb 349
69806fff
CH
350#define xfs_buf_zero(bp, off, len) \
351 memset((bp)->b_addr + off, 0, len);
2bd0ea18 352
1be76d11
DW
353void __xfs_buf_mark_corrupt(struct xfs_buf *bp, xfs_failaddr_t fa);
354#define xfs_buf_mark_corrupt(bp) __xfs_buf_mark_corrupt((bp), __this_address)
355
5e656dbb 356/* mount stuff */
5e656dbb 357#define xfs_trans_set_sync(tp) ((void) 0)
6bddecbc
DC
358#define xfs_trans_buf_set_type(tp, bp, t) ({ \
359 int __t = (t); \
360 __t = __t; /* no set-but-unused warning */ \
fca3ed92 361 tp = tp; /* no set-but-unused warning */ \
6bddecbc
DC
362})
363
8b4dc4a9 364#define xfs_trans_buf_copy_type(dbp, sbp)
5e656dbb 365
10851b18
DC
366/* no readahead, need to avoid set-but-unused var warnings. */
367#define xfs_buf_readahead(a,d,c,ops) ({ \
368 xfs_daddr_t __d = d; \
369 __d = __d; /* no set-but-unused warning */ \
370})
a2ceac1f 371#define xfs_buf_readahead_map(a,b,c,ops) ((void) 0) /* no readahead */
5e656dbb 372
5e656dbb 373#define xfs_sort qsort
2bd0ea18 374
5e656dbb 375#define xfs_ilock(ip,mode) ((void) 0)
ff105f75
DC
376#define xfs_ilock_data_map_shared(ip) (0)
377#define xfs_ilock_attr_map_shared(ip) (0)
378#define xfs_iunlock(ip,mode) ({ \
379 typeof(mode) __mode = mode; \
380 __mode = __mode; /* no set-but-unused warning */ \
381})
7d6b86ac 382#define xfs_lock_two_inodes(ip0,mode0,ip1,mode1) ((void) 0)
2bd0ea18 383
5e656dbb 384/* space allocation */
3a13f959
BF
385#define XFS_EXTENT_BUSY_DISCARDED 0x01 /* undergoing a discard op. */
386#define XFS_EXTENT_BUSY_SKIP_DISCARD 0x02 /* do not discard */
387
a2ceac1f 388#define xfs_extent_busy_reuse(mp,ag,bno,len,user) ((void) 0)
aefc06c1 389/* avoid unused variable warning */
7635c486
DC
390#define xfs_extent_busy_insert(tp,pag,bno,len,flags)({ \
391 struct xfs_perag *__foo = pag; \
aefc06c1
ES
392 __foo = __foo; /* no set-but-unused warning */ \
393})
cd80de04
CH
394#define xfs_extent_busy_trim(args,bno,len,busy_gen) ({ \
395 unsigned __foo = *(busy_gen); \
396 *(busy_gen) = __foo; \
397 false; \
398})
4127f5dc 399#define xfs_extent_busy_flush(tp,pag,busy_gen,alloc_flags) ((int)(0))
a2ceac1f 400
5e656dbb 401#define xfs_rotorstep 1
1f2ace68 402#define xfs_bmap_rtalloc(a) (-ENOSYS)
5e656dbb 403#define xfs_get_extsz_hint(ip) (0)
10460994 404#define xfs_get_cowextsz_hint(ip) (0)
5e656dbb
BN
405#define xfs_inode_is_filestream(ip) (0)
406#define xfs_filestream_lookup_ag(ip) (0)
407#define xfs_filestream_new_ag(ip,ag) (0)
12ae6818 408#define xfs_filestream_select_ag(...) (-ENOSYS)
2bd0ea18 409
a2ceac1f
DC
410/* quota bits */
411#define xfs_trans_mod_dquot_byino(t,i,f,d) ((void) 0)
412#define xfs_trans_reserve_quota_nblks(t,i,b,n,f) (0)
7cd46253
DW
413
414/* hack too silence gcc */
415static inline int retzero(void) { return 0; }
416#define xfs_trans_unreserve_quota_nblks(t,i,b,n,f) retzero()
9fcc3af9 417#define xfs_quota_unreserve_blkres(i,b) retzero()
7cd46253 418
9fcc3af9
DW
419#define xfs_quota_reserve_blkres(i,b) (0)
420#define xfs_qm_dqattach(i) (0)
a2ceac1f 421
5dfa5cd2
DC
422#define uuid_copy(s,d) platform_uuid_copy((s),(d))
423#define uuid_equal(s,d) (platform_uuid_compare((s),(d)) == 0)
424
e9d35108 425#define xfs_icreate_log(tp, agno, agbno, cnt, isize, len, gen) ((void) 0)
4896e6c8 426#define xfs_sb_validate_fsb_count(sbp, nblks) (0)
e9d35108 427
2bd0ea18 428/*
5e656dbb 429 * Prototypes for kernel static functions that are aren't in their
b626fb59 430 * associated header files.
2bd0ea18 431 */
b626fb59
DC
432struct xfs_da_args;
433struct xfs_bmap_free;
434struct xfs_bmap_free_item;
435struct xfs_mount;
436struct xfs_sb;
437struct xfs_trans;
438struct xfs_inode;
439struct xfs_log_item;
440struct xfs_buf;
441struct xfs_buf_map;
442struct xfs_buf_log_item;
443struct xfs_buftarg;
2bd0ea18 444
5e656dbb
BN
445/* xfs_attr.c */
446int xfs_attr_rmtval_get(struct xfs_da_args *);
2bd0ea18
NS
447
448/* xfs_bmap.c */
2cf6d225 449void xfs_bmap_del_free(struct xfs_bmap_free *, struct xfs_bmap_free_item *);
5e656dbb
BN
450
451/* xfs_mount.c */
b626fb59 452void xfs_mount_common(struct xfs_mount *, struct xfs_sb *);
5e656dbb
BN
453
454/*
455 * logitem.c and trans.c prototypes
456 */
4329aa4c 457void xfs_trans_init(struct xfs_mount *);
d67406c9 458int xfs_trans_roll(struct xfs_trans **);
2bd0ea18
NS
459
460/* xfs_trans_item.c */
c40bdaa2
DC
461void xfs_trans_add_item(struct xfs_trans *, struct xfs_log_item *);
462void xfs_trans_del_item(struct xfs_log_item *);
2bd0ea18 463
2bd0ea18 464/* xfs_inode_item.c */
b626fb59 465void xfs_inode_item_init(struct xfs_inode *, struct xfs_mount *);
2bd0ea18
NS
466
467/* xfs_buf_item.c */
b626fb59
DC
468void xfs_buf_item_init(struct xfs_buf *, struct xfs_mount *);
469void xfs_buf_item_log(struct xfs_buf_log_item *, uint, uint);
2bd0ea18 470
5e656dbb 471/* xfs_trans_buf.c */
b626fb59
DC
472struct xfs_buf *xfs_trans_buf_item_match(struct xfs_trans *,
473 struct xfs_buftarg *, struct xfs_buf_map *, int);
5e656dbb 474
2bd0ea18 475/* local source files */
19ebedcf
DC
476#define xfs_mod_fdblocks(mp, delta, rsvd) \
477 libxfs_mod_incore_sb(mp, XFS_TRANS_SB_FDBLOCKS, delta, rsvd)
478#define xfs_mod_frextents(mp, delta) \
479 libxfs_mod_incore_sb(mp, XFS_TRANS_SB_FREXTENTS, delta, 0)
480int libxfs_mod_incore_sb(struct xfs_mount *, int, int64_t, int);
2dd13604
ES
481/* percpu counters in mp are #defined to the superblock sb_ counters */
482#define xfs_reinit_percpu_counters(mp)
19ebedcf 483
b626fb59 484void xfs_trans_mod_sb(struct xfs_trans *, uint, long);
15348e04 485
1d3bac1f
DW
486void xfs_verifier_error(struct xfs_buf *bp, int error,
487 xfs_failaddr_t failaddr);
488void xfs_inode_verifier_error(struct xfs_inode *ip, int error,
489 const char *name, void *buf, size_t bufsz,
490 xfs_failaddr_t failaddr);
f616e2bf 491
43f7ceb5
DW
492#define xfs_buf_verifier_error(bp,e,n,bu,bus,fa) \
493 xfs_verifier_error(bp, e, fa)
a0264b73 494void
9f09216e 495xfs_buf_corruption_error(struct xfs_buf *bp, xfs_failaddr_t fa);
43f7ceb5 496
b626fb59
DC
497/* XXX: this is clearly a bug - a shared header needs to export this */
498/* xfs_rtalloc.c */
499int libxfs_rtfree_extent(struct xfs_trans *, xfs_rtblock_t, xfs_extlen_t);
0cf6a3a9 500bool libxfs_verify_rtbno(struct xfs_mount *mp, xfs_rtblock_t rtbno);
b626fb59 501
0b10a7f4 502struct xfs_rtalloc_rec {
858ae338
DW
503 xfs_rtblock_t ar_startext;
504 xfs_rtblock_t ar_extcount;
0b10a7f4
DW
505};
506
507typedef int (*xfs_rtalloc_query_range_fn)(
90880f92 508 struct xfs_mount *mp,
9eb4f400
DW
509 struct xfs_trans *tp,
510 const struct xfs_rtalloc_rec *rec,
511 void *priv);
0b10a7f4 512
9542ae13
DC
513int libxfs_zero_extent(struct xfs_inode *ip, xfs_fsblock_t start_fsb,
514 xfs_off_t count_fsb);
515
4a12ea99 516/* xfs_log.c */
05a3a389 517struct xfs_item_ops;
a65d8d29 518bool xfs_log_check_lsn(struct xfs_mount *, xfs_lsn_t);
05a3a389
DW
519void xfs_log_item_init(struct xfs_mount *mp, struct xfs_log_item *lip, int type,
520 const struct xfs_item_ops *ops);
4a12ea99
AH
521#define xfs_attr_use_log_assist(mp) (0)
522#define xlog_drop_incompat_feat(log) do { } while (0)
523#define xfs_log_in_recovery(mp) (false)
a65d8d29 524
f7b1a8b1 525/* xfs_icache.c */
9587a34c
DW
526#define xfs_inode_set_cowblocks_tag(ip) do { } while (0)
527#define xfs_inode_set_eofblocks_tag(ip) do { } while (0)
f7b1a8b1 528
5d8acc46
DC
529/* xfs_stats.h */
530#define XFS_STATS_CALC_INDEX(member) 0
531#define XFS_STATS_INC_OFF(mp, off)
532#define XFS_STATS_ADD_OFF(mp, off, val)
533
4a492e72 534typedef unsigned char u8;
c7a710b7 535unsigned int hweight8(unsigned int w);
ec291989
DC
536unsigned int hweight32(unsigned int w);
537unsigned int hweight64(__u64 w);
5d8acc46 538
4bcd30f6
DC
539static inline int xfs_buf_hash_init(struct xfs_perag *pag) { return 0; }
540static inline void xfs_buf_hash_destroy(struct xfs_perag *pag) { }
541
542static inline int xfs_iunlink_init(struct xfs_perag *pag) { return 0; }
543static inline void xfs_iunlink_destroy(struct xfs_perag *pag) { }
544
545xfs_agnumber_t xfs_set_inode_alloc(struct xfs_mount *mp,
546 xfs_agnumber_t agcount);
547
5f56a561 548/* Keep static checkers quiet about nonstatic functions by exporting */
5f56a561
ES
549int xfs_rtbuf_get(struct xfs_mount *mp, struct xfs_trans *tp,
550 xfs_rtblock_t block, int issum, struct xfs_buf **bpp);
551int xfs_rtcheck_range(struct xfs_mount *mp, struct xfs_trans *tp,
552 xfs_rtblock_t start, xfs_extlen_t len, int val,
553 xfs_rtblock_t *new, int *stat);
554int xfs_rtfind_back(struct xfs_mount *mp, struct xfs_trans *tp,
555 xfs_rtblock_t start, xfs_rtblock_t limit,
556 xfs_rtblock_t *rtblock);
557int xfs_rtfind_forw(struct xfs_mount *mp, struct xfs_trans *tp,
558 xfs_rtblock_t start, xfs_rtblock_t limit,
559 xfs_rtblock_t *rtblock);
560int xfs_rtmodify_range(struct xfs_mount *mp, struct xfs_trans *tp,
561 xfs_rtblock_t start, xfs_extlen_t len, int val);
562int xfs_rtmodify_summary_int(struct xfs_mount *mp, struct xfs_trans *tp,
563 int log, xfs_rtblock_t bbno, int delta,
167137fe 564 struct xfs_buf **rbpp, xfs_fsblock_t *rsb,
5f56a561
ES
565 xfs_suminfo_t *sum);
566int xfs_rtmodify_summary(struct xfs_mount *mp, struct xfs_trans *tp, int log,
167137fe 567 xfs_rtblock_t bbno, int delta, struct xfs_buf **rbpp,
5f56a561
ES
568 xfs_fsblock_t *rsb);
569int xfs_rtfree_range(struct xfs_mount *mp, struct xfs_trans *tp,
570 xfs_rtblock_t start, xfs_extlen_t len,
571 struct xfs_buf **rbpp, xfs_fsblock_t *rsb);
90880f92
DW
572int xfs_rtalloc_query_range(struct xfs_mount *mp,
573 struct xfs_trans *tp,
9eb4f400
DW
574 const struct xfs_rtalloc_rec *low_rec,
575 const struct xfs_rtalloc_rec *high_rec,
5f56a561
ES
576 xfs_rtalloc_query_range_fn fn,
577 void *priv);
90880f92
DW
578int xfs_rtalloc_query_all(struct xfs_mount *mp,
579 struct xfs_trans *tp,
5f56a561
ES
580 xfs_rtalloc_query_range_fn fn,
581 void *priv);
582bool xfs_verify_rtbno(struct xfs_mount *mp, xfs_rtblock_t rtbno);
583int xfs_rtalloc_extent_is_free(struct xfs_mount *mp, struct xfs_trans *tp,
584 xfs_rtblock_t start, xfs_extlen_t len,
585 bool *is_free);
586/* xfs_bmap_util.h */
587struct xfs_bmalloca;
588int xfs_bmap_extsize_align(struct xfs_mount *mp, struct xfs_bmbt_irec *gotp,
589 struct xfs_bmbt_irec *prevp, xfs_extlen_t extsz,
590 int rt, int eof, int delay, int convert,
591 xfs_fileoff_t *offp, xfs_extlen_t *lenp);
592void xfs_bmap_adjacent(struct xfs_bmalloca *ap);
593int xfs_bmap_last_extent(struct xfs_trans *tp, struct xfs_inode *ip,
594 int whichfork, struct xfs_bmbt_irec *rec,
595 int *is_empty);
2fdd378a 596
ed6a3429
CH
597/* xfs_inode.h */
598#define xfs_iflags_set(ip, flags) do { } while (0)
599
b626fb59 600#endif /* __LIBXFS_INTERNAL_XFS_H__ */