• Chris Mason's avatar
    btrfs_search_slot: reduce lock contention by cowing in two stages · 65b51a00
    Chris Mason authored
    A btree block cow has two parts, the first is to allocate a destination
    block and the second is to copy the old bock over.
    The first part needs locks in the extent allocation tree, and may need to
    do IO.  This changeset splits that into a separate function that can be
    called without any tree locks held.
    btrfs_search_slot is changed to drop its path and start over if it has
    to COW a contended block.  This often means that many writers will
    pre-alloc a new destination for a the same contended block, but they
    cache their prealloc for later use on lower levels in the tree.
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>