Skip to content
  • Filipe Manana's avatar
    Btrfs: try harder to migrate items to left sibling before splitting a leaf · 263d3995
    Filipe Manana authored
    
    
    Before attempting to split a leaf we try to migrate items from the leaf to
    its right and left siblings. We start by trying to move items into the
    rigth sibling and, if the new item is meant to be inserted at the end of
    our leaf, we try to free from our leaf an amount of bytes equal to the
    number of bytes used by the new item, by setting the variable space_needed
    to the byte size of that new item. However if we fail to move enough items
    to the right sibling due to lack of space in that sibling, we then try
    to move items into the left sibling, and in that case we try to free
    an amount equal to the size of the new item from our leaf, when we need
    only to free an amount corresponding to the size of the new item minus
    the current free space of our leaf. So make sure that before we try to
    move items to the left sibling we do set the variable space_needed with
    a value corresponding to the new item's size minus the leaf's current
    free space.
    
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    263d3995