Index: uspace/srv/bd/vbd/disk.c
===================================================================
--- uspace/srv/bd/vbd/disk.c	(revision 99c23405e687595401687deb42d610a45b2fa761)
+++ uspace/srv/bd/vbd/disk.c	(revision 603c1d1f2f250c70a6ee5b7b75494f1ed4c16e1a)
@@ -223,4 +223,5 @@
 	}
 
+	log_msg(LOG_DEFAULT, LVL_NOTE, "block_init(%zu)", sid);
 	rc = block_init(EXCHANGE_SERIALIZE, sid, 2048);
 	if (rc != EOK) {
@@ -272,6 +273,8 @@
 error:
 	label_close(label);
-	if (block_inited)
+	if (block_inited) {
+		log_msg(LOG_DEFAULT, LVL_NOTE, "block_fini(%zu)", sid);
 		block_fini(sid);
+	}
 	if (disk != NULL)
 		free(disk->svc_name);
@@ -293,4 +296,6 @@
 	list_remove(&disk->ldisks);
 	label_close(disk->label);
+	log_msg(LOG_DEFAULT, LVL_NOTE, "block_fini(%zu)", sid);
+	block_fini(sid);
 	free(disk);
 	return EOK;
@@ -353,7 +358,11 @@
 	label_t *label;
 	vbds_disk_t *disk;
+	bool block_inited = false;
+	size_t block_size;
 	int rc;
 
 	log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create(%zu)", sid);
+
+	log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create(%zu) - chkdup", sid);
 
 	/* Check for duplicates */
@@ -362,8 +371,38 @@
 		return EEXISTS;
 
+	log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create(%zu) - alloc", sid);
+
 	disk = calloc(1, sizeof(vbds_disk_t));
 	if (disk == NULL)
 		return ENOMEM;
 
+	rc = loc_service_get_name(sid, &disk->svc_name);
+	if (rc != EOK) {
+		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed getting disk service name.");
+		rc = EIO;
+		goto error;
+	}
+
+	log_msg(LOG_DEFAULT, LVL_NOTE, "block_init(%zu)", sid);
+	rc = block_init(EXCHANGE_SERIALIZE, sid, 2048);
+	if (rc != EOK) {
+		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed opening block device %s.",
+		    disk->svc_name);
+		rc = EIO;
+		goto error;
+	}
+
+	rc = block_get_bsize(sid, &block_size);
+	if (rc != EOK) {
+		log_msg(LOG_DEFAULT, LVL_ERROR, "Failed getting block size of %s.",
+		    disk->svc_name);
+		rc = EIO;
+		goto error;
+	}
+
+	block_inited = true;
+
+	log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create(%zu) - label_create", sid);
+
 	rc = label_create(sid, ltype, &label);
 	if (rc != EOK)
@@ -372,7 +411,19 @@
 	disk->svc_id = sid;
 	disk->label = label;
+	disk->block_size = block_size;
+	list_initialize(&disk->parts);
+
 	list_append(&disk->ldisks, &vbds_disks);
+
+	log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create(%zu) - success", sid);
 	return EOK;
 error:
+	log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create(%zu) - failure", sid);
+	if (block_inited) {
+		log_msg(LOG_DEFAULT, LVL_NOTE, "block_fini(%zu)", sid);
+		block_fini(sid);
+	}
+	if (disk != NULL)
+		free(disk->svc_name);
 	free(disk);
 	return rc;
@@ -397,4 +448,6 @@
 
 	list_remove(&disk->ldisks);
+	log_msg(LOG_DEFAULT, LVL_NOTE, "block_fini(%zu)", sid);
+	block_fini(sid);
 	free(disk);
 	return EOK;
