• Josef Bacik's avatar
    Btrfs: fix how we do space reservation for truncate · fcb80c2a
    Josef Bacik authored
    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: default avatarJosef Bacik <josef@redhat.com>
    fcb80c2a
ctree.h 84.8 KB