Index: uspace/app/mkminix/mkminix.c
===================================================================
--- uspace/app/mkminix/mkminix.c	(revision 4cee3944959e8fd52c10dcc86eb219c968af29c4)
+++ uspace/app/mkminix/mkminix.c	(revision e6aaa594dcfd8f0f308e71d9f4e4a9d8ae000756)
@@ -52,4 +52,7 @@
 #define NAME	"mkminix"
 
+#define FREE	0
+#define USED	1
+
 typedef enum {
 	HELP_SHORT,
@@ -70,4 +73,6 @@
 static void	setup_superblock(struct mfs_superblock *sb, mfs_params_t *opt);
 static void	setup_superblock_v3(struct mfs3_superblock *sb, mfs_params_t *opt);
+static void	setup_bitmaps(devmap_handle_t handle, uint32_t ninodes, uint32_t nzones);
+static void	mark_bmap(uint8_t *bmap, int idx, int v);
 
 static struct option const long_options[] = {
@@ -108,5 +113,5 @@
 
 	for (c = 0, optind = 0, opt_ind = 0; c != -1;) {
-		c = getopt_long(argc, argv, "eh123b:i:", long_options, &opt_ind);
+		c = getopt_long(argc, argv, "lh123b:i:", long_options, &opt_ind);
 		switch (c) {
 		case 'h':
@@ -207,4 +212,5 @@
 		}
 		setup_superblock_v3(sb3, &opt);
+		setup_bitmaps(handle, sb3->s_ninodes, sb3->s_total_zones);
 	} else {
 		sb = (struct mfs_superblock *) malloc(sizeof(struct mfs_superblock));
@@ -215,4 +221,5 @@
 		setup_superblock(sb, &opt);
 		block_write_direct(handle, MFS_SUPERBLOCK, 1, sb);
+		setup_bitmaps(handle, sb->s_ninodes, sb->s_nzones);
 	}
 
@@ -284,4 +291,34 @@
 }
 
+static void setup_bitmaps(devmap_handle_t handle, uint32_t ninodes, uint32_t nzones)
+{
+	uint8_t *ibmap_buf, *zbmap_buf;
+	int ibmap_nblocks = 1 + (ninodes / 8) / MFS_BLOCKSIZE;
+	int zbmap_nblocks = 1 + (nzones / 8) / MFS_BLOCKSIZE;
+	unsigned int i;
+
+	ibmap_buf = (uint8_t *) malloc(ibmap_nblocks * MFS_BLOCKSIZE);
+	zbmap_buf = (uint8_t *) malloc(zbmap_nblocks * MFS_BLOCKSIZE);
+
+	memset(ibmap_buf, 0xFF, ibmap_nblocks * MFS_BLOCKSIZE);
+	memset(zbmap_buf, 0xFF, zbmap_nblocks * MFS_BLOCKSIZE);
+
+	for (i = 2; i < ninodes; ++i) {
+		mark_bmap(ibmap_buf, i, FREE);
+		mark_bmap(zbmap_buf, i, FREE);
+	}
+
+	block_write_direct(handle, 2, ibmap_nblocks, ibmap_buf);
+	block_write_direct(handle, 2 + ibmap_nblocks, zbmap_nblocks, zbmap_buf);
+}
+
+static void mark_bmap(uint8_t *bmap, int idx, int v)
+{
+	if (v == FREE)
+		bmap[idx / 8] &= ~(1 << (idx % 8));
+	else
+		bmap[idx / 8] |= 1 << (idx % 8);
+}
+
 static void help_cmd_mkminix(help_level_t level)
 {
