[git commit master] mkfs_ext2: fix 60k image creation

Denys Vlasenko vda.linux at googlemail.com
Tue Oct 20 14:21:29 UTC 2009


commit: http://git.busybox.net/busybox/commit/?id=cbeb4528247cca8eb1aa6c5d7e43778ea6de1762
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 util-linux/mkfs_ext2.c       |    7 ++++---
 util-linux/mkfs_ext2_test.sh |   16 +++-------------
 2 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/util-linux/mkfs_ext2.c b/util-linux/mkfs_ext2.c
index da27dc7..5d5429f 100644
--- a/util-linux/mkfs_ext2.c
+++ b/util-linux/mkfs_ext2.c
@@ -88,13 +88,14 @@ static uint32_t div_roundup(uint64_t size, uint32_t n)
 static void allocate(uint8_t *bitmap, uint32_t blocksize, uint32_t start, uint32_t end)
 {
 	uint32_t i;
+
+//bb_info_msg("ALLOC: [%u][%u][%u]: [%u-%u]:=[%x],[%x]", blocksize, start, end, start/8, blocksize - end/8 - 1, (1 << (start & 7)) - 1, (uint8_t)(0xFF00 >> (end & 7)));
 	memset(bitmap, 0, blocksize);
 	i = start / 8;
 	memset(bitmap, 0xFF, i);
-	bitmap[i] = 0xFF >> (8 - (start & 7));
-//bb_info_msg("ALLOC: [%u][%u][%u]: [%u-%u]:=[%x],[%x]", blocksize, start, end, start/8, blocksize - end/8 - 1, 0xFF >> (8 - (start & 7)), (uint8_t)(0xFF << (8-(end&7))));
+	bitmap[i] = (1 << (start & 7)) - 1; //0..7 => 00000000..01111111
 	i = end / 8;
-	bitmap[blocksize - i - 1] = 0xFF << (8 - (end & 7));
+	bitmap[blocksize - i - 1] |= 0x7F00 >> (end & 7); //0..7 => 00000000..11111110
 	memset(bitmap + blocksize - i, 0xFF, i); // N.B. no overflow here!
 }
 
diff --git a/util-linux/mkfs_ext2_test.sh b/util-linux/mkfs_ext2_test.sh
index 53f15d2..1199852 100755
--- a/util-linux/mkfs_ext2_test.sh
+++ b/util-linux/mkfs_ext2_test.sh
@@ -38,22 +38,12 @@ test_mke2fs() {
     }
 }
 
-# Should start from kilobytes=60, but e2fsck complains on it:
-# e2fsck 1.41.4 (27-Jan-2009)
-# Pass 1: Checking inodes, blocks, and sizes
-# Pass 2: Checking directory structure
-# Pass 3: Checking directory connectivity
-# Pass 4: Checking reference counts
-# Pass 5: Checking group summary information
-# Inode bitmap differences:  +(9--11)
-# Free inodes count wrong for group #0 (5, counted=8).
-# Directories count wrong for group #0 (2, counted=1).
-# Free inodes count wrong (5, counted=8).
-# image_bb: 11/16 files (0.0% non-contiguous), 9/60 blocks
-kilobytes=68
+# kilobytes=60 is the minimal allowed size
+kilobytes=60
 while true; do
     test_mke2fs #|| exit 1
     : $((kilobytes++))
+    test $kilobytes = 200 && break
 done
 exit
 
-- 
1.6.3.3



More information about the busybox-cvs mailing list