• Josef Bacik's avatar
    Btrfs: rework how we reserve metadata bytes · 8bb8ab2e
    Josef Bacik authored
    With multi-threaded writes we were getting ENOSPC early because somebody would
    come in, start flushing delalloc because they couldn't make their reservation,
    and in the meantime other threads would come in and use the space that was
    getting freed up, so when the original thread went to check to see if they had
    space they didn't and they'd return ENOSPC.  So instead if we have some free
    space but not enough for our reservation, take the reservation and then start
    doing the flushing.  The only time we don't take reservations is when we've
    already overcommitted our space, that way we don't have people who come late to
    the party way overcommitting ourselves.  This also moves all of the retrying and
    flushing code into reserve_metdata_bytes so it's all uniform.  This keeps my
    fs_mark test from returning -ENOSPC as soon as it starts and actually lets me
    fill up the disk.  Thanks,
    Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
    8bb8ab2e
transaction.c 31.5 KB