Index: uspace/srv/bd/hr/hr.c
===================================================================
--- uspace/srv/bd/hr/hr.c	(revision a3486f22ef90cb49886854387bb881de5188d3c7)
+++ uspace/srv/bd/hr/hr.c	(revision 137f7cf58375f85f3ac5e28c36138b283c3b76d8)
@@ -354,8 +354,8 @@
 	}
 
-	hr_extent_t *ext = &vol->extents[extent_idx_to_fail];
-
 	fibril_rwlock_read_lock(&vol->extents_lock);
 	fibril_rwlock_write_lock(&vol->states_lock);
+
+	hr_extent_t *ext = &vol->extents[extent_idx_to_fail];
 
 	switch (ext->state) {
Index: uspace/srv/bd/hr/raid0.c
===================================================================
--- uspace/srv/bd/hr/raid0.c	(revision a3486f22ef90cb49886854387bb881de5188d3c7)
+++ uspace/srv/bd/hr/raid0.c	(revision 137f7cf58375f85f3ac5e28c36138b283c3b76d8)
@@ -208,5 +208,7 @@
 static errno_t hr_raid0_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt)
 {
-	return hr_raid0_bd_op(HR_BD_SYNC, bd, ba, cnt, NULL, NULL, 0);
+	hr_volume_t *vol = bd->srvs->sarg;
+
+	return hr_sync_extents(vol);
 }
 
Index: uspace/srv/bd/hr/raid1.c
===================================================================
--- uspace/srv/bd/hr/raid1.c	(revision a3486f22ef90cb49886854387bb881de5188d3c7)
+++ uspace/srv/bd/hr/raid1.c	(revision 137f7cf58375f85f3ac5e28c36138b283c3b76d8)
@@ -263,5 +263,7 @@
 static errno_t hr_raid1_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt)
 {
-	return hr_raid1_bd_op(HR_BD_SYNC, bd, ba, cnt, NULL, NULL, 0);
+	hr_volume_t *vol = bd->srvs->sarg;
+
+	return hr_sync_extents(vol);
 }
 
@@ -310,5 +312,4 @@
 
 	return count;
-
 }
 
Index: uspace/srv/bd/hr/raid5.c
===================================================================
--- uspace/srv/bd/hr/raid5.c	(revision a3486f22ef90cb49886854387bb881de5188d3c7)
+++ uspace/srv/bd/hr/raid5.c	(revision 137f7cf58375f85f3ac5e28c36138b283c3b76d8)
@@ -219,6 +219,7 @@
 static errno_t hr_raid5_bd_sync_cache(bd_srv_t *bd, aoff64_t ba, size_t cnt)
 {
-	/* XXX */
-	return EOK;
+	hr_volume_t *vol = bd->srvs->sarg;
+
+	return hr_sync_extents(vol);
 }
 
Index: uspace/srv/bd/hr/util.c
===================================================================
--- uspace/srv/bd/hr/util.c	(revision a3486f22ef90cb49886854387bb881de5188d3c7)
+++ uspace/srv/bd/hr/util.c	(revision 137f7cf58375f85f3ac5e28c36138b283c3b76d8)
@@ -1100,4 +1100,36 @@
 }
 
+errno_t hr_sync_extents(hr_volume_t *vol)
+{
+	errno_t rc = EOK;
+
+	fibril_rwlock_read_lock(&vol->extents_lock);
+	for (size_t e = 0; e < vol->extent_no; e++) {
+		fibril_rwlock_read_lock(&vol->states_lock);
+		hr_ext_state_t s = vol->extents[e].state;
+		fibril_rwlock_read_unlock(&vol->states_lock);
+
+		service_id_t svc_id = vol->extents[e].svc_id;
+
+		if (s == HR_EXT_ONLINE || s == HR_EXT_REBUILD) {
+			errno_t rc = hr_sync_cache(svc_id, 0, 0);
+			if (rc != EOK && rc != ENOTSUP)
+				vol->hr_ops.ext_state_cb(vol, e, rc);
+		}
+	}
+	fibril_rwlock_read_unlock(&vol->extents_lock);
+
+	vol->hr_ops.vol_state_eval(vol);
+
+	fibril_rwlock_read_lock(&vol->states_lock);
+	hr_vol_state_t s = vol->state;
+	fibril_rwlock_read_unlock(&vol->states_lock);
+
+	if (s == HR_VOL_FAULTY)
+		rc = EIO;
+
+	return rc;
+}
+
 /** @}
  */
Index: uspace/srv/bd/hr/util.h
===================================================================
--- uspace/srv/bd/hr/util.h	(revision a3486f22ef90cb49886854387bb881de5188d3c7)
+++ uspace/srv/bd/hr/util.h	(revision 137f7cf58375f85f3ac5e28c36138b283c3b76d8)
@@ -111,4 +111,5 @@
 extern errno_t hr_util_add_hotspare(hr_volume_t *, service_id_t);
 extern void hr_raid5_xor(void *, const void *, size_t);
+extern errno_t hr_sync_extents(hr_volume_t *);
 
 #endif
