mirror of
https://github.com/torvalds/linux.git
synced 2024-10-31 01:01:52 +00:00
Btrfs: make sure that we've made everything in pinned tree clean
Since we have two trees for recording pinned extents, we need to go through both of them to make sure that we've done everything clean. Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
parent
6e841e32b1
commit
ed0eaa1498
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user