• Fengguang Wu's avatar
    writeback: fix time ordering of the per superblock inode lists 8 · 2c136579
    Fengguang Wu authored
    Streamline the management of dirty inode lists and fix time ordering bugs.
    
    The writeback logic used to move not-yet-expired dirty inodes from s_dirty to
    s_io, *only to* move them back.  The move-inodes-back-and-forth thing is a
    mess, which is eliminated by this patch.
    
    The new scheme is:
    - s_dirty acts as a time ordered io delaying queue;
    - s_io/s_more_io together acts as an io dispatching queue.
    
    On kupdate writeback, we pull some inodes from s_dirty to s_io at the start of
    every full scan of s_io.  Otherwise  (i.e. for sync/throttle/background
    writeback), we always pull from s_dirty on each run (a partial scan).
    
    Note that the line
    	list_splice_init(&sb->s_more_io, &sb->s_io);
    is moved to queue_io() to leave s_io empty. Otherwise a big dirtied file will
    sit in s_io for a long time, preventing new expired inodes to get in.
    
    Cc: Ken Chen <kenchen@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarFengguang Wu <wfg@mail.ustc.edu.cn>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2c136579
fs-writeback.c 22 KB