Commit f31ea088 authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba

btrfs: relocation: Check cancel request after each extent found

When relocating data block groups with tons of small extents, or large
metadata block groups, there can be over 200,000 extents.

We will iterate all extents of such block group in relocate_block_group(),
where iteration itself can be kinda time-consuming.

So when user want to cancel the balance, the extent iteration loop can
be another target.

This patch will add the cancelling check in the extent iteration loop of
relocate_block_group() to make balance cancelling faster.
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 7f913c7c
...@@ -4232,6 +4232,10 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) ...@@ -4232,6 +4232,10 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
break; break;
} }
} }
if (btrfs_should_cancel_balance(fs_info)) {
err = -ECANCELED;
break;
}
} }
if (trans && progress && err == -ENOSPC) { if (trans && progress && err == -ENOSPC) {
ret = btrfs_force_chunk_alloc(trans, rc->block_group->flags); ret = btrfs_force_chunk_alloc(trans, rc->block_group->flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment