]> git.hungrycats.org Git - linux/commit
Btrfs: avoid returning -ENOMEM in convert_extent_bit() too early
authorFilipe Manana <fdmanana@suse.com>
Mon, 13 Oct 2014 11:28:39 +0000 (12:28 +0100)
committerZygo Blaxell <zblaxell@serenity.furryterror.org>
Fri, 23 Jan 2015 13:16:58 +0000 (08:16 -0500)
commit54d3fd383d8120d62340eb9337393a8810602ac7
tree8437de8e512c41cb2c542696608389ce1ea27d95
parentb021a1340b60425c3cb64fb327a50e3f3d72d574
Btrfs: avoid returning -ENOMEM in convert_extent_bit() too early

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: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
(cherry picked from commit c8fd3de79f44f5d41bc3a801214faf667b95df9d)
fs/btrfs/extent_io.c