]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
btrfs: scrub: cancel the run if there is a pending signal
authorQu Wenruo <wqu@suse.com>
Sun, 19 Oct 2025 00:45:28 +0000 (11:15 +1030)
committerDavid Sterba <dsterba@suse.com>
Mon, 24 Nov 2025 21:34:32 +0000 (22:34 +0100)
commit937f99c736135e530895eff028503cb057eb75f6
tree24e2d0722cdfee4e75051c7a60f853385e2f8567
parentc7b478504b2e5a8e428eac4c16925d52c8deb6bd
btrfs: scrub: cancel the run if there is a pending signal

Unlike relocation, scrub never checks pending signals, and even for
relocation is only explicitly checking for fatal signal (SIGKILL), not
for regular ones.

Thankfully relocation can still be interrupted by regular signals by
the usage of wait_on_bit(), which is called with TASK_INTERRUPTIBLE.

Do the same for scrub/dev-replace, so that regular signals can also
cancel the scrub/replace run, and more importantly handle v2 cgroup
freezing which is based on signal handling code inside the kernel, and
freezing() function will not return true for v2 cgroup freezing.

This will address the problem that systemd slice freezing will timeout
on long running scrub/dev-replace.

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/scrub.c