btrfs: fix async discard stall
stable inclusion from stable-5.10.9 commit 33061bd104cbf6798738cf2f5608f18910d9f9da bugzilla: 47457 -------------------------------- [ Upstream commit ea9ed87c ] Might happen that bg->discard_eligible_time was changed without rescheduling, so btrfs_discard_workfn() wakes up earlier than that new time, peek_discard_list() returns NULL, and all work halts and goes to sleep without further rescheduling even there are block groups to discard. It happens pretty often, but not so visible from the userspace because after some time it usually will be kicked off anyway by someone else calling btrfs_discard_reschedule_work(). Fix it by continue rescheduling if block group discard lists are not empty. Reviewed-by:Josef Bacik <josef@toxicpanda.com> Signed-off-by:
Pavel Begunkov <asml.silence@gmail.com> Signed-off-by:
David Sterba <dsterba@suse.com> Signed-off-by:
Sasha Levin <sashal@kernel.org> Signed-off-by:
Chen Jun <chenjun102@huawei.com> Acked-by:
Xie XiuQi <xiexiuqi@huawei.com>
Loading
Please sign in to comment