Index: uspace/app/mkminix/mkminix.c
===================================================================
--- uspace/app/mkminix/mkminix.c	(revision 9cfe0d55a31b3e0716d7cfe6773244af0c128a5d)
+++ uspace/app/mkminix/mkminix.c	(revision ae1ae270ff20a5c820dcfd53bbb788ccf7f56b62)
@@ -55,4 +55,6 @@
 #define USED	1
 
+#define UPPER(n, size) (((n) / (size)) + (((n) % (size)) != 0))
+
 typedef enum {
 	HELP_SHORT,
@@ -268,23 +270,27 @@
 
 	/*Compute inode bitmap size in blocks*/
-	sb->s_ibmap_blocks = 1 + (sb->s_ninodes / (MFS_BLOCKSIZE * 8));
+	sb->s_ibmap_blocks = UPPER(sb->s_ninodes, MFS_BLOCKSIZE * 8);
 
 	/*Compute zone bitmap size in blocks*/
 	if (fs_version == 1)
-		sb->s_zbmap_blocks = 1 + (sb->s_nzones / (MFS_BLOCKSIZE * 8));
+		sb->s_zbmap_blocks = UPPER(sb->s_nzones, MFS_BLOCKSIZE * 8);
 	else
-		sb->s_zbmap_blocks = 1 + (sb->s_nzones2 / (MFS_BLOCKSIZE * 8));
+		sb->s_zbmap_blocks = UPPER(sb->s_nzones2, MFS_BLOCKSIZE * 8);
 
 	/*Compute first data zone position*/
-	sb->s_first_data_zone = 2 + sb->s_zbmap_blocks + sb->s_ibmap_blocks;
-	unsigned long ninodes_blocks = 1 + (sb->s_ninodes / (fs_version == 1 ?
+	unsigned long ninodes_blocks = sb->s_ninodes / (fs_version == 1 ?
 							V1_INODES_PER_BLOCK :
-							V2_INODES_PER_BLOCK));
-	sb->s_first_data_zone += ninodes_blocks;
+							V2_INODES_PER_BLOCK);
+	sb->s_first_data_zone = 2 + ninodes_blocks + 
+				sb->s_zbmap_blocks + sb->s_ibmap_blocks;
+
+	/*Set log2 of zone to block ratio to zero*/
 	sb->s_log2_zone_size = 0;
+
 	/*Superblock is now ready to be written on disk*/
 	printf(NAME ": %d inodes\n", sb->s_ninodes);
 	printf(NAME ": %d zones\n", sb->s_nzones2);
-	printf(NAME ": %d first data zone\n", sb->s_first_data_zone);
+	printf(NAME ": inode table blocks = %ld\n", ninodes_blocks);
+	printf(NAME ": first data zone = %d\n", sb->s_first_data_zone);
 }
 
