• Filipe Manana's avatar
    Btrfs: avoid returning -ENOMEM in convert_extent_bit() too early · c8fd3de7
    Filipe Manana authored
    We try to allocate an extent state before acquiring the tree's spinlock
    just in case we end up needing to split an existing extent state into two.
    If that allocation failed, we would return -ENOMEM.
    However, our only single caller (transaction/log commit code), passes in
    an extent state that was cached from a call to find_first_extent_bit() and
    that has a very high chance to match exactly the input range (always true
    for a transaction commit and very often, but not always, true for a log
    commit) - in this case we end up not needing at all that initial extent
    state used for an eventual split. Therefore just don't return -ENOMEM if
    we can't allocate the temporary extent state, since we might not need it
    at all, and if we end up needing one, we'll do it later anyway.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    c8fd3de7
extent_io.c 140 KB