• Dave Chinner's avatar
    writeback: pay attention to wbc->nr_to_write in write_cache_pages · 0b564927
    Dave Chinner authored
    If a filesystem writes more than one page in ->writepage, write_cache_pages
    fails to notice this and continues to attempt writeback when wbc->nr_to_write
    has gone negative - this trace was captured from XFS:
    
        wbc_writeback_start: towrt=1024
        wbc_writepage: towrt=1024
        wbc_writepage: towrt=0
        wbc_writepage: towrt=-1
        wbc_writepage: towrt=-5
        wbc_writepage: towrt=-21
        wbc_writepage: towrt=-85
    
    This has adverse effects on filesystem writeback behaviour. write_cache_pages()
    needs to terminate after a certain number of pages are written, not after a
    certain number of calls to ->writepage are made.  This is a regression
    introduced by 17bc6c30 ("vfs: Add
    no_nrwrite_index_update writeback control flag"), but cannot be reverted
    directly due to subsequent bug fixes that have gone in on top of it.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0b564927
page-writeback.c 36.1 KB