Index: uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c	(revision 9c3369b91a885914a5d30f5ac4858ccbe735034f)
+++ uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c	(revision b127da2f04985d8e204ee04bb0c448fd03c8aed2)
@@ -189,5 +189,4 @@
 
 		vol->extents[index].svc_id = iter->svc_id;
-		iter->fini = false;
 
 		bool invalidate = false;
Index: uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c	(revision 9c3369b91a885914a5d30f5ac4858ccbe735034f)
+++ uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c	(revision b127da2f04985d8e204ee04bb0c448fd03c8aed2)
@@ -189,5 +189,4 @@
 
 		vol->extents[index].svc_id = iter->svc_id;
-		iter->fini = false;
 
 		vol->extents[index].state = HR_EXT_ONLINE;
Index: uspace/srv/bd/hr/metadata/foreign/md/hr_md.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/md/hr_md.c	(revision 9c3369b91a885914a5d30f5ac4858ccbe735034f)
+++ uspace/srv/bd/hr/metadata/foreign/md/hr_md.c	(revision b127da2f04985d8e204ee04bb0c448fd03c8aed2)
@@ -206,5 +206,4 @@
 
 		vol->extents[index].svc_id = iter->svc_id;
-		iter->fini = false;
 
 		bool invalidate = false;
Index: uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c	(revision 9c3369b91a885914a5d30f5ac4858ccbe735034f)
+++ uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c	(revision b127da2f04985d8e204ee04bb0c448fd03c8aed2)
@@ -189,5 +189,4 @@
 
 		vol->extents[index].svc_id = iter->svc_id;
-		iter->fini = false;
 
 		struct sr_meta_chunk *mc =
Index: uspace/srv/bd/hr/metadata/native.c
===================================================================
--- uspace/srv/bd/hr/metadata/native.c	(revision 9c3369b91a885914a5d30f5ac4858ccbe735034f)
+++ uspace/srv/bd/hr/metadata/native.c	(revision b127da2f04985d8e204ee04bb0c448fd03c8aed2)
@@ -204,5 +204,4 @@
 
 		vol->extents[iter_meta->index].svc_id = iter->svc_id;
-		iter->fini = false;
 
 		hr_ext_state_t final_ext_state = HR_EXT_INVALID;
Index: uspace/srv/bd/hr/util.c
===================================================================
--- uspace/srv/bd/hr/util.c	(revision 9c3369b91a885914a5d30f5ac4858ccbe735034f)
+++ uspace/srv/bd/hr/util.c	(revision b127da2f04985d8e204ee04bb0c448fd03c8aed2)
@@ -621,4 +621,5 @@
 	to_add->svc_id = svc_id;
 	to_add->inited = inited;
+	to_add->fini = true;
 
 	if (md != NULL) {
@@ -858,4 +859,13 @@
 		goto error;
 
+	for (size_t e = 0; e < vol->extent_no; e++) {
+		if (vol->extents[e].svc_id == 0)
+			continue;
+		list_foreach(*list, link, struct dev_list_member, iter) {
+			if (iter->svc_id == vol->extents[e].svc_id)
+				iter->fini = false;
+		}
+	}
+
 	rc = hr_register_volume(vol);
 	if (rc != EOK)
@@ -870,5 +880,10 @@
 	return EOK;
 error:
+	/* let the caller fini the block svc list */
+	for (size_t e = 0; e < vol->extent_no; e++)
+		vol->extents[e].svc_id = 0;
+
 	hr_destroy_vol_struct(vol);
+
 	return rc;
 }
@@ -945,11 +960,17 @@
 		}
 
-		if (rc != EOK)
-			goto error;
+		if (rc != EOK) {
+			block_fini(iter->svc_id);
+			free_dev_list_member(iter);
+			goto error;
+		}
 
 		char *svc_name = NULL;
 		rc = loc_service_get_name(iter->svc_id, &svc_name);
-		if (rc != EOK)
-			goto error;
+		if (rc != EOK) {
+			block_fini(iter->svc_id);
+			free_dev_list_member(iter);
+			goto error;
+		}
 		HR_DEBUG("found valid metadata on %s (type = %s), matching "
 		    "other extents\n",
@@ -962,6 +983,9 @@
 		rc = hr_util_get_matching_md_svcs_list(&matching_svcs_list,
 		    &dev_id_list, iter->svc_id, type, metadata_struct_main);
-		if (rc != EOK)
-			goto error;
+		if (rc != EOK) {
+			block_fini(iter->svc_id);
+			free_dev_list_member(iter);
+			goto error;
+		}
 
 		/* add current iter to list as well */
@@ -969,7 +993,10 @@
 		    iter->svc_id, true, metadata_struct_main);
 		if (rc != EOK) {
+			block_fini(iter->svc_id);
 			free_svc_id_list(&matching_svcs_list);
 			goto error;
 		}
+
+		free_dev_list_member(iter);
 
 		/* remove matching list members from dev_id_list */
