Btrfs: fix how we do space reservation for truncate
authorJosef Bacik <josef@redhat.com>
Tue, 3 May 2011 14:40:22 +0000 (10:40 -0400)
committerJosef Bacik <josef@redhat.com>
Mon, 23 May 2011 17:03:08 +0000 (13:03 -0400)
commitfcb80c2affd63237cff5b34cba5756be7c976a5a
tree49c37dce49ebd9a1ada939d1fd2cfa57bba6f500
parenta4abeea41adfa3c143c289045f4625dfaeba2212
Btrfs: fix how we do space reservation for truncate

The ceph guys keep running into problems where we have space reserved in our
orphan block rsv when freeing it up.  This is because they tend to do snapshots
alot, so their truncates tend to use a bunch of space, so when we go to do
things like update the inode we have to steal reservation space in order to make
the reservation happen.  This happens because truncate can use as much space as
it freaking feels like, but we still have to hold space for removing the orphan
item and updating the inode, which will definitely always happen.  So in order
to fix this we need to split all of the reservation stuf up.  So with this patch
we have

1) The orphan block reserve which only holds the space for deleting our orphan
item when everything is over.

2) The truncate block reserve which gets allocated and used specifically for the
space that the truncate will use on a per truncate basis.

3) The transaction will always have 1 item's worth of data reserved so we can
update the inode normally.

Hopefully this will make the ceph problem go away.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
fs/btrfs/ctree.h
fs/btrfs/extent-tree.c
fs/btrfs/inode.c