zygo: btrfs: don't let btrfs_recover_relocation get stuck waiting for cleaner_kthread to delete a snapshot
mounting a filesystem with large deleted snapshots gets stuck at
open_ctree + 0x212b, which is the mutex_lock here:
mutex_lock(&fs_info->cleaner_mutex);
ret = btrfs_recover_relocation(tree_root);
mutex_unlock(&fs_info->cleaner_mutex);
The cleaner_kthread is holding cleaner_mutex for the entire time
it deletes one snapshot, which blocks the mount from proceeding
to completion.
It also seems insane to run cleaner_kthread *before* we've recovered
relocation, but I don't know precisely what btrfs_recover_relocation
does.
I also don't know if there are ordering dependencies between
cleaner_kthread and transaction_kthread; however, I do know that
one can wait indefinitely for the other. I keep the same startup
order but make sure that btrfs_recover_relocation wins the race
for cleaner_mutex by cheating.