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