diff options
| author | Filipe Manana <fdmanana@suse.com> | 2026-10-16 17:14:49 +0100 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2026-10-30 23:15:01 +0100 |
| commit | bda65e5115fe66ee0d8cf4ade11807f9fca4f0e1 (patch) | |
| tree | bfed4073633f6f4ff627ad295e11820d3e8eecbb /tools/lib/python | |
| parent | 387d5be169e6644a41dd5865e6a01c9489e996e2 (diff) | |
btrfs: scrub: fix lost wakeup and hang when cancelling a scrub that is finishing
When scrub finishes, it does a wakeup on the fs_info->scrub_pause_wait
wait queue and then sets dev->scrub_sctx to NULL. On the other hand the
scrub cancel code (btrfs_scrub_cancel_dev()) waits on that wait queue
for dev->scrub_sctx to be NULL. So this means if btrfs_scrub_cancel_dev()
is called right when scrub is finishing and sees the wakeup before the
NULL is assigned to dev->scrub_sctx by btrfs_scrub_dev(), it hangs.
Fix this by doing the wakeup in btrfs_scrub_dev() after setting
dev->scrub_sctx to NULL.
Fixes: a2de733c78fa ("btrfs: scrub")
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'tools/lib/python')
0 files changed, 0 insertions, 0 deletions
