bitops.h revision 3034f62a0f9c31e6dce8bd1237cffd3851847250
13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * bitops.h --- Bitmap frobbing code.  The byte swapping routines are
350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * 	also included here.
43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o *
721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * %Begin-Header%
821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * This file may be redistributed under the terms of the GNU Public
921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * License.
1021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * %End-Header%
113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
1221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * i386 bitops operations taken from <asm/bitops.h>, Copyright 1992,
1321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Linus Torvalds.
143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1774becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'oextern int ext2fs_set_bit(int nr,void * addr);
1874becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'oextern int ext2fs_clear_bit(int nr, void * addr);
1974becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'oextern int ext2fs_test_bit(int nr, const void * addr);
2050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern __u16 ext2fs_swab16(__u16 val);
2150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern __u32 ext2fs_swab32(__u32 val);
223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * EXT2FS bitmap manipulation routines.
253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* Support for sending warning messages from the inline subroutines */
283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_block_string;
293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_inode_string;
303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_mark_string;
313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_unmark_string;
323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern const char *ext2fs_test_string;
33f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg,
34f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o			       const char *description);
351e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oextern void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
361e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				int code, unsigned long arg);
37f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
3828ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'oextern int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
3928ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'oextern int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
40f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o				       blk_t block);
41f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oextern int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
42f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
4331dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap, ext2_ino_t inode);
4428ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'oextern int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
4531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o				       ext2_ino_t inode);
4631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap, ext2_ino_t inode);
473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
4850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
4950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					  blk_t block);
5050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
5150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					    blk_t block);
5250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
5350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					 blk_t block);
5450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
5550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
5631dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					  ext2_ino_t inode);
5750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
5831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					    ext2_ino_t inode);
5950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
6031dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					 ext2_ino_t inode);
6150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap);
6231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap);
6350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap);
6431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'oextern ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap);
6521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
6621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
6721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					   blk_t block, int num);
6821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
6921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					     blk_t block, int num);
7021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
7121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					  blk_t block, int num);
7221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
7321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						blk_t block, int num);
7421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
7521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						  blk_t block, int num);
7621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'oextern int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
7721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					       blk_t block, int num);
78fff876b7c7716d5eef713101e47bff15edb9d9a9Theodore Ts'oextern void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map);
7950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
803839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
813839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * The inline routines themselves...
823839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
833839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * If NO_INLINE_FUNCS is defined, then we won't try to do inline
8450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * functions at all; they will be included as normal functions in
8550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o * inline.c
863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
8750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef NO_INLINE_FUNCS
885953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#if (defined(__GNUC__) && (defined(__i386__) || defined(__i486__) || \
895953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o			   defined(__i586__) || defined(__mc68000__) || \
905953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o			   defined(__sparc__)))
9150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	/* This prevents bitops.c from trying to include the C */
9250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	/* function version of these functions */
9350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define _EXT2_HAVE_ASM_BITOPS_
9450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
9550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* NO_INLINE_FUNCS */
9650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
973839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#if (defined(INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
983839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#ifdef INCLUDE_INLINE_FUNCS
993839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define _INLINE_ extern
1003839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#else
10176f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#ifdef __GNUC__
1023839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define _INLINE_ extern __inline__
10376f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#else				/* For Watcom C */
10476f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#define _INLINE_ extern inline
10576f875daa1c9c2cdc72f0c6f0f7be4bbc7f0fc07Theodore Ts'o#endif
1063839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif
1073839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1085953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o#if ((defined __GNUC__) && (defined(__i386__) || defined(__i486__) || \
1095953b9de9ce59661640f851b217421d734bb0302Theodore Ts'o			    defined(__i586__)))
110f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
111f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#define _EXT2_HAVE_ASM_BITOPS_
1129ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o#define _EXT2_HAVE_ASM_SWAB_
1139ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o
1143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
1153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * These are done by inline assembly for speed reasons.....
1163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
1173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * All bitoperations return 0 if the bit was cleared before the
1183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * operation and != 0 if it was not.  Bit 0 is the LSB of addr; bit 32
1193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * is the LSB of (addr+1).
1203839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
1213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
1233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Some hacks to defeat gcc over-optimizations..
1243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
1253839e65723771b85975f4263102dd3ceec4523cTheodore Ts'ostruct __dummy_h { unsigned long a[100]; };
12674becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o#define EXT2FS_ADDR (*(struct __dummy_h *) addr)
12774becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o#define EXT2FS_CONST_ADDR (*(const struct __dummy_h *) addr)
1283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
12974becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_set_bit(int nr, void * addr)
1303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
1313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int oldbit;
1323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	__asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0"
13474becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o		:"=r" (oldbit),"=m" (EXT2FS_ADDR)
1353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		:"r" (nr));
1363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return oldbit;
1373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
1383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
13974becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_clear_bit(int nr, void * addr)
1403839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
1413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int oldbit;
1423839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	__asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0"
14474becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o		:"=r" (oldbit),"=m" (EXT2FS_ADDR)
1453839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		:"r" (nr));
1463839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return oldbit;
1473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
1483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
14974becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_test_bit(int nr, const void * addr)
1503839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
1513839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int oldbit;
1523839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1533839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	__asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0"
1543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		:"=r" (oldbit)
15574becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o		:"m" (EXT2FS_CONST_ADDR),"r" (nr));
1563839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return oldbit;
1573839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
1583839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1595df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o#ifdef EXT2FS_ENABLE_SWAPFS
1609ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o_INLINE_ __u32 ext2fs_swab32(__u32 val)
1619ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o{
1629ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o#ifdef EXT2FS_REQUIRE_486
1639ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o	__asm__("bswap %0" : "=r" (val) : "0" (val));
1649ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o#else
1659ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o	__asm__("xchgb %b0,%h0\n\t"	/* swap lower bytes	*/
1669ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		"rorl $16,%0\n\t"	/* swap words		*/
1679ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		"xchgb %b0,%h0"		/* swap higher bytes	*/
1689ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		:"=q" (val)
1699ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		: "0" (val));
1709ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o#endif
1719ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o	return val;
1729ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o}
1739ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o
1749ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o_INLINE_ __u16 ext2fs_swab16(__u16 val)
1759ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o{
1769ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o	__asm__("xchgb %b0,%h0"		/* swap bytes		*/ \
1779ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		: "=q" (val) \
1789ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		:  "0" (val)); \
1799ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o		return val;
1809ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o}
1815df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o#endif
1829ec53cf4f32cc65e91a9c71651f05a6d872a7088Theodore Ts'o
18374becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o#undef EXT2FS_ADDR
1843839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1853839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif	/* i386 */
1863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
187f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#ifdef __mc68000__
188f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
189f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#define _EXT2_HAVE_ASM_BITOPS_
190f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
19174becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_set_bit(int nr,void * addr)
192f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o{
193f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	char retval;
194f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
195f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	__asm__ __volatile__ ("bfset %2@{%1:#1}; sne %0"
1967f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o	     : "=d" (retval) : "d" (nr^7), "a" (addr));
197f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
198f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	return retval;
199f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o}
200f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
20174becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_clear_bit(int nr, void * addr)
202f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o{
203f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	char retval;
204f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
205f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	__asm__ __volatile__ ("bfclr %2@{%1:#1}; sne %0"
2067f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o	     : "=d" (retval) : "d" (nr^7), "a" (addr));
207f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
208f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	return retval;
209f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o}
210f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
21174becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_test_bit(int nr, const void * addr)
212f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o{
213f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	char retval;
214f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
215f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	__asm__ __volatile__ ("bftst %2@{%1:#1}; sne %0"
2167f88b04341d88c5df0360d930832c38040303b61Theodore Ts'o	     : "=d" (retval) : "d" (nr^7), "a" (addr));
217f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
218f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	return retval;
219f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o}
220f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
221f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o#endif /* __mc68000__ */
222f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o
22350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef __sparc__
22450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
22550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define _EXT2_HAVE_ASM_BITOPS_
22650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
2271e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#ifndef EXT2_OLD_BITOPS
2281e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2291e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/*
2301e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * Do the bitops so that we are compatible with the standard i386
2311e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * convention.
2321e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o */
2331e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2341e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o_INLINE_ int ext2fs_set_bit(int nr,void * addr)
2351e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
2361e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#if 1
2371e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	int		mask;
2381e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	unsigned char	*ADDR = (unsigned char *) addr;
2391e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2401e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	ADDR += nr >> 3;
2411e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	mask = 1 << (nr & 0x07);
2421e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	__asm__ __volatile__("ldub	[%0], %%g6\n\t"
2431e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o			     "or	%%g6, %2, %%g5\n\t"
2441e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o			     "stb	%%g5, [%0]\n\t"
2451e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o			     "and	%%g6, %2, %0\n"
2461e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	: "=&r" (ADDR)
2471e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	: "0" (ADDR), "r" (mask)
2481e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	: "g5", "g6");
2491e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return (int) ADDR;
2501e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#else
2511e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	int		mask, retval;
2521e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	unsigned char	*ADDR = (unsigned char *) addr;
2531e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2541e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	ADDR += nr >> 3;
2551e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	mask = 1 << (nr & 0x07);
2561e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	retval = (mask & *ADDR) != 0;
2571e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	*ADDR |= mask;
2581e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return retval;
2591e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#endif
2601e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
2611e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2621e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o_INLINE_ int ext2fs_clear_bit(int nr, void * addr)
2631e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
2641e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#if 1
2651e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	int		mask;
2661e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	unsigned char	*ADDR = (unsigned char *) addr;
2671e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2681e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	ADDR += nr >> 3;
2691e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	mask = 1 << (nr & 0x07);
2701e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	__asm__ __volatile__("ldub	[%0], %%g6\n\t"
2711e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o			     "andn	%%g6, %2, %%g5\n\t"
2721e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o			     "stb	%%g5, [%0]\n\t"
2731e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o			     "and	%%g6, %2, %0\n"
2741e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	: "=&r" (ADDR)
2751e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	: "0" (ADDR), "r" (mask)
2761e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	: "g5", "g6");
2771e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return (int) ADDR;
2781e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2791e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#else
2801e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	int		mask, retval;
2811e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	unsigned char	*ADDR = (unsigned char *) addr;
2821e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2831e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	ADDR += nr >> 3;
2841e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	mask = 1 << (nr & 0x07);
2851e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	retval = (mask & *ADDR) != 0;
2861e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	*ADDR &= ~mask;
2871e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return retval;
2881e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#endif
2891e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
2901e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2911e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o_INLINE_ int ext2fs_test_bit(int nr, const void * addr)
2921e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
2931e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	int			mask;
2941e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	const unsigned char	*ADDR = (const unsigned char *) addr;
2951e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
2961e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	ADDR += nr >> 3;
2971e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	mask = 1 << (nr & 0x07);
2981e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return ((mask & *ADDR) != 0);
2991e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
3001e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
3011e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#else
3021e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
3031e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* Do things the old, unplesant way. */
3041e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
30574becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_set_bit(int nr, void *addr)
30650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
30750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	int		mask, retval;
30850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	unsigned long	*ADDR = (unsigned long *) addr;
30950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
31050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	ADDR += nr >> 5;
31150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	mask = 1 << (nr & 31);
31250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	retval = ((mask & *ADDR) != 0);
31350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	*ADDR |= mask;
31450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return retval;
31550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
31650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
31774becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_clear_bit(int nr, void *addr)
31850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
31950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	int		mask, retval;
32050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	unsigned long	*ADDR = (unsigned long *) addr;
32150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
32250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	ADDR += nr >> 5;
32350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	mask = 1 << (nr & 31);
32450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	retval = ((mask & *ADDR) != 0);
32550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	*ADDR &= ~mask;
32650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return retval;
32750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
32850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
32974becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o_INLINE_ int ext2fs_test_bit(int nr, const void *addr)
33050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
33150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	int			mask;
33250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	const unsigned long	*ADDR = (const unsigned long *) addr;
33350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
33450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	ADDR += nr >> 5;
33550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	mask = 1 << (nr & 31);
33650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return ((mask & *ADDR) != 0);
33750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
3381e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#endif
33950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
34050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* __sparc__ */
34150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
3425df55d7f847e29d23227592a0bb23daad1a61500Theodore Ts'o#if !defined(_EXT2_HAVE_ASM_SWAB_) && defined(ENABLE_SWAPFS)
34350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
34450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ __u16 ext2fs_swab16(__u16 val)
34550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
34650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return (val >> 8) | (val << 8);
34750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
34850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
34950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ __u32 ext2fs_swab32(__u32 val)
35050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
35150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return ((val>>24) | ((val>>8)&0xFF00) |
35250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		((val<<8)&0xFF0000) | (val<<24));
35350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
35450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
35550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* !_EXT2_HAVE_ASM_SWAB */
35650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
3573034f62a0f9c31e6dce8bd1237cffd3851847250Theodore Ts'o/* These two routines moved to gen_bitmap.c */
3583034f62a0f9c31e6dce8bd1237cffd3851847250Theodore Ts'oextern int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
35921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					 __u32 bitno);
3603034f62a0f9c31e6dce8bd1237cffd3851847250Theodore Ts'oextern int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
36121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					   blk_t bitno);
36221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
36321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					blk_t bitno);
36421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
3651e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o_INLINE_ int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
36621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					blk_t bitno)
3673839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
3681e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	if ((bitno < bitmap->start) || (bitno > bitmap->end)) {
369521e36857227b21e7ab47b0a97f788d2af9f9717Theodore Ts'o		ext2fs_warn_bitmap2(bitmap, EXT2FS_TEST_ERROR, bitno);
3703839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		return 0;
3713839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	}
3721e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return ext2fs_test_bit(bitno - bitmap->start, bitmap->bitmap);
3731e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
3741e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
37528ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap,
3761e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				       blk_t block)
3771e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
37828ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap)
37928ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o				       bitmap,
38028ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o					  block);
3811e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
3821e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
38328ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
3841e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o					 blk_t block)
3851e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
38628ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
38728ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o					    block);
3881e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
3891e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
3901e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o_INLINE_ int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap,
3911e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				       blk_t block)
3921e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
3931e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
3941e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o					  block);
3953839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
3963839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
39728ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
39831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o				       ext2_ino_t inode)
3993839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
40028ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o	return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
40128ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o					  inode);
4023839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4033839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
40428ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o_INLINE_ int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
40531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					 ext2_ino_t inode)
4063839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
40728ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o	return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
40828ffafb09c6fd8a9ebe716c06b02143771a9b17fTheodore Ts'o				     inode);
4093839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
411f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o_INLINE_ int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
41231dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o				       ext2_ino_t inode)
4133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
4141e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
4151e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o					  inode);
4163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
4173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
41850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
41950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					    blk_t block)
42050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
42150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
42250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if ((block < bitmap->start) || (block > bitmap->end)) {
42350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
42450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o				   bitmap->description);
42550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		return;
42650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	}
42750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
42874becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o	ext2fs_set_bit(block - bitmap->start, bitmap->bitmap);
42950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
43050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
43150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
43250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					      blk_t block)
43350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
43450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
43550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if ((block < bitmap->start) || (block > bitmap->end)) {
43650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK,
43750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o				   block, bitmap->description);
43850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		return;
43950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	}
44050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
44174becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o	ext2fs_clear_bit(block - bitmap->start, bitmap->bitmap);
44250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
44350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
44450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
44550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o					    blk_t block)
44650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
44750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
44850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if ((block < bitmap->start) || (block > bitmap->end)) {
44950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
45050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o				   block, bitmap->description);
45150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		return 0;
45250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	}
45350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
45474becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o	return ext2fs_test_bit(block - bitmap->start, bitmap->bitmap);
45550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
45650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
45750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
45831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					    ext2_ino_t inode)
45950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
46050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
46150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if ((inode < bitmap->start) || (inode > bitmap->end)) {
46250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_MARK,
46350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o				   inode, bitmap->description);
46450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		return;
46550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	}
46650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
46774becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o	ext2fs_set_bit(inode - bitmap->start, bitmap->bitmap);
46850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
46950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
47050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
47131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					      ext2_ino_t inode)
47250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
47350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
47450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if ((inode < bitmap->start) || (inode > bitmap->end)) {
47550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_UNMARK,
47650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o				   inode, bitmap->description);
47750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		return;
47850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	}
47950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
48074becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o	ext2fs_clear_bit(inode - bitmap->start, bitmap->bitmap);
48150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
48250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
48350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
48431dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					   ext2_ino_t inode)
48550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
48650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
48750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	if ((inode < bitmap->start) || (inode > bitmap->end)) {
48850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_INODE_TEST,
48950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o				   inode, bitmap->description);
49050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o		return 0;
49150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	}
49250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
49374becf3c0a065f8d64e07ce4d31f9fe53be91d62Theodore Ts'o	return ext2fs_test_bit(inode - bitmap->start, bitmap->bitmap);
49450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
49550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
49650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap)
49750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
49850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return bitmap->start;
49950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
50050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
50131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap)
50250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
50350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return bitmap->start;
50450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
50550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
50650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o_INLINE_ blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap)
50750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
50850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return bitmap->end;
50950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
51050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
51131dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap)
51250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o{
51350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return bitmap->end;
51450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o}
51550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
51621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
51721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					    blk_t block, int num)
51821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
51921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	int	i;
52021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
52121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
52221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
52321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o				   block, bitmap->description);
52421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		return 0;
52521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
52621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	for (i=0; i < num; i++) {
52721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		if (ext2fs_fast_test_block_bitmap(bitmap, block+i))
52821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o			return 0;
52921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
53021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	return 1;
53121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
53221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
53321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
53421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						 blk_t block, int num)
53521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
53621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	int	i;
53721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
53821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
53921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
54021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_TEST,
54121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o				   block, bitmap->description);
54221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		return 0;
54321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
54421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#endif
54521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	for (i=0; i < num; i++) {
54621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		if (ext2fs_fast_test_block_bitmap(bitmap, block+i))
54721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o			return 0;
54821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
54921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	return 1;
55021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
55121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
55221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
55321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					     blk_t block, int num)
55421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
55521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	int	i;
55621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
55721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
55821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
55921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o				   bitmap->description);
56021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		return;
56121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
56221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	for (i=0; i < num; i++)
56321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_set_bit(block + i - bitmap->start, bitmap->bitmap);
56421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
56521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
56621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
56721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						  blk_t block, int num)
56821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
56921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	int	i;
57021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
57121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
57221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
57321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_MARK, block,
57421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o				   bitmap->description);
57521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		return;
57621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
57721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#endif
57821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	for (i=0; i < num; i++)
57921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_set_bit(block + i - bitmap->start, bitmap->bitmap);
58021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
58121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
58221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
58321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o					       blk_t block, int num)
58421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
58521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	int	i;
58621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
58721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
58821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
58921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o				   bitmap->description);
59021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		return;
59121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
59221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	for (i=0; i < num; i++)
59321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_clear_bit(block + i - bitmap->start, bitmap->bitmap);
59421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
59521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
59621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o_INLINE_ void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
59721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o						    blk_t block, int num)
59821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o{
59921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	int	i;
60021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o
60121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#ifdef EXT2FS_DEBUG_FAST_OPS
60221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	if ((block < bitmap->start) || (block+num-1 > bitmap->end)) {
60321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_warn_bitmap(EXT2_ET_BAD_BLOCK_UNMARK, block,
60421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o				   bitmap->description);
60521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		return;
60621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	}
60721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#endif
60821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o	for (i=0; i < num; i++)
60921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o		ext2fs_clear_bit(block + i - bitmap->start, bitmap->bitmap);
61021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}
6113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#undef _INLINE_
6123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#endif
61350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
614