Index: uspace/srv/bd/hr/metadata/native.c
===================================================================
--- uspace/srv/bd/hr/metadata/native.c	(revision f18e36e2bbc50b38693ef734c8811bf0cdf01584)
+++ uspace/srv/bd/hr/metadata/native.c	(revision e0695cef2a4a4392f323e3f0212caa45f2b409ee)
@@ -171,8 +171,17 @@
 		iter->fini = false;
 
-		if (iter_meta->counter == max_counter_val)
-			vol->extents[iter_meta->index].state = HR_EXT_ONLINE;
-		else
-			vol->extents[iter_meta->index].state = HR_EXT_INVALID;
+		hr_ext_state_t final_ext_state = HR_EXT_INVALID;
+		if (iter_meta->counter == max_counter_val) {
+			if (iter_meta->rebuild_pos > 0) {
+				final_ext_state = HR_EXT_REBUILD;
+				vol->rebuild_blk = iter_meta->rebuild_pos;
+				printf("REBUILD SHOULD RESUME at %lu\n",
+				    vol->rebuild_blk);
+			} else {
+				final_ext_state = HR_EXT_ONLINE;
+			}
+		}
+
+		vol->extents[iter_meta->index].state = final_ext_state;
 	}
 
@@ -206,4 +215,5 @@
 	scratch_md.data_offset = host2uint64_t_le(metadata->data_offset);
 	scratch_md.counter = host2uint64_t_le(metadata->counter);
+	scratch_md.rebuild_pos = host2uint64_t_le(metadata->rebuild_pos);
 	scratch_md.version = host2uint32_t_le(metadata->version);
 	scratch_md.extent_no = host2uint32_t_le(metadata->extent_no);
@@ -240,4 +250,5 @@
 	metadata->data_offset = uint64_t_le2host(scratch_md.data_offset);
 	metadata->counter = uint64_t_le2host(scratch_md.counter);
+	metadata->rebuild_pos = uint64_t_le2host(scratch_md.rebuild_pos);
 	metadata->version = uint32_t_le2host(scratch_md.version);
 	metadata->extent_no = uint32_t_le2host(scratch_md.extent_no);
@@ -249,4 +260,7 @@
 	memcpy(metadata->devname, scratch_md.devname, HR_DEVNAME_LEN);
 
+	if (metadata->version != 1)
+		return EINVAL;
+
 	return EOK;
 }
@@ -394,7 +408,7 @@
 
 		fibril_rwlock_read_lock(&vol->states_lock);
-
-		/* TODO: special case for REBUILD */
-		if (ext->state != HR_EXT_ONLINE) {
+		hr_ext_state_t s = ext->state;
+
+		if (s != HR_EXT_ONLINE && s != HR_EXT_REBUILD) {
 			fibril_rwlock_read_unlock(&vol->states_lock);
 			continue;
@@ -404,4 +418,8 @@
 
 		md->index = i;
+		if (s == HR_EXT_REBUILD)
+			md->rebuild_pos = vol->rebuild_blk;
+		else
+			md->rebuild_pos = 0;
 		meta_native_encode(md, md_block);
 		rc = meta_native_write_block(ext->svc_id, md_block);
