|
@@ -2725,11 +2725,8 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
|
|
|
dev_extent = btrfs_item_ptr(l, slot, struct btrfs_dev_extent);
|
|
|
length = btrfs_dev_extent_length(l, dev_extent);
|
|
|
|
|
|
- if (found_key.offset + length <= start) {
|
|
|
- key.offset = found_key.offset + length;
|
|
|
- btrfs_release_path(path);
|
|
|
- continue;
|
|
|
- }
|
|
|
+ if (found_key.offset + length <= start)
|
|
|
+ goto skip;
|
|
|
|
|
|
chunk_tree = btrfs_dev_extent_chunk_tree(l, dev_extent);
|
|
|
chunk_objectid = btrfs_dev_extent_chunk_objectid(l, dev_extent);
|
|
@@ -2740,10 +2737,12 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
|
|
|
* the chunk from going away while we scrub it
|
|
|
*/
|
|
|
cache = btrfs_lookup_block_group(fs_info, chunk_offset);
|
|
|
- if (!cache) {
|
|
|
- ret = -ENOENT;
|
|
|
- break;
|
|
|
- }
|
|
|
+
|
|
|
+ /* some chunks are removed but not committed to disk yet,
|
|
|
+ * continue scrubbing */
|
|
|
+ if (!cache)
|
|
|
+ goto skip;
|
|
|
+
|
|
|
dev_replace->cursor_right = found_key.offset + length;
|
|
|
dev_replace->cursor_left = found_key.offset;
|
|
|
dev_replace->item_needs_writeback = 1;
|
|
@@ -2802,7 +2801,7 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx,
|
|
|
|
|
|
dev_replace->cursor_left = dev_replace->cursor_right;
|
|
|
dev_replace->item_needs_writeback = 1;
|
|
|
-
|
|
|
+skip:
|
|
|
key.offset = found_key.offset + length;
|
|
|
btrfs_release_path(path);
|
|
|
}
|