Index: uspace/srv/bd/hr/hr.c
===================================================================
--- uspace/srv/bd/hr/hr.c	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/hr.c	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -147,5 +147,5 @@
 		goto error;
 
-	rc = vol->meta_ops->init_vol2meta(vol, vol->in_mem_md);
+	rc = vol->meta_ops->init_vol2meta(vol);
 	if (rc != EOK)
 		goto error;
Index: uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/metadata/foreign/geom/hr_g_mirror.c	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -55,5 +55,5 @@
 
 static void *meta_gmirror_alloc_struct(void);
-static errno_t meta_gmirror_init_vol2meta(const hr_volume_t *, void *);
+static errno_t meta_gmirror_init_vol2meta(hr_volume_t *);
 static errno_t meta_gmirror_init_meta2vol(const list_t *, hr_volume_t *);
 static void meta_gmirror_encode(void *, void *);
@@ -101,8 +101,7 @@
 }
 
-static errno_t meta_gmirror_init_vol2meta(const hr_volume_t *vol, void *md_v)
+static errno_t meta_gmirror_init_vol2meta(hr_volume_t *vol)
 {
 	(void)vol;
-	(void)md_v;
 
 	return ENOTSUP;
Index: uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -55,5 +55,5 @@
 
 static void *meta_gstripe_alloc_struct(void);
-static errno_t meta_gstripe_init_vol2meta(const hr_volume_t *, void *);
+static errno_t meta_gstripe_init_vol2meta(hr_volume_t *);
 static errno_t meta_gstripe_init_meta2vol(const list_t *, hr_volume_t *);
 static void meta_gstripe_encode(void *, void *);
@@ -101,8 +101,7 @@
 }
 
-static errno_t meta_gstripe_init_vol2meta(const hr_volume_t *vol, void *md_v)
+static errno_t meta_gstripe_init_vol2meta(hr_volume_t *vol)
 {
 	(void)vol;
-	(void)md_v;
 	return ENOTSUP;
 }
Index: uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/metadata/foreign/softraid/hr_softraid.c	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -55,5 +55,5 @@
 
 static void *meta_softraid_alloc_struct(void);
-static errno_t meta_softraid_init_vol2meta(const hr_volume_t *, void *);
+static errno_t meta_softraid_init_vol2meta(hr_volume_t *);
 static errno_t meta_softraid_init_meta2vol(const list_t *, hr_volume_t *);
 static void meta_softraid_encode(void *, void *);
@@ -101,8 +101,8 @@
 }
 
-static errno_t meta_softraid_init_vol2meta(const hr_volume_t *vol, void *md_v)
+static errno_t meta_softraid_init_vol2meta(hr_volume_t *vol)
 {
 	(void)vol;
-	(void)md_v;
+
 	return ENOTSUP;
 }
Index: uspace/srv/bd/hr/metadata/native.c
===================================================================
--- uspace/srv/bd/hr/metadata/native.c	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/metadata/native.c	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -55,5 +55,5 @@
 
 static void *meta_native_alloc_struct(void);
-static errno_t meta_native_init_vol2meta(const hr_volume_t *, void *);
+static errno_t meta_native_init_vol2meta(hr_volume_t *);
 static errno_t meta_native_init_meta2vol(const list_t *, hr_volume_t *);
 static void meta_native_encode(void *, void *);
@@ -103,9 +103,11 @@
 }
 
-static errno_t meta_native_init_vol2meta(const hr_volume_t *vol, void *md_v)
-{
-	HR_DEBUG("%s()", __func__);
-
-	hr_metadata_t *md = md_v;
+static errno_t meta_native_init_vol2meta(hr_volume_t *vol)
+{
+	HR_DEBUG("%s()", __func__);
+
+	hr_metadata_t *md = calloc(1, sizeof(*md));
+	if (md == NULL)
+		return ENOMEM;
 
 	str_cpy(md->magic, HR_NATIVE_MAGIC_SIZE, HR_NATIVE_MAGIC_STR);
@@ -132,4 +134,6 @@
 	md->bsize = vol->bsize;
 	memcpy(md->devname, vol->devname, HR_DEVNAME_LEN);
+
+	vol->in_mem_md = md;
 
 	return EOK;
@@ -163,4 +167,8 @@
 	/* already set */
 	/* memcpy(vol->devname, main_meta->devname, HR_DEVNAME_LEN); */
+
+	vol->in_mem_md = calloc(1, sizeof(hr_metadata_t));
+	if (vol->in_mem_md == NULL)
+		return ENOMEM;
 	memcpy(vol->in_mem_md, main_meta, sizeof(hr_metadata_t));
 
Index: uspace/srv/bd/hr/superblock.h
===================================================================
--- uspace/srv/bd/hr/superblock.h	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/superblock.h	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -45,5 +45,5 @@
 typedef struct hr_superblock_ops {
 	void *(*alloc_struct)(void);
-	errno_t (*init_vol2meta)(const hr_volume_t *, void *);
+	errno_t (*init_vol2meta)(hr_volume_t *);
 	errno_t (*init_meta2vol)(const list_t *, hr_volume_t *);
 	void (*encode)(void *, void *);
Index: uspace/srv/bd/hr/util.c
===================================================================
--- uspace/srv/bd/hr/util.c	(revision c69cbefaf6ce6c2791016356238e9b419196e39c)
+++ uspace/srv/bd/hr/util.c	(revision 78433bbc6780846cacf166c1034df23fd5f58768)
@@ -159,11 +159,4 @@
 	}
 
-	vol->in_mem_md = vol->meta_ops->alloc_struct();
-	if (vol->in_mem_md == NULL) {
-		free(vol->fge);
-		rc = ENOMEM;
-		goto error;
-	}
-
 	vol->state = HR_VOL_NONE;
 
