• J
    Btrfs: remove useless waiting and extra filemap work · 551ebb2d
    Josef Bacik 提交于
    In btrfs_wait_ordered_range we have been calling filemap_fdata_write() twice
    because compression does strange things and then waiting.  Then we look up
    ordered extents and if we find any we will always schedule_timeout(); once
    and then loop back around and do it all again.  We will even check to see if
    there is delalloc pages on this range and loop again.  So this patch gets
    rid of the multipe fdata_write() calls and just does
    filemap_write_and_wait().  In the case of compression we will still find the
    ordered extents and start those individually if we need to so that is ok,
    but in the normal buffered case we avoid all this weird overhead.
    
    Then in the case of the schedule_timeout(1), we don't need it.  All callers
    either 1) don't care, they just want to make sure what they just wrote maeks
    it to disk or 2) are doing the lock()->lookup ordered->unlock->flush thing
    in which case it will lock and check for ordered extents _anyway_ so get
    back to them as quickly as possible.  The delaloc check is simply not
    needed, this only catches the case where we write to the file again since
    doing the filemap_write_and_wait() and if the caller truly cares about that
    it will take care of everything itself.  Thanks,
    Signed-off-by: NJosef Bacik <josef@redhat.com>
    551ebb2d
ordered-data.c 25.5 KB