• Jan Kara's avatar
    mm: implement writeback livelock avoidance using page tagging · f446daae
    Jan Kara authored
    We try to avoid livelocks of writeback when some steadily creates dirty
    pages in a mapping we are writing out.  For memory-cleaning writeback,
    using nr_to_write works reasonably well but we cannot really use it for
    data integrity writeback.  This patch tries to solve the problem.
    
    The idea is simple: Tag all pages that should be written back with a
    special tag (TOWRITE) in the radix tree.  This can be done rather quickly
    and thus livelocks should not happen in practice.  Then we start doing the
    hard work of locking pages and sending them to disk only for those pages
    that have TOWRITE tag set.
    
    Note: Adding new radix tree tag grows radix tree node from 288 to 296
    bytes for 32-bit archs and from 552 to 560 bytes for 64-bit archs.
    However, the number of slab/slub items per page remains the same (13 and 7
    respectively).
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Cc: Chris Mason <chris.mason@oracle.com>
    Cc: Theodore Ts'o <tytso@mit.edu>
    Cc: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f446daae
page-writeback.c 38.2 KB