• Josef Bacik's avatar
    Btrfs: fill the global reserve when unpinning space · 7b398f8e
    Josef Bacik authored
    Dave gave me an image of a very full file system that would abort the
    transaction because it ran out of space while committing the transaction.
    This is because we would think there was plenty of room to create a snapshot
    even though the global reserve was not full.  This happens because we
    calculate the global reserve size before we unpin any space, so after we
    unpin the space we allow reservations to occur even though we haven't
    reserved all of the space for our global reserve.  Fix this by adding to the
    global reserve while unpinning in order to make sure we always have enough
    space to do our work.  With this patch we no longer end up with an aborted
    transaction, we return ENOSPC properly to the person trying to create the
    snapshot.  Thanks,
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
    7b398f8e
extent-tree.c 216 KB