Index: uspace/srv/bd/hr/util.c
===================================================================
--- uspace/srv/bd/hr/util.c	(revision 287b2ea87c74732fac0422243087e01c8507f5ae)
+++ uspace/srv/bd/hr/util.c	(revision 9a3eec11c53dc88b39ba77db4f3c6c37bdb41da9)
@@ -173,4 +173,33 @@
 }
 
+errno_t hr_get_volume_svcs(size_t *rcnt, service_id_t **rsvcs)
+{
+	size_t i;
+	service_id_t *vol_svcs;
+
+	if (rcnt == NULL || rsvcs == NULL)
+		return EINVAL;
+
+	fibril_rwlock_read_lock(&hr_volumes_lock);
+
+	size_t vol_cnt = list_count(&hr_volumes);
+	vol_svcs = malloc(vol_cnt * sizeof(service_id_t));
+	if (vol_svcs == NULL) {
+		fibril_rwlock_read_unlock(&hr_volumes_lock);
+		return ENOMEM;
+	}
+
+	i = 0;
+	list_foreach(hr_volumes, lvolumes, hr_volume_t, iter)
+		vol_svcs[i++] = iter->svc_id;
+
+	fibril_rwlock_read_unlock(&hr_volumes_lock);
+
+	*rcnt = vol_cnt;
+	*rsvcs = vol_svcs;
+
+	return EOK;
+}
+
 hr_volume_t *hr_get_volume(service_id_t svc_id)
 {
Index: uspace/srv/bd/hr/util.h
===================================================================
--- uspace/srv/bd/hr/util.h	(revision 287b2ea87c74732fac0422243087e01c8507f5ae)
+++ uspace/srv/bd/hr/util.h	(revision 9a3eec11c53dc88b39ba77db4f3c6c37bdb41da9)
@@ -70,4 +70,5 @@
     const char *, hr_metadata_type_t);
 extern void		 hr_destroy_vol_struct(hr_volume_t *);
+extern errno_t		 hr_get_volume_svcs(size_t *, service_id_t **);
 extern hr_volume_t	*hr_get_volume(service_id_t);
 extern errno_t		 hr_remove_volume(hr_volume_t *);
