]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: always reserve metadata for delalloc extents
authorJosef Bacik <jbacik@fb.com>
Fri, 25 Mar 2016 17:25:49 +0000 (13:25 -0400)
committerDavid Sterba <dsterba@suse.com>
Thu, 7 Jul 2016 16:45:53 +0000 (18:45 +0200)
commit62b6a7f2f457f7d753d2e1db83c1e0ae96bf6e8d
treef02d97f7813a1acd704f03406306b150f0d1a019
parentf4b628727a542ad7cd2ff0e86e882ab0db924a97
Btrfs: always reserve metadata for delalloc extents

There are a few races in the metadata reservation stuff.  First we add the bytes
to the block_rsv well after we've set the bit on the inode saying that we have
space for it and after we've reserved the bytes.  So use the normal
btrfs_block_rsv_add helper for this case.  Secondly we can flush delalloc
extents when we try to reserve space for our write, which means that we could
have used up the space for the inode and we wouldn't know because we only check
before the reservation.  So instead make sure we are always reserving space for
the inode update, and then if we don't need it release those bytes afterward.
Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c