|
@@ -3557,8 +3557,10 @@ static int btrfs_destroy_pinned_extent(struct btrfs_root *root,
|
|
|
u64 start;
|
|
|
u64 end;
|
|
|
int ret;
|
|
|
+ bool loop = true;
|
|
|
|
|
|
unpin = pinned_extents;
|
|
|
+again:
|
|
|
while (1) {
|
|
|
ret = find_first_extent_bit(unpin, 0, &start, &end,
|
|
|
EXTENT_DIRTY);
|
|
@@ -3576,6 +3578,15 @@ static int btrfs_destroy_pinned_extent(struct btrfs_root *root,
|
|
|
cond_resched();
|
|
|
}
|
|
|
|
|
|
+ if (loop) {
|
|
|
+ if (unpin == &root->fs_info->freed_extents[0])
|
|
|
+ unpin = &root->fs_info->freed_extents[1];
|
|
|
+ else
|
|
|
+ unpin = &root->fs_info->freed_extents[0];
|
|
|
+ loop = false;
|
|
|
+ goto again;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|