• Josef Bacik's avatar
    Btrfs: fix transaction throttling for delayed refs · 1be41b78
    Josef Bacik authored
    Dave has this fs_mark script that can make btrfs abort with sufficient amount of
    ram.  This is because with more ram we can keep more dirty metadata in cache
    which in a round about way makes for many more pending delayed refs.  What
    happens is we end up not throttling the transaction enough so when we go to
    commit the transaction when we've completely filled the file system we'll
    abort() because we use all of the space in the global reserve and we still have
    delayed refs to run.  To fix this we need to make the delayed ref flushing and
    the transaction throttling dependant upon the number of delayed refs that we
    have instead of how much reserved space is left in the global reserve.  With
    this patch we not only stop aborting transactions but we also get a smoother run
    speed with fs_mark and it makes us about 10% faster.  Thanks,
    Reported-by: default avatarDavid Sterba <dsterba@suse.cz>
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    1be41b78
transaction.c 52.4 KB