From: Qu Wenruo Date: Tue, 3 Dec 2019 06:42:53 +0000 (+0800) Subject: btrfs: relocation: Check cancel request after each extent found X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e0b705ea6ce42941083c89b56273ae160cf9ce6;p=linux 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. Signed-off-by: Qu Wenruo (cherry picked from commit 400faee53af2f9f1d0d4a0e0f92ea3d08fe53d59) --- diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 8aede6eab5fd..b448cdfa0c08 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -4041,6 +4041,10 @@ restart: break; } } + if (should_cancel_balance(fs_info)) { + err = -ECANCELED; + break; + } } if (trans && progress && err == -ENOSPC) { ret = btrfs_force_chunk_alloc(trans, rc->block_group->flags);