13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * bitops.h --- Bitmap frobbing code.  The byte swapping routines are
350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * 	also included here.
4efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o *
521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o *
721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * %Begin-Header%
8543547a52a20cb7e69d74921b2f691078fd55d83Theodore Ts'o * This file may be redistributed under the terms of the GNU Library
9543547a52a20cb7e69d74921b2f691078fd55d83Theodore Ts'o * General Public License, version 2.
1021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * %End-Header%
113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
132cb403b255f1254a29f26d2b356e7764c0f12506Theodore Ts'o#ifdef WORDS_BIGENDIAN
143e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_le64(x) ((__force __le64)ext2fs_swab64((__u64)(x)))
153e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_le64_to_cpu(x) ext2fs_swab64((__force __u64)(__le64)(x))
163e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_le32(x) ((__force __le32)ext2fs_swab32((__u32)(x)))
173e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_le32_to_cpu(x) ext2fs_swab32((__force __u32)(__le32)(x))
183e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_le16(x) ((__force __le16)ext2fs_swab16((__u16)(x)))
193e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_le16_to_cpu(x) ext2fs_swab16((__force __u16)(__le16)(x))
203e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen
213e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_be64(x) ((__force __be64)(__u64)(x))
223e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_be64_to_cpu(x) ((__force __u64)(__be64)(x))
233e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_be32(x) ((__force __be32)(__u32)(x))
243e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_be32_to_cpu(x) ((__force __u32)(__be32)(x))
253e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_be16(x) ((__force __be16)(__u16)(x))
263e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_be16_to_cpu(x) ((__force __u16)(__be16)(x))
272cb403b255f1254a29f26d2b356e7764c0f12506Theodore Ts'o#else
283e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_le64(x) ((__force __le64)(__u64)(x))
293e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_le64_to_cpu(x) ((__force __u64)(__le64)(x))
303e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_le32(x) ((__force __le32)(__u32)(x))
313e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_le32_to_cpu(x) ((__force __u32)(__le32)(x))
323e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_le16(x) ((__force __le16)(__u16)(x))
333e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_le16_to_cpu(x) ((__force __u16)(__le16)(x))
343e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen
353e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_be64(x) ((__force __be64)ext2fs_swab64((__u64)(x)))
363e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_be64_to_cpu(x) ext2fs_swab64((__force __u64)(__be64)(x))
373e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_be32(x) ((__force __be32)ext2fs_swab32((__u32)(x)))
383e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_be32_to_cpu(x) ext2fs_swab32((__force __u32)(__be32)(x))
393e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_cpu_to_be16(x) ((__force __be16)ext2fs_swab16((__u16)(x)))
403e683eef936e6d80e7838330aaaf526d4ecc7849Eric Sandeen#define ext2fs_be16_to_cpu(x) ext2fs_swab16((__force __u16)(__be16)(x))
412cb403b255f1254a29f26d2b356e7764c0f12506Theodore Ts'o#endif
422cb403b255f1254a29f26d2b356e7764c0f12506Theodore Ts'o
433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
443839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * EXT2FS bitmap manipulation routines.
453839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
463839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* Support for sending warning messages from the inline subroutines */
483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_block_string;
493839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_inode_string;
503839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_mark_string;
513839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_unmark_string;
523839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_test_string;
53f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg,
54f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o			       const char *description);
551e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
561e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				int code, unsigned long arg);
57f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
58ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#ifdef NO_INLINE_FUNCS
59e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern void ext2fs_fast_set_bit(unsigned int nr,void * addr);
60e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern void ext2fs_fast_clear_bit(unsigned int nr, void * addr);
61e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern void ext2fs_fast_set_bit64(__u64 nr,void * addr);
62e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern void ext2fs_fast_clear_bit64(__u64 nr, void * addr);
63e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern __u16 ext2fs_swab16(__u16 val);
64e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern __u32 ext2fs_swab32(__u32 val);
65e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'oextern __u64 ext2fs_swab64(__u64 val);
66e48bf256e99e4923c6193ff78000af18c700d93dTheodore Ts'o
6728ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'oextern int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
6828ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'oextern int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
69f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o				       blk_t block);
70f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
71f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
7231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap, ext2_ino_t inode);
7328ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'oextern int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
7431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o				       ext2_ino_t inode);
7531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap, ext2_ino_t inode);
763839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
7750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
7850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					  blk_t block);
7950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
8050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					    blk_t block);
8150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
8250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					 blk_t block);
8350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
8450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
8531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					  ext2_ino_t inode);
8650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
8731dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					    ext2_ino_t inode);
8850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
8931dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					 ext2_ino_t inode);
9050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap);
9131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap);
9250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap);
9331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap);
9421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
95ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
96ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o						blk_t block, int num);
97ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
98ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o						  blk_t block, int num);
99ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
100ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o					       blk_t block, int num);
101ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif
102ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o
103ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o/* These functions routines moved to gen_bitmap.c */
10421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
10521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					   blk_t block, int num);
10621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
10721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					     blk_t block, int num);
10821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
10921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					  blk_t block, int num);
110ef1a526dfbe663bb80ab75c2e7985ae8d9021b76Theodore Ts'oextern int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
111bfa685deba9eb828b7ed35d6ccaf0345f6337ce3Colin Cross					  ext2_ino_t inode, int num);
1124ea7bd04390935e1f8b473c8b857e518df2e226bTheodore Ts'oextern int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
1134ea7bd04390935e1f8b473c8b857e518df2e226bTheodore Ts'o					 __u32 bitno);
1144ea7bd04390935e1f8b473c8b857e518df2e226bTheodore Ts'oextern int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
1154ea7bd04390935e1f8b473c8b857e518df2e226bTheodore Ts'o					   blk_t bitno);
116b15beaaf386a13d9fbaf716aac2df44748261af1Theodore Ts'oextern int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
117b15beaaf386a13d9fbaf716aac2df44748261af1Theodore Ts'o				      blk_t bitno);
1188df1827b55f11321bfe508c89b94591bdb97c3a6Theodore Ts'oextern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
1198df1827b55f11321bfe508c89b94591bdb97c3a6Theodore Ts'o					  blk_t block, int num);
120ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map);
121271a375b596240866b4a2967e3b6f38ff7cecdf8Theodore Ts'oextern __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap);
122271a375b596240866b4a2967e3b6f38ff7cecdf8Theodore Ts'oextern __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap);
123b15beaaf386a13d9fbaf716aac2df44748261af1Theodore Ts'o
12469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o/* 64-bit versions */
12569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
126ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#ifdef NO_INLINE_FUNCS
12769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
12869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				     blk64_t block);
12969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
13069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				       blk64_t block);
13169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_test_block_bitmap2(ext2fs_block_bitmap bitmap,
13269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				     blk64_t block);
13369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
13469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
13569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				     ext2_ino_t inode);
13669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
13769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				       ext2_ino_t inode);
13869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
13969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				     ext2_ino_t inode);
14069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
14169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_fast_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
14269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					   blk64_t block);
14369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_fast_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
14469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					     blk64_t block);
14569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_fast_test_block_bitmap2(ext2fs_block_bitmap bitmap,
14669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					  blk64_t block);
14769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
14869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_fast_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
14969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					   ext2_ino_t inode);
15069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_fast_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
15169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					    ext2_ino_t inode);
15269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_fast_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
15369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					  ext2_ino_t inode);
154c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedesextern errcode_t ext2fs_find_first_zero_block_bitmap2(ext2fs_block_bitmap bitmap,
15538792ca78bd4df44cb615bed04512f21945a150aTheodore Ts'o						      blk64_t start,
15638792ca78bd4df44cb615bed04512f21945a150aTheodore Ts'o						      blk64_t end,
15738792ca78bd4df44cb615bed04512f21945a150aTheodore Ts'o						      blk64_t *out);
158c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedesextern errcode_t ext2fs_find_first_zero_inode_bitmap2(ext2fs_inode_bitmap bitmap,
159c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						      ext2_ino_t start,
160c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						      ext2_ino_t end,
161c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						      ext2_ino_t *out);
162dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'oextern errcode_t ext2fs_find_first_set_block_bitmap2(ext2fs_block_bitmap bitmap,
163dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						     blk64_t start,
164dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						     blk64_t end,
165dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						     blk64_t *out);
166dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'oextern errcode_t ext2fs_find_first_set_inode_bitmap2(ext2fs_inode_bitmap bitmap,
167dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						      ext2_ino_t start,
168dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						      ext2_ino_t end,
169dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						      ext2_ino_t *out);
17069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern blk64_t ext2fs_get_block_bitmap_start2(ext2fs_block_bitmap bitmap);
17169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern ext2_ino_t ext2fs_get_inode_bitmap_start2(ext2fs_inode_bitmap bitmap);
17269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern blk64_t ext2fs_get_block_bitmap_end2(ext2fs_block_bitmap bitmap);
17369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern ext2_ino_t ext2fs_get_inode_bitmap_end2(ext2fs_inode_bitmap bitmap);
17469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
17569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_fast_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
17669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						blk64_t block,
17769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						unsigned int num);
17869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_fast_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
17969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						 blk64_t block,
18069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						 unsigned int num);
18169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_fast_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
18269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						   blk64_t block,
18369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						   unsigned int num);
184ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif
185ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o
18669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o/* These routines moved to gen_bitmap64.c */
18769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap bitmap);
18869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern errcode_t ext2fs_compare_generic_bmap(errcode_t neq,
18969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					     ext2fs_generic_bitmap bm1,
19069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					     ext2fs_generic_bitmap bm2);
19169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap bmap);
19269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
19369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				    blk64_t bitno);
19469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
19569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				      blk64_t bitno);
19669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
19769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				    blk64_t bitno);
19869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
19969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					   blk64_t block, unsigned int num);
20069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern __u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap bitmap);
20169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern __u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap bitmap);
20269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
20369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					   blk64_t block, unsigned int num);
20469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
20569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					    blk64_t block, unsigned int num);
20669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'oextern void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
20769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					      blk64_t block, unsigned int num);
208c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedesextern errcode_t ext2fs_find_first_zero_generic_bmap(ext2fs_generic_bitmap bitmap,
209c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						     __u64 start, __u64 end,
210c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						     __u64 *out);
211dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'oextern errcode_t ext2fs_find_first_set_generic_bmap(ext2fs_generic_bitmap bitmap,
212dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						    __u64 start, __u64 end,
213dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						    __u64 *out);
21469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
2153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
2163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * The inline routines themselves...
217efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o *
2183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * If NO_INLINE_FUNCS is defined, then we won't try to do inline
21950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * functions at all; they will be included as normal functions in
22050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * inline.c
2213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
22250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef NO_INLINE_FUNCS
2235953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#if (defined(__GNUC__) && (defined(__i386__) || defined(__i486__) || \
224dbe5c43b2e6fcc8fe831a134fbc3dda1f5dd0733Mikael Pettersson			   defined(__i586__)))
22550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	/* This prevents bitops.c from trying to include the C */
22650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	/* function version of these functions */
22750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define _EXT2_HAVE_ASM_BITOPS_
22850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
22950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* NO_INLINE_FUNCS */
23050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
2313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#if (defined(INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
2323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#ifdef INCLUDE_INLINE_FUNCS
233ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#if (__STDC_VERSION__ >= 199901L)
234ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#define _INLINE_ extern inline
2353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#else
236ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#define _INLINE_ inline
237ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif
238ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#else /* !INCLUDE_INLINE FUNCS */
239ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#if (__STDC_VERSION__ >= 199901L)
240ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#define _INLINE_ inline
241ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#else /* not C99 */
24276f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#ifdef __GNUC__
2433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define _INLINE_ extern __inline__
24476f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#else				/* For Watcom C */
24576f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#define _INLINE_ extern inline
246ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif /* __GNUC__ */
247ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif /* __STDC_VERSION__ >= 199901L */
248ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif /* INCLUDE_INLINE_FUNCS */
2493839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
250f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o/*
251f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o * Fast bit set/clear functions that doesn't need to return the
252f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o * previous bit value.
253f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o */
254f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o
255f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o_INLINE_ void ext2fs_fast_set_bit(unsigned int nr,void * addr)
256f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o{
257f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o	unsigned char	*ADDR = (unsigned char *) addr;
258f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o
259f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o	ADDR += nr >> 3;
26015a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	*ADDR |= (unsigned char) (1 << (nr & 0x07));
261f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o}
262f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o
263f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o_INLINE_ void ext2fs_fast_clear_bit(unsigned int nr, void * addr)
264f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o{
265f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o	unsigned char	*ADDR = (unsigned char *) addr;
266f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o
267f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o	ADDR += nr >> 3;
26815a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	*ADDR &= (unsigned char) ~(1 << (nr & 0x07));
269f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o}
270f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o
271f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o
2728717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson_INLINE_ void ext2fs_fast_set_bit64(__u64 nr, void * addr)
2738717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson{
2748717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson	unsigned char	*ADDR = (unsigned char *) addr;
2758717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson
2768717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson	ADDR += nr >> 3;
27715a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	*ADDR |= (unsigned char) (1 << (nr & 0x07));
2788717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson}
2798717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson
2808717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson_INLINE_ void ext2fs_fast_clear_bit64(__u64 nr, void * addr)
2818717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson{
2828717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson	unsigned char	*ADDR = (unsigned char *) addr;
2838717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson
2848717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson	ADDR += nr >> 3;
28515a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	*ADDR &= (unsigned char) ~(1 << (nr & 0x07));
2868717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson}
2878717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson
2888717c3a8f31dea3b31ddaeccf74ea3b34ca72c04Valerie Aurora Henson
289ac493821ea0af9767a4c0f21a322133494bcdc48Theodore Ts'o#if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \
290ac493821ea0af9767a4c0f21a322133494bcdc48Theodore Ts'o     (defined(__i386__) || defined(__i486__) || defined(__i586__)))
291f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
292f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#define _EXT2_HAVE_ASM_BITOPS_
2939ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o#define _EXT2_HAVE_ASM_SWAB_
2949ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o
2953839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
2963839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * These are done by inline assembly for speed reasons.....
2973839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
2983839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * All bitoperations return 0 if the bit was cleared before the
2993839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * operation and != 0 if it was not.  Bit 0 is the LSB of addr; bit 32
3003839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * is the LSB of (addr+1).
3013839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
3023839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
3033839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
3043839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Some hacks to defeat gcc over-optimizations..
3053839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
3063839e65723771b85975f4263102dd3ceec4523cTheodore Ts'ostruct __dummy_h { unsigned long a[100]; };
30774becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o#define EXT2FS_ADDR (*(struct __dummy_h *) addr)
308efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o#define EXT2FS_CONST_ADDR (*(const struct __dummy_h *) addr)
3093839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
31080af12e180bdea9ed391a0aee58e31cee7641709Theodore Ts'o_INLINE_ int ext2fs_set_bit(unsigned int nr, void * addr)
3113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
3123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int oldbit;
3133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
314f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o	addr = (void *) (((unsigned char *) addr) + (nr >> 3));
3153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	__asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0"
3168ad26b08fac068f0c50d44a5072fb49ab7bedc78Theodore Ts'o		:"=r" (oldbit),"+m" (EXT2FS_ADDR)
317f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o		:"r" (nr & 7));
3183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return oldbit;
3193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
3203839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
32180af12e180bdea9ed391a0aee58e31cee7641709Theodore Ts'o_INLINE_ int ext2fs_clear_bit(unsigned int nr, void * addr)
3223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
3233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int oldbit;
3243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
325f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o	addr = (void *) (((unsigned char *) addr) + (nr >> 3));
3263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	__asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0"
3278ad26b08fac068f0c50d44a5072fb49ab7bedc78Theodore Ts'o		:"=r" (oldbit),"+m" (EXT2FS_ADDR)
328f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o		:"r" (nr & 7));
3293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return oldbit;
3303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
3313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
33280af12e180bdea9ed391a0aee58e31cee7641709Theodore Ts'o_INLINE_ int ext2fs_test_bit(unsigned int nr, const void * addr)
3333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
3343839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int oldbit;
3353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
336dec5cd13fff821d1d3f6a922fbd986b3a86abb77Theodore Ts'o	addr = (const void *) (((const unsigned char *) addr) + (nr >> 3));
3373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	__asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0"
3383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		:"=r" (oldbit)
339f9bcce3be04b554004a82d4fe10edaf6077241beTheodore Ts'o		:"m" (EXT2FS_CONST_ADDR),"r" (nr & 7));
3403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return oldbit;
3413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
3423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
34369fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o_INLINE_ __u32 ext2fs_swab32(__u32 val)
34469fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o{
34569fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o#ifdef EXT2FS_REQUIRE_486
34669fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o	__asm__("bswap %0" : "=r" (val) : "0" (val));
34769fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o#else
34869fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o	__asm__("xchgb %b0,%h0\n\t"	/* swap lower bytes	*/
34969fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		"rorl $16,%0\n\t"	/* swap words		*/
35069fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		"xchgb %b0,%h0"		/* swap higher bytes	*/
35169fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		:"=q" (val)
35269fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		: "0" (val));
35369fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o#endif
35469fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o	return val;
35569fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o}
35669fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o
35769fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o_INLINE_ __u16 ext2fs_swab16(__u16 val)
35869fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o{
35969fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o	__asm__("xchgb %b0,%h0"		/* swap bytes		*/ \
36069fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		: "=q" (val) \
36169fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		:  "0" (val)); \
36269fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o		return val;
36369fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o}
36469fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o
36574becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o#undef EXT2FS_ADDR
3663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
3673839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif	/* i386 */
3683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
36950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
37069fbde418b1a197bf793e51b12e23f528b967093Theodore Ts'o#if !defined(_EXT2_HAVE_ASM_SWAB_)
37150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
37250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ __u16 ext2fs_swab16(__u16 val)
37350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
37415a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	return (val >> 8) | (__u16) (val << 8);
37550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
37650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
37750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ __u32 ext2fs_swab32(__u32 val)
37850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
37950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return ((val>>24) | ((val>>8)&0xFF00) |
38050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		((val<<8)&0xFF0000) | (val<<24));
38150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
38250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
38350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* !_EXT2_HAVE_ASM_SWAB */
38450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
385e01f9be336274e527cdb794cca2b0c1501e8b0d7Theodore Ts'o_INLINE_ __u64 ext2fs_swab64(__u64 val)
386e01f9be336274e527cdb794cca2b0c1501e8b0d7Theodore Ts'o{
38715a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	return (ext2fs_swab32((__u32) (val >> 32)) |
388e01f9be336274e527cdb794cca2b0c1501e8b0d7Theodore Ts'o		(((__u64)ext2fs_swab32(val & 0xFFFFFFFFUL)) << 32));
389e01f9be336274e527cdb794cca2b0c1501e8b0d7Theodore Ts'o}
390e01f9be336274e527cdb794cca2b0c1501e8b0d7Theodore Ts'o
39128ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap,
3921e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				       blk_t block)
3931e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
394b15beaaf386a13d9fbaf716aac2df44748261af1Theodore Ts'o	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
39528ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o					  block);
3961e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
3971e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
39828ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
3991e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o					 blk_t block)
4001e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
401efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
40228ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o					    block);
4031e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
4041e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
4051e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o_INLINE_ int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap,
4061e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				       blk_t block)
4071e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
408efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
4091e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o					  block);
4103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
41228ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
41331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o				       ext2_ino_t inode)
4143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
415efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
41628ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o					  inode);
4173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
41928ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
42031dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					 ext2_ino_t inode)
4213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
422efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
42328ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o				     inode);
4243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
426f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o_INLINE_ int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
42731dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o				       ext2_ino_t inode)
4283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
429efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
4301e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o					  inode);
4313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
43350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
43450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					    blk_t block)
43550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
4367bf257a9a07d6067fba43ba05f25b3de0436d59cTheodore Ts'o	ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, block);
43750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
43850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
43950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
44050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					      blk_t block)
44150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
4427bf257a9a07d6067fba43ba05f25b3de0436d59cTheodore Ts'o	ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, block);
44350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
44450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
44550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
44650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					    blk_t block)
44750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
448efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
4497bf257a9a07d6067fba43ba05f25b3de0436d59cTheodore Ts'o					  block);
45050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
45150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
45250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
45331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					    ext2_ino_t inode)
45450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
4557bf257a9a07d6067fba43ba05f25b3de0436d59cTheodore Ts'o	ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, inode);
45650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
45750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
45850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
45931dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					      ext2_ino_t inode)
46050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
4617bf257a9a07d6067fba43ba05f25b3de0436d59cTheodore Ts'o	ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, inode);
46250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
46350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
46450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
46531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					   ext2_ino_t inode)
46650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
467efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
4687bf257a9a07d6067fba43ba05f25b3de0436d59cTheodore Ts'o					  inode);
46950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
47050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
47150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap)
47250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
473271a375b596240866b4a2967e3b6f38ff7cecdf8Theodore Ts'o	return ext2fs_get_generic_bitmap_start((ext2fs_generic_bitmap) bitmap);
47450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
47550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
47631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap)
47750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
478271a375b596240866b4a2967e3b6f38ff7cecdf8Theodore Ts'o	return ext2fs_get_generic_bitmap_start((ext2fs_generic_bitmap) bitmap);
47950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
48050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
48150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap)
48250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
483271a375b596240866b4a2967e3b6f38ff7cecdf8Theodore Ts'o	return ext2fs_get_generic_bitmap_end((ext2fs_generic_bitmap) bitmap);
48450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
48550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
48631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap)
48750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
488271a375b596240866b4a2967e3b6f38ff7cecdf8Theodore Ts'o	return ext2fs_get_generic_bitmap_end((ext2fs_generic_bitmap) bitmap);
48950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
49050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
49121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
49221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						 blk_t block, int num)
49321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
4948df1827b55f11321bfe508c89b94591bdb97c3a6Theodore Ts'o	return ext2fs_test_block_bitmap_range(bitmap, block, num);
49521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
49621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
49721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
49821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						  blk_t block, int num)
49921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
5008df1827b55f11321bfe508c89b94591bdb97c3a6Theodore Ts'o	ext2fs_mark_block_bitmap_range(bitmap, block, num);
50121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
50221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
50321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
50421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						    blk_t block, int num)
50521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
5068df1827b55f11321bfe508c89b94591bdb97c3a6Theodore Ts'o	ext2fs_unmark_block_bitmap_range(bitmap, block, num);
50721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
50869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
50969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o/* 64-bit versions */
51069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
51169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
51269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				       blk64_t block)
51369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
51469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap,
51569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					block);
51669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
51769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
51869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
51969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					 blk64_t block)
52069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
52169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap, block);
52269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
52369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
52469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_test_block_bitmap2(ext2fs_block_bitmap bitmap,
52569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				       blk64_t block)
52669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
52769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
52869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					block);
52969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
53069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
53169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
53269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				       ext2_ino_t inode)
53369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
53469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap,
53569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					inode);
53669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
53769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
53869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
53969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					 ext2_ino_t inode)
54069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
54169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap,
54269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					  inode);
54369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
54469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
54569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
54669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o				       ext2_ino_t inode)
54769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
54869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
54969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					inode);
55069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
55169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
55269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ void ext2fs_fast_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
55369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					     blk64_t block)
55469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
55569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap, block);
55669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
55769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
55869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ void ext2fs_fast_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
55969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					       blk64_t block)
56069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
56169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap, block);
56269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
56369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
56469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_fast_test_block_bitmap2(ext2fs_block_bitmap bitmap,
56569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					    blk64_t block)
56669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
56769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
56869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					block);
56969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
57069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
57169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ void ext2fs_fast_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
57269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					     ext2_ino_t inode)
57369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
57469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap, inode);
57569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
57669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
57769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ void ext2fs_fast_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
57869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					       ext2_ino_t inode)
57969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
58069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap, inode);
58169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
58269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
58369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_fast_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
58469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					    ext2_ino_t inode)
58569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
58669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
58769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o					inode);
58869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
58969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
590c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes_INLINE_ errcode_t ext2fs_find_first_zero_block_bitmap2(ext2fs_block_bitmap bitmap,
59138792ca78bd4df44cb615bed04512f21945a150aTheodore Ts'o							blk64_t start,
59238792ca78bd4df44cb615bed04512f21945a150aTheodore Ts'o							blk64_t end,
59338792ca78bd4df44cb615bed04512f21945a150aTheodore Ts'o							blk64_t *out)
594c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes{
595c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	__u64 o;
596c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	errcode_t rv;
597c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes
598c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	rv = ext2fs_find_first_zero_generic_bmap((ext2fs_generic_bitmap) bitmap,
599c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						 start, end, &o);
600c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	if (!rv)
601c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes		*out = o;
602c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	return rv;
603c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes}
604c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes
605c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes_INLINE_ errcode_t ext2fs_find_first_zero_inode_bitmap2(ext2fs_inode_bitmap bitmap,
606c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes							ext2_ino_t start,
607c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes							ext2_ino_t end,
608c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes							ext2_ino_t *out)
609c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes{
610c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	__u64 o;
611c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	errcode_t rv;
612c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes
613c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	rv = ext2fs_find_first_zero_generic_bmap((ext2fs_generic_bitmap) bitmap,
614c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes						 start, end, &o);
615c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	if (!rv)
61615a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o		*out = (ext2_ino_t) o;
617c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes	return rv;
618c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes}
619c1a1e7fc24d6e37f931bbb8eeb29c90243f0a55dSami Liedes
620dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o_INLINE_ errcode_t ext2fs_find_first_set_block_bitmap2(ext2fs_block_bitmap bitmap,
621dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						       blk64_t start,
622dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						       blk64_t end,
623dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						       blk64_t *out)
624dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o{
625dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	__u64 o;
626dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	errcode_t rv;
627dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o
628dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	rv = ext2fs_find_first_set_generic_bmap((ext2fs_generic_bitmap) bitmap,
629dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						start, end, &o);
630dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	if (!rv)
631dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o		*out = o;
632dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	return rv;
633dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o}
634dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o
635dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o_INLINE_ errcode_t ext2fs_find_first_set_inode_bitmap2(ext2fs_inode_bitmap bitmap,
636dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						       ext2_ino_t start,
637dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						       ext2_ino_t end,
638dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						       ext2_ino_t *out)
639dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o{
640dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	__u64 o;
641dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	errcode_t rv;
642dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o
643dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	rv = ext2fs_find_first_set_generic_bmap((ext2fs_generic_bitmap) bitmap,
644dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o						start, end, &o);
645dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	if (!rv)
646dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o		*out = (ext2_ino_t) o;
647dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o	return rv;
648dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o}
649dff0b6a333821ec28bfa029ffbc0dffb46c43170Theodore Ts'o
65069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ blk64_t ext2fs_get_block_bitmap_start2(ext2fs_block_bitmap bitmap)
65169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
65269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_get_generic_bmap_start((ext2fs_generic_bitmap) bitmap);
65369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
65469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
65569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_start2(ext2fs_inode_bitmap bitmap)
65669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
65715a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	return (ext2_ino_t) ext2fs_get_generic_bmap_start((ext2fs_generic_bitmap) bitmap);
65869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
65969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
66069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ blk64_t ext2fs_get_block_bitmap_end2(ext2fs_block_bitmap bitmap)
66169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
66269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_get_generic_bmap_end((ext2fs_generic_bitmap) bitmap);
66369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
66469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
66569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_end2(ext2fs_inode_bitmap bitmap)
66669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
66715a668c4b57f0d38776a0eac23e884e084a1be87Theodore Ts'o	return (ext2_ino_t) ext2fs_get_generic_bmap_end((ext2fs_generic_bitmap) bitmap);
66869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
66969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
67069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ int ext2fs_fast_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
67169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						  blk64_t block,
67269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						  unsigned int num)
67369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
67469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	return ext2fs_test_block_bitmap_range2(bitmap, block, num);
67569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
67669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
67769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ void ext2fs_fast_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
67869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						   blk64_t block,
67969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						   unsigned int num)
68069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
68169365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	ext2fs_mark_block_bitmap_range2(bitmap, block, num);
68269365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
68369365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
68469365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o_INLINE_ void ext2fs_fast_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
68569365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						     blk64_t block,
68669365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o						     unsigned int num)
68769365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o{
68869365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o	ext2fs_unmark_block_bitmap_range2(bitmap, block, num);
68969365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o}
69069365c689b7164014e539b40ef62fc8eb804a05cTheodore Ts'o
6913839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#undef _INLINE_
6923839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif
69350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
694ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#ifndef _EXT2_HAVE_ASM_BITOPS_
695ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_set_bit(unsigned int nr,void * addr);
696ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_clear_bit(unsigned int nr, void * addr);
697ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_test_bit(unsigned int nr, const void * addr);
698ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o#endif
699ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'o
700ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_set_bit64(__u64 nr,void * addr);
701ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_clear_bit64(__u64 nr, void * addr);
702ab3f5c5aad6310be1d1891c05f1bc8cf7ccf0cefTheodore Ts'oextern int ext2fs_test_bit64(__u64 nr, const void * addr);
703c6b006ea6c9fec7f3f33347a52efc396063bcd26Theodore Ts'oextern unsigned int ext2fs_bitcount(const void *addr, unsigned int nbytes);
704