13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * bitmaps.c --- routines to read, write, and manipulate the inode and
33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * block bitmaps.
43839e65723771b85975f4263102dd3ceec4523cTheodore 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
133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <stdio.h>
143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <string.h>
154cbe8af4b0d0c72fb28bb500c1bd8a46b00fdde3Theodore Ts'o#if HAVE_UNISTD_H
163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <unistd.h>
174cbe8af4b0d0c72fb28bb500c1bd8a46b00fdde3Theodore Ts'o#endif
183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <fcntl.h>
193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <time.h>
201d2ff46ae7533ffd038534b189f272d2a4122e4eTheodore Ts'o#if HAVE_SYS_STAT_H
213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/stat.h>
221d2ff46ae7533ffd038534b189f272d2a4122e4eTheodore Ts'o#endif
231d2ff46ae7533ffd038534b189f272d2a4122e4eTheodore Ts'o#if HAVE_SYS_TYPES_H
243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/types.h>
251d2ff46ae7533ffd038534b189f272d2a4122e4eTheodore Ts'o#endif
263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
27b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o#include "ext2_fs.h"
283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include "ext2fs.h"
29e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "ext2fsP.h"
30e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "bmap64.h"
313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
32a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'ovoid ext2fs_free_inode_bitmap(ext2fs_inode_bitmap bitmap)
333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
34e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_free_generic_bmap(bitmap);
353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
37a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'ovoid ext2fs_free_block_bitmap(ext2fs_block_bitmap bitmap)
38a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o{
39e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_free_generic_bmap(bitmap);
40a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o}
41a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o
42a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'oerrcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src,
43a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o			     ext2fs_generic_bitmap *dest)
44a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o{
45e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_copy_generic_bmap(src, dest));
46a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o}
47fff876b7c7716d5eef713101e47bff15edb9d9a9Theodore Ts'ovoid ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map)
48fff876b7c7716d5eef713101e47bff15edb9d9a9Theodore Ts'o{
49e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_set_generic_bmap_padding(map);
50efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o}
51a29f4d30f24d68f1f1c75548e020689ede532c05Theodore Ts'o
521e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oerrcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs,
531e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				       const char *descr,
541e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o				       ext2fs_inode_bitmap *ret)
551e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{
56e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	__u64		start, end, real_end;
571e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
581e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
591e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
601e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	fs->write_bitmaps = ext2fs_write_bitmaps;
611e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
621e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	start = 1;
631e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	end = fs->super->s_inodes_count;
641e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o	real_end = (EXT2_INODES_PER_GROUP(fs->super) * fs->group_desc_count);
651e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
66e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	/* Are we permitted to use new-style bitmaps? */
67e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if (fs->flags & EXT2_FLAG_64BITS)
68e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return (ext2fs_alloc_generic_bmap(fs,
69e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				EXT2_ET_MAGIC_INODE_BITMAP64,
70e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				fs->default_bitmap_type,
71e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				start, end, real_end, descr, ret));
72e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
73e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	/* Otherwise, check to see if the file system is small enough
74e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	 * to use old-style 32-bit bitmaps */
75e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if ((end > ~0U) || (real_end > ~0U))
76e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return EXT2_ET_CANT_USE_LEGACY_BITMAPS;
77e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
78a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o	return (ext2fs_make_generic_bitmap(EXT2_ET_MAGIC_INODE_BITMAP, fs,
79e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 start, end, real_end,
80e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 descr, 0,
81e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 (ext2fs_generic_bitmap *) ret));
821e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o}
831e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o
84f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oerrcode_t ext2fs_allocate_block_bitmap(ext2_filsys fs,
85f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o				       const char *descr,
86f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o				       ext2fs_block_bitmap *ret)
873839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
88e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	__u64		start, end, real_end;
893839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
90f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
913839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
92f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o	fs->write_bitmaps = ext2fs_write_bitmaps;
933839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
94e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	start = EXT2FS_B2C(fs, fs->super->s_first_data_block);
95e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	end = EXT2FS_B2C(fs, ext2fs_blocks_count(fs->super)-1);
96e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	real_end = ((__u64) EXT2_CLUSTERS_PER_GROUP(fs->super)
97e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		    * (__u64) fs->group_desc_count)-1 + start;
98e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
99e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if (fs->flags & EXT2_FLAG_64BITS)
100e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return (ext2fs_alloc_generic_bmap(fs,
101e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				EXT2_ET_MAGIC_BLOCK_BITMAP64,
102e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				fs->default_bitmap_type,
103e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				start, end, real_end, descr, ret));
104e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
105e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if ((end > ~0U) || (real_end > ~0U))
106e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return EXT2_ET_CANT_USE_LEGACY_BITMAPS;
1078f82ef9860339039b54a324be137fbc09b762358Valerie Aurora Henson
108a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o	return (ext2fs_make_generic_bitmap(EXT2_ET_MAGIC_BLOCK_BITMAP, fs,
109a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o					   start, end, real_end,
110e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					   descr, 0,
111e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					   (ext2fs_generic_bitmap *) ret));
112e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
113e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
114e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/*
115e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * ext2fs_allocate_block_bitmap() really allocates a per-cluster
116e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * bitmap for backwards compatibility.  This function allocates a
117e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * block bitmap which is truly per-block, even if clusters/bigalloc
118e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * are enabled.  mke2fs and e2fsck need this for tracking the
119e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * allocation of the file system metadata blocks.
120e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall */
121e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_allocate_subcluster_bitmap(ext2_filsys fs,
122e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					    const char *descr,
123e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					    ext2fs_block_bitmap *ret)
124e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
125e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	__u64			start, end, real_end;
126e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_generic_bitmap	bmap;
127e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	errcode_t		retval;
128e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
129e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
130e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
131e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	fs->write_bitmaps = ext2fs_write_bitmaps;
132e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
133e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if (!fs->cluster_ratio_bits)
134e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return ext2fs_allocate_block_bitmap(fs, descr, ret);
135e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
136e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if ((fs->flags & EXT2_FLAG_64BITS) == 0)
137e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return EXT2_ET_CANT_USE_LEGACY_BITMAPS;
138e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
139e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	start = fs->super->s_first_data_block;
140e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	end = ext2fs_blocks_count(fs->super)-1;
141e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	real_end = ((__u64) EXT2_BLOCKS_PER_GROUP(fs->super)
142e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		    * (__u64) fs->group_desc_count)-1 + start;
143e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
144e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	retval = ext2fs_alloc_generic_bmap(fs, EXT2_ET_MAGIC_BLOCK_BITMAP64,
145e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					   fs->default_bitmap_type, start,
146e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					   end, real_end, descr, &bmap);
147e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if (retval)
148e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return retval;
149e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	bmap->cluster_bits = 0;
150e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	*ret = bmap;
151e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return 0;
152e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
153e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
154e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallint ext2fs_get_bitmap_granularity(ext2fs_block_bitmap bitmap)
155e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
156e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_generic_bitmap bmap = bitmap;
157e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
158e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if (!EXT2FS_IS_64_BITMAP(bmap))
159e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		return 0;
160e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
161e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return bmap->cluster_bits;
16294968e749b224f01fbb9009ed0285e55f6441784Theodore Ts'o}
16394968e749b224f01fbb9009ed0285e55f6441784Theodore Ts'o
164f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oerrcode_t ext2fs_fudge_inode_bitmap_end(ext2fs_inode_bitmap bitmap,
16531dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o					ext2_ino_t end, ext2_ino_t *oend)
1663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
167e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	__u64 tmp_oend;
168e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	int retval;
169a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o
170e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	retval = ext2fs_fudge_generic_bmap_end((ext2fs_generic_bitmap) bitmap,
171e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					       EXT2_ET_FUDGE_INODE_BITMAP_END,
172e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					       end, &tmp_oend);
173e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	if (oend)
174e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		*oend = tmp_oend;
175e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return retval;
1763839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
1773839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
178f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'oerrcode_t ext2fs_fudge_block_bitmap_end(ext2fs_block_bitmap bitmap,
179f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o					blk_t end, blk_t *oend)
1803839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
181a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o	return (ext2fs_fudge_generic_bitmap_end(bitmap,
182a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o						EXT2_ET_MAGIC_BLOCK_BITMAP,
183a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o						EXT2_ET_FUDGE_BLOCK_BITMAP_END,
184a0553c9d6e8dd6f538f18ae447c45e52f3c40eb6Theodore Ts'o						end, oend));
1853839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
1863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
187e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_fudge_block_bitmap_end2(ext2fs_block_bitmap bitmap,
188e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 blk64_t end, blk64_t *oend)
189e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
190e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_fudge_generic_bmap_end(bitmap,
191e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					      EXT2_ET_FUDGE_BLOCK_BITMAP_END,
192e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					      end, oend));
193e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
194e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
195f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'ovoid ext2fs_clear_inode_bitmap(ext2fs_inode_bitmap bitmap)
1963839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
197e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_clear_generic_bmap(bitmap);
1983839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
1993839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
200f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'ovoid ext2fs_clear_block_bitmap(ext2fs_block_bitmap bitmap)
2013839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
202e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	ext2fs_clear_generic_bmap(bitmap);
203f3db3566b5e1342e49dffc5ec3f418a838584194Theodore Ts'o}
20450448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o
20550448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'oerrcode_t ext2fs_resize_inode_bitmap(__u32 new_end, __u32 new_real_end,
20650448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o				     ext2fs_inode_bitmap bmap)
20750448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o{
20850448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o	return (ext2fs_resize_generic_bitmap(EXT2_ET_MAGIC_INODE_BITMAP,
20950448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o					     new_end, new_real_end, bmap));
21050448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o}
21150448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o
212e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_resize_inode_bitmap2(__u64 new_end, __u64 new_real_end,
213e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				      ext2fs_inode_bitmap bmap)
214e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
215e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_resize_generic_bmap(bmap, new_end, new_real_end));
216e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
217e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
21850448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'oerrcode_t ext2fs_resize_block_bitmap(__u32 new_end, __u32 new_real_end,
21950448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o				     ext2fs_block_bitmap bmap)
22050448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o{
22150448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o	return (ext2fs_resize_generic_bitmap(EXT2_ET_MAGIC_BLOCK_BITMAP,
22250448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o					     new_end, new_real_end, bmap));
22350448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o}
22450448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o
225e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_resize_block_bitmap2(__u64 new_end, __u64 new_real_end,
226e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				      ext2fs_block_bitmap bmap)
227e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
228e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_resize_generic_bmap(bmap, new_end, new_real_end));
229e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
230e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
23150448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'oerrcode_t ext2fs_compare_block_bitmap(ext2fs_block_bitmap bm1,
23250448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o				      ext2fs_block_bitmap bm2)
23350448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o{
234e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_compare_generic_bmap(EXT2_ET_NEQ_BLOCK_BITMAP,
235e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					    bm1, bm2));
23650448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o}
23750448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o
23850448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'oerrcode_t ext2fs_compare_inode_bitmap(ext2fs_inode_bitmap bm1,
23950448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o				      ext2fs_inode_bitmap bm2)
24050448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o{
241e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_compare_generic_bmap(EXT2_ET_NEQ_INODE_BITMAP,
242e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					    bm1, bm2));
24350448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o}
24450448d3dffc66f86592ee0d4b16e4bbe9d08449eTheodore Ts'o
245f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'oerrcode_t ext2fs_set_inode_bitmap_range(ext2fs_inode_bitmap bmap,
246f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					ext2_ino_t start, unsigned int num,
247f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					void *in)
248f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o{
249f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o	return (ext2fs_set_generic_bitmap_range(bmap,
250f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						EXT2_ET_MAGIC_INODE_BITMAP,
251f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						start, num, in));
252f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o}
253f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o
254e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_set_inode_bitmap_range2(ext2fs_inode_bitmap bmap,
255e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 __u64 start, size_t num,
256e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 void *in)
257e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
258e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_set_generic_bmap_range(bmap, start, num, in));
259e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
260e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
261f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'oerrcode_t ext2fs_get_inode_bitmap_range(ext2fs_inode_bitmap bmap,
262f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					ext2_ino_t start, unsigned int num,
263f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					void *out)
264f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o{
265f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o	return (ext2fs_get_generic_bitmap_range(bmap,
266f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						EXT2_ET_MAGIC_INODE_BITMAP,
267f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						start, num, out));
268f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o}
269f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o
270e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_get_inode_bitmap_range2(ext2fs_inode_bitmap bmap,
271e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 __u64 start, size_t num,
272e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 void *out)
273e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
274e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_get_generic_bmap_range(bmap, start, num, out));
275e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
276e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
277f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'oerrcode_t ext2fs_set_block_bitmap_range(ext2fs_block_bitmap bmap,
278f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					blk_t start, unsigned int num,
279f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					void *in)
280f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o{
281efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o	return (ext2fs_set_generic_bitmap_range(bmap,
282f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						EXT2_ET_MAGIC_BLOCK_BITMAP,
283f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						start, num, in));
284f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o}
285f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o
286e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_set_block_bitmap_range2(ext2fs_block_bitmap bmap,
287e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 blk64_t start, size_t num,
288e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 void *in)
289e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
290e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_set_generic_bmap_range(bmap, start, num, in));
291e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
292e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
293f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'oerrcode_t ext2fs_get_block_bitmap_range(ext2fs_block_bitmap bmap,
294f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					blk_t start, unsigned int num,
295f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o					void *out)
296f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o{
297f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o	return (ext2fs_get_generic_bitmap_range(bmap,
298f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						EXT2_ET_MAGIC_BLOCK_BITMAP,
299f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o						start, num, out));
300f1f115a78f5ea599fc5f8815a741d43fedd5840dTheodore Ts'o}
301e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
302e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_get_block_bitmap_range2(ext2fs_block_bitmap bmap,
303e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 blk64_t start, size_t num,
304e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					 void *out)
305e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{
306e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall	return (ext2fs_get_generic_bmap_range(bmap, start, num, out));
307e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}
308