On Fri, Jul 24, 2020 at 09:46:40AM +0800, Qu Wenruo wrote: > commit 1dae7e0e58b484eaa43d530f211098fdeeb0f404 upstream. > > [BUG] > There are several reported runaway balance, that balance is flooding the > log with "found X extents" where the X never changes. > > [CAUSE] > Commit d2311e698578 ("btrfs: relocation: Delay reloc tree deletion after > merge_reloc_roots") introduced BTRFS_ROOT_DEAD_RELOC_TREE bit to > indicate that one subvolume has finished its tree blocks swap with its > reloc tree. > > However if balance is canceled or hits ENOSPC halfway, we didn't clear > the BTRFS_ROOT_DEAD_RELOC_TREE bit, leaving that bit hanging forever > until unmount. > > Any subvolume root with that bit, would cause backref cache to skip this > tree block, as it has finished its tree block swap. This would cause > all tree blocks of that root be ignored by balance, leading to runaway > balance. > > [FIX] > Fix the problem by also clearing the BTRFS_ROOT_DEAD_RELOC_TREE bit for > the original subvolume of orphan reloc root. > > Add an umount check for the stale bit still set. > > Fixes: d2311e698578 ("btrfs: relocation: Delay reloc tree deletion after merge_reloc_roots") > Cc: <stable@xxxxxxxxxxxxxxx> # 5.7.x > Signed-off-by: Qu Wenruo <wqu@xxxxxxxx> > Signed-off-by: David Sterba <dsterba@xxxxxxxx> > --- > fs/btrfs/disk-io.c | 1 + > fs/btrfs/relocation.c | 2 ++ > 2 files changed, 3 insertions(+) Thanks for the backports, all now queued up. greg k-h