• Chris Mason's avatar
    Btrfs: Improve and cleanup locking done by walk_down_tree · f87f057b
    Chris Mason authored
    While dropping snapshots, walk_down_tree does most of the work of checking
    reference counts and limiting tree traversal to just the blocks that
    we are freeing.
    It dropped and held the allocation mutex in strange and confusing ways,
    this commit changes it to only hold the mutex while actually freeing a block.
    The rest of the checks around reference counts should be safe without the lock
    because we only allow one process in btrfs_drop_snapshot at a time.  Other
    processes dropping reference counts should not drop it to 1 because
    their tree roots already have an extra ref on the block.
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>