Index: uspace/srv/bd/hr/raid5.c
===================================================================
--- uspace/srv/bd/hr/raid5.c	(revision 15e51b05f97c4d8273ff4f17df1733fd4adffe26)
+++ uspace/srv/bd/hr/raid5.c	(revision 9323bb8fc1f5855a35878257d36061f27d54fc2e)
@@ -98,8 +98,4 @@
 	}
 
-	bd_srvs_init(&new_volume->hr_bds);
-	new_volume->hr_bds.ops = &hr_raid5_bd_ops;
-	new_volume->hr_bds.sarg = new_volume;
-
 	hr_raid5_vol_state_eval_forced(new_volume);
 
@@ -113,4 +109,8 @@
 	}
 
+	bd_srvs_init(&new_volume->hr_bds);
+	new_volume->hr_bds.ops = &hr_raid5_bd_ops;
+	new_volume->hr_bds.sarg = new_volume;
+
 	return EOK;
 }
@@ -241,4 +241,51 @@
 	    stripes_cnt, false);
 
+	uint64_t phys_block, len;
+	size_t left;
+
+	hr_layout_t layout = vol->layout;
+	hr_level_t level = vol->level;
+
+	/* parity extent */
+	size_t p_extent = hr_raid5_parity_extent(level, layout,
+	    vol->extent_no, strip_no);
+
+	uint64_t strip_off = ba % strip_size;
+
+	left = cnt;
+
+	while (left != 0) {
+		if (level == HR_LVL_5) {
+			p_extent = hr_raid5_parity_extent(level, layout,
+			    vol->extent_no, strip_no);
+		}
+
+		size_t extent = hr_raid5_data_extent(level, layout,
+		    vol->extent_no, strip_no, p_extent);
+
+		uint64_t stripe_no = strip_no / (vol->extent_no - 1);
+		size_t relative_si = stripe_no - start_stripe; /* relative stripe index */
+		hr_stripe_t *stripe = &stripes[relative_si];
+		stripe->p_extent = p_extent;
+
+		stripe->strips_touched++;
+
+		phys_block = stripe_no * strip_size + strip_off;
+		cnt = min(left, strip_size - strip_off);
+		len = vol->bsize * cnt;
+		hr_add_data_offset(vol, &phys_block);
+
+		stripe->extent_span[extent].range.start = phys_block;
+		stripe->extent_span[extent].range.end = phys_block + cnt - 1;
+		stripe->extent_span[extent].cnt = cnt;
+		stripe->extent_span[extent].data_read = data_read;
+		stripe->extent_span[extent].strip_off = strip_off;
+
+		data_read += len;
+		left -= cnt;
+		strip_off = 0;
+		strip_no++;
+	}
+
 	hr_range_lock_t **rlps = hr_malloc_waitok(stripes_cnt * sizeof(*rlps));
 
@@ -252,51 +299,4 @@
 		uint64_t relative = s - start_stripe;
 		rlps[relative] = hr_range_lock_acquire(vol, s, 1);
-	}
-
-	uint64_t phys_block, len;
-	size_t left;
-
-	hr_layout_t layout = vol->layout;
-	hr_level_t level = vol->level;
-
-	/* parity extent */
-	size_t p_extent = hr_raid5_parity_extent(level, layout,
-	    vol->extent_no, strip_no);
-
-	uint64_t strip_off = ba % strip_size;
-
-	left = cnt;
-
-	while (left != 0) {
-		if (level == HR_LVL_5) {
-			p_extent = hr_raid5_parity_extent(level, layout,
-			    vol->extent_no, strip_no);
-		}
-
-		size_t extent = hr_raid5_data_extent(level, layout,
-		    vol->extent_no, strip_no, p_extent);
-
-		uint64_t stripe_no = strip_no / (vol->extent_no - 1);
-		size_t relative_si = stripe_no - start_stripe; /* relative stripe index */
-		hr_stripe_t *stripe = &stripes[relative_si];
-		stripe->p_extent = p_extent;
-
-		stripe->strips_touched++;
-
-		phys_block = stripe_no * strip_size + strip_off;
-		cnt = min(left, strip_size - strip_off);
-		len = vol->bsize * cnt;
-		hr_add_data_offset(vol, &phys_block);
-
-		stripe->extent_span[extent].range.start = phys_block;
-		stripe->extent_span[extent].range.end = phys_block + cnt - 1;
-		stripe->extent_span[extent].cnt = cnt;
-		stripe->extent_span[extent].data_read = data_read;
-		stripe->extent_span[extent].strip_off = strip_off;
-
-		data_read += len;
-		left -= cnt;
-		strip_off = 0;
-		strip_no++;
 	}
 
@@ -452,4 +452,49 @@
 	}
 
+	uint64_t phys_block, len;
+	size_t left;
+
+	hr_layout_t layout = vol->layout;
+	hr_level_t level = vol->level;
+
+	/* parity extent */
+	size_t p_extent = hr_raid5_parity_extent(level, layout,
+	    vol->extent_no, strip_no);
+
+	uint64_t strip_off = ba % strip_size;
+
+	left = cnt;
+
+	while (left != 0) {
+		if (level == HR_LVL_5) {
+			p_extent = hr_raid5_parity_extent(level, layout,
+			    vol->extent_no, strip_no);
+		}
+
+		size_t extent = hr_raid5_data_extent(level, layout,
+		    vol->extent_no, strip_no, p_extent);
+
+		uint64_t stripe_no = strip_no / (vol->extent_no - 1);
+		size_t relative_si = stripe_no - start_stripe; /* relative stripe index */
+		hr_stripe_t *stripe = &stripes[relative_si];
+		stripe->p_extent = p_extent;
+
+		phys_block = stripe_no * strip_size + strip_off;
+		cnt = min(left, strip_size - strip_off);
+		len = vol->bsize * cnt;
+		hr_add_data_offset(vol, &phys_block);
+
+		stripe->extent_span[extent].range.start = phys_block;
+		stripe->extent_span[extent].range.end = phys_block + cnt - 1;
+		stripe->extent_span[extent].cnt = cnt;
+		stripe->extent_span[extent].data_write = data_write;
+		stripe->extent_span[extent].strip_off = strip_off;
+
+		data_write += len;
+		left -= cnt;
+		strip_off = 0;
+		strip_no++;
+	}
+
 	hr_range_lock_t **rlps = hr_malloc_waitok(stripes_cnt * sizeof(*rlps));
 
@@ -463,49 +508,4 @@
 		uint64_t relative = s - start_stripe;
 		rlps[relative] = hr_range_lock_acquire(vol, s, 1);
-	}
-
-	uint64_t phys_block, len;
-	size_t left;
-
-	hr_layout_t layout = vol->layout;
-	hr_level_t level = vol->level;
-
-	/* parity extent */
-	size_t p_extent = hr_raid5_parity_extent(level, layout,
-	    vol->extent_no, strip_no);
-
-	uint64_t strip_off = ba % strip_size;
-
-	left = cnt;
-
-	while (left != 0) {
-		if (level == HR_LVL_5) {
-			p_extent = hr_raid5_parity_extent(level, layout,
-			    vol->extent_no, strip_no);
-		}
-
-		size_t extent = hr_raid5_data_extent(level, layout,
-		    vol->extent_no, strip_no, p_extent);
-
-		uint64_t stripe_no = strip_no / (vol->extent_no - 1);
-		size_t relative_si = stripe_no - start_stripe; /* relative stripe index */
-		hr_stripe_t *stripe = &stripes[relative_si];
-		stripe->p_extent = p_extent;
-
-		phys_block = stripe_no * strip_size + strip_off;
-		cnt = min(left, strip_size - strip_off);
-		len = vol->bsize * cnt;
-		hr_add_data_offset(vol, &phys_block);
-
-		stripe->extent_span[extent].range.start = phys_block;
-		stripe->extent_span[extent].range.end = phys_block + cnt - 1;
-		stripe->extent_span[extent].cnt = cnt;
-		stripe->extent_span[extent].data_write = data_write;
-		stripe->extent_span[extent].strip_off = strip_off;
-
-		data_write += len;
-		left -= cnt;
-		strip_off = 0;
-		strip_no++;
 	}
 
