• A
    writeback: fix time ordering of the per superblock dirty inode lists 5 · c6945e77
    Andrew Morton 提交于
    When the writeback function is operating in writeback-for-flushing mode (as
    opposed to writeback-for-integrity) and it encounters an I_LOCKed inode, it
    will skip writing that inode.  This is done for throughput and latency: move
    on to another inode rather than blocking for this one.
    
    Writeback skips this inode by moving it off s_io and onto s_dirty, so that
    writeback can proceed with the other inodes on s_io.
    
    However that inode movement can corrupt s_dirty's reverse-time-orderedness.
    Fix that by using the new redirty_tail(), which will update the refiled
    inode's dirtied_when field.
    
    Note: the behaviour in here is a bit rude: if kupdate happens to come across a
    locked inode then it will defer writeback of that inode for another 30
    seconds.  We'll address that in the next patch.
    
    Cc: Mike Waychison <mikew@google.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    c6945e77
fs-writeback.c 21.8 KB