Index: uspace/app/mkminix/mkminix.c
===================================================================
--- uspace/app/mkminix/mkminix.c	(revision 03fa85c5bf136e9d728f90baa97ef0a95b0179f7)
+++ uspace/app/mkminix/mkminix.c	(revision 7df022e5a4691bd69e5aa568667e6fe8ba129e8f)
@@ -534,12 +534,14 @@
 static int init_bitmaps(struct mfs_sb_info *sb)
 {
-	uint32_t *ibmap_buf, *zbmap_buf;
-	int ibmap_nblocks = 1 + (sb->n_inodes / 8) / sb->block_size;
-	int zbmap_nblocks = 1 + (sb->n_zones / 8) / sb->block_size;
+	uint8_t *ibmap_buf, *zbmap_buf;
+	unsigned int ibmap_nblocks = sb->ibmap_blocks;
+	unsigned int zbmap_nblocks = sb->zbmap_blocks;
 	unsigned int i;
 	int rc;
 
-	ibmap_buf = (uint32_t *) malloc(ibmap_nblocks * sb->block_size);
-	zbmap_buf = (uint32_t *) malloc(zbmap_nblocks * sb->block_size);
+	printf("Initializing bitmaps...");
+
+	ibmap_buf = (uint8_t *) malloc(ibmap_nblocks * sb->block_size);
+	zbmap_buf = (uint8_t *) malloc(zbmap_nblocks * sb->block_size);
 
 	if (!ibmap_buf || !zbmap_buf)
@@ -550,16 +552,25 @@
 
 	for (i = 2; i < sb->n_inodes; ++i)
-		mark_bmap(ibmap_buf, i, FREE);
+		mark_bmap((uint32_t*) ibmap_buf, i, FREE);
 
 	for (i = sb->first_data_zone + 1; i < sb->n_zones; ++i)
-		mark_bmap(zbmap_buf, i, FREE);
+		mark_bmap((uint32_t *) zbmap_buf, i, FREE);
 
 	ibmap_nblocks *= sb->block_size / MFS_BLOCKSIZE;
 	zbmap_nblocks *= sb->block_size / MFS_BLOCKSIZE;
 
-	if ((rc = block_write_direct(sb->handle, 2, ibmap_nblocks, ibmap_buf)) != EOK)
-		return rc;
-	if ((rc = block_write_direct(sb->handle, 2 + ibmap_nblocks, zbmap_nblocks, zbmap_buf)) != EOK)
-		return rc;
+	for (i = 0; i < ibmap_nblocks; ++i) {
+		if ((rc = block_write_direct(sb->handle, 2 + i,
+				1, (ibmap_buf + i * MFS_BLOCKSIZE))) != EOK)
+			return rc;
+	}
+
+	for (i = 0; i < zbmap_nblocks; ++i) {
+		if ((rc = block_write_direct(sb->handle, 2 + ibmap_nblocks + i,
+				1, (zbmap_buf + i * MFS_BLOCKSIZE))) != EOK)
+			return rc;
+	}
+
+	printf("Done.\n");
 
 	return rc;
